|
|
package model |
|
|
|
|
|
import ( |
|
|
"strings" |
|
|
) |
|
|
|
|
|
|
|
|
var defaultVendorRules = map[string]string{ |
|
|
"gpt": "OpenAI", |
|
|
"dall-e": "OpenAI", |
|
|
"whisper": "OpenAI", |
|
|
"o1": "OpenAI", |
|
|
"o3": "OpenAI", |
|
|
"claude": "Anthropic", |
|
|
"gemini": "Google", |
|
|
"moonshot": "Moonshot", |
|
|
"kimi": "Moonshot", |
|
|
"chatglm": "智谱", |
|
|
"glm-": "智谱", |
|
|
"qwen": "阿里巴巴", |
|
|
"deepseek": "DeepSeek", |
|
|
"abab": "MiniMax", |
|
|
"ernie": "百度", |
|
|
"spark": "讯飞", |
|
|
"hunyuan": "腾讯", |
|
|
"command": "Cohere", |
|
|
"@cf/": "Cloudflare", |
|
|
"360": "360", |
|
|
"yi": "零一万物", |
|
|
"jina": "Jina", |
|
|
"mistral": "Mistral", |
|
|
"grok": "xAI", |
|
|
"llama": "Meta", |
|
|
"doubao": "字节跳动", |
|
|
"kling": "快手", |
|
|
"jimeng": "即梦", |
|
|
"vidu": "Vidu", |
|
|
} |
|
|
|
|
|
|
|
|
var defaultVendorIcons = map[string]string{ |
|
|
"OpenAI": "OpenAI", |
|
|
"Anthropic": "Claude.Color", |
|
|
"Google": "Gemini.Color", |
|
|
"Moonshot": "Moonshot", |
|
|
"智谱": "Zhipu.Color", |
|
|
"阿里巴巴": "Qwen.Color", |
|
|
"DeepSeek": "DeepSeek.Color", |
|
|
"MiniMax": "Minimax.Color", |
|
|
"百度": "Wenxin.Color", |
|
|
"讯飞": "Spark.Color", |
|
|
"腾讯": "Hunyuan.Color", |
|
|
"Cohere": "Cohere.Color", |
|
|
"Cloudflare": "Cloudflare.Color", |
|
|
"360": "Ai360.Color", |
|
|
"零一万物": "Yi.Color", |
|
|
"Jina": "Jina", |
|
|
"Mistral": "Mistral.Color", |
|
|
"xAI": "XAI", |
|
|
"Meta": "Ollama", |
|
|
"字节跳动": "Doubao.Color", |
|
|
"快手": "Kling.Color", |
|
|
"即梦": "Jimeng.Color", |
|
|
"Vidu": "Vidu", |
|
|
"微软": "AzureAI", |
|
|
"Microsoft": "AzureAI", |
|
|
"Azure": "AzureAI", |
|
|
} |
|
|
|
|
|
|
|
|
func initDefaultVendorMapping(metaMap map[string]*Model, vendorMap map[int]*Vendor, enableAbilities []AbilityWithChannel) { |
|
|
for _, ability := range enableAbilities { |
|
|
modelName := ability.Model |
|
|
if _, exists := metaMap[modelName]; exists { |
|
|
continue |
|
|
} |
|
|
|
|
|
|
|
|
vendorID := 0 |
|
|
modelLower := strings.ToLower(modelName) |
|
|
for pattern, vendorName := range defaultVendorRules { |
|
|
if strings.Contains(modelLower, pattern) { |
|
|
vendorID = getOrCreateVendor(vendorName, vendorMap) |
|
|
break |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
metaMap[modelName] = &Model{ |
|
|
ModelName: modelName, |
|
|
VendorID: vendorID, |
|
|
Status: 1, |
|
|
NameRule: NameRuleExact, |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func getOrCreateVendor(vendorName string, vendorMap map[int]*Vendor) int { |
|
|
|
|
|
for id, vendor := range vendorMap { |
|
|
if vendor.Name == vendorName { |
|
|
return id |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
newVendor := &Vendor{ |
|
|
Name: vendorName, |
|
|
Status: 1, |
|
|
Icon: getDefaultVendorIcon(vendorName), |
|
|
} |
|
|
|
|
|
if err := newVendor.Insert(); err != nil { |
|
|
return 0 |
|
|
} |
|
|
|
|
|
vendorMap[newVendor.Id] = newVendor |
|
|
return newVendor.Id |
|
|
} |
|
|
|
|
|
|
|
|
func getDefaultVendorIcon(vendorName string) string { |
|
|
if icon, exists := defaultVendorIcons[vendorName]; exists { |
|
|
return icon |
|
|
} |
|
|
return "" |
|
|
} |
|
|
|