Files
admin-ui/src/api/settings/modelConfig/modelModule/index.ts
2910410219 e32b01337a feat: 增强模型配置与创建表单功能
- 在 NodeLibraryFormItem 和 WorkflowItem 接口中添加了新的字段,如 value、options、expand 和 outputParams,以支持更复杂的表单配置。
- 新增 getOperatorList 函数以获取服务商列表,并在 editModule.vue 中集成了运营商选择功能。
- 更新了模型创建和编辑逻辑,支持 tokenConfig 的 JSON 格式配置,确保更灵活的模型设置。
- 优化了文件上传处理,增加了上传状态管理,提升用户体验。
2026-05-22 13:22:45 +08:00

248 lines
5.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import request from '/@/utils/request';
export interface ModelModuleListParams {
pageNum?: number;
pageSize?: number;
modelName?: string;
modelType?: number | string;
enabled?: number;
}
export interface ModelFormItem {
field: string;
label: string;
required: boolean;
type: 'input' | 'number' | 'textarea' | 'switch' | string;
}
export interface ModelFormEntry {
key: string;
value: string;
}
/** 模型类型listType 接口项,字段名以后端为准,前端做兼容解析) */
export interface ModelTypeListItem {
id?: number | string;
typeId?: number | string;
modelType?: number | string;
name?: string;
typeName?: string;
label?: string;
}
/** listType 标准返回data.type 为 Record<id, 名称>,如 { "1": "推理模型", "2": "图片模型" } */
export function normalizeModelTypeOptions(res: { data?: unknown }): Array<{ id: number | string; label: string }> {
const data = res?.data as { type?: Record<string, string> } | undefined;
const typeMap = data?.type;
if (typeMap && typeof typeMap === 'object' && !Array.isArray(typeMap)) {
return Object.entries(typeMap)
.map(([key, label]) => {
const n = Number(key);
const id = Number.isNaN(n) ? key : n;
return { id, label: String(label ?? '') };
})
.sort((a, b) => {
const na = Number(a.id);
const nb = Number(b.id);
if (!Number.isNaN(na) && !Number.isNaN(nb)) {
return na - nb;
}
return String(a.id).localeCompare(String(b.id));
});
}
/** 兼容旧结构data 为数组或 data.list */
const raw = res?.data;
const arr: ModelTypeListItem[] = Array.isArray(raw) ? raw : ((raw as { list?: ModelTypeListItem[] })?.list ?? []);
return arr
.map((item) => {
const id = item.id ?? item.typeId ?? item.modelType;
const label = item.name ?? item.typeName ?? item.label ?? (id != null && id !== '' ? String(id) : '');
return { id: id as number | string, label: label || String(id) };
})
.filter((x) => x.id !== undefined && x.id !== null && x.id !== '');
}
export interface ModelModuleItem {
id: number | string;
tenantId?: number;
creator?: string;
createdAt?: string;
updater?: string;
updatedAt?: string;
deletedAt?: string | null;
isDeleted?: boolean;
modelName: string;
/** 模型类型 ID与 listType 返回项对应 */
modelType?: number | string;
baseUrl: string;
route?: string;
httpMethod: string;
apiKey?: string;
isPrivate?: number;
isChatModel?: number;
/** 会话开关状态列表接口返回0 关 1 开;会话开关接口就绪后生效) */
chatSessionEnabled?: number;
enabled: number;
maxConcurrency: number;
queueLimit: number;
timeoutMs?: number;
timeoutSeconds?: number;
expectedSeconds?: number;
retryTimes: number;
retryQueueMaxSeconds: number;
autoCleanSeconds: number;
remark?: string;
headMsg?: string;
form?: ModelFormEntry[] | Record<string, { value: string }>;
requestMapping?: Record<string, unknown>;
responseMapping?: Record<string, unknown>;
}
export interface ModelModuleListResponse {
code: number;
message: string;
data: {
list: ModelModuleItem[];
total: number;
};
}
export interface CreateModelParams {
modelName: string;
/** 与 listType 返回的类型 id 一致,可能为数字或字符串 */
modelType: number | string;
baseUrl: string;
httpMethod?: string;
headMsg?: string;
isPrivate: number;
enabled: number;
isChatModel: number;
apiKey?: string;
form: ModelFormEntry[];
requestMapping?: Record<string, unknown>;
responseMapping?: Record<string, unknown>;
maxConcurrency?: number;
queueLimit?: number;
timeoutSeconds: number;
expectedSeconds: number;
retryTimes?: number;
retryQueueMaxSeconds: number;
autoCleanSeconds: number;
remark?: string;
}
export interface ModelConfigTypeItem {
id: number | string;
name: string;
form: ModelFormItem[];
}
export interface ModelConfigGroup {
typeId: number;
type: string;
items: ModelConfigTypeItem[];
}
export interface ModelConfigResponse {
code: number;
message: string;
data: ModelConfigGroup[];
}
/**
* 获取模型列表
*/
export function getModelModuleList(params?: ModelModuleListParams) {
return request({
url: '/model-gateway/model/listModel',
method: 'get',
params,
});
}
/**
* 获取模型类型列表(用于下拉与列表回显)
*/
export function getModelTypeList() {
return request({
url: '/model-gateway/model/listType',
method: 'get',
});
}
/**
* 新增模型配置
*/
export function addModelModule(data: CreateModelParams) {
return request({
url: '/model-gateway/model/createModel',
method: 'post',
data,
});
}
/**
* 修改模型配置
*/
export function updateModelModule(data: Partial<CreateModelParams> & { id: number | string }) {
return request({
url: '/model-gateway/model/updateModel',
method: 'put',
data,
});
}
/**
* 删除模型配置
*/
export function deleteModelModule(id: number | string) {
return request({
url: '/model-gateway/model/deleteModel',
method: 'delete',
data: { id },
});
}
/**
* 获取单条模型配置详情(编辑用,需传 id
*/
export function getModelModuleDetail(id: number | string) {
return request({
url: '/model-gateway/model/getModel',
method: 'get',
params: { id },
});
}
/**
* 更新模型会话开关状态
*/
export function updateChatModel(data: { id: number | string; isChatModel: 0 | 1 }) {
return request({
url: '/model-gateway/model/updateChatModel',
method: 'post',
data,
});
}
/**
* 获取当前会话模型
*/
export function getIsChatModel() {
return request({
url: '/model-gateway/model/getIsChatModel',
method: 'get',
});
}
/**
* 获取服务商列表
*/
export function getOperatorList() {
return request({
url: '/model-gateway/model/listOperator',
method: 'get',
});
}