ai_lib/model/
catalog.rs

1use crate::client::Provider;
2
3/// Static metadata describing recommended models per provider.
4///
5/// This data is intentionally lightweight so we can provide reasonable fallbacks
6/// without hard-coding every possible model permutation. Enterprise/pro releases
7/// can override/extend this registry via a custom `ModelResolver`.
8#[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}