1use crate::client::Provider;
2
3#[derive(Debug, Clone)]
9pub struct ProviderModelProfile {
10 pub provider: Provider,
11 pub doc_url: &'static str,
12 pub fallback_models: &'static [&'static str],
13}
14
15impl ProviderModelProfile {
16 pub fn default_chat_model(&self) -> &'static str {
17 self.provider.default_chat_model()
18 }
19}
20
21pub fn profile(provider: Provider) -> ProviderModelProfile {
22 match provider {
23 Provider::Groq => ProviderModelProfile {
24 provider,
25 doc_url: "https://console.groq.com/docs/models",
26 fallback_models: &["llama-3.1-70b-versatile", "llama-3.2-90b-vision-preview"],
27 },
28 Provider::Mistral => ProviderModelProfile {
29 provider,
30 doc_url: "https://docs.mistral.ai/platform/models/",
31 fallback_models: &["mistral-small-latest", "mistral-medium", "mistral-large"],
32 },
33 Provider::DeepSeek => ProviderModelProfile {
34 provider,
35 doc_url: "https://api-docs.deepseek.com/quick_start/model_list",
36 fallback_models: &["deepseek-reasoner"],
37 },
38 Provider::OpenAI | Provider::AzureOpenAI => ProviderModelProfile {
39 provider,
40 doc_url: "https://platform.openai.com/docs/models",
41 fallback_models: &["gpt-4o-mini", "gpt-4o"],
42 },
43 Provider::Anthropic => ProviderModelProfile {
44 provider,
45 doc_url: "https://docs.anthropic.com/claude/reference/selecting-a-model",
46 fallback_models: &["claude-3-5-haiku-20241022", "claude-3-opus-20240229"],
47 },
48 Provider::Gemini => ProviderModelProfile {
49 provider,
50 doc_url: "https://ai.google.dev/gemini-api/docs/models",
51 fallback_models: &["gemini-1.5-pro", "gemini-1.0-pro"],
52 },
53 Provider::Cohere => ProviderModelProfile {
54 provider,
55 doc_url: "https://docs.cohere.com/docs/models",
56 fallback_models: &["command-r-plus", "command"],
57 },
58 Provider::Perplexity => ProviderModelProfile {
59 provider,
60 doc_url: "https://docs.perplexity.ai/docs/model-cards",
61 fallback_models: &["llama-3.1-sonar-large-128k-online"],
62 },
63 Provider::AI21 => ProviderModelProfile {
64 provider,
65 doc_url: "https://docs.ai21.com/reference/jurassic-models",
66 fallback_models: &["j2-grande", "jamba-instruct"],
67 },
68 Provider::OpenRouter => ProviderModelProfile {
69 provider,
70 doc_url: "https://openrouter.ai/docs/models",
71 fallback_models: &["openai/gpt-4o-mini", "meta-llama/llama-3.1-70b-instruct"],
72 },
73 Provider::TogetherAI => ProviderModelProfile {
74 provider,
75 doc_url: "https://docs.together.ai/docs/inference-models",
76 fallback_models: &["meta-llama/Llama-3.1-8B-Instruct-Turbo"],
77 },
78 Provider::Replicate => ProviderModelProfile {
79 provider,
80 doc_url: "https://replicate.com/explore",
81 fallback_models: &["meta/llama-2-13b-chat"],
82 },
83 Provider::BaiduWenxin => ProviderModelProfile {
84 provider,
85 doc_url: "https://cloud.baidu.com/doc/WENXINWORKSHOP/s/hlrk4akp8",
86 fallback_models: &["ernie-4.0"],
87 },
88 Provider::TencentHunyuan => ProviderModelProfile {
89 provider,
90 doc_url: "https://cloud.tencent.com/document/product/1729",
91 fallback_models: &["hunyuan-lite"],
92 },
93 Provider::IflytekSpark => ProviderModelProfile {
94 provider,
95 doc_url: "https://www.xfyun.cn/doc/spark/Web.html",
96 fallback_models: &["spark-v4.0"],
97 },
98 Provider::Moonshot => ProviderModelProfile {
99 provider,
100 doc_url: "https://platform.moonshot.cn/docs",
101 fallback_models: &["moonshot-v1-32k"],
102 },
103 Provider::ZhipuAI => ProviderModelProfile {
104 provider,
105 doc_url: "https://open.bigmodel.cn/doc/overview",
106 fallback_models: &["glm-4-air"],
107 },
108 Provider::MiniMax => ProviderModelProfile {
109 provider,
110 doc_url: "https://www.minimaxi.com/document/guides/chat-models",
111 fallback_models: &["abab5.5-chat"],
112 },
113 Provider::Qwen => ProviderModelProfile {
114 provider,
115 doc_url: "https://dashscope.aliyun.com/api",
116 fallback_models: &["qwen-plus", "qwen2.5-72b-instruct"],
117 },
118 Provider::HuggingFace => ProviderModelProfile {
119 provider,
120 doc_url: "https://huggingface.co/docs/api-inference/models",
121 fallback_models: &["google/gemma-2b-it", "mistralai/Mistral-7B-Instruct-v0.2"],
122 },
123 Provider::XaiGrok => ProviderModelProfile {
124 provider,
125 doc_url: "https://console.x.ai/docs/api-reference",
126 fallback_models: &["grok-2"],
127 },
128 Provider::Ollama => ProviderModelProfile {
129 provider,
130 doc_url: "https://github.com/ollama/ollama/blob/main/docs/modelfile.md",
131 fallback_models: &["llama3.1:8b", "phi3:3.8b"],
132 },
133 }
134}