Skip to content

Commit e6185a6

Browse files
Expand OpenAI model regression coverage
Add data-driven tests around OpenAI and compat model handling, including GPT-5 token parameter selection, mapped model values, and provider boundary behavior. Also extend predicate and model-name conversion coverage across completion, Claude, OpenRouter, and AI/ML model-key groups so future config and mapping regressions fail deterministically.
1 parent 3361f3e commit e6185a6

4 files changed

Lines changed: 281 additions & 78 deletions

File tree

tests/unit/config/config-predicates.test.mjs

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ import { afterEach, beforeEach, describe, test } from 'node:test'
33
import {
44
getNavigatorLanguage,
55
getPreferredLanguageKey,
6+
chatgptApiModelKeys,
7+
gptApiModelKeys,
8+
claudeApiModelKeys,
9+
openRouterApiModelKeys,
10+
aimlApiModelKeys,
611
isUsingAimlApiModel,
712
isUsingAzureOpenAiApiModel,
813
isUsingBingWebModel,
@@ -19,6 +24,7 @@ import {
1924
isUsingMultiModeModel,
2025
isUsingOllamaApiModel,
2126
isUsingOpenAiApiModel,
27+
isUsingGptCompletionApiModel,
2228
isUsingOpenRouterApiModel,
2329
} from '../../../src/config/index.mjs'
2430

@@ -64,23 +70,32 @@ test('getNavigatorLanguage treats zh-Hant locale as zhHant', () => {
6470
})
6571

6672
test('isUsingChatgptApiModel detects chatgpt API models and excludes custom model', () => {
67-
assert.equal(isUsingChatgptApiModel({ modelName: 'chatgptApi4oMini' }), true)
68-
assert.equal(isUsingChatgptApiModel({ modelName: 'chatgptApi5' }), true)
69-
assert.equal(isUsingChatgptApiModel({ modelName: 'chatgptApi5_1' }), true)
70-
assert.equal(isUsingChatgptApiModel({ modelName: 'chatgptApi5_2' }), true)
71-
assert.equal(isUsingChatgptApiModel({ modelName: 'chatgptApi5_4' }), true)
73+
for (const modelName of chatgptApiModelKeys) {
74+
assert.equal(isUsingChatgptApiModel({ modelName }), true)
75+
}
7276
assert.equal(isUsingChatgptApiModel({ modelName: 'customModel' }), false)
7377
})
7478

7579
test('isUsingOpenAiApiModel accepts both chat and completion API model groups', () => {
76-
assert.equal(isUsingOpenAiApiModel({ modelName: 'chatgptApi4oMini' }), true)
77-
assert.equal(isUsingOpenAiApiModel({ modelName: 'gptApiInstruct' }), true)
80+
for (const modelName of chatgptApiModelKeys) {
81+
assert.equal(isUsingOpenAiApiModel({ modelName }), true)
82+
}
83+
for (const modelName of gptApiModelKeys) {
84+
assert.equal(isUsingOpenAiApiModel({ modelName }), true)
85+
}
7886
})
7987

8088
test('isUsingOpenAiApiModel excludes custom model', () => {
8189
assert.equal(isUsingOpenAiApiModel({ modelName: 'customModel' }), false)
8290
})
8391

92+
test('isUsingGptCompletionApiModel accepts all completion API model keys', () => {
93+
for (const modelName of gptApiModelKeys) {
94+
assert.equal(isUsingGptCompletionApiModel({ modelName }), true)
95+
}
96+
assert.equal(isUsingGptCompletionApiModel({ modelName: 'chatgptApi4oMini' }), false)
97+
})
98+
8499
test('isUsingCustomModel works with modelName and apiMode forms', () => {
85100
assert.equal(isUsingCustomModel({ modelName: 'customModel' }), true)
86101

@@ -117,8 +132,9 @@ test('isUsingGeminiWebModel detects bard/gemini web models', () => {
117132
})
118133

119134
test('isUsingClaudeApiModel detects Claude API models', () => {
120-
assert.equal(isUsingClaudeApiModel({ modelName: 'claude37SonnetApi' }), true)
121-
assert.equal(isUsingClaudeApiModel({ modelName: 'claudeOpus4Api' }), true)
135+
for (const modelName of claudeApiModelKeys) {
136+
assert.equal(isUsingClaudeApiModel({ modelName }), true)
137+
}
122138
assert.equal(isUsingClaudeApiModel({ modelName: 'claude2WebFree' }), false)
123139
})
124140

@@ -135,16 +151,16 @@ test('isUsingDeepSeekApiModel detects DeepSeek models', () => {
135151
})
136152

137153
test('isUsingOpenRouterApiModel detects OpenRouter models', () => {
138-
assert.equal(
139-
isUsingOpenRouterApiModel({ modelName: 'openRouter_anthropic_claude_sonnet4' }),
140-
true,
141-
)
142-
assert.equal(isUsingOpenRouterApiModel({ modelName: 'openRouter_openai_o3' }), true)
154+
for (const modelName of openRouterApiModelKeys) {
155+
assert.equal(isUsingOpenRouterApiModel({ modelName }), true)
156+
}
143157
assert.equal(isUsingOpenRouterApiModel({ modelName: 'chatgptApi4oMini' }), false)
144158
})
145159

146160
test('isUsingAimlApiModel detects AI/ML models', () => {
147-
assert.equal(isUsingAimlApiModel({ modelName: 'aiml_claude_3_7_sonnet_20250219' }), true)
161+
for (const modelName of aimlApiModelKeys) {
162+
assert.equal(isUsingAimlApiModel({ modelName }), true)
163+
}
148164
assert.equal(isUsingAimlApiModel({ modelName: 'chatgptApi4oMini' }), false)
149165
})
150166

0 commit comments

Comments
 (0)