mirror of
https://github.com/vastxie/99AI.git
synced 2025-11-10 02:33:44 +08:00
v3.5.0
This commit is contained in:
58
dist/modules/models/dto/setModel.dto.js
vendored
58
dist/modules/models/dto/setModel.dto.js
vendored
@@ -30,17 +30,21 @@ __decorate([
|
||||
__metadata("design:type", Object)
|
||||
], SetModelDto.prototype, "key", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '是否开启当前key对应的模型', required: true }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: true,
|
||||
description: '是否开启当前key对应的模型',
|
||||
required: true,
|
||||
}),
|
||||
__metadata("design:type", Boolean)
|
||||
], SetModelDto.prototype, "status", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 'gpt-3.5', description: '当前key绑定的模型是多少 需要调用的模型', required: true }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: 'gpt-3.5',
|
||||
description: '当前key绑定的模型是多少 需要调用的模型',
|
||||
required: true,
|
||||
}),
|
||||
__metadata("design:type", String)
|
||||
], SetModelDto.prototype, "model", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: 'key的权重' }),
|
||||
__metadata("design:type", Number)
|
||||
], SetModelDto.prototype, "keyWeight", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 1, description: '模型排序' }),
|
||||
__metadata("design:type", Number)
|
||||
@@ -50,11 +54,19 @@ __decorate([
|
||||
__metadata("design:type", String)
|
||||
], SetModelDto.prototype, "modelAvatar", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: 4096, description: '模型支持的最大TOken数量', required: false }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: 4096,
|
||||
description: '模型支持的最大TOken数量',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", Number)
|
||||
], SetModelDto.prototype, "maxModelTokens", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '模型的代理地址', required: false }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: true,
|
||||
description: '模型的代理地址',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", String)
|
||||
], SetModelDto.prototype, "proxyUrl", void 0);
|
||||
__decorate([
|
||||
@@ -66,7 +78,11 @@ __decorate([
|
||||
__metadata("design:type", Number)
|
||||
], SetModelDto.prototype, "keyStatus", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '扣费类型 1: 普通 2: 高级余额', required: false }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: true,
|
||||
description: '扣费类型 1: 普通 2: 高级余额',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", Number)
|
||||
], SetModelDto.prototype, "deductType", void 0);
|
||||
__decorate([
|
||||
@@ -74,19 +90,35 @@ __decorate([
|
||||
__metadata("design:type", Number)
|
||||
], SetModelDto.prototype, "deduct", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '最大上下文轮次', required: false }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: true,
|
||||
description: '最大上下文轮次',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", Number)
|
||||
], SetModelDto.prototype, "maxRounds", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '是否设置为绘画Key', required: false }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: true,
|
||||
description: '是否设置为绘画Key',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", Boolean)
|
||||
], SetModelDto.prototype, "isDraw", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '是否支持文件上传', required: false }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: true,
|
||||
description: '是否支持文件上传',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", Number)
|
||||
], SetModelDto.prototype, "isFileUpload", void 0);
|
||||
__decorate([
|
||||
(0, swagger_1.ApiProperty)({ example: true, description: '是否使用token计费', required: false }),
|
||||
(0, swagger_1.ApiProperty)({
|
||||
example: true,
|
||||
description: '是否使用token计费',
|
||||
required: false,
|
||||
}),
|
||||
__metadata("design:type", Boolean)
|
||||
], SetModelDto.prototype, "isTokenBased", void 0);
|
||||
__decorate([
|
||||
|
||||
28
dist/modules/models/models.entity.js
vendored
28
dist/modules/models/models.entity.js
vendored
@@ -10,8 +10,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ModelsEntity = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
const baseEntity_1 = require("../../common/entity/baseEntity");
|
||||
const typeorm_1 = require("typeorm");
|
||||
let ModelsEntity = class ModelsEntity extends baseEntity_1.BaseEntity {
|
||||
};
|
||||
__decorate([
|
||||
@@ -27,7 +27,7 @@ __decorate([
|
||||
__metadata("design:type", String)
|
||||
], ModelsEntity.prototype, "model", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '模型头像', nullable: true }),
|
||||
(0, typeorm_1.Column)({ length: 1024, comment: '模型头像', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], ModelsEntity.prototype, "modelAvatar", void 0);
|
||||
__decorate([
|
||||
@@ -35,7 +35,11 @@ __decorate([
|
||||
__metadata("design:type", Number)
|
||||
], ModelsEntity.prototype, "modelOrder", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '模型上下文支持的最大Token', default: 2000, nullable: true }),
|
||||
(0, typeorm_1.Column)({
|
||||
comment: '模型上下文支持的最大Token',
|
||||
default: 2000,
|
||||
nullable: true,
|
||||
}),
|
||||
__metadata("design:type", Number)
|
||||
], ModelsEntity.prototype, "maxModelTokens", void 0);
|
||||
__decorate([
|
||||
@@ -59,7 +63,10 @@ __decorate([
|
||||
__metadata("design:type", Boolean)
|
||||
], ModelsEntity.prototype, "isTokenBased", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '是否支持文件上传: 0:不是 1: 附件链接格式 2: 4V格式', default: 0 }),
|
||||
(0, typeorm_1.Column)({
|
||||
comment: '是否支持文件上传: 0:不是 1: 附件链接格式 2: 4V格式',
|
||||
default: 0,
|
||||
}),
|
||||
__metadata("design:type", Number)
|
||||
], ModelsEntity.prototype, "isFileUpload", void 0);
|
||||
__decorate([
|
||||
@@ -79,13 +86,12 @@ __decorate([
|
||||
__metadata("design:type", Boolean)
|
||||
], ModelsEntity.prototype, "status", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: 'key的状态: 1:有效 -1:被封号 -2: 错误的秘钥 -3: 余额使用完了', default: 1 }),
|
||||
(0, typeorm_1.Column)({
|
||||
comment: 'key的状态: 1:有效 -1:被封号 -2: 错误的秘钥 -3: 余额使用完了',
|
||||
default: 1,
|
||||
}),
|
||||
__metadata("design:type", Number)
|
||||
], ModelsEntity.prototype, "keyStatus", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: 'key权重', default: 1 }),
|
||||
__metadata("design:type", Number)
|
||||
], ModelsEntity.prototype, "keyWeight", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: 'key的使用次数', default: 0 }),
|
||||
__metadata("design:type", Number)
|
||||
@@ -102,6 +108,10 @@ __decorate([
|
||||
(0, typeorm_1.Column)({ comment: '模型频率限制 次/小时', default: 999 }),
|
||||
__metadata("design:type", Number)
|
||||
], ModelsEntity.prototype, "modelLimits", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ comment: '模型介绍', nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], ModelsEntity.prototype, "modelDescription", void 0);
|
||||
ModelsEntity = __decorate([
|
||||
(0, typeorm_1.Entity)({ name: 'models' })
|
||||
], ModelsEntity);
|
||||
|
||||
71
dist/modules/models/models.service.js
vendored
71
dist/modules/models/models.service.js
vendored
@@ -47,18 +47,16 @@ let ModelsService = class ModelsService {
|
||||
}
|
||||
return pre;
|
||||
}, {});
|
||||
this.modelTypes = Object.keys(keyTypes).map(keyType => {
|
||||
this.modelTypes = Object.keys(keyTypes).map((keyType) => {
|
||||
return { label: status_constant_1.ModelsMapCn[keyType], val: keyType };
|
||||
});
|
||||
this.modelMaps = keyTypes;
|
||||
this.keyList = {};
|
||||
allKeys.forEach(keyDetail => {
|
||||
const { keyType, model, keyWeight } = keyDetail;
|
||||
allKeys.forEach((keyDetail) => {
|
||||
const { keyType, model } = keyDetail;
|
||||
if (!this.keyPoolMap[model])
|
||||
this.keyPoolMap[model] = [];
|
||||
for (let index = 0; index < keyWeight; index++) {
|
||||
this.keyPoolMap[model].push(keyDetail);
|
||||
}
|
||||
this.keyPoolMap[model].push(keyDetail);
|
||||
if (!this.keyPoolIndexMap[model])
|
||||
this.keyPoolIndexMap[model] = 0;
|
||||
if (!this.keyList[keyType])
|
||||
@@ -74,7 +72,9 @@ let ModelsService = class ModelsService {
|
||||
this.initCalcKey();
|
||||
}
|
||||
async getCurrentModelKeyInfo(model) {
|
||||
const modelKeyInfo = await this.modelsEntity.findOne({ where: { model: model } });
|
||||
const modelKeyInfo = await this.modelsEntity.findOne({
|
||||
where: { model: model },
|
||||
});
|
||||
if (!modelKeyInfo) {
|
||||
throw new common_1.HttpException('当前调用模型的key未找到,请重新选择模型!', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
@@ -82,7 +82,7 @@ let ModelsService = class ModelsService {
|
||||
}
|
||||
async getSpecialModelKeyInfo(modelPrefix) {
|
||||
const matchingModels = await this.modelsEntity.find({
|
||||
where: { model: (0, typeorm_2.Like)(`${modelPrefix}%`) }
|
||||
where: { model: (0, typeorm_2.Like)(`${modelPrefix}%`) },
|
||||
});
|
||||
if (matchingModels.length === 0) {
|
||||
throw new common_1.HttpException('未找到匹配的模型,请重新选择模型!', common_1.HttpStatus.BAD_REQUEST);
|
||||
@@ -95,9 +95,18 @@ let ModelsService = class ModelsService {
|
||||
async getBaseConfig(appId) {
|
||||
if (!this.modelTypes.length || !Object.keys(this.modelMaps).length)
|
||||
return;
|
||||
const { keyType, modelName, model, deductType, deduct, isFileUpload } = this.modelMaps[1][0];
|
||||
const { keyType, modelName, model, deductType, deduct, isFileUpload, modelAvatar, modelDescription, } = this.modelMaps[1][0];
|
||||
return {
|
||||
modelInfo: { keyType, modelName, model, deductType, deduct, isFileUpload }
|
||||
modelInfo: {
|
||||
keyType,
|
||||
modelName,
|
||||
model,
|
||||
deductType,
|
||||
deduct,
|
||||
isFileUpload,
|
||||
modelAvatar,
|
||||
modelDescription,
|
||||
},
|
||||
};
|
||||
}
|
||||
async setModel(params) {
|
||||
@@ -120,7 +129,7 @@ let ModelsService = class ModelsService {
|
||||
return res;
|
||||
}
|
||||
else {
|
||||
const data = key.map(k => {
|
||||
const data = key.map((k) => {
|
||||
try {
|
||||
const data = JSON.parse(JSON.stringify(params));
|
||||
data.key = k;
|
||||
@@ -166,13 +175,13 @@ let ModelsService = class ModelsService {
|
||||
const [rows, count] = await this.modelsEntity.findAndCount({
|
||||
where: where,
|
||||
order: {
|
||||
modelOrder: 'ASC'
|
||||
modelOrder: 'ASC',
|
||||
},
|
||||
skip: (page - 1) * size,
|
||||
take: size,
|
||||
});
|
||||
if (role !== 'super') {
|
||||
rows.forEach(item => {
|
||||
rows.forEach((item) => {
|
||||
item.key && (item.key = (0, utils_1.hideString)(item.key));
|
||||
});
|
||||
}
|
||||
@@ -180,22 +189,37 @@ let ModelsService = class ModelsService {
|
||||
}
|
||||
async modelsList() {
|
||||
const cloneModelMaps = JSON.parse(JSON.stringify(this.modelMaps));
|
||||
Object.keys(cloneModelMaps).forEach(key => {
|
||||
cloneModelMaps[key] = cloneModelMaps[key].sort((a, b) => a.modelOrder - b.modelOrder);
|
||||
Object.keys(cloneModelMaps).forEach((key) => {
|
||||
cloneModelMaps[key] = cloneModelMaps[key]
|
||||
.filter((t) => t.keyStatus === 1)
|
||||
.sort((a, b) => a.modelOrder - b.modelOrder);
|
||||
cloneModelMaps[key] = Array.from(cloneModelMaps[key]
|
||||
.map(t => {
|
||||
const { modelName, keyType, model, deduct, deductType, maxRounds, modelAvatar, isFileUpload } = t;
|
||||
return { modelName, keyType, model, deduct, deductType, maxRounds, modelAvatar, isFileUpload };
|
||||
.map((t) => {
|
||||
const { modelName, keyType, model, deduct, deductType, maxRounds, modelAvatar, isFileUpload, modelDescription, } = t;
|
||||
return {
|
||||
modelName,
|
||||
keyType,
|
||||
model,
|
||||
deduct,
|
||||
deductType,
|
||||
maxRounds,
|
||||
modelAvatar,
|
||||
isFileUpload,
|
||||
modelDescription,
|
||||
};
|
||||
})
|
||||
.reduce((map, obj) => map.set(obj.modelName, obj), new Map()).values());
|
||||
.reduce((map, obj) => map.set(obj.modelName, obj), new Map())
|
||||
.values());
|
||||
});
|
||||
return {
|
||||
modelTypeList: this.modelTypes,
|
||||
modelMaps: cloneModelMaps
|
||||
modelMaps: cloneModelMaps,
|
||||
};
|
||||
}
|
||||
async getMjInfo() {
|
||||
const modelInfo = await this.modelsEntity.findOne({ where: { model: "midjourney" } });
|
||||
const modelInfo = await this.modelsEntity.findOne({
|
||||
where: { model: 'midjourney' },
|
||||
});
|
||||
if (modelInfo) {
|
||||
return {
|
||||
modelName: modelInfo.modelName,
|
||||
@@ -212,7 +236,10 @@ let ModelsService = class ModelsService {
|
||||
await this.modelsEntity
|
||||
.createQueryBuilder()
|
||||
.update(models_entity_1.ModelsEntity)
|
||||
.set({ useCount: () => 'useCount + 1', useToken: () => `useToken + ${useToken}` })
|
||||
.set({
|
||||
useCount: () => 'useCount + 1',
|
||||
useToken: () => `useToken + ${useToken}`,
|
||||
})
|
||||
.where('id = :id', { id })
|
||||
.execute();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user