Spaces:
Paused
Paused
| 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" | |
| } | |