first-update
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { createInitModelConfig, getModelConfigByProjectId, saveModelConfig } from '@/lib/db/model-config';
|
||||
import { DEFAULT_MODEL_SETTINGS, MODEL_PROVIDERS } from '@/constant/model';
|
||||
import { getProject } from '@/lib/db/projects';
|
||||
import { sortProvidersByPriority } from '@/lib/util/providerLogo';
|
||||
|
||||
function normalizeModelEndpoint(endpoint = '') {
|
||||
let normalizedEndpoint = String(endpoint).trim();
|
||||
if (!normalizedEndpoint) {
|
||||
return '';
|
||||
}
|
||||
if (normalizedEndpoint.includes('/chat/completions')) {
|
||||
normalizedEndpoint = normalizedEndpoint.replace('/chat/completions', '');
|
||||
}
|
||||
return normalizedEndpoint;
|
||||
}
|
||||
|
||||
// 获取模型配置列表
|
||||
export async function GET(request, { params }) {
|
||||
try {
|
||||
const { projectId } = params;
|
||||
// 验证项目 ID
|
||||
if (!projectId) {
|
||||
return NextResponse.json({ error: 'The project ID cannot be empty' }, { status: 400 });
|
||||
}
|
||||
let modelConfigList = await getModelConfigByProjectId(projectId);
|
||||
if (!modelConfigList || modelConfigList.length === 0) {
|
||||
let insertModelConfigList = [];
|
||||
const sortedProviders = sortProvidersByPriority(MODEL_PROVIDERS, item => item.id);
|
||||
sortedProviders.forEach(item => {
|
||||
let data = {
|
||||
projectId: projectId,
|
||||
providerId: item.id,
|
||||
providerName: item.name,
|
||||
endpoint: item.defaultEndpoint,
|
||||
apiKey: '',
|
||||
modelId: '',
|
||||
modelName: '',
|
||||
type: 'text',
|
||||
temperature: DEFAULT_MODEL_SETTINGS.temperature,
|
||||
maxTokens: DEFAULT_MODEL_SETTINGS.maxTokens,
|
||||
topK: 0,
|
||||
topP: DEFAULT_MODEL_SETTINGS.topP,
|
||||
status: 1
|
||||
};
|
||||
insertModelConfigList.push(data);
|
||||
});
|
||||
modelConfigList = await createInitModelConfig(insertModelConfigList);
|
||||
}
|
||||
modelConfigList = sortProvidersByPriority(modelConfigList, item => item.providerId);
|
||||
let project = await getProject(projectId);
|
||||
return NextResponse.json({ data: modelConfigList, defaultModelConfigId: project.defaultModelConfigId });
|
||||
} catch (error) {
|
||||
console.error('Error obtaining model configuration:', String(error));
|
||||
return NextResponse.json({ error: 'Failed to obtain model configuration' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
// 保存模型配置
|
||||
export async function POST(request, { params }) {
|
||||
try {
|
||||
const { projectId } = params;
|
||||
|
||||
// 验证项目 ID
|
||||
if (!projectId) {
|
||||
return NextResponse.json({ error: 'The project ID cannot be empty' }, { status: 400 });
|
||||
}
|
||||
// 获取请求体
|
||||
const modelConfig = await request.json();
|
||||
|
||||
// 验证请求体
|
||||
if (!modelConfig) {
|
||||
return NextResponse.json({ error: 'The model configuration cannot be empty ' }, { status: 400 });
|
||||
}
|
||||
modelConfig.projectId = projectId;
|
||||
modelConfig.endpoint = normalizeModelEndpoint(modelConfig.endpoint);
|
||||
// 如果没有 modelId,使用 modelName 补齐(兼容旧逻辑)
|
||||
if (!modelConfig.modelId && modelConfig.modelName) {
|
||||
modelConfig.modelId = modelConfig.modelName;
|
||||
}
|
||||
// 如果没有 modelName,使用 modelId 补齐
|
||||
if (!modelConfig.modelName && modelConfig.modelId) {
|
||||
modelConfig.modelName = modelConfig.modelId;
|
||||
}
|
||||
if (!modelConfig.topK) {
|
||||
modelConfig.topK = 0;
|
||||
}
|
||||
if (!modelConfig.status) {
|
||||
modelConfig.status = 1;
|
||||
}
|
||||
const parsedMaxTokens = Number(modelConfig.maxTokens ?? DEFAULT_MODEL_SETTINGS.maxTokens);
|
||||
if (!Number.isInteger(parsedMaxTokens) || parsedMaxTokens < 1) {
|
||||
return NextResponse.json({ error: 'maxTokens must be a positive integer' }, { status: 400 });
|
||||
}
|
||||
modelConfig.maxTokens = parsedMaxTokens;
|
||||
const res = await saveModelConfig(modelConfig);
|
||||
|
||||
return NextResponse.json(res);
|
||||
} catch (error) {
|
||||
console.error('Error updating model configuration:', String(error));
|
||||
return NextResponse.json({ error: 'Failed to update model configuration' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user