Files
sub2api/backend/internal/service/platform_default_models.go
shaw 625c691b63 refactor(platform-seam): 默认模型 ID 同构 switch 收敛为单一来源
handler 与 admin_service 各持一份逐分支同构的平台默认模型 switch(必须人工同步)。
提取 service.DefaultModelIDsForPlatform 为单一来源 + 表驱动测试;
原函数改单行委托(调用点零改动)。含 Phase-3 审计报告归档(零 P0/P1,突变 3/3 捕获)。
2026-06-12 00:58:14 +08:00

40 lines
1.3 KiB
Go

package service
import (
"github.com/Wei-Shaw/sub2api/internal/pkg/antigravity"
"github.com/Wei-Shaw/sub2api/internal/pkg/claude"
"github.com/Wei-Shaw/sub2api/internal/pkg/geminicli"
"github.com/Wei-Shaw/sub2api/internal/pkg/openai"
)
// DefaultModelIDsForPlatform 返回平台默认模型 ID 列表(未知平台回退 Claude 默认集)。
//
// 由 handler 的 /v1/models 自定义模型过滤与 admin 的默认模型候选两处共同消费——
// 此前两处各持一份同构 switch,必须人工保持同步(Phase-3 TASK-003 收敛为单一来源)。
// 仅共享"ID 列表"这一形状;需要完整模型结构体的调用方仍直接使用各平台包的导出值。
func DefaultModelIDsForPlatform(platform string) []string {
switch platform {
case PlatformOpenAI:
return openai.DefaultModelIDs()
case PlatformGemini:
ids := make([]string, 0, len(geminicli.DefaultModels))
for _, model := range geminicli.DefaultModels {
ids = append(ids, model.ID)
}
return ids
case PlatformAntigravity:
models := antigravity.DefaultModels()
ids := make([]string, 0, len(models))
for _, model := range models {
ids = append(ids, model.ID)
}
return ids
default:
ids := make([]string, 0, len(claude.DefaultModels))
for _, model := range claude.DefaultModels {
ids = append(ids, model.ID)
}
return ids
}
}