46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { auth } from "@/app/(auth)/auth";
|
|
import { getEnabledAiModelsWithProvider, getDefaultAiModel } from "@/lib/db/queries";
|
|
import { ChatSDKError } from "@/lib/errors";
|
|
|
|
// 获取前端可用的 AI 模型列表(需要登录但不需要管理员权限)
|
|
export async function GET() {
|
|
try {
|
|
const session = await auth();
|
|
|
|
if (!session?.user) {
|
|
return new ChatSDKError("unauthorized:chat").toResponse();
|
|
}
|
|
|
|
// 只获取主模型(不包括子模型),子模型由后端根据 videoParams.mode 自动选择
|
|
const modelsWithProvider = await getEnabledAiModelsWithProvider(false);
|
|
const defaultModel = await getDefaultAiModel();
|
|
|
|
// 转换为前端需要的格式
|
|
const models = modelsWithProvider.map(({ model, provider }) => ({
|
|
id: model.id,
|
|
modelId: model.modelId,
|
|
displayName: model.displayName,
|
|
description: model.description,
|
|
supportsVision: model.supportsVision,
|
|
supportsImageGen: model.supportsImageGen,
|
|
isDefault: model.isDefault,
|
|
providerName: provider.name,
|
|
providerType: provider.type,
|
|
isSubModel: model.isSubModel,
|
|
parentModelId: model.parentModelId,
|
|
capabilities: model.capabilities, // 🆕 返回子模型的能力配置
|
|
}));
|
|
|
|
return Response.json({
|
|
models,
|
|
defaultModelId: defaultModel?.id ?? models[0]?.id ?? null,
|
|
});
|
|
} catch (error) {
|
|
if (error instanceof ChatSDKError) {
|
|
return error.toResponse();
|
|
}
|
|
return new ChatSDKError("offline:chat").toResponse();
|
|
}
|
|
}
|
|
|