Skip to content

Commit 0d88679

Browse files
committed
refactor(types): use canonical identifiers for default models
1 parent d5a8c4a commit 0d88679

2 files changed

Lines changed: 85 additions & 34 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import type { ProviderName } from "../provider-settings.js"
2+
3+
vi.mock("../provider-identifiers.js", async (importOriginal) => {
4+
const actual = await importOriginal<typeof import("../provider-identifiers.js")>()
5+
6+
return {
7+
...actual,
8+
providerIdentifiers: {
9+
...actual.providerIdentifiers,
10+
openrouter: "canonical-openrouter-test-value",
11+
},
12+
}
13+
})
14+
15+
import { providerIdentifiers } from "../provider-identifiers.js"
16+
import {
17+
anthropicDefaultModelId,
18+
getProviderDefaultModelId,
19+
mainlandZAiDefaultModelId,
20+
openRouterDefaultModelId,
21+
vscodeLlmDefaultModelId,
22+
} from "../providers/index.js"
23+
24+
describe("getProviderDefaultModelId", () => {
25+
it("selects a static default through the canonical provider identifier", () => {
26+
expect(getProviderDefaultModelId(providerIdentifiers.openrouter as ProviderName)).toBe(openRouterDefaultModelId)
27+
})
28+
29+
it("triangulates static selection with another provider category", () => {
30+
expect(getProviderDefaultModelId(providerIdentifiers.vscodeLm)).toBe(vscodeLlmDefaultModelId)
31+
})
32+
33+
it("preserves region-dependent defaults", () => {
34+
expect(getProviderDefaultModelId(providerIdentifiers.zai, { isChina: true })).toBe(mainlandZAiDefaultModelId)
35+
})
36+
37+
it.each([providerIdentifiers.openai, providerIdentifiers.ollama, providerIdentifiers.lmstudio])(
38+
"returns an empty default for custom or locally selected models from %s",
39+
(provider) => {
40+
expect(getProviderDefaultModelId(provider)).toBe("")
41+
},
42+
)
43+
44+
it.each([providerIdentifiers.anthropic, providerIdentifiers.geminiCli, providerIdentifiers.fakeAi])(
45+
"preserves the Anthropic fallback for %s",
46+
(provider) => {
47+
expect(getProviderDefaultModelId(provider)).toBe(anthropicDefaultModelId)
48+
},
49+
)
50+
})

packages/types/src/providers/index.ts

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import { zooGatewayDefaultModelId } from "./zoo-gateway.js"
6262

6363
// Import the ProviderName type from provider-settings to avoid duplication
6464
import type { ProviderName } from "../provider-settings.js"
65+
import { providerIdentifiers } from "../provider-identifiers.js"
6566

6667
/**
6768
* Get the default model ID for a given provider.
@@ -73,71 +74,71 @@ export function getProviderDefaultModelId(
7374
options: { isChina?: boolean } = { isChina: false },
7475
): string {
7576
switch (provider) {
76-
case "openrouter":
77+
case providerIdentifiers.openrouter:
7778
return openRouterDefaultModelId
78-
case "requesty":
79+
case providerIdentifiers.requesty:
7980
return requestyDefaultModelId
80-
case "litellm":
81+
case providerIdentifiers.litellm:
8182
return litellmDefaultModelId
82-
case "xai":
83+
case providerIdentifiers.xai:
8384
return xaiDefaultModelId
84-
case "baseten":
85+
case providerIdentifiers.baseten:
8586
return basetenDefaultModelId
86-
case "bedrock":
87+
case providerIdentifiers.bedrock:
8788
return bedrockDefaultModelId
88-
case "vertex":
89+
case providerIdentifiers.vertex:
8990
return vertexDefaultModelId
90-
case "gemini":
91+
case providerIdentifiers.gemini:
9192
return geminiDefaultModelId
92-
case "deepseek":
93+
case providerIdentifiers.deepseek:
9394
return deepSeekDefaultModelId
94-
case "moonshot":
95+
case providerIdentifiers.moonshot:
9596
return moonshotDefaultModelId
96-
case "minimax":
97+
case providerIdentifiers.minimax:
9798
return minimaxDefaultModelId
98-
case "mimo":
99+
case providerIdentifiers.mimo:
99100
return mimoDefaultModelId
100-
case "zai":
101+
case providerIdentifiers.zai:
101102
return options?.isChina ? mainlandZAiDefaultModelId : internationalZAiDefaultModelId
102-
case "openai-native":
103+
case providerIdentifiers.openaiNative:
103104
return "gpt-4o" // Based on openai-native patterns
104-
case "openai-codex":
105+
case providerIdentifiers.openaiCodex:
105106
return openAiCodexDefaultModelId
106-
case "mistral":
107+
case providerIdentifiers.mistral:
107108
return mistralDefaultModelId
108-
case "openai":
109+
case providerIdentifiers.openai:
109110
return "" // OpenAI provider uses custom model configuration
110-
case "ollama":
111+
case providerIdentifiers.ollama:
111112
return "" // Ollama uses dynamic model selection
112-
case "lmstudio":
113+
case providerIdentifiers.lmstudio:
113114
return "" // LMStudio uses dynamic model selection
114-
case "vscode-lm":
115+
case providerIdentifiers.vscodeLm:
115116
return vscodeLlmDefaultModelId
116-
case "sambanova":
117+
case providerIdentifiers.sambanova:
117118
return sambaNovaDefaultModelId
118-
case "fireworks":
119+
case providerIdentifiers.fireworks:
119120
return fireworksDefaultModelId
120-
case "friendli":
121+
case providerIdentifiers.friendli:
121122
return friendliDefaultModelId
122-
case "qwen-code":
123+
case providerIdentifiers.qwenCode:
123124
return qwenCodeDefaultModelId
124-
case "poe":
125+
case providerIdentifiers.poe:
125126
return poeDefaultModelId
126-
case "unbound":
127+
case providerIdentifiers.unbound:
127128
return unboundDefaultModelId
128-
case "vercel-ai-gateway":
129+
case providerIdentifiers.vercelAiGateway:
129130
return vercelAiGatewayDefaultModelId
130-
case "opencode-go":
131+
case providerIdentifiers.opencodeGo:
131132
return opencodeGoDefaultModelId
132-
case "kenari":
133+
case providerIdentifiers.kenari:
133134
return kenariDefaultModelId
134-
case "kimi-code":
135+
case providerIdentifiers.kimiCode:
135136
return kimiCodeDefaultModelId
136-
case "zoo-gateway":
137+
case providerIdentifiers.zooGateway:
137138
return zooGatewayDefaultModelId
138-
case "anthropic":
139-
case "gemini-cli":
140-
case "fake-ai":
139+
case providerIdentifiers.anthropic:
140+
case providerIdentifiers.geminiCli:
141+
case providerIdentifiers.fakeAi:
141142
default:
142143
return anthropicDefaultModelId
143144
}

0 commit comments

Comments
 (0)