use crate::openai_chat::{CompatConfig, OpenAiChatProvider};
use crate::provider::ModelInfo;
const BASE_URL: &str = "https://api.mistral.ai";
pub fn mistral_provider(api_key: String, base_url: Option<String>) -> OpenAiChatProvider {
let base = base_url.unwrap_or_else(|| BASE_URL.into());
OpenAiChatProvider::new_for_profile(
api_key,
base,
"mistral".into(),
CompatConfig::default(),
vec![],
default_models(),
)
}
fn default_models() -> Vec<ModelInfo> {
vec![
ModelInfo {
id: "mistral-large-latest".into(),
display_name: "Mistral Large".into(),
context_window: 128000,
max_output_tokens: 8192,
supports_images: false,
supports_streaming: true,
supports_thinking: false,
},
ModelInfo {
id: "mistral-medium-latest".into(),
display_name: "Mistral Medium".into(),
context_window: 32000,
max_output_tokens: 8192,
supports_images: false,
supports_streaming: true,
supports_thinking: false,
},
ModelInfo {
id: "mistral-small-latest".into(),
display_name: "Mistral Small".into(),
context_window: 32000,
max_output_tokens: 8192,
supports_images: false,
supports_streaming: true,
supports_thinking: false,
},
ModelInfo {
id: "codestral-latest".into(),
display_name: "Codestral".into(),
context_window: 256000,
max_output_tokens: 8192,
supports_images: false,
supports_streaming: true,
supports_thinking: false,
},
]
}