@@ -15,7 +15,7 @@ vi.mock("../provider-identifiers.js", async (importOriginal) => {
1515import { providerIdentifiers } from "../provider-identifiers.js"
1616import {
1717 anthropicDefaultModelId ,
18- getProviderDefaultModelId ,
18+ getZAiDefaultModelId ,
1919 internationalZAiDefaultModelId ,
2020 kimiCodeDefaultModelId ,
2121 mainlandZAiDefaultModelId ,
@@ -24,49 +24,79 @@ import {
2424 vscodeLlmDefaultModelId ,
2525 zooGatewayDefaultModelId ,
2626} from "../providers/index.js"
27+ import { getProviderDefaultModelId } from "../provider-settings.js"
28+
29+ const zaiApiLineCases = [
30+ [ "china_coding" , "china" ] ,
31+ [ "china_api" , "china" ] ,
32+ [ "international_coding" , "international" ] ,
33+ [ "international_api" , "international" ] ,
34+ ] as const
2735
2836describe ( "getProviderDefaultModelId" , ( ) => {
2937 it ( "selects a static default through the canonical provider identifier" , ( ) => {
30- expect ( getProviderDefaultModelId ( providerIdentifiers . openrouter as ProviderName ) ) . toBe ( openRouterDefaultModelId )
38+ expect ( getProviderDefaultModelId ( providerIdentifiers . openrouter as ProviderName , { } ) ) . toBe (
39+ openRouterDefaultModelId ,
40+ )
3141 } )
3242
3343 it ( "triangulates static selection with another provider category" , ( ) => {
34- expect ( getProviderDefaultModelId ( providerIdentifiers . vscodeLm ) ) . toBe ( vscodeLlmDefaultModelId )
44+ expect ( getProviderDefaultModelId ( providerIdentifiers . vscodeLm , { } ) ) . toBe ( vscodeLlmDefaultModelId )
3545 } )
3646
3747 it ( "gives GitHub Copilot the same default as the VS Code LM provider" , ( ) => {
38- expect ( getProviderDefaultModelId ( providerIdentifiers . githubCopilot ) ) . toBe ( vscodeLlmDefaultModelId )
48+ expect ( getProviderDefaultModelId ( providerIdentifiers . githubCopilot , { } ) ) . toBe ( vscodeLlmDefaultModelId )
3949 } )
4050
4151 it ( "uses the canonical OpenAI Native default model" , ( ) => {
42- expect ( getProviderDefaultModelId ( providerIdentifiers . openaiNative ) ) . toBe ( openAiNativeDefaultModelId )
52+ expect ( getProviderDefaultModelId ( providerIdentifiers . openaiNative , { } ) ) . toBe ( openAiNativeDefaultModelId )
4353 } )
4454
4555 it . each ( [
4656 [ providerIdentifiers . kimiCode , kimiCodeDefaultModelId ] ,
4757 [ providerIdentifiers . zooGateway , zooGatewayDefaultModelId ] ,
4858 ] ) ( "preserves the %s default added on main" , ( provider , expectedModelId ) => {
49- expect ( getProviderDefaultModelId ( provider ) ) . toBe ( expectedModelId )
59+ expect ( getProviderDefaultModelId ( provider , { } ) ) . toBe ( expectedModelId )
60+ } )
61+
62+ it . each ( zaiApiLineCases ) ( "resolves the %s Z.ai default through the provider definition" , ( zaiApiLine , region ) => {
63+ const expected = region === "china" ? mainlandZAiDefaultModelId : internationalZAiDefaultModelId
64+
65+ expect ( getProviderDefaultModelId ( providerIdentifiers . zai , { zaiApiLine } ) ) . toBe ( expected )
5066 } )
5167
52- it ( "preserves region-dependent defaults" , ( ) => {
53- // These defaults currently share the same model ID, so the assertions document
54- // both branches but cannot detect swapped ternary arms until the IDs diverge.
55- expect ( getProviderDefaultModelId ( providerIdentifiers . zai , { isChina : true } ) ) . toBe ( mainlandZAiDefaultModelId )
56- expect ( getProviderDefaultModelId ( providerIdentifiers . zai ) ) . toBe ( internationalZAiDefaultModelId )
68+ it ( "falls back to the international Z.ai default when the API line is unset" , ( ) => {
69+ expect ( getProviderDefaultModelId ( providerIdentifiers . zai , { } ) ) . toBe ( internationalZAiDefaultModelId )
70+ } )
71+
72+ describe ( "Z.ai region mapping" , ( ) => {
73+ // Both regional catalogs currently share a default model ID, so inject
74+ // distinct values to prove the mainland/international arms are not swapped.
75+ const distinctDefaults = { china : "test-china-model" , international : "test-international-model" }
76+
77+ it . each ( zaiApiLineCases ) ( "maps %s to the %s default" , ( zaiApiLine , region ) => {
78+ expect ( getZAiDefaultModelId ( zaiApiLine , distinctDefaults ) ) . toBe ( distinctDefaults [ region ] )
79+ } )
80+
81+ it . each ( [ undefined , null , "bogus" ] ) (
82+ "falls back to the international default for the invalid API line %s" ,
83+ ( zaiApiLine ) => {
84+ expect ( getZAiDefaultModelId ( zaiApiLine , distinctDefaults ) ) . toBe ( distinctDefaults . international )
85+ } ,
86+ )
5787 } )
5888
5989 it . each ( [ providerIdentifiers . openai , providerIdentifiers . ollama , providerIdentifiers . lmstudio ] ) (
6090 "returns an empty default for custom or locally selected models from %s" ,
6191 ( provider ) => {
62- expect ( getProviderDefaultModelId ( provider ) ) . toBe ( "" )
92+ expect ( getProviderDefaultModelId ( provider , { } ) ) . toBe ( "" )
6393 } ,
6494 )
6595
6696 it . each ( [ providerIdentifiers . anthropic , providerIdentifiers . geminiCli , providerIdentifiers . fakeAi ] ) (
6797 "preserves the Anthropic fallback for %s" ,
6898 ( provider ) => {
69- expect ( getProviderDefaultModelId ( provider ) ) . toBe ( anthropicDefaultModelId )
99+ expect ( getProviderDefaultModelId ( provider , { } ) ) . toBe ( anthropicDefaultModelId )
70100 } ,
71101 )
72102} )
0 commit comments