Files
cloudpods/pkg/aiproxy/models/catalog_seed_models.go
Zexi Li 167682c39b feat(aiproxy): add Anthropic Messages API and migrate functional tests to Go (#25107)
Add /v1/messages handler with Anthropic-to-OpenAI translation, upstream
failover, and probe endpoints. Replace shell-based functional test scripts
with pkg/aiproxy/ft and climc test commands; consolidate documentation.
2026-07-07 20:13:14 +08:00

308 lines
17 KiB
Go

// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package models
import api "yunion.io/x/onecloud/pkg/apis/aiproxy"
// catalogSeedModel is one row to insert into ai_models when seeding a standard provider.
// ModelKey is the id sent to the upstream API (no "provider/" prefix).
type catalogSeedModel struct {
ModelKey string
Description string
}
// catalogSeedModelsForProvider returns known public model ids for seeding.
// Curated from vendor/provider docs; extend as products ship.
// Providers without a list return nil and the seeder inserts model_key "default".
func catalogSeedModelsForProvider(providerKey string) []catalogSeedModel {
switch providerKey {
case api.ProviderKeyAnthropic:
return []catalogSeedModel{
{ModelKey: "claude-opus-4-20250514", Description: "Anthropic Claude Opus 4"},
{ModelKey: "claude-sonnet-4-20250514", Description: "Anthropic Claude Sonnet 4"},
{ModelKey: "claude-3-7-sonnet-20250219", Description: "Anthropic Claude 3.7 Sonnet"},
{ModelKey: "claude-3-5-sonnet-20241022", Description: "Anthropic Claude 3.5 Sonnet"},
{ModelKey: "claude-3-5-haiku-20241022", Description: "Anthropic Claude 3.5 Haiku"},
{ModelKey: "claude-3-opus-20240229", Description: "Anthropic Claude 3 Opus"},
{ModelKey: "claude-3-haiku-20240307", Description: "Anthropic Claude 3 Haiku"},
}
// disabled: uncommon provider
// case api.ProviderKeyAzure:
// // Azure OpenAI uses deployment names; these match common Azure OpenAI deployment ids.
// return []catalogSeedModel{
// {ModelKey: "gpt-4o", Description: "Azure OpenAI GPT-4o deployment"},
// {ModelKey: "gpt-4o-mini", Description: "Azure OpenAI GPT-4o mini deployment"},
// {ModelKey: "gpt-4", Description: "Azure OpenAI GPT-4 deployment"},
// {ModelKey: "gpt-35-turbo", Description: "Azure OpenAI GPT-3.5 Turbo deployment"},
// {ModelKey: "o3-mini", Description: "Azure OpenAI o3-mini deployment"},
// }
// disabled: uncommon provider
// case api.ProviderKeyBedrock:
// return []catalogSeedModel{
// {ModelKey: "anthropic.claude-3-5-sonnet-20241022-v2:0", Description: "Bedrock Claude 3.5 Sonnet"},
// {ModelKey: "anthropic.claude-3-5-haiku-20241022-v1:0", Description: "Bedrock Claude 3.5 Haiku"},
// {ModelKey: "anthropic.claude-3-opus-20240229-v1:0", Description: "Bedrock Claude 3 Opus"},
// {ModelKey: "anthropic.claude-3-sonnet-20240229-v1:0", Description: "Bedrock Claude 3 Sonnet"},
// {ModelKey: "anthropic.claude-3-haiku-20240307-v1:0", Description: "Bedrock Claude 3 Haiku"},
// {ModelKey: "meta.llama3-70b-instruct-v1:0", Description: "Bedrock Llama 3 70B Instruct"},
// {ModelKey: "meta.llama3-8b-instruct-v1:0", Description: "Bedrock Llama 3 8B Instruct"},
// {ModelKey: "mistral.mistral-large-2402-v1:0", Description: "Bedrock Mistral Large"},
// {ModelKey: "amazon.titan-text-express-v1", Description: "Bedrock Amazon Titan Text Express"},
// }
// disabled: uncommon provider
// case api.ProviderKeyCerebras:
// return []catalogSeedModel{
// {ModelKey: "llama3.1-8b", Description: "Cerebras Llama 3.1 8B"},
// {ModelKey: "llama3.1-70b", Description: "Cerebras Llama 3.1 70B"},
// {ModelKey: "llama-3.3-70b", Description: "Cerebras Llama 3.3 70B"},
// }
// disabled: uncommon provider
// case api.ProviderKeyCohere:
// return []catalogSeedModel{
// {ModelKey: "command-r-plus", Description: "Cohere Command R+"},
// {ModelKey: "command-r", Description: "Cohere Command R"},
// {ModelKey: "command-a", Description: "Cohere Command A"},
// {ModelKey: "command", Description: "Cohere Command"},
// {ModelKey: "command-light", Description: "Cohere Command Light"},
// {ModelKey: "embed-english-v3.0", Description: "Cohere Embed English v3"},
// {ModelKey: "embed-multilingual-v3.0", Description: "Cohere Embed Multilingual v3"},
// }
case api.ProviderKeyDeepseek:
return []catalogSeedModel{
{ModelKey: "deepseek-v4-flash", Description: "DeepSeek-V4-Flash; 1M context; high concurrency (2500); cost-efficient default"},
{ModelKey: "deepseek-v4-pro", Description: "DeepSeek-V4-Pro; 1M context; frontier reasoning/coding/agents (500 concurrency)"},
}
// disabled: uncommon provider
// case api.ProviderKeyElevenlabs:
// return []catalogSeedModel{
// {ModelKey: "eleven_multilingual_v2", Description: "ElevenLabs multilingual v2"},
// {ModelKey: "eleven_turbo_v2_5", Description: "ElevenLabs Turbo v2.5"},
// {ModelKey: "eleven_flash_v2_5", Description: "ElevenLabs Flash v2.5"},
// {ModelKey: "eleven_multilingual_v1", Description: "ElevenLabs multilingual v1"},
// }
// disabled: uncommon provider
// case api.ProviderKeyFireworks:
// return []catalogSeedModel{
// {ModelKey: "accounts/fireworks/models/llama-v3p1-8b-instruct", Description: "Fireworks Llama 3.1 8B Instruct"},
// {ModelKey: "accounts/fireworks/models/llama-v3p1-70b-instruct", Description: "Fireworks Llama 3.1 70B Instruct"},
// {ModelKey: "accounts/fireworks/models/llama-v3p3-70b-instruct", Description: "Fireworks Llama 3.3 70B Instruct"},
// {ModelKey: "accounts/fireworks/models/mixtral-8x7b-instruct", Description: "Fireworks Mixtral 8x7B Instruct"},
// }
case api.ProviderKeyGemini:
return []catalogSeedModel{
{ModelKey: "gemini-2.0-flash", Description: "Google Gemini 2.0 Flash"},
{ModelKey: "gemini-2.0-flash-lite", Description: "Google Gemini 2.0 Flash-Lite"},
{ModelKey: "gemini-1.5-pro", Description: "Google Gemini 1.5 Pro"},
{ModelKey: "gemini-1.5-flash", Description: "Google Gemini 1.5 Flash"},
{ModelKey: "gemini-1.5-flash-8b", Description: "Google Gemini 1.5 Flash 8B"},
{ModelKey: "gemini-embedding-001", Description: "Google Gemini Embedding 001"},
}
case api.ProviderKeyGroq:
return []catalogSeedModel{
{ModelKey: "llama-3.3-70b-versatile", Description: "Groq Llama 3.3 70B Versatile"},
{ModelKey: "llama-3.1-8b-instant", Description: "Groq Llama 3.1 8B Instant"},
{ModelKey: "llama-3.1-70b-versatile", Description: "Groq Llama 3.1 70B Versatile"},
{ModelKey: "mixtral-8x7b-32768", Description: "Groq Mixtral 8x7B"},
{ModelKey: "gemma2-9b-it", Description: "Groq Gemma2 9B IT"},
}
case api.ProviderKeyHuggingface:
return []catalogSeedModel{
{ModelKey: "meta-llama/Meta-Llama-3.1-8B-Instruct", Description: "HF Llama 3.1 8B Instruct"},
{ModelKey: "meta-llama/Meta-Llama-3.1-70B-Instruct", Description: "HF Llama 3.1 70B Instruct"},
{ModelKey: "mistralai/Mistral-7B-Instruct-v0.3", Description: "HF Mistral 7B Instruct"},
{ModelKey: "Qwen/Qwen2.5-72B-Instruct", Description: "HF Qwen2.5 72B Instruct"},
}
case api.ProviderKeyMistral:
return []catalogSeedModel{
{ModelKey: "mistral-large-latest", Description: "Mistral Large (latest)"},
{ModelKey: "mistral-small-latest", Description: "Mistral Small (latest)"},
{ModelKey: "pixtral-12b-2409", Description: "Mistral Pixtral 12B"},
{ModelKey: "codestral-latest", Description: "Mistral Codestral (latest)"},
{ModelKey: "ministral-8b-latest", Description: "Mistral Ministral 8B"},
{ModelKey: "open-mistral-nemo", Description: "Mistral Open Mistral Nemo"},
{ModelKey: "mixtral-8x22b", Description: "Mistral Mixtral 8x22B"},
{ModelKey: "mixtral-8x7b", Description: "Mistral Mixtral 8x7B"},
}
// disabled: uncommon provider
// case api.ProviderKeyNebius:
// return []catalogSeedModel{
// {ModelKey: "deepseek-ai/DeepSeek-V3", Description: "Nebius DeepSeek V3"},
// {ModelKey: "Qwen/Qwen2.5-72B-Instruct", Description: "Nebius Qwen2.5 72B Instruct"},
// {ModelKey: "meta-llama/Llama-3.3-70B-Instruct", Description: "Nebius Llama 3.3 70B Instruct"},
// }
case api.ProviderKeyOllama:
return []catalogSeedModel{
{ModelKey: "llama3.2", Description: "Ollama Llama 3.2"},
{ModelKey: "llama3.1", Description: "Ollama Llama 3.1"},
{ModelKey: "mistral", Description: "Ollama Mistral"},
{ModelKey: "qwen2.5", Description: "Ollama Qwen 2.5"},
{ModelKey: "codellama", Description: "Ollama Code Llama"},
{ModelKey: "phi3", Description: "Ollama Phi 3"},
}
case api.ProviderKeyVLLM:
return []catalogSeedModel{
{ModelKey: "meta-llama/Meta-Llama-3.1-8B-Instruct", Description: "vLLM Llama 3.1 8B Instruct"},
{ModelKey: "meta-llama/Meta-Llama-3.1-70B-Instruct", Description: "vLLM Llama 3.1 70B Instruct"},
{ModelKey: "Qwen/Qwen2.5-7B-Instruct", Description: "vLLM Qwen2.5 7B Instruct"},
{ModelKey: "Qwen/Qwen2.5-72B-Instruct", Description: "vLLM Qwen2.5 72B Instruct"},
{ModelKey: "mistralai/Mistral-7B-Instruct-v0.3", Description: "vLLM Mistral 7B Instruct"},
}
case api.ProviderKeyOpenAI:
return []catalogSeedModel{
{ModelKey: "gpt-5-nano", Description: "OpenAI GPT-5 nano"},
{ModelKey: "gpt-5-mini", Description: "OpenAI GPT-5 mini"},
{ModelKey: "gpt-5", Description: "OpenAI GPT-5"},
{ModelKey: "gpt-5.1", Description: "OpenAI GPT-5.1"},
{ModelKey: "gpt-5.1-mini", Description: "OpenAI GPT-5.1 mini"},
{ModelKey: "gpt-5.1-codex", Description: "OpenAI GPT-5.1 Codex"},
{ModelKey: "gpt-5.1-codex-max", Description: "OpenAI GPT-5.1 Codex Max"},
{ModelKey: "gpt-5.2", Description: "OpenAI GPT-5.2"},
{ModelKey: "gpt-5.2-pro", Description: "OpenAI GPT-5.2 pro"},
{ModelKey: "gpt-5.2-codex", Description: "OpenAI GPT-5.2 Codex"},
{ModelKey: "gpt-4.1", Description: "OpenAI GPT-4.1"},
{ModelKey: "gpt-4.1-mini", Description: "OpenAI GPT-4.1 mini"},
{ModelKey: "gpt-4.1-nano", Description: "OpenAI GPT-4.1 nano"},
{ModelKey: "gpt-4o", Description: "OpenAI GPT-4o"},
{ModelKey: "gpt-4o-mini", Description: "OpenAI GPT-4o mini"},
{ModelKey: "chatgpt-4o-latest", Description: "OpenAI ChatGPT-4o latest"},
{ModelKey: "gpt-4-turbo", Description: "OpenAI GPT-4 Turbo"},
{ModelKey: "gpt-4", Description: "OpenAI GPT-4"},
{ModelKey: "gpt-3.5-turbo", Description: "OpenAI GPT-3.5 Turbo"},
{ModelKey: "o1", Description: "OpenAI o1"},
{ModelKey: "o1-mini", Description: "OpenAI o1-mini"},
{ModelKey: "o1-preview", Description: "OpenAI o1-preview"},
{ModelKey: "o3", Description: "OpenAI o3"},
{ModelKey: "o3-mini", Description: "OpenAI o3-mini"},
{ModelKey: "o4-mini", Description: "OpenAI o4-mini"},
{ModelKey: "text-embedding-3-small", Description: "OpenAI text-embedding-3-small"},
{ModelKey: "text-embedding-3-large", Description: "OpenAI text-embedding-3-large"},
{ModelKey: "text-embedding-ada-002", Description: "OpenAI text-embedding-ada-002"},
}
case api.ProviderKeyOpenrouter:
return []catalogSeedModel{
{ModelKey: "openai/gpt-4o", Description: "OpenRouter OpenAI GPT-4o"},
{ModelKey: "openai/gpt-4o-mini", Description: "OpenRouter OpenAI GPT-4o mini"},
{ModelKey: "anthropic/claude-3.5-sonnet", Description: "OpenRouter Claude 3.5 Sonnet"},
{ModelKey: "anthropic/claude-3.5-haiku", Description: "OpenRouter Claude 3.5 Haiku"},
{ModelKey: "google/gemini-2.0-flash-001", Description: "OpenRouter Gemini 2.0 Flash"},
{ModelKey: "meta-llama/llama-3.3-70b-instruct", Description: "OpenRouter Llama 3.3 70B Instruct"},
{ModelKey: "mistralai/mistral-large", Description: "OpenRouter Mistral Large"},
}
// disabled: uncommon provider
// case api.ProviderKeyPerplexity:
// return []catalogSeedModel{
// {ModelKey: "sonar", Description: "Perplexity Sonar"},
// {ModelKey: "sonar-pro", Description: "Perplexity Sonar Pro"},
// {ModelKey: "sonar-reasoning", Description: "Perplexity Sonar Reasoning"},
// {ModelKey: "llama-3.1-sonar-small-128k-online", Description: "Perplexity Llama 3.1 Sonar Small online"},
// {ModelKey: "llama-3.1-sonar-large-128k-online", Description: "Perplexity Llama 3.1 Sonar Large online"},
// }
// disabled: uncommon provider
// case api.ProviderKeyReplicate:
// return []catalogSeedModel{
// {ModelKey: "meta/meta-llama-3-8b-instruct", Description: "Replicate Meta Llama 3 8B Instruct"},
// {ModelKey: "meta/meta-llama-3-70b-instruct", Description: "Replicate Meta Llama 3 70B Instruct"},
// {ModelKey: "mistralai/mixtral-8x7b-instruct-v0.1", Description: "Replicate Mixtral 8x7B Instruct"},
// }
// disabled: uncommon provider
// case api.ProviderKeyRunway:
// return []catalogSeedModel{
// {ModelKey: "gen3a_turbo", Description: "Runway Gen-3 Alpha Turbo"},
// {ModelKey: "gen3a", Description: "Runway Gen-3 Alpha"},
// {ModelKey: "gen4_aleph", Description: "Runway Gen-4 Aleph"},
// }
// disabled: uncommon provider
// case api.ProviderKeyVertex:
// return []catalogSeedModel{
// {ModelKey: "gemini-2.0-flash", Description: "Vertex AI Gemini 2.0 Flash"},
// {ModelKey: "gemini-1.5-pro", Description: "Vertex AI Gemini 1.5 Pro"},
// {ModelKey: "gemini-1.5-flash", Description: "Vertex AI Gemini 1.5 Flash"},
// {ModelKey: "publishers/google/models/gemini-1.5-pro", Description: "Vertex publisher path Gemini 1.5 Pro"},
// }
// disabled: uncommon provider
// case api.ProviderKeyXai:
// return []catalogSeedModel{
// {ModelKey: "grok-3", Description: "xAI Grok 3"},
// {ModelKey: "grok-3-mini", Description: "xAI Grok 3 mini"},
// {ModelKey: "grok-2-latest", Description: "xAI Grok 2 latest"},
// {ModelKey: "grok-2-1212", Description: "xAI Grok 2 1212"},
// {ModelKey: "grok-beta", Description: "xAI Grok beta"},
// }
// disabled: uncommon provider
// case api.ProviderKeyAliyun:
// return aliyunQwenSeedModels()
// disabled: uncommon provider
// case api.ProviderKeyBaidu:
// return baiduErnieSeedModels()
case api.ProviderKeyXiaomi:
return xiaomiMimoSeedModels()
default:
return nil
}
}
func aliyunQwenSeedModels() []catalogSeedModel {
return []catalogSeedModel{
{ModelKey: "qwen-turbo", Description: "Alibaba Qwen Turbo"},
{ModelKey: "qwen-plus", Description: "Alibaba Qwen Plus"},
{ModelKey: "qwen-max", Description: "Alibaba Qwen Max"},
{ModelKey: "qwen-long", Description: "Alibaba Qwen Long context"},
{ModelKey: "qwen-vl-max", Description: "Alibaba Qwen-VL Max"},
{ModelKey: "qwen-vl-plus", Description: "Alibaba Qwen-VL Plus"},
{ModelKey: "qwen-vl-ocr", Description: "Alibaba Qwen-VL OCR"},
{ModelKey: "qwen2.5-0.5b-instruct", Description: "Alibaba Qwen2.5 0.5B Instruct"},
{ModelKey: "qwen2.5-1.5b-instruct", Description: "Alibaba Qwen2.5 1.5B Instruct"},
{ModelKey: "qwen2.5-3b-instruct", Description: "Alibaba Qwen2.5 3B Instruct"},
{ModelKey: "qwen2.5-7b-instruct", Description: "Alibaba Qwen2.5 7B Instruct"},
{ModelKey: "qwen2.5-14b-instruct", Description: "Alibaba Qwen2.5 14B Instruct"},
{ModelKey: "qwen2.5-32b-instruct", Description: "Alibaba Qwen2.5 32B Instruct"},
{ModelKey: "qwen2.5-72b-instruct", Description: "Alibaba Qwen2.5 72B Instruct"},
{ModelKey: "qwen2.5-coder-7b-instruct", Description: "Alibaba Qwen2.5 Coder 7B Instruct"},
{ModelKey: "qwen2.5-coder-32b-instruct", Description: "Alibaba Qwen2.5 Coder 32B Instruct"},
{ModelKey: "qwen3-30b-a3b", Description: "Alibaba Qwen3 30B A3B MoE"},
{ModelKey: "qwen3-32b", Description: "Alibaba Qwen3 32B"},
{ModelKey: "qwen3-235b-a22b", Description: "Alibaba Qwen3 235B A22B MoE"},
{ModelKey: "qwen-math-plus", Description: "Alibaba Qwen Math Plus"},
{ModelKey: "qwen-coder-plus", Description: "Alibaba Qwen Coder Plus"},
{ModelKey: "text-embedding-v3", Description: "Alibaba text-embedding-v3"},
{ModelKey: "text-embedding-v4", Description: "Alibaba text-embedding-v4"},
}
}
func baiduErnieSeedModels() []catalogSeedModel {
return []catalogSeedModel{
{ModelKey: "ernie-4.0-turbo-8k", Description: "Baidu ERNIE 4.0 Turbo 8K"},
{ModelKey: "ernie-4.0-8k", Description: "Baidu ERNIE 4.0 8K"},
{ModelKey: "ernie-4.0-turbo-128k", Description: "Baidu ERNIE 4.0 Turbo 128K"},
{ModelKey: "ernie-3.5-8k", Description: "Baidu ERNIE 3.5 8K"},
{ModelKey: "ernie-3.5-128k", Description: "Baidu ERNIE 3.5 128K"},
{ModelKey: "ernie-speed-128k", Description: "Baidu ERNIE Speed 128K"},
{ModelKey: "ernie-lite-8k", Description: "Baidu ERNIE Lite 8K"},
{ModelKey: "ernie-char-8k", Description: "Baidu ERNIE Character 8K"},
{ModelKey: "embedding-v1", Description: "Baidu Wenxin embedding-v1"},
{ModelKey: "tao-8k", Description: "Baidu ERNIE Tao 8K"},
}
}
func xiaomiMimoSeedModels() []catalogSeedModel {
return []catalogSeedModel{
{ModelKey: "mimo-v2.5-pro", Description: "Xiaomi MiMo 2.5 Pro (flagship text)"},
{ModelKey: "mimo-v2-pro", Description: "Xiaomi MiMo 2 Pro"},
{ModelKey: "mimo-v2.5", Description: "Xiaomi MiMo 2.5 (multimodal text)"},
{ModelKey: "mimo-v2-omni", Description: "Xiaomi MiMo 2 Omni (multimodal)"},
{ModelKey: "mimo-v2-flash", Description: "Xiaomi MiMo 2 Flash (fast)"},
}
}