diff --git a/cli/planoai/config_generator.py b/cli/planoai/config_generator.py index 929b7657..3ffebe09 100644 --- a/cli/planoai/config_generator.py +++ b/cli/planoai/config_generator.py @@ -21,6 +21,7 @@ SUPPORTED_PROVIDERS_WITHOUT_BASE_URL = [ "groq", "mistral", "openai", + "xiaomi", "gemini", "anthropic", "together_ai", diff --git a/config/envoy.template.yaml b/config/envoy.template.yaml index c2dd5ed0..5669511d 100644 --- a/config/envoy.template.yaml +++ b/config/envoy.template.yaml @@ -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 diff --git a/config/plano_config_schema.yaml b/config/plano_config_schema.yaml index a2c34c91..0bdca9e4 100644 --- a/config/plano_config_schema.yaml +++ b/config/plano_config_schema.yaml @@ -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 diff --git a/crates/common/src/configuration.rs b/crates/common/src/configuration.rs index ac95185b..7aa23c67 100644 --- a/crates/common/src/configuration.rs +++ b/crates/common/src/configuration.rs @@ -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"), diff --git a/crates/hermesllm/src/bin/fetch_models.rs b/crates/hermesllm/src/bin/fetch_models.rs index 0f473d4c..575fe38d 100644 --- a/crates/hermesllm/src/bin/fetch_models.rs +++ b/crates/hermesllm/src/bin/fetch_models.rs @@ -316,6 +316,12 @@ fn fetch_all_models() -> Result> { "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 diff --git a/crates/hermesllm/src/bin/provider_models.yaml b/crates/hermesllm/src/bin/provider_models.yaml index a1425d43..53dac7f4 100644 --- a/crates/hermesllm/src/bin/provider_models.yaml +++ b/crates/hermesllm/src/bin/provider_models.yaml @@ -1,9 +1,18 @@ version: '1.0' source: canonical-apis providers: - deepseek: - - deepseek/deepseek-chat - - deepseek/deepseek-reasoner + amazon: + - amazon/amazon.nova-pro-v1:0 + - amazon/amazon.nova-2-lite-v1:0 + - amazon/amazon.nova-2-sonic-v1:0 + - amazon/amazon.titan-tg1-large + - amazon/amazon.nova-premier-v1:0:8k + - amazon/amazon.nova-premier-v1:0:20k + - amazon/amazon.nova-premier-v1:0:1000k + - amazon/amazon.nova-premier-v1:0:mm + - amazon/amazon.nova-premier-v1:0 + - amazon/amazon.nova-lite-v1:0 + - amazon/amazon.nova-micro-v1:0 google: - google/gemini-2.5-flash - google/gemini-2.5-pro @@ -19,12 +28,13 @@ providers: - google/gemma-3-27b-it - google/gemma-3n-e4b-it - google/gemma-3n-e2b-it + - google/gemma-4-26b-a4b-it + - google/gemma-4-31b-it - google/gemini-flash-latest - google/gemini-flash-lite-latest - google/gemini-pro-latest - google/gemini-2.5-flash-lite - google/gemini-2.5-flash-image - - google/gemini-2.5-flash-lite-preview-09-2025 - google/gemini-3-pro-preview - google/gemini-3-flash-preview - google/gemini-3.1-pro-preview @@ -33,42 +43,77 @@ providers: - google/gemini-3-pro-image-preview - google/nano-banana-pro-preview - google/gemini-3.1-flash-image-preview + - google/lyria-3-clip-preview + - google/lyria-3-pro-preview - google/gemini-robotics-er-1.5-preview - google/gemini-2.5-computer-use-preview-10-2025 - google/deep-research-pro-preview-12-2025 - amazon: - - amazon/amazon.nova-pro-v1:0 - - amazon/amazon.nova-2-lite-v1:0 - - amazon/amazon.nova-2-sonic-v1:0 - - amazon/amazon.titan-tg1-large - - amazon/amazon.nova-premier-v1:0:8k - - amazon/amazon.nova-premier-v1:0:20k - - amazon/amazon.nova-premier-v1:0:1000k - - amazon/amazon.nova-premier-v1:0:mm - - amazon/amazon.nova-premier-v1:0 - - amazon/amazon.nova-lite-v1:0 - - amazon/amazon.nova-micro-v1:0 - x-ai: - - x-ai/grok-3 - - x-ai/grok-3-mini - - x-ai/grok-4-0709 - - x-ai/grok-4-1-fast-non-reasoning - - x-ai/grok-4-1-fast-reasoning - - x-ai/grok-4-fast-non-reasoning - - x-ai/grok-4-fast-reasoning - - x-ai/grok-4.20-beta-0309-non-reasoning - - x-ai/grok-4.20-beta-0309-reasoning - - x-ai/grok-4.20-multi-agent-beta-0309 - - x-ai/grok-code-fast-1 - - x-ai/grok-imagine-image - - x-ai/grok-imagine-video - z-ai: - - z-ai/glm-4.5 - - z-ai/glm-4.5-air - - z-ai/glm-4.6 - - z-ai/glm-4.7 - - z-ai/glm-5 + mistralai: + - mistralai/mistral-medium-2505 + - mistralai/mistral-medium-2508 + - mistralai/mistral-medium-latest + - mistralai/mistral-medium + - mistralai/mistral-vibe-cli-with-tools + - mistralai/open-mistral-nemo + - mistralai/open-mistral-nemo-2407 + - mistralai/mistral-tiny-2407 + - mistralai/mistral-tiny-latest + - mistralai/codestral-2508 + - mistralai/codestral-latest + - mistralai/devstral-2512 + - mistralai/mistral-vibe-cli-latest + - mistralai/devstral-medium-latest + - mistralai/devstral-latest + - mistralai/mistral-small-2603 + - mistralai/mistral-small-latest + - mistralai/mistral-vibe-cli-fast + - mistralai/mistral-small-2506 + - mistralai/magistral-medium-2509 + - mistralai/magistral-medium-latest + - mistralai/magistral-small-2509 + - mistralai/magistral-small-latest + - mistralai/labs-leanstral-2603 + - mistralai/mistral-large-2512 + - mistralai/mistral-large-latest + - mistralai/ministral-3b-2512 + - mistralai/ministral-3b-latest + - mistralai/ministral-8b-2512 + - mistralai/ministral-8b-latest + - mistralai/ministral-14b-2512 + - mistralai/ministral-14b-latest + - mistralai/mistral-large-2411 + - mistralai/pixtral-large-2411 + - mistralai/pixtral-large-latest + - mistralai/mistral-large-pixtral-2411 + - mistralai/devstral-small-2507 + - mistralai/devstral-medium-2507 + - mistralai/labs-mistral-small-creative + - mistralai/mistral-embed-2312 + - mistralai/mistral-embed + - mistralai/codestral-embed + - mistralai/codestral-embed-2505 + anthropic: + - anthropic/claude-sonnet-4-6 + - anthropic/claude-opus-4-6 + - anthropic/claude-opus-4-5-20251101 + - anthropic/claude-opus-4-5 + - anthropic/claude-haiku-4-5-20251001 + - anthropic/claude-haiku-4-5 + - anthropic/claude-sonnet-4-5-20250929 + - anthropic/claude-sonnet-4-5 + - anthropic/claude-opus-4-1-20250805 + - anthropic/claude-opus-4-1 + - anthropic/claude-opus-4-20250514 + - anthropic/claude-opus-4 + - anthropic/claude-sonnet-4-20250514 + - anthropic/claude-sonnet-4 + - anthropic/claude-3-haiku-20240307 + - anthropic/claude-3-haiku qwen: + - qwen/qwen3.6-plus-2026-04-02 + - qwen/qwen3.6-plus + - qwen/wan2.7-image + - qwen/deepseek-v3.2 - qwen/qwen3-asr-flash-2026-02-10 - qwen/qwen3.5-flash-2026-02-23 - qwen/qwen3.5-flash @@ -160,96 +205,40 @@ providers: - qwen/qwen-max - qwen/qwen-plus - qwen/qwen-turbo - mistralai: - - mistralai/mistral-medium-2505 - - mistralai/mistral-medium-2508 - - mistralai/mistral-medium-latest - - mistralai/mistral-medium - - mistralai/mistral-vibe-cli-with-tools - - mistralai/open-mistral-nemo - - mistralai/open-mistral-nemo-2407 - - mistralai/mistral-tiny-2407 - - mistralai/mistral-tiny-latest - - mistralai/codestral-2508 - - mistralai/codestral-latest - - mistralai/devstral-2512 - - mistralai/mistral-vibe-cli-latest - - mistralai/devstral-medium-latest - - mistralai/devstral-latest - - mistralai/mistral-small-2506 - - mistralai/mistral-small-latest - - mistralai/labs-mistral-small-creative - - mistralai/magistral-medium-2509 - - mistralai/magistral-medium-latest - - mistralai/magistral-small-2509 - - mistralai/magistral-small-latest - - mistralai/mistral-large-2512 - - mistralai/mistral-large-latest - - mistralai/ministral-3b-2512 - - mistralai/ministral-3b-latest - - mistralai/ministral-8b-2512 - - mistralai/ministral-8b-latest - - mistralai/ministral-14b-2512 - - mistralai/ministral-14b-latest - - mistralai/mistral-large-2411 - - mistralai/pixtral-large-2411 - - mistralai/pixtral-large-latest - - mistralai/mistral-large-pixtral-2411 - - mistralai/devstral-small-2507 - - mistralai/devstral-medium-2507 - - mistralai/labs-devstral-small-2512 - - mistralai/devstral-small-latest - - mistralai/mistral-squarepoint-2602 - - mistralai/mistral-embed-2312 - - mistralai/mistral-embed - - mistralai/codestral-embed - - mistralai/codestral-embed-2505 - moonshotai: - - moonshotai/kimi-k2.5 - - moonshotai/kimi-k2-0905-preview - - moonshotai/moonshot-v1-32k - - moonshotai/moonshot-v1-128k - - moonshotai/kimi-k2-thinking-turbo - - moonshotai/moonshot-v1-8k-vision-preview - - moonshotai/kimi-k2-0711-preview - - moonshotai/moonshot-v1-auto - - moonshotai/kimi-k2-thinking - - moonshotai/moonshot-v1-128k-vision-preview - - moonshotai/kimi-k2-turbo-preview - - moonshotai/moonshot-v1-32k-vision-preview - - moonshotai/moonshot-v1-8k - anthropic: - - anthropic/claude-sonnet-4-6 - - anthropic/claude-opus-4-6 - - anthropic/claude-opus-4-5-20251101 - - anthropic/claude-opus-4-5 - - anthropic/claude-haiku-4-5-20251001 - - anthropic/claude-haiku-4-5 - - anthropic/claude-sonnet-4-5-20250929 - - anthropic/claude-sonnet-4-5 - - anthropic/claude-opus-4-1-20250805 - - anthropic/claude-opus-4-1 - - anthropic/claude-opus-4-20250514 - - anthropic/claude-opus-4 - - anthropic/claude-sonnet-4-20250514 - - anthropic/claude-sonnet-4 - - anthropic/claude-3-haiku-20240307 - - anthropic/claude-3-haiku + z-ai: + - z-ai/glm-4.5 + - z-ai/glm-4.5-air + - z-ai/glm-4.6 + - z-ai/glm-4.7 + - z-ai/glm-5 + - z-ai/glm-5-turbo + - z-ai/glm-5.1 + x-ai: + - x-ai/grok-3 + - x-ai/grok-3-mini + - x-ai/grok-4-0709 + - x-ai/grok-4-1-fast-non-reasoning + - x-ai/grok-4-1-fast-reasoning + - x-ai/grok-4-fast-non-reasoning + - x-ai/grok-4-fast-reasoning + - x-ai/grok-4.20-0309-non-reasoning + - x-ai/grok-4.20-0309-reasoning + - x-ai/grok-4.20-multi-agent-0309 + - x-ai/grok-code-fast-1 + - x-ai/grok-imagine-image + - x-ai/grok-imagine-video openai: - openai/gpt-4-0613 - openai/gpt-4 - openai/gpt-3.5-turbo + - openai/gpt-5.4-mini - openai/gpt-5.4 - - openai/gpt-5.3-chat-latest - - openai/gpt-5.4-2026-03-05 - - openai/gpt-5.4-pro - - openai/gpt-5.4-pro-2026-03-05 + - openai/gpt-5.4-nano-2026-03-17 + - openai/gpt-5.4-nano + - openai/gpt-5.4-mini-2026-03-17 - openai/gpt-3.5-turbo-instruct - openai/gpt-3.5-turbo-instruct-0914 - - openai/gpt-4-1106-preview - openai/gpt-3.5-turbo-1106 - - openai/gpt-4-0125-preview - - openai/gpt-4-turbo-preview - openai/gpt-3.5-turbo-0125 - openai/gpt-4-turbo - openai/gpt-4-turbo-2024-04-09 @@ -312,9 +301,34 @@ providers: - openai/gpt-5.3-codex - openai/gpt-4o-search-preview - openai/gpt-4o-search-preview-2025-03-11 + - openai/gpt-5.3-chat-latest + - openai/gpt-5.4-2026-03-05 + - openai/gpt-5.4-pro + - openai/gpt-5.4-pro-2026-03-05 - openai/gpt-3.5-turbo-16k - openai/ft:gpt-3.5-turbo-0613:katanemo::8CMZbm0P + deepseek: + - deepseek/deepseek-chat + - deepseek/deepseek-reasoner + moonshotai: + - moonshotai/kimi-k2-thinking + - moonshotai/moonshot-v1-auto + - moonshotai/moonshot-v1-32k-vision-preview + - moonshotai/moonshot-v1-128k + - moonshotai/kimi-k2-turbo-preview + - moonshotai/kimi-k2-0905-preview + - moonshotai/moonshot-v1-128k-vision-preview + - moonshotai/moonshot-v1-32k + - moonshotai/moonshot-v1-8k-vision-preview + - moonshotai/kimi-k2.5 + - moonshotai/moonshot-v1-8k + - moonshotai/kimi-k2-thinking-turbo + - moonshotai/kimi-k2-0711-preview + xiaomi: + - xiaomi/mimo-v2-flash + - xiaomi/mimo-v2-omni + - xiaomi/mimo-v2-pro metadata: - total_providers: 10 - total_models: 303 - last_updated: 2026-03-15T16:47:22.207197+00:00 + total_providers: 11 + total_models: 316 + last_updated: 2026-04-03T23:14:46.956158+00:00 diff --git a/crates/hermesllm/src/providers/id.rs b/crates/hermesllm/src/providers/id.rs index 9f5f42c9..c410bd78 100644 --- a/crates/hermesllm/src/providers/id.rs +++ b/crates/hermesllm/src/providers/id.rs @@ -28,6 +28,7 @@ fn load_provider_models() -> &'static HashMap> { #[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 { 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"), diff --git a/docs/source/concepts/llm_providers/supported_providers.rst b/docs/source/concepts/llm_providers/supported_providers.rst index e09061e7..87163d3b 100644 --- a/docs/source/concepts/llm_providers/supported_providers.rst +++ b/docs/source/concepts/llm_providers/supported_providers.rst @@ -496,6 +496,51 @@ Zhipu AI - model: zhipu/glm-4.5-air access_key: $ZHIPU_API_KEY +Xiaomi MiMo +~~~~~~~~~~~ + +**Provider Prefix:** ``xiaomi/`` + +**API Endpoint:** ``/v1/chat/completions`` + +**Authentication:** API Key - Create your key in the `Xiaomi MiMo API Open Platform `_ and set ``MIMO_API_KEY``. + +**Supported Chat Models:** All Xiaomi MiMo chat models including mimo-v2-pro, mimo-v2-omni, mimo-v2-flash, and future chat model releases. + +.. list-table:: + :header-rows: 1 + :widths: 30 20 50 + + * - Model Name + - Model ID for Config + - Description + * - MiMo V2 Pro + - ``xiaomi/mimo-v2-pro`` + - Highest capability general model + * - MiMo V2 Omni + - ``xiaomi/mimo-v2-omni`` + - Multimodal-capable assistant model + * - MiMo V2 Flash + - ``xiaomi/mimo-v2-flash`` + - Faster, lower-latency model + +**Configuration Examples:** + +.. code-block:: yaml + + llm_providers: + # Configure all known Xiaomi models with wildcard expansion + - model: xiaomi/* + access_key: $MIMO_API_KEY + + # Or configure specific models + - model: xiaomi/mimo-v2-pro + access_key: $MIMO_API_KEY + default: true + + - model: xiaomi/mimo-v2-omni + access_key: $MIMO_API_KEY + Providers Requiring Base URL ---------------------------- @@ -733,7 +778,7 @@ Automatically configure all available models from a provider using wildcard patt **How Wildcards Work:** -1. **Known Providers** (OpenAI, Anthropic, DeepSeek, Mistral, Groq, Gemini, Together AI, xAI, Moonshot, Zhipu): +1. **Known Providers** (OpenAI, Anthropic, DeepSeek, Mistral, Groq, Gemini, Together AI, xAI, Moonshot, Zhipu, Xiaomi): - Expands at config load time to all models in Plano's provider registry - Creates entries for both canonical (``openai/gpt-4``) and short names (``gpt-4``)