diff --git a/src/app/(dashboard)/dashboard/settings/components/RoutingTab.tsx b/src/app/(dashboard)/dashboard/settings/components/RoutingTab.tsx index 822ef04a94..fbce204352 100644 --- a/src/app/(dashboard)/dashboard/settings/components/RoutingTab.tsx +++ b/src/app/(dashboard)/dashboard/settings/components/RoutingTab.tsx @@ -9,10 +9,27 @@ import { CLI_COMPAT_TOGGLE_IDS, normalizeCliCompatProviderId, } from "@/shared/constants/cliCompatProviders"; +import { AI_PROVIDERS } from "@/shared/constants/providers"; // Provider keys (mirror of open-sse/services/systemTransforms.ts). const PROVIDER_CLAUDE = "claude"; const PROVIDER_CC_BRIDGE = "anthropic-compatible-cc"; +const BUILTIN_PROVIDERS = new Set([PROVIDER_CLAUDE, PROVIDER_CC_BRIDGE]); + +// Canonical provider catalog for the "Add provider" dropdown. Pulled from the +// shared AI_PROVIDERS registry so the UI stays in sync with backend provider +// definitions. We add the CC bridge synthetic ID (no AI_PROVIDERS entry — it's +// a relay surface, not an upstream provider). Sorted by display name. +type ProviderCatalogEntry = { id: string; name: string }; +const PROVIDER_CATALOG: ProviderCatalogEntry[] = (() => { + const entries: ProviderCatalogEntry[] = Object.values(AI_PROVIDERS).map((p) => ({ + id: p.id, + name: p.name ?? p.id, + })); + entries.push({ id: PROVIDER_CC_BRIDGE, name: "Anthropic-compatible CC bridge" }); + entries.sort((a, b) => a.name.localeCompare(b.name)); + return entries; +})(); const OPENWEBUI_PARAGRAPH_ANCHORS = [ "github.com/open-webui/open-webui", @@ -665,10 +682,13 @@ export default function RoutingTab() { updateProviderTransforms(providerId, { enabled: current.enabled, pipeline }); }; - const BUILTIN_PROVIDERS = new Set([PROVIDER_CLAUDE, PROVIDER_CC_BRIDGE]); + const availableProvidersToAdd = useMemo( + () => PROVIDER_CATALOG.filter((p) => !systemTransforms.providers[p.id]), + [systemTransforms.providers] + ); const addProvider = () => { - const id = newProviderId.trim(); + const id = newProviderId; if (!id || systemTransforms.providers[id]) return; updateProviderTransforms(id, { enabled: false, pipeline: [] }); setNewProviderId(""); @@ -1027,33 +1047,33 @@ export default function RoutingTab() { {op?.kind}