Spaces:
Paused
Paused
File size: 3,582 Bytes
48d903a cbe30d3 48d903a cbe30d3 48d903a 3a315de cbe30d3 3a315de cbe30d3 3a315de cbe30d3 3a315de cbe30d3 3a315de cbe30d3 48d903a f137b9c 0b327f4 7fa88ca cbe30d3 48d903a cbe30d3 5a55e77 48d903a 5a55e77 cbe30d3 48d903a 5a55e77 48d903a 5a55e77 48d903a 5a55e77 48d903a 5a55e77 48d903a 5a55e77 48d903a 5a55e77 48d903a 3a315de 48d903a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | 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"
}
|