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

@ -21,6 +21,7 @@ SUPPORTED_PROVIDERS_WITHOUT_BASE_URL = [
"groq",
"mistral",
"openai",
"xiaomi",
"gemini",
"anthropic",
"together_ai",

View file

@ -901,6 +901,33 @@ static_resources:
validation_context:
trusted_ca:
filename: {{ upstream_tls_ca_path | default('/etc/ssl/certs/ca-certificates.crt') }}
- name: xiaomi
connect_timeout: {{ upstream_connect_timeout | default('5s') }}
type: LOGICAL_DNS
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: xiaomi
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: api.xiaomimimo.com
port_value: 443
hostname: "api.xiaomimimo.com"
transport_socket:
name: envoy.transport_sockets.tls
typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
sni: api.xiaomimimo.com
common_tls_context:
tls_params:
tls_minimum_protocol_version: TLSv1_2
tls_maximum_protocol_version: TLSv1_3
validation_context:
trusted_ca:
filename: {{ upstream_tls_ca_path | default('/etc/ssl/certs/ca-certificates.crt') }}
- name: mistral_7b_instruct
connect_timeout: 0.5s
type: STRICT_DNS

View file

@ -188,6 +188,7 @@ properties:
- groq
- mistral
- openai
- xiaomi
- gemini
routing_preferences:
type: array
@ -235,6 +236,7 @@ properties:
- groq
- mistral
- openai
- xiaomi
- gemini
routing_preferences:
type: array

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"),