feat(provider): add xiaomi as first-class provider

This commit is contained in:
Spherrrical 2026-04-02 13:03:54 -07:00
parent 76ff353c1e
commit f092cd4917
6 changed files with 45 additions and 0 deletions

View file

@ -339,6 +339,8 @@ pub enum LlmProviderType {
Mistral,
#[serde(rename = "openai")]
OpenAI,
#[serde(rename = "xiaomi")]
Xiaomi,
#[serde(rename = "gemini")]
Gemini,
#[serde(rename = "xai")]
@ -370,6 +372,7 @@ impl Display for LlmProviderType {
LlmProviderType::Gemini => write!(f, "gemini"),
LlmProviderType::Mistral => write!(f, "mistral"),
LlmProviderType::OpenAI => write!(f, "openai"),
LlmProviderType::Xiaomi => write!(f, "xiaomi"),
LlmProviderType::XAI => write!(f, "xai"),
LlmProviderType::TogetherAI => write!(f, "together_ai"),
LlmProviderType::AzureOpenAI => write!(f, "azure_openai"),

View file

@ -316,6 +316,12 @@ fn fetch_all_models() -> Result<ProviderModels, Box<dyn std::error::Error>> {
"https://open.bigmodel.cn/api/paas/v4/models",
"z-ai",
),
(
"xiaomi",
"MIMO_API_KEY",
"https://api.xiaomimimo.com/v1/models",
"xiaomi",
),
];
// Fetch from OpenAI-compatible providers

View file

@ -28,6 +28,7 @@ fn load_provider_models() -> &'static HashMap<String, Vec<String>> {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ProviderId {
OpenAI,
Xiaomi,
Mistral,
Deepseek,
Groq,
@ -51,6 +52,7 @@ impl TryFrom<&str> for ProviderId {
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"openai" => Ok(ProviderId::OpenAI),
"xiaomi" => Ok(ProviderId::Xiaomi),
"mistral" => Ok(ProviderId::Mistral),
"deepseek" => Ok(ProviderId::Deepseek),
"groq" => Ok(ProviderId::Groq),
@ -84,6 +86,7 @@ impl ProviderId {
ProviderId::TogetherAI => "together",
ProviderId::Gemini => "google",
ProviderId::OpenAI => "openai",
ProviderId::Xiaomi => "xiaomi",
ProviderId::Anthropic => "anthropic",
ProviderId::Mistral => "mistralai",
ProviderId::Deepseek => "deepseek",
@ -132,6 +135,7 @@ impl ProviderId {
// OpenAI-compatible providers only support OpenAI chat completions
(
ProviderId::OpenAI
| ProviderId::Xiaomi
| ProviderId::Groq
| ProviderId::Mistral
| ProviderId::Deepseek
@ -150,6 +154,7 @@ impl ProviderId {
(
ProviderId::OpenAI
| ProviderId::Xiaomi
| ProviderId::Groq
| ProviderId::Mistral
| ProviderId::Deepseek
@ -213,6 +218,7 @@ impl Display for ProviderId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ProviderId::OpenAI => write!(f, "OpenAI"),
ProviderId::Xiaomi => write!(f, "xiaomi"),
ProviderId::Mistral => write!(f, "Mistral"),
ProviderId::Deepseek => write!(f, "Deepseek"),
ProviderId::Groq => write!(f, "Groq"),