diff --git a/packages/types/src/provider-settings.ts b/packages/types/src/provider-settings.ts index 6d628ddfdf..e5edfb04fa 100644 --- a/packages/types/src/provider-settings.ts +++ b/packages/types/src/provider-settings.ts @@ -440,7 +440,7 @@ export type ProviderSettingsWithId = z.infer[] = [ +export const modelIdKeys = [ "apiModelId", "glamaModelId", "openRouterModelId", @@ -455,11 +455,52 @@ export const MODEL_ID_KEYS: Partial[] = [ "ioIntelligenceModelId", "vercelAiGatewayModelId", "deepInfraModelId", -] +] as const satisfies readonly (keyof ProviderSettings)[] + +export type ModelIdKey = (typeof modelIdKeys)[number] export const getModelId = (settings: ProviderSettings): string | undefined => { - const modelIdKey = MODEL_ID_KEYS.find((key) => settings[key]) - return modelIdKey ? (settings[modelIdKey] as string) : undefined + const modelIdKey = modelIdKeys.find((key) => settings[key]) + return modelIdKey ? settings[modelIdKey] : undefined +} + +export const modelIdKeysByProvider: Record = { + anthropic: "apiModelId", + "claude-code": "apiModelId", + glama: "glamaModelId", + openrouter: "openRouterModelId", + bedrock: "apiModelId", + vertex: "apiModelId", + openai: "openAiModelId", + ollama: "ollamaModelId", + "vscode-lm": "apiModelId", // This doesn't appear to use `ModelIdKey` at all. + lmstudio: "lmStudioModelId", + gemini: "apiModelId", + "gemini-cli": "apiModelId", + "openai-native": "openAiModelId", + mistral: "apiModelId", + moonshot: "apiModelId", + deepseek: "apiModelId", + deepinfra: "deepInfraModelId", + doubao: "apiModelId", + "qwen-code": "apiModelId", + unbound: "unboundModelId", + requesty: "requestyModelId", + "human-relay": "apiModelId", + "fake-ai": "apiModelId", + xai: "apiModelId", + groq: "apiModelId", + chutes: "apiModelId", + litellm: "litellmModelId", + huggingface: "huggingFaceModelId", + cerebras: "apiModelId", + sambanova: "apiModelId", + zai: "apiModelId", + fireworks: "apiModelId", + featherless: "apiModelId", + "io-intelligence": "ioIntelligenceModelId", + roo: "apiModelId", + "vercel-ai-gateway": "vercelAiGatewayModelId", } // Providers that use Anthropic-style API protocol.