From aac41964bae40ce0b6a2efb3ecaa61ef44717be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=91=98=E9=98=BF=E6=B1=9F=28Relakkes?= =?UTF-8?q?=29?= Date: Tue, 7 Apr 2026 12:06:50 +0800 Subject: [PATCH] fix: update models API for new provider structure, widen dialog - Replace getActiveProvider() calls with listProviders() + activeId lookup - Convert ModelMapping to model list for API compatibility - Widen provider form dialog from 600px to 720px Co-Authored-By: Claude Opus 4.6 (1M context) --- desktop/src/pages/Settings.tsx | 2 +- src/server/api/models.ts | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/desktop/src/pages/Settings.tsx b/desktop/src/pages/Settings.tsx index 7dd9dd95..1fc2a373 100644 --- a/desktop/src/pages/Settings.tsx +++ b/desktop/src/pages/Settings.tsx @@ -330,7 +330,7 @@ function ProviderFormModal({ open, onClose, mode, provider }: ProviderFormProps) open={open} onClose={onClose} title={mode === 'create' ? 'Add Provider' : 'Edit Provider'} - width={600} + width={720} footer={ <> diff --git a/src/server/api/models.ts b/src/server/api/models.ts index 0d907af6..480741b4 100644 --- a/src/server/api/models.ts +++ b/src/server/api/models.ts @@ -86,10 +86,18 @@ export async function handleModelsApi( // ─── Handlers ───────────────────────────────────────────────────────────────── async function handleModelsList(): Promise { - const activeProvider = await providerService.getActiveProvider() + const { providers, activeId } = await providerService.listProviders() + const activeProvider = activeId ? providers.find((p) => p.id === activeId) : null if (activeProvider) { + // Convert ModelMapping to model list for API compatibility + const modelList = [ + { id: activeProvider.models.main, name: activeProvider.models.main, description: 'Main model', context: '' }, + ...(activeProvider.models.haiku !== activeProvider.models.main ? [{ id: activeProvider.models.haiku, name: activeProvider.models.haiku, description: 'Haiku model', context: '' }] : []), + ...(activeProvider.models.sonnet !== activeProvider.models.main ? [{ id: activeProvider.models.sonnet, name: activeProvider.models.sonnet, description: 'Sonnet model', context: '' }] : []), + ...(activeProvider.models.opus !== activeProvider.models.main ? [{ id: activeProvider.models.opus, name: activeProvider.models.opus, description: 'Opus model', context: '' }] : []), + ] return Response.json({ - models: activeProvider.models, + models: modelList, provider: { id: activeProvider.id, name: activeProvider.name }, }) } @@ -103,8 +111,11 @@ async function handleCurrentModel(req: Request): Promise { const contextTier = (settings.modelContext as string) || undefined // Build the full model list: prefer active provider's models, fall back to defaults - const activeProvider = await providerService.getActiveProvider() - const availableModels = activeProvider ? activeProvider.models : DEFAULT_MODELS + const { providers, activeId } = await providerService.listProviders() + const activeProvider = activeId ? providers.find((p) => p.id === activeId) : null + const availableModels = activeProvider + ? [{ id: activeProvider.models.main, name: activeProvider.models.main, description: 'Main model', context: '' }] + : DEFAULT_MODELS // Reconstruct composite ID for lookup (e.g. 'claude-opus-4-6-20250610:1m') const lookupId = contextTier ? `${baseModelId}:${contextTier}` : baseModelId