Skip to content

Commit 84cdb1c

Browse files
committed
refactor(webview): complete provider identifier migration
1 parent 7918f6b commit 84cdb1c

4 files changed

Lines changed: 74 additions & 54 deletions

File tree

webview-ui/src/components/settings/ModelInfoView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export const ModelInfoView = ({
7979
supportsLabel={t("settings:modelInfo.supportsPromptCache")}
8080
doesNotSupportLabel={t("settings:modelInfo.noPromptCache")}
8181
/>,
82-
apiProvider === "gemini" && (
82+
apiProvider === providerIdentifiers.gemini && (
8383
<span className="italic">
8484
{selectedModelId.includes("pro-preview")
8585
? t("settings:modelInfo.gemini.billingEstimate")

webview-ui/src/components/settings/ModelPicker.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@ import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"
33
import { Trans } from "react-i18next"
44
import { ChevronsUpDown, Check, X, Info } from "lucide-react"
55

6-
import { type ProviderSettings, type ModelInfo, type OrganizationAllowList, isRetiredProvider } from "@roo-code/types"
6+
import {
7+
type ProviderSettings,
8+
type ModelInfo,
9+
type OrganizationAllowList,
10+
isRetiredProvider,
11+
providerIdentifiers,
12+
} from "@roo-code/types"
713

814
import { useAppTranslation } from "@src/i18n/TranslationContext"
915
import { useSelectedModel } from "@/components/ui/hooks/useSelectedModel"
@@ -305,7 +311,7 @@ export const ModelPicker = ({
305311
hidePricing={hidePricing}
306312
/>
307313
)}
308-
{!hidePricing && apiConfiguration.apiProvider !== "mimo" && (
314+
{!hidePricing && apiConfiguration.apiProvider !== providerIdentifiers.mimo && (
309315
<div className="text-sm text-vscode-descriptionForeground" data-testid="automatic-fetch-hint">
310316
<Trans
311317
i18nKey="settings:modelPicker.automaticFetch"

webview-ui/src/components/settings/__tests__/ModelInfoView.spec.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,19 @@ const getPricingRowValues = (tier: string) => {
4343
}
4444

4545
describe("ModelInfoView service tier pricing", () => {
46+
it("shows Gemini billing guidance for the canonical Gemini provider", () => {
47+
render(
48+
<ModelInfoView
49+
{...defaultProps}
50+
apiProvider={providerIdentifiers.gemini}
51+
selectedModelId="gemini-3-pro-preview"
52+
modelInfo={baseModelInfo}
53+
/>,
54+
)
55+
56+
expect(screen.getByText("settings:modelInfo.gemini.billingEstimate")).toBeInTheDocument()
57+
})
58+
4659
it("shows OpenAI Native tier prices with per-field fallback to Standard pricing", () => {
4760
const modelInfo: ModelInfo = {
4861
...baseModelInfo,
Lines changed: 52 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
type ProviderName,
33
type ModelInfo,
4+
providerIdentifiers,
45
anthropicModels,
56
bedrockModels,
67
deepSeekModels,
@@ -22,57 +23,57 @@ import {
2223
} from "@roo-code/types"
2324

2425
export const MODELS_BY_PROVIDER: Partial<Record<ProviderName, Record<string, ModelInfo>>> = {
25-
anthropic: anthropicModels,
26-
bedrock: bedrockModels,
27-
deepseek: deepSeekModels,
28-
moonshot: moonshotModels,
29-
gemini: geminiModels,
30-
mistral: mistralModels,
31-
"openai-native": openAiNativeModels,
32-
"openai-codex": openAiCodexModels,
33-
"qwen-code": qwenCodeModels,
34-
vertex: vertexModels,
35-
xai: xaiModels,
36-
sambanova: sambaNovaModels,
37-
zai: internationalZAiModels,
38-
fireworks: fireworksModels,
39-
friendli: friendliModels,
40-
minimax: minimaxModels,
41-
mimo: mimoModels,
42-
baseten: basetenModels,
26+
[providerIdentifiers.anthropic]: anthropicModels,
27+
[providerIdentifiers.bedrock]: bedrockModels,
28+
[providerIdentifiers.deepseek]: deepSeekModels,
29+
[providerIdentifiers.moonshot]: moonshotModels,
30+
[providerIdentifiers.gemini]: geminiModels,
31+
[providerIdentifiers.mistral]: mistralModels,
32+
[providerIdentifiers.openaiNative]: openAiNativeModels,
33+
[providerIdentifiers.openaiCodex]: openAiCodexModels,
34+
[providerIdentifiers.qwenCode]: qwenCodeModels,
35+
[providerIdentifiers.vertex]: vertexModels,
36+
[providerIdentifiers.xai]: xaiModels,
37+
[providerIdentifiers.sambanova]: sambaNovaModels,
38+
[providerIdentifiers.zai]: internationalZAiModels,
39+
[providerIdentifiers.fireworks]: fireworksModels,
40+
[providerIdentifiers.friendli]: friendliModels,
41+
[providerIdentifiers.minimax]: minimaxModels,
42+
[providerIdentifiers.mimo]: mimoModels,
43+
[providerIdentifiers.baseten]: basetenModels,
4344
}
4445

45-
export const PROVIDERS = [
46-
{ value: "openrouter", label: "OpenRouter", proxy: false },
47-
{ value: "anthropic", label: "Anthropic", proxy: false },
48-
{ value: "gemini", label: "Google Gemini", proxy: false },
49-
{ value: "deepseek", label: "DeepSeek", proxy: false },
50-
{ value: "moonshot", label: "Moonshot", proxy: false },
51-
{ value: "kimi-code", label: "Kimi Code", proxy: false },
52-
{ value: "openai-native", label: "OpenAI", proxy: false },
53-
{ value: "openai-codex", label: "OpenAI - ChatGPT Plus/Pro", proxy: false },
54-
{ value: "openai", label: "OpenAI Compatible", proxy: true },
55-
{ value: "qwen-code", label: "Qwen Code", proxy: false },
56-
{ value: "vertex", label: "GCP Vertex AI", proxy: false },
57-
{ value: "bedrock", label: "Amazon Bedrock", proxy: false },
58-
{ value: "vscode-lm", label: "VS Code LM API", proxy: false },
59-
{ value: "mistral", label: "Mistral", proxy: false },
60-
{ value: "lmstudio", label: "LM Studio", proxy: true },
61-
{ value: "ollama", label: "Ollama", proxy: true },
62-
{ value: "requesty", label: "Requesty", proxy: false },
63-
{ value: "xai", label: "xAI (Grok)", proxy: false },
64-
{ value: "litellm", label: "LiteLLM", proxy: true },
65-
{ value: "sambanova", label: "SambaNova", proxy: false },
66-
{ value: "zai", label: "Z.ai", proxy: false },
67-
{ value: "fireworks", label: "Fireworks AI", proxy: false },
68-
{ value: "friendli", label: "Friendli", proxy: false },
69-
{ value: "vercel-ai-gateway", label: "Vercel AI Gateway", proxy: false },
70-
{ value: "opencode-go", label: "Opencode Go", proxy: false },
71-
{ value: "kenari", label: "Kenari", proxy: false },
72-
{ value: "zoo-gateway", label: "Zoo Gateway", proxy: false },
73-
{ value: "minimax", label: "MiniMax", proxy: false },
74-
{ value: "mimo", label: "Xiaomi MiMo", proxy: false },
75-
{ value: "baseten", label: "Baseten", proxy: false },
76-
{ value: "unbound", label: "Unbound", proxy: false },
77-
{ value: "poe", label: "Poe", proxy: false },
46+
export const PROVIDERS: Array<{ value: string; label: string; proxy: boolean }> = [
47+
{ value: providerIdentifiers.openrouter, label: "OpenRouter", proxy: false },
48+
{ value: providerIdentifiers.anthropic, label: "Anthropic", proxy: false },
49+
{ value: providerIdentifiers.gemini, label: "Google Gemini", proxy: false },
50+
{ value: providerIdentifiers.deepseek, label: "DeepSeek", proxy: false },
51+
{ value: providerIdentifiers.moonshot, label: "Moonshot", proxy: false },
52+
{ value: providerIdentifiers.kimiCode, label: "Kimi Code", proxy: false },
53+
{ value: providerIdentifiers.openaiNative, label: "OpenAI", proxy: false },
54+
{ value: providerIdentifiers.openaiCodex, label: "OpenAI - ChatGPT Plus/Pro", proxy: false },
55+
{ value: providerIdentifiers.openai, label: "OpenAI Compatible", proxy: true },
56+
{ value: providerIdentifiers.qwenCode, label: "Qwen Code", proxy: false },
57+
{ value: providerIdentifiers.vertex, label: "GCP Vertex AI", proxy: false },
58+
{ value: providerIdentifiers.bedrock, label: "Amazon Bedrock", proxy: false },
59+
{ value: providerIdentifiers.vscodeLm, label: "VS Code LM API", proxy: false },
60+
{ value: providerIdentifiers.mistral, label: "Mistral", proxy: false },
61+
{ value: providerIdentifiers.lmstudio, label: "LM Studio", proxy: true },
62+
{ value: providerIdentifiers.ollama, label: "Ollama", proxy: true },
63+
{ value: providerIdentifiers.requesty, label: "Requesty", proxy: false },
64+
{ value: providerIdentifiers.xai, label: "xAI (Grok)", proxy: false },
65+
{ value: providerIdentifiers.litellm, label: "LiteLLM", proxy: true },
66+
{ value: providerIdentifiers.sambanova, label: "SambaNova", proxy: false },
67+
{ value: providerIdentifiers.zai, label: "Z.ai", proxy: false },
68+
{ value: providerIdentifiers.fireworks, label: "Fireworks AI", proxy: false },
69+
{ value: providerIdentifiers.friendli, label: "Friendli", proxy: false },
70+
{ value: providerIdentifiers.vercelAiGateway, label: "Vercel AI Gateway", proxy: false },
71+
{ value: providerIdentifiers.opencodeGo, label: "Opencode Go", proxy: false },
72+
{ value: providerIdentifiers.kenari, label: "Kenari", proxy: false },
73+
{ value: providerIdentifiers.zooGateway, label: "Zoo Gateway", proxy: false },
74+
{ value: providerIdentifiers.minimax, label: "MiniMax", proxy: false },
75+
{ value: providerIdentifiers.mimo, label: "Xiaomi MiMo", proxy: false },
76+
{ value: providerIdentifiers.baseten, label: "Baseten", proxy: false },
77+
{ value: providerIdentifiers.unbound, label: "Unbound", proxy: false },
78+
{ value: providerIdentifiers.poe, label: "Poe", proxy: false },
7879
].sort((a, b) => a.label.localeCompare(b.label))

0 commit comments

Comments
 (0)