From 520dec0ce433f6f30630746209325608d94da1c4 Mon Sep 17 00:00:00 2001 From: cte Date: Mon, 15 Sep 2025 22:44:12 -0700 Subject: [PATCH] DRY `ProviderName` up --- packages/types/src/provider-settings.ts | 154 +++++++++++------------- 1 file changed, 73 insertions(+), 81 deletions(-) diff --git a/packages/types/src/provider-settings.ts b/packages/types/src/provider-settings.ts index d50d23a914..6759330751 100644 --- a/packages/types/src/provider-settings.ts +++ b/packages/types/src/provider-settings.ts @@ -33,56 +33,6 @@ import { export const DEFAULT_CONSECUTIVE_MISTAKE_LIMIT = 3 -/** - * ProviderName - */ - -export const providerNames = [ - "anthropic", - "claude-code", - "glama", - "openrouter", - "bedrock", - "vertex", - "openai", - "ollama", - "vscode-lm", - "lmstudio", - "gemini", - "gemini-cli", - "openai-native", - "mistral", - "moonshot", - "deepseek", - "deepinfra", - "doubao", - "qwen-code", - "unbound", - "requesty", - "human-relay", - "fake-ai", - "xai", - "groq", - "chutes", - "litellm", - "huggingface", - "cerebras", - "sambanova", - "zai", - "fireworks", - "featherless", - "io-intelligence", - "roo", - "vercel-ai-gateway", -] as const - -export const providerNamesSchema = z.enum(providerNames) - -export type ProviderName = z.infer - -export const isProviderName = (key: unknown): key is ProviderName => - typeof key === "string" && providerNames.includes(key as ProviderName) - /** * DynamicProvider * @@ -99,7 +49,7 @@ export const dynamicProviders = [ "requesty", "unbound", "glama", -] as const satisfies readonly ProviderName[] +] as const export type DynamicProvider = (typeof dynamicProviders)[number] @@ -112,37 +62,12 @@ export const isDynamicProvider = (key: string): key is DynamicProvider => * Local providers require localhost API calls in order to get the model list. */ -export const localProviders = ["ollama", "lmstudio"] as const satisfies readonly ProviderName[] +export const localProviders = ["ollama", "lmstudio"] as const export type LocalProvider = (typeof localProviders)[number] export const isLocalProvider = (key: string): key is LocalProvider => localProviders.includes(key as LocalProvider) -/** - * FauxProvider - * - * Faux providers do not make external inference calls and therefore do not have - * model lists. - */ - -export const fauxProviders = ["fake-ai", "human-relay"] as const satisfies readonly ProviderName[] - -export type FauxProvider = (typeof fauxProviders)[number] - -export const isFauxProvider = (key: string): key is FauxProvider => fauxProviders.includes(key as FauxProvider) - -/** - * CustomProvider - * - * Custom providers are completely configurable within Roo Code settings. - */ - -export const customProviders = ["openai-native"] as const satisfies readonly ProviderName[] - -export type CustomProvider = (typeof customProviders)[number] - -export const isCustomProvider = (key: string): key is CustomProvider => customProviders.includes(key as CustomProvider) - /** * InternalProvider * @@ -150,13 +75,78 @@ export const isCustomProvider = (key: string): key is CustomProvider => customPr * model list. */ -export const internalProviders = ["vscode-lm"] as const satisfies readonly ProviderName[] +export const internalProviders = ["vscode-lm"] as const export type InternalProvider = (typeof internalProviders)[number] export const isInternalProvider = (key: string): key is InternalProvider => internalProviders.includes(key as InternalProvider) +/** + * CustomProvider + * + * Custom providers are completely configurable within Roo Code settings. + */ + +export const customProviders = ["openai"] as const + +export type CustomProvider = (typeof customProviders)[number] + +export const isCustomProvider = (key: string): key is CustomProvider => customProviders.includes(key as CustomProvider) + +/** + * FauxProvider + * + * Faux providers do not make external inference calls and therefore do not have + * model lists. + */ + +export const fauxProviders = ["fake-ai", "human-relay"] as const + +export type FauxProvider = (typeof fauxProviders)[number] + +export const isFauxProvider = (key: string): key is FauxProvider => fauxProviders.includes(key as FauxProvider) + +/** + * ProviderName + */ + +export const providerNames = [ + ...dynamicProviders, + ...localProviders, + ...internalProviders, + ...customProviders, + ...fauxProviders, + "anthropic", + "bedrock", + "cerebras", + "chutes", + "claude-code", + "doubao", + "deepseek", + "featherless", + "fireworks", + "gemini", + "gemini-cli", + "groq", + "mistral", + "moonshot", + "openai-native", + "qwen-code", + "roo", + "sambanova", + "vertex", + "xai", + "zai", +] as const + +export const providerNamesSchema = z.enum(providerNames) + +export type ProviderName = z.infer + +export const isProviderName = (key: unknown): key is ProviderName => + typeof key === "string" && providerNames.includes(key as ProviderName) + /** * ProviderSettingsEntry */ @@ -546,16 +536,18 @@ export const getModelId = (settings: ProviderSettings): string | undefined => { return modelIdKey ? settings[modelIdKey] : undefined } -export const modelIdKeysByProvider: Record, ModelIdKey> = { +export const modelIdKeysByProvider: Record< + Exclude, + ModelIdKey +> = { anthropic: "apiModelId", "claude-code": "apiModelId", glama: "glamaModelId", openrouter: "openRouterModelId", bedrock: "apiModelId", vertex: "apiModelId", - openai: "openAiModelId", + "openai-native": "openAiModelId", ollama: "ollamaModelId", - "vscode-lm": "apiModelId", // This doesn't appear to use `ModelIdKey` at all. lmstudio: "lmStudioModelId", gemini: "apiModelId", "gemini-cli": "apiModelId",