Skip to content

Commit e33b17b

Browse files
feat: sideQuery 支持第三方 provider 路由 (OpenAI/Grok/Gemini)
- 新增 getProviderPrimaryModel() 从环境变量解析 provider 主模型 - getDefaultOpus/Sonnet/HaikuModel 在第三方 provider 下回退到用户配置的主模型 - sideQuery 根据 provider 类型分发到对应的 API 适配器 - 新增 sideQueryViaOpenAICompatible (OpenAI + Grok) 和 sideQueryViaGemini 适配函数 - 避免 sideQuery 后台任务在配置第三方端点时仍请求 Anthropic API
1 parent 7974241 commit e33b17b

2 files changed

Lines changed: 439 additions & 6 deletions

File tree

src/utils/model/model.ts

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,19 @@ export function getBestModel(): ModelName {
120120
return getDefaultOpusModel()
121121
}
122122

123+
/**
124+
* Resolve the provider's primary model from its env var (e.g. OPENAI_MODEL).
125+
* Returns undefined for providers that don't have a primary-model env var
126+
* (Bedrock, Vertex, Foundry, firstParty).
127+
*/
128+
function getProviderPrimaryModel(): ModelName | undefined {
129+
const provider = getAPIProvider()
130+
if (provider === 'openai') return process.env.OPENAI_MODEL
131+
if (provider === 'gemini') return process.env.GEMINI_MODEL
132+
if (provider === 'grok') return process.env.GROK_MODEL
133+
return undefined
134+
}
135+
123136
// @[MODEL LAUNCH]: Update the default Opus model (3P providers may lag so keep defaults unchanged).
124137
export function getDefaultOpusModel(): ModelName {
125138
const provider = getAPIProvider()
@@ -138,10 +151,12 @@ export function getDefaultOpusModel(): ModelName {
138151
if (process.env.ANTHROPIC_DEFAULT_OPUS_MODEL) {
139152
return process.env.ANTHROPIC_DEFAULT_OPUS_MODEL
140153
}
141-
// 3P providers (Bedrock, Vertex, Foundry) all publish Opus 4.7 in sync
142-
// with firstParty as of 2026-04-17 (AWS Bedrock, Google Vertex AI, and
143-
// Microsoft Foundry announcements and model catalogs all confirm). The
144-
// branch is kept as a structural hook in case a future launch lags on 3P.
154+
// 3P providers: if user set a primary model (e.g. OPENAI_MODEL=glm-5.1),
155+
// fall back to it instead of a hardcoded Anthropic model. This prevents
156+
// sideQuery / background tasks from sending requests to Anthropic's API
157+
// when the user configured a third-party provider.
158+
const primaryModel = getProviderPrimaryModel()
159+
if (primaryModel) return primaryModel
145160
if (provider !== 'firstParty') {
146161
return getModelStrings().opus47
147162
}
@@ -166,7 +181,11 @@ export function getDefaultSonnetModel(): ModelName {
166181
if (process.env.ANTHROPIC_DEFAULT_SONNET_MODEL) {
167182
return process.env.ANTHROPIC_DEFAULT_SONNET_MODEL
168183
}
169-
// Default to Sonnet 4.5 for 3P since they may not have 4.6 yet
184+
// 3P providers: fall back to user's primary model instead of a hardcoded
185+
// Anthropic model name. Prevents background API calls from being routed to
186+
// Anthropic when the user configured a third-party endpoint.
187+
const primaryModel = getProviderPrimaryModel()
188+
if (primaryModel) return primaryModel
170189
if (provider !== 'firstParty') {
171190
return getModelStrings().sonnet45
172191
}
@@ -191,6 +210,10 @@ export function getDefaultHaikuModel(): ModelName {
191210
if (process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL) {
192211
return process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL
193212
}
213+
// 3P providers: fall back to user's primary model instead of a hardcoded
214+
// Anthropic model name.
215+
const primaryModel = getProviderPrimaryModel()
216+
if (primaryModel) return primaryModel
194217

195218
// Haiku 4.5 is available on all platforms (first-party, Foundry, Bedrock, Vertex)
196219
return getModelStrings().haiku45

0 commit comments

Comments
 (0)