fix colection create api (#766)

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
This commit is contained in:
Archer
2024-01-23 09:01:24 +08:00
committed by GitHub
parent aab6ee51eb
commit 379673cae1
143 changed files with 40737 additions and 274 deletions

View File

@@ -49,7 +49,7 @@ export const addLog = {
},
error(msg: string, error?: any) {
this.log('error', msg, {
message: error?.message,
message: error?.message || error,
stack: error?.stack,
...(error?.config && {
config: {

View File

@@ -47,18 +47,19 @@ const ChatItemSchema = new Schema({
default: () => new Date()
},
obj: {
// chat role
type: String,
required: true,
enum: Object.keys(ChatRoleMap)
},
value: {
// chat content
type: String,
default: ''
},
userGoodFeedback: {
type: String
},
userFeedback: String,
userBadFeedback: {
type: String
},

View File

@@ -86,13 +86,13 @@ const DatasetDataSchema = new Schema({
});
try {
// same data check
DatasetDataSchema.index({ teamId: 1, collectionId: 1, q: 1, a: 1 }, { background: true });
// list collection and count data; list data
DatasetDataSchema.index(
{ teamId: 1, datasetId: 1, collectionId: 1, chunkIndex: 1, updateTime: -1 },
{ background: true }
);
// same data check
DatasetDataSchema.index({ teamId: 1, collectionId: 1, q: 1, a: 1 }, { background: true });
// full text index
DatasetDataSchema.index({ teamId: 1, datasetId: 1, fullTextToken: 'text' }, { background: true });
// Recall vectors after data matching

View File

@@ -10,8 +10,10 @@ export const checkDatasetLimit = async ({
freeSize?: number;
insertLen?: number;
}) => {
const { maxSize } = await getTeamDatasetValidSub({ teamId, freeSize });
const usedSize = await getVectorCountByTeamId(teamId);
const [{ maxSize }, usedSize] = await Promise.all([
getTeamDatasetValidSub({ teamId, freeSize }),
getVectorCountByTeamId(teamId)
]);
if (usedSize + insertLen >= maxSize) {
return Promise.reject(`数据库容量不足,无法继续添加。可以在账号页面进行扩容。`);

View File

@@ -8,10 +8,6 @@ import {
} from '@fastgpt/global/support/user/team/constant';
const BillSchema = new Schema({
userId: {
type: Schema.Types.ObjectId,
ref: 'user'
},
teamId: {
type: Schema.Types.ObjectId,
ref: TeamCollectionName,
@@ -28,7 +24,7 @@ const BillSchema = new Schema({
},
appId: {
type: Schema.Types.ObjectId,
ref: 'model',
ref: 'apps',
required: false
},
time: {
@@ -52,7 +48,7 @@ const BillSchema = new Schema({
});
try {
BillSchema.index({ teamId: 1, time: -1 });
BillSchema.index({ teamId: 1, tmbId: 1, source: 1, time: -1 }, { background: true });
BillSchema.index({ time: 1 }, { expireAfterSeconds: 180 * 24 * 60 * 60 });
} catch (error) {
console.log(error);

View File

@@ -1,10 +1,15 @@
import { connectionMongo, type Model } from '../../../common/mongo';
const { Schema, model, models } = connectionMongo;
import { TeamCollectionName } from '@fastgpt/global/support/user/team/constant';
import { subModeMap, subStatusMap, subTypeMap } from '@fastgpt/global/support/wallet/sub/constants';
import {
standardSubLevelMap,
subModeMap,
subStatusMap,
subTypeMap
} from '@fastgpt/global/support/wallet/sub/constants';
import type { TeamSubSchema } from '@fastgpt/global/support/wallet/sub/type';
export const subCollectionName = 'team.subscription';
export const subCollectionName = 'team.subscriptions';
const SubSchema = new Schema({
teamId: {
@@ -17,29 +22,107 @@ const SubSchema = new Schema({
enum: Object.keys(subTypeMap),
required: true
},
status: {
// active: continue sub; canceled: canceled sub;
type: String,
enum: Object.keys(subStatusMap),
required: true
},
mode: {
type: String,
enum: Object.keys(subModeMap),
required: true
},
status: {
type: String,
enum: Object.keys(subStatusMap),
required: true
},
renew: {
type: Boolean,
default: true
},
startTime: {
type: Date
type: Date,
default: () => new Date()
},
expiredTime: {
type: Date
type: Date,
required: true
},
datasetStoreAmount: {
price: {
// last sub pay price(total price)
type: Number,
required: true
},
// sub content
currentSubLevel: {
type: String,
enum: Object.keys(standardSubLevelMap)
},
nextSubLevel: {
type: String,
enum: Object.keys(standardSubLevelMap)
},
currentExtraDatasetSize: {
type: Number
}
},
nextExtraDatasetSize: {
type: Number
},
currentExtraPoints: {
type: Number
},
nextExtraPoints: {
type: Number
},
// standard sub limit
maxTeamMember: {
type: Number
},
maxAppAmount: {
type: Number
},
maxDatasetAmount: {
type: Number
},
chatHistoryStoreDuration: {
// n day
type: Number
},
maxDatasetSize: {
type: Number
},
trainingWeight: {
// 0 1 2 3
type: Number
},
customApiKey: {
type: Boolean
},
customCopyright: {
type: Boolean
},
exportDatasetInterval: {
// hours
type: Number
},
websiteSyncInterval: {
// hours
type: Number
},
reRankWeight: {
// 0 1 2 3
type: Number
},
totalPoints: {
// record standard sub points
type: Number
},
surplusPoints: {
// standard sub / extra points sub
type: Number
},
// abandon
renew: Boolean, //决定是否续费
datasetStoreAmount: Number
});
try {

View File

@@ -1,4 +1,4 @@
import { SubStatusEnum } from '@fastgpt/global/support/wallet/sub/constants';
import { SubTypeEnum } from '@fastgpt/global/support/wallet/sub/constants';
import { MongoTeamSub } from './schema';
/* get team dataset size */
@@ -11,17 +11,14 @@ export const getTeamDatasetValidSub = async ({
}) => {
const sub = await MongoTeamSub.findOne({
teamId,
status: SubStatusEnum.active
})
.sort({
expiredTime: -1
})
.lean();
type: SubTypeEnum.extraDatasetSize,
expiredTime: { $gte: new Date() }
}).lean();
const maxSize = (() => {
if (!sub || !sub.datasetStoreAmount) return freeSize;
if (!sub || !sub.currentExtraDatasetSize) return freeSize;
return sub.datasetStoreAmount + freeSize;
return sub.currentExtraDatasetSize + freeSize;
})();
return {