This repository was archived by the owner on May 15, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Expand file tree
/
Copy pathproviderModelConfig.ts
More file actions
162 lines (147 loc) · 5.79 KB
/
Copy pathproviderModelConfig.ts
File metadata and controls
162 lines (147 loc) · 5.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import type { ProviderName, ModelInfo, ProviderSettings } from "@roo-code/types"
import {
anthropicDefaultModelId,
bedrockDefaultModelId,
deepSeekDefaultModelId,
moonshotDefaultModelId,
geminiDefaultModelId,
mistralDefaultModelId,
openAiNativeDefaultModelId,
qwenCodeDefaultModelId,
vertexDefaultModelId,
xaiDefaultModelId,
sambaNovaDefaultModelId,
kymaDefaultModelId,
internationalZAiDefaultModelId,
mainlandZAiDefaultModelId,
fireworksDefaultModelId,
minimaxDefaultModelId,
basetenDefaultModelId,
} from "@roo-code/types"
import { MODELS_BY_PROVIDER } from "../constants"
export interface ProviderServiceConfig {
serviceName: string
serviceUrl: string
}
export const PROVIDER_SERVICE_CONFIG: Partial<Record<ProviderName, ProviderServiceConfig>> = {
anthropic: { serviceName: "Anthropic", serviceUrl: "https://console.anthropic.com" },
bedrock: { serviceName: "Amazon Bedrock", serviceUrl: "https://aws.amazon.com/bedrock" },
deepseek: { serviceName: "DeepSeek", serviceUrl: "https://platform.deepseek.com" },
moonshot: { serviceName: "Moonshot", serviceUrl: "https://platform.moonshot.cn" },
gemini: { serviceName: "Google Gemini", serviceUrl: "https://ai.google.dev" },
mistral: { serviceName: "Mistral", serviceUrl: "https://console.mistral.ai" },
"openai-native": { serviceName: "OpenAI", serviceUrl: "https://platform.openai.com" },
"qwen-code": { serviceName: "Qwen Code", serviceUrl: "https://dashscope.console.aliyun.com" },
vertex: { serviceName: "GCP Vertex AI", serviceUrl: "https://console.cloud.google.com/vertex-ai" },
xai: { serviceName: "xAI", serviceUrl: "https://x.ai" },
sambanova: { serviceName: "SambaNova", serviceUrl: "https://sambanova.ai" },
kyma: { serviceName: "Kyma API", serviceUrl: "https://kymaapi.com" },
zai: { serviceName: "Z.ai", serviceUrl: "https://z.ai" },
fireworks: { serviceName: "Fireworks AI", serviceUrl: "https://fireworks.ai" },
minimax: { serviceName: "MiniMax", serviceUrl: "https://minimax.chat" },
baseten: { serviceName: "Baseten", serviceUrl: "https://baseten.co" },
ollama: { serviceName: "Ollama", serviceUrl: "https://ollama.ai" },
lmstudio: { serviceName: "LM Studio", serviceUrl: "https://lmstudio.ai/docs" },
"vscode-lm": {
serviceName: "VS Code LM",
serviceUrl: "https://code.visualstudio.com/api/extension-guides/language-model",
},
}
export const PROVIDER_DEFAULT_MODEL_IDS: Partial<Record<ProviderName, string>> = {
anthropic: anthropicDefaultModelId,
bedrock: bedrockDefaultModelId,
deepseek: deepSeekDefaultModelId,
moonshot: moonshotDefaultModelId,
gemini: geminiDefaultModelId,
mistral: mistralDefaultModelId,
"openai-native": openAiNativeDefaultModelId,
"qwen-code": qwenCodeDefaultModelId,
vertex: vertexDefaultModelId,
xai: xaiDefaultModelId,
sambanova: sambaNovaDefaultModelId,
kyma: kymaDefaultModelId,
zai: internationalZAiDefaultModelId,
fireworks: fireworksDefaultModelId,
minimax: minimaxDefaultModelId,
baseten: basetenDefaultModelId,
}
export const getProviderServiceConfig = (provider: ProviderName): ProviderServiceConfig => {
return PROVIDER_SERVICE_CONFIG[provider] ?? { serviceName: provider, serviceUrl: "" }
}
export const getDefaultModelIdForProvider = (provider: ProviderName, apiConfiguration?: ProviderSettings): string => {
// Handle Z.ai's China/International entrypoint distinction
if (provider === "zai" && apiConfiguration) {
return apiConfiguration.zaiApiLine === "china_coding"
? mainlandZAiDefaultModelId
: internationalZAiDefaultModelId
}
return PROVIDER_DEFAULT_MODEL_IDS[provider] ?? ""
}
export const getStaticModelsForProvider = (
provider: ProviderName,
customArnLabel?: string,
): Record<string, ModelInfo> => {
const models = MODELS_BY_PROVIDER[provider] ?? {}
// Add custom-arn option for Bedrock
if (provider === "bedrock") {
return {
...models,
"custom-arn": {
maxTokens: 0,
contextWindow: 0,
supportsPromptCache: false,
description: customArnLabel ?? "Use Custom ARN",
},
}
}
return models
}
/**
* Checks if a provider uses static models from MODELS_BY_PROVIDER
*/
export const isStaticModelProvider = (provider: ProviderName): boolean => {
return provider in MODELS_BY_PROVIDER
}
/**
* List of providers that have their own custom model selection UI
* and should not use the generic ModelPicker in ApiOptions
*/
export const PROVIDERS_WITH_CUSTOM_MODEL_UI: ProviderName[] = [
"openrouter",
"requesty",
"unbound",
"openai", // OpenAI Compatible
"openai-codex", // OpenAI Codex has custom UI with auth and rate limits
"litellm",
"vercel-ai-gateway",
"roo",
"ollama",
"lmstudio",
"vscode-lm",
]
/**
* Checks if a provider should use the generic ModelPicker
*/
export const shouldUseGenericModelPicker = (provider: ProviderName): boolean => {
return isStaticModelProvider(provider) && !PROVIDERS_WITH_CUSTOM_MODEL_UI.includes(provider)
}
/**
* Handles provider-specific side effects when a model is changed.
* Centralizes provider-specific logic to keep it out of the ApiOptions template.
*/
export const handleModelChangeSideEffects = <K extends keyof ProviderSettings>(
provider: ProviderName,
modelId: string,
setApiConfigurationField: (field: K, value: ProviderSettings[K]) => void,
): void => {
// Bedrock: Clear custom ARN if not using custom ARN option
if (provider === "bedrock" && modelId !== "custom-arn") {
setApiConfigurationField("awsCustomArn" as K, "" as ProviderSettings[K])
}
// All providers: Clear reasoning settings when switching models to allow
// the new model's defaults to take effect. Different models within the
// same provider can have different reasoning defaults/options.
setApiConfigurationField("reasoningEffort" as K, undefined as ProviderSettings[K])
setApiConfigurationField("modelMaxTokens" as K, undefined as ProviderSettings[K])
setApiConfigurationField("modelMaxThinkingTokens" as K, undefined as ProviderSettings[K])
}