mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-14 03:52:26 +08:00
Merge pull request #4942 from HuntercodeT/fix/openai-passthrough-model-mapping-4936
fix(openai): honor passthrough over non-empty model_mapping in account selection (#4936)
This commit is contained in:
@@ -791,9 +791,16 @@ func resolveRequestedModelInMapping(mapping map[string]string, requestedModel st
|
||||
// 请求卡死在该账号上、无法 failover 到真正支持该模型的 API Key 账号(#3662)。
|
||||
// 未知/自定义别名仍保持允许(兼容渠道级映射),见 isOpenAIOAuthServableModel。
|
||||
func (a *Account) IsModelSupported(requestedModel string) bool {
|
||||
// 透传模式仅替换认证、模型语义完全交由上游决定,因此放行所有模型。
|
||||
// 该短路必须在 model_mapping 判定之前:账号从"白名单模式"切换到透传后,
|
||||
// credentials 里常残留旧的非空 model_mapping,若不在此放行,透传账号会被
|
||||
// model_mapping 白名单错误排除出候选集,导致 no available accounts / 404(issue #4936)。
|
||||
if a.IsOpenAIPassthroughEnabled() {
|
||||
return true
|
||||
}
|
||||
mapping := a.GetModelMapping()
|
||||
if len(mapping) == 0 {
|
||||
if a.IsOpenAIOAuth() && !a.IsOpenAIPassthroughEnabled() {
|
||||
if a.IsOpenAIOAuth() {
|
||||
return isOpenAIOAuthServableModel(requestedModel)
|
||||
}
|
||||
return true // 无映射 = 允许所有
|
||||
|
||||
@@ -81,6 +81,20 @@ func TestIsModelSupported_OpenAIOAuthPassthroughAllowsAll(t *testing.T) {
|
||||
require.True(t, account.IsModelSupported("deepseek-v4"))
|
||||
}
|
||||
|
||||
func TestIsModelSupported_OpenAIOAuthPassthroughIgnoresLeftoverMapping(t *testing.T) {
|
||||
account := newOpenAIOAuthAccountForModelTest()
|
||||
account.Extra = map[string]any{"openai_passthrough": true}
|
||||
// 账号从"白名单模式"切到透传后,credentials 里常残留旧的非空 model_mapping。
|
||||
// 透传应无视该白名单,放行不在其中的模型(issue #4936);否则透传账号会被
|
||||
// 调度期的 IsModelSupported 排除,客户端收到 404 "not supported by any account"。
|
||||
account.Credentials = map[string]any{
|
||||
"model_mapping": map[string]any{"gpt-5.4": "gpt-5.4"},
|
||||
}
|
||||
|
||||
require.True(t, account.IsModelSupported("gpt-5.6-sol"), "透传应放行不在残留白名单中的新模型")
|
||||
require.True(t, account.IsModelSupported("deepseek-v4"), "透传应放行任意模型")
|
||||
}
|
||||
|
||||
func TestIsModelSupported_OpenAIAPIKeyEmptyMappingAllowsAll(t *testing.T) {
|
||||
account := &Account{
|
||||
ID: 2,
|
||||
|
||||
Reference in New Issue
Block a user