You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.2 KiB
42 lines
1.2 KiB
import { defineWrappedResponseHandler } from "#server/utils/handler";
|
|
import { R } from "#server/utils/response";
|
|
import { requireAdmin } from "#server/utils/admin-guard";
|
|
import { createSystemModel, getSystemProviderById } from "#server/service/llm";
|
|
|
|
export default defineWrappedResponseHandler(async (event) => {
|
|
await requireAdmin(event);
|
|
|
|
const body = await readBody(event);
|
|
const { providerId, name, modelId, type, maxTokens, enabled } = body as {
|
|
providerId: number;
|
|
name: string;
|
|
modelId: string;
|
|
type?: string;
|
|
maxTokens?: number;
|
|
enabled?: number;
|
|
};
|
|
|
|
if (!providerId || !name || !modelId) {
|
|
return R.error("参数无效:providerId、name、modelId 必填", null);
|
|
}
|
|
|
|
const provider = await getSystemProviderById(providerId);
|
|
if (!provider) {
|
|
return R.error("系统级供应商不存在", null);
|
|
}
|
|
|
|
if (type && !["chat", "embedding", "image", "audio"].includes(type)) {
|
|
return R.error("type 仅支持 chat、embedding、image、audio", null);
|
|
}
|
|
|
|
const result = await createSystemModel({
|
|
providerId,
|
|
name,
|
|
modelId,
|
|
type: type as "chat" | "embedding" | "image" | "audio" | undefined,
|
|
maxTokens,
|
|
enabled,
|
|
});
|
|
|
|
return R.success({ id: result.id });
|
|
});
|
|
|