diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx index 290aafa..7094f4d 100644 --- a/app/(admin)/settings/admin-settings-client.tsx +++ b/app/(admin)/settings/admin-settings-client.tsx @@ -168,6 +168,7 @@ type SiteSettings = { rankingEnabled: boolean; canvasEnabled: boolean; canvasDefaultModelId: string | null; + canvasAutoModeDefaultModelId: string | null; }; type NavLink = { @@ -382,6 +383,7 @@ export function AdminSettingsClient() { rankingEnabled: true, canvasEnabled: true, canvasDefaultModelId: null, + canvasAutoModeDefaultModelId: null, }); useEffect(() => { @@ -409,6 +411,7 @@ export function AdminSettingsClient() { rankingEnabled: siteSettingsData.rankingEnabled ?? true, canvasEnabled: siteSettingsData.canvasEnabled ?? true, canvasDefaultModelId: siteSettingsData.canvasDefaultModelId || null, + canvasAutoModeDefaultModelId: siteSettingsData.canvasAutoModeDefaultModelId || null, }); } }, [siteSettingsData]); @@ -2615,6 +2618,33 @@ export function AdminSettingsClient() { 设置无限画布中用户的默认生图模型。"智能自动"会根据用户需求自动选择最佳模型。 + + {/* 智能自动模式下的默认生图模型 */} +
+ + +
+ 当用户选择"智能自动"模式时,系统实际使用的生图模型。"系统智能选择"会根据用户意图(如抠图、换背景等)自动路由到最佳模型。 +
+
)} diff --git a/app/api/site-settings/route.ts b/app/api/site-settings/route.ts index 552345a..8f82522 100644 --- a/app/api/site-settings/route.ts +++ b/app/api/site-settings/route.ts @@ -43,6 +43,7 @@ export async function GET() { rankingEnabled: true, canvasEnabled: true, canvasDefaultModelId: null, + canvasAutoModeDefaultModelId: null, }; const response = NextResponse.json({ @@ -88,6 +89,7 @@ const updateSchema = z.object({ rankingEnabled: z.boolean().optional(), canvasEnabled: z.boolean().optional(), canvasDefaultModelId: z.string().nullable().optional(), + canvasAutoModeDefaultModelId: z.string().nullable().optional(), }); // PUT /api/site-settings - 更新网站设置(仅管理员) @@ -149,6 +151,7 @@ export async function PUT(request: NextRequest) { rankingEnabled: data.rankingEnabled ?? true, canvasEnabled: data.canvasEnabled ?? true, canvasDefaultModelId: data.canvasDefaultModelId, + canvasAutoModeDefaultModelId: data.canvasAutoModeDefaultModelId, updatedBy: session.user.id, }) .returning(); diff --git a/lib/ai/model-router.ts b/lib/ai/model-router.ts index 9261ff5..b40e2b3 100644 --- a/lib/ai/model-router.ts +++ b/lib/ai/model-router.ts @@ -110,10 +110,36 @@ export async function routeToModel(params: { // 使用动态导入避免循环依赖 const { getEnabledAiModelsWithProvider } = await import("@/lib/db/queries"); + const { db } = await import("@/lib/db"); + const { siteSettings } = await import("@/lib/db/schema"); // 获取所有可用模型 const allModels = await getEnabledAiModelsWithProvider(); console.log("[Model Router] Available models:", allModels.length); + + // 🆕 检查是否有配置的默认生图模型 + const [settings] = await db.select().from(siteSettings).limit(1); + const configuredDefaultModelId = settings?.canvasAutoModeDefaultModelId; + + if (configuredDefaultModelId) { + // 如果配置了默认模型,直接使用该模型 + const configuredModel = allModels.find( + (m) => m.model.id === configuredDefaultModelId && m.model.isEnabled && !m.model.isSubModel + ); + + if (configuredModel) { + console.log("[Model Router] ✅ Using configured default model:", configuredModel.model.displayName); + return { + id: configuredModel.model.id, + displayName: configuredModel.model.displayName, + providerType: configuredModel.provider.type, + modelId: configuredModel.model.modelId, + reason: `管理员配置的默认模型 → ${configuredModel.model.displayName}`, + }; + } else { + console.log("[Model Router] ⚠️ Configured default model not found or disabled, falling back to intent routing"); + } + } // 获取意图对应的配置 let config = INTENT_MODEL_MAP[intent] || INTENT_MODEL_MAP["chat"]; diff --git a/lib/db/schema.ts b/lib/db/schema.ts index 7dceb68..9d69c7d 100644 --- a/lib/db/schema.ts +++ b/lib/db/schema.ts @@ -308,7 +308,8 @@ export const siteSettings = pgTable("SiteSettings", { rankingEnabled: boolean("rankingEnabled").notNull().default(true), // 是否显示精选榜按钮 // 无限画布设置 canvasEnabled: boolean("canvasEnabled").notNull().default(true), // 是否启用无限画布功能 - canvasDefaultModelId: varchar("canvasDefaultModelId", { length: 128 }), // 画布默认生图模型ID(null表示智能自动) + canvasDefaultModelId: varchar("canvasDefaultModelId", { length: 128 }), // 画布默认选择的模型ID(null表示智能自动) + canvasAutoModeDefaultModelId: varchar("canvasAutoModeDefaultModelId", { length: 128 }), // 智能自动模式下实际使用的默认生图模型ID updatedAt: timestamp("updatedAt").notNull().defaultNow(), updatedBy: uuid("updatedBy").references(() => user.id), });