/** * 场景裂变配置 API(公开端点) * * 允许普通用户获取场景裂变的配置信息 */ import { NextResponse } from "next/server"; import { auth } from "@/app/(auth)/auth"; import { getEnabledAiModelsWithProvider, getSystemSetting } from "@/lib/db/queries"; import { buildSceneFusionCapabilitySummary, canProcessSceneFusionProviderType, normalizeSceneFusionProviderType, type SceneFusionCapabilityCandidate, type SceneFusionImageGenConfig, } from "@/lib/scene-fusion/output-capabilities"; // 默认提示词 const FALLBACK_PROMPT = "将图1的产品替换到图2的场景中,保持图1产品的外观、颜色和细节不变,自然融合到图2的环境中。"; const SCENE_FUSION_MAX_ITEMS = 10; export async function GET() { try { // 需要登录但不需要 admin 权限 const session = await auth(); if (!session?.user?.id) { return NextResponse.json( { error: "未登录" }, { status: 401 } ); } // 获取配置 const setting = await getSystemSetting({ key: "scene_fusion_config" }); const config = setting?.value as | { enabled?: boolean; defaultPrompt?: string; maxScenes?: number; preRmbgEnabled?: boolean; modelId?: string; } | undefined; const allModels = await getEnabledAiModelsWithProvider(); const capabilityCandidates: SceneFusionCapabilityCandidate[] = allModels .filter((entry) => { if (!entry?.model?.isEnabled) return false; if (!entry?.model?.supportsImageGen) return false; if (entry?.model?.isSubModel) return false; return canProcessSceneFusionProviderType(String(entry.provider?.type || "")); }) .map((entry) => ({ model: { id: String(entry.model.id), displayName: String(entry.model.displayName || entry.model.modelId || entry.model.id), imageGenConfig: (entry.model.imageGenConfig || null) as SceneFusionImageGenConfig | null, }, provider: { type: normalizeSceneFusionProviderType(String(entry.provider.type || "")), }, })); const outputCapabilities = buildSceneFusionCapabilitySummary( capabilityCandidates, config?.modelId || null ); if (setting?.value && config) { return NextResponse.json({ enabled: config.enabled ?? true, preRmbgEnabled: config.preRmbgEnabled ?? true, defaultPrompt: config.defaultPrompt || FALLBACK_PROMPT, maxScenes: Math.min(config.maxScenes ?? SCENE_FUSION_MAX_ITEMS, SCENE_FUSION_MAX_ITEMS), mode: "diversity", preferredModelId: config.modelId || null, outputCapabilities, }); } // 返回默认配置 return NextResponse.json({ enabled: true, preRmbgEnabled: true, defaultPrompt: FALLBACK_PROMPT, maxScenes: SCENE_FUSION_MAX_ITEMS, mode: "diversity", preferredModelId: null, outputCapabilities, }); } catch (error) { console.error("[SceneFusion Config] Error:", error); return NextResponse.json( { error: "获取配置失败" }, { status: 500 } ); } }