package model import "strings" // 基础模型映射(key 全部小写,不包含标签后缀) var BaseModelMapping = map[string]string{ "glm-4.5": "0727-360B-API", "glm-4.6": "GLM-4-6-API-V1", "glm-4.7": "glm-4.7", "glm-5": "glm-5", "glm-4.5-v": "glm-4.5v", "glm-4.6-v": "glm-4.6v", "glm-4.5-air": "0727-106B-API", "0808-360b-dr": "0808-360B-DR", } // Claude 模型名到 GLM 基础模型名的映射 var ClaudeModelMapping = map[string]string{ "claude-opus-4-6": "glm-4.7", "claude-opus-4-5-20250514": "glm-4.7", "claude-sonnet-4-6": "glm-4.7", "claude-sonnet-4-5-20241022": "glm-4.7", "claude-haiku-4-5": "glm-4.5-air", "claude-haiku-4-5-20251001": "glm-4.5-air", "claude-3-5-sonnet-20241022": "glm-4.7", "claude-3-5-haiku-20241022": "glm-4.5-air", } // ResolveClaudeModel maps a Claude model name to a GLM model name with appropriate tags. func ResolveClaudeModel(model string, thinkingEnabled bool) (resolvedModel string, enableThinking bool) { base, ok := ClaudeModelMapping[strings.ToLower(model)] if !ok { base = "glm-4.7" } enableThinking = thinkingEnabled if strings.Contains(strings.ToLower(model), "opus") { enableThinking = true } resolvedModel = base if enableThinking { resolvedModel += "-thinking" } resolvedModel += "-tools" return resolvedModel, enableThinking } // v1/models 返回的模型列表(全部小写) var ModelList = []string{ // DEEPSEEK directo "deepseek", "deepseek-expert", "deepseek-r1", "deepseek-search", "deepseek-expert-r1", "deepseek-v4", "deepseek-v4-pro", // DEEPSEEK via OpenRouter "deepseek-r1", "deepseek-v3", "deepseek-r1-0528", "deepseek-v3-turbo", // CLAUDE "claude-sonnet-4-6", "claude-sonnet-4-5-20241022", "claude-haiku-4-5", "claude-haiku-4-5-20251001", "claude-opus-4-6", "claude-opus-4-5-20250514", "claude-3-5-sonnet-20241022", "claude-3-5-haiku-20241022", // GLM "glm-4.5", "glm-4.6", "glm-4.7", "glm-4.7-thinking", "glm-4.7-thinking-search", "glm-4.7-tools", "glm-4.7-tools-thinking", "glm-5", "glm-5-thinking", "glm-5-thinking-search", "glm-5-tools", "glm-5-tools-thinking", "glm-4.5-v", "glm-4.6-v", "glm-4.6-v-thinking", "glm-4.5-air", } // 解析模型名称,提取基础模型名和标签 // 输入大小写不敏感,输出的 baseModel 为小写 func ParseModelName(model string) (baseModel string, enableThinking bool, enableSearch bool, enableTools bool) { enableThinking = false enableSearch = false enableTools = false baseModel = strings.ToLower(model) for { if strings.HasSuffix(baseModel, "-thinking") { enableThinking = true baseModel = strings.TrimSuffix(baseModel, "-thinking") } else if strings.HasSuffix(baseModel, "-search") { enableSearch = true baseModel = strings.TrimSuffix(baseModel, "-search") } else if strings.HasSuffix(baseModel, "-tools") { enableTools = true baseModel = strings.TrimSuffix(baseModel, "-tools") } else { break } } return baseModel, enableThinking, enableSearch, enableTools } func IsThinkingModel(model string) bool { _, enableThinking, _, _ := ParseModelName(model) return enableThinking } func IsSearchModel(model string) bool { _, _, enableSearch, _ := ParseModelName(model) return enableSearch } func IsToolsModel(model string) bool { _, _, _, enableTools := ParseModelName(model) return enableTools } func GetTargetModel(model string) string { baseModel, _, _, _ := ParseModelName(model) if target, ok := BaseModelMapping[baseModel]; ok { return target } return "glm-4.7" }