Add first-class Xiaomi provider support (#863)
Some checks failed
CI / pre-commit (push) Has been cancelled
CI / plano-tools-tests (push) Has been cancelled
CI / native-smoke-test (push) Has been cancelled
CI / docker-build (push) Has been cancelled
CI / validate-config (push) Has been cancelled
CI / security-scan (push) Has been cancelled
CI / test-prompt-gateway (push) Has been cancelled
CI / test-model-alias-routing (push) Has been cancelled
CI / test-responses-api-with-state (push) Has been cancelled
CI / e2e-plano-tests (3.10) (push) Has been cancelled
CI / e2e-plano-tests (3.11) (push) Has been cancelled
CI / e2e-plano-tests (3.12) (push) Has been cancelled
CI / e2e-plano-tests (3.13) (push) Has been cancelled
CI / e2e-plano-tests (3.14) (push) Has been cancelled
CI / e2e-demo-preference (push) Has been cancelled
CI / e2e-demo-currency (push) Has been cancelled
Publish docker image (latest) / build-arm64 (push) Has been cancelled
Publish docker image (latest) / build-amd64 (push) Has been cancelled
Publish docker image (latest) / create-manifest (push) Has been cancelled
Build and Deploy Documentation / build (push) Has been cancelled

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

* feat(demos): add xiaomi mimo integration demo

* refactor(demos): remove Xiaomi MiMo integration demo and update documentation

* updating model list and adding the xiamoi models

---------

Co-authored-by: Salman Paracha <salmanparacha@MacBook-Pro-389.local>
This commit is contained in:
Musa 2026-04-04 12:58:36 -04:00 committed by GitHub
parent 9406af3a09
commit 978b1ea722
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 226 additions and 122 deletions

View file

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

View file

@ -901,6 +901,33 @@ static_resources:
validation_context: validation_context:
trusted_ca: trusted_ca:
filename: {{ upstream_tls_ca_path | default('/etc/ssl/certs/ca-certificates.crt') }} 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 - name: mistral_7b_instruct
connect_timeout: 0.5s connect_timeout: 0.5s
type: STRICT_DNS type: STRICT_DNS

View file

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

View file

@ -339,6 +339,8 @@ pub enum LlmProviderType {
Mistral, Mistral,
#[serde(rename = "openai")] #[serde(rename = "openai")]
OpenAI, OpenAI,
#[serde(rename = "xiaomi")]
Xiaomi,
#[serde(rename = "gemini")] #[serde(rename = "gemini")]
Gemini, Gemini,
#[serde(rename = "xai")] #[serde(rename = "xai")]
@ -370,6 +372,7 @@ impl Display for LlmProviderType {
LlmProviderType::Gemini => write!(f, "gemini"), LlmProviderType::Gemini => write!(f, "gemini"),
LlmProviderType::Mistral => write!(f, "mistral"), LlmProviderType::Mistral => write!(f, "mistral"),
LlmProviderType::OpenAI => write!(f, "openai"), LlmProviderType::OpenAI => write!(f, "openai"),
LlmProviderType::Xiaomi => write!(f, "xiaomi"),
LlmProviderType::XAI => write!(f, "xai"), LlmProviderType::XAI => write!(f, "xai"),
LlmProviderType::TogetherAI => write!(f, "together_ai"), LlmProviderType::TogetherAI => write!(f, "together_ai"),
LlmProviderType::AzureOpenAI => write!(f, "azure_openai"), 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", "https://open.bigmodel.cn/api/paas/v4/models",
"z-ai", "z-ai",
), ),
(
"xiaomi",
"MIMO_API_KEY",
"https://api.xiaomimimo.com/v1/models",
"xiaomi",
),
]; ];
// Fetch from OpenAI-compatible providers // Fetch from OpenAI-compatible providers

View file

@ -1,9 +1,18 @@
version: '1.0' version: '1.0'
source: canonical-apis source: canonical-apis
providers: providers:
deepseek: amazon:
- deepseek/deepseek-chat - amazon/amazon.nova-pro-v1:0
- deepseek/deepseek-reasoner - 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:
- google/gemini-2.5-flash - google/gemini-2.5-flash
- google/gemini-2.5-pro - google/gemini-2.5-pro
@ -19,12 +28,13 @@ providers:
- google/gemma-3-27b-it - google/gemma-3-27b-it
- google/gemma-3n-e4b-it - google/gemma-3n-e4b-it
- google/gemma-3n-e2b-it - google/gemma-3n-e2b-it
- google/gemma-4-26b-a4b-it
- google/gemma-4-31b-it
- google/gemini-flash-latest - google/gemini-flash-latest
- google/gemini-flash-lite-latest - google/gemini-flash-lite-latest
- google/gemini-pro-latest - google/gemini-pro-latest
- google/gemini-2.5-flash-lite - google/gemini-2.5-flash-lite
- google/gemini-2.5-flash-image - google/gemini-2.5-flash-image
- google/gemini-2.5-flash-lite-preview-09-2025
- google/gemini-3-pro-preview - google/gemini-3-pro-preview
- google/gemini-3-flash-preview - google/gemini-3-flash-preview
- google/gemini-3.1-pro-preview - google/gemini-3.1-pro-preview
@ -33,42 +43,77 @@ providers:
- google/gemini-3-pro-image-preview - google/gemini-3-pro-image-preview
- google/nano-banana-pro-preview - google/nano-banana-pro-preview
- google/gemini-3.1-flash-image-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-robotics-er-1.5-preview
- google/gemini-2.5-computer-use-preview-10-2025 - google/gemini-2.5-computer-use-preview-10-2025
- google/deep-research-pro-preview-12-2025 - google/deep-research-pro-preview-12-2025
amazon: mistralai:
- amazon/amazon.nova-pro-v1:0 - mistralai/mistral-medium-2505
- amazon/amazon.nova-2-lite-v1:0 - mistralai/mistral-medium-2508
- amazon/amazon.nova-2-sonic-v1:0 - mistralai/mistral-medium-latest
- amazon/amazon.titan-tg1-large - mistralai/mistral-medium
- amazon/amazon.nova-premier-v1:0:8k - mistralai/mistral-vibe-cli-with-tools
- amazon/amazon.nova-premier-v1:0:20k - mistralai/open-mistral-nemo
- amazon/amazon.nova-premier-v1:0:1000k - mistralai/open-mistral-nemo-2407
- amazon/amazon.nova-premier-v1:0:mm - mistralai/mistral-tiny-2407
- amazon/amazon.nova-premier-v1:0 - mistralai/mistral-tiny-latest
- amazon/amazon.nova-lite-v1:0 - mistralai/codestral-2508
- amazon/amazon.nova-micro-v1:0 - mistralai/codestral-latest
x-ai: - mistralai/devstral-2512
- x-ai/grok-3 - mistralai/mistral-vibe-cli-latest
- x-ai/grok-3-mini - mistralai/devstral-medium-latest
- x-ai/grok-4-0709 - mistralai/devstral-latest
- x-ai/grok-4-1-fast-non-reasoning - mistralai/mistral-small-2603
- x-ai/grok-4-1-fast-reasoning - mistralai/mistral-small-latest
- x-ai/grok-4-fast-non-reasoning - mistralai/mistral-vibe-cli-fast
- x-ai/grok-4-fast-reasoning - mistralai/mistral-small-2506
- x-ai/grok-4.20-beta-0309-non-reasoning - mistralai/magistral-medium-2509
- x-ai/grok-4.20-beta-0309-reasoning - mistralai/magistral-medium-latest
- x-ai/grok-4.20-multi-agent-beta-0309 - mistralai/magistral-small-2509
- x-ai/grok-code-fast-1 - mistralai/magistral-small-latest
- x-ai/grok-imagine-image - mistralai/labs-leanstral-2603
- x-ai/grok-imagine-video - mistralai/mistral-large-2512
z-ai: - mistralai/mistral-large-latest
- z-ai/glm-4.5 - mistralai/ministral-3b-2512
- z-ai/glm-4.5-air - mistralai/ministral-3b-latest
- z-ai/glm-4.6 - mistralai/ministral-8b-2512
- z-ai/glm-4.7 - mistralai/ministral-8b-latest
- z-ai/glm-5 - 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:
- 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-asr-flash-2026-02-10
- qwen/qwen3.5-flash-2026-02-23 - qwen/qwen3.5-flash-2026-02-23
- qwen/qwen3.5-flash - qwen/qwen3.5-flash
@ -160,96 +205,40 @@ providers:
- qwen/qwen-max - qwen/qwen-max
- qwen/qwen-plus - qwen/qwen-plus
- qwen/qwen-turbo - qwen/qwen-turbo
mistralai: z-ai:
- mistralai/mistral-medium-2505 - z-ai/glm-4.5
- mistralai/mistral-medium-2508 - z-ai/glm-4.5-air
- mistralai/mistral-medium-latest - z-ai/glm-4.6
- mistralai/mistral-medium - z-ai/glm-4.7
- mistralai/mistral-vibe-cli-with-tools - z-ai/glm-5
- mistralai/open-mistral-nemo - z-ai/glm-5-turbo
- mistralai/open-mistral-nemo-2407 - z-ai/glm-5.1
- mistralai/mistral-tiny-2407 x-ai:
- mistralai/mistral-tiny-latest - x-ai/grok-3
- mistralai/codestral-2508 - x-ai/grok-3-mini
- mistralai/codestral-latest - x-ai/grok-4-0709
- mistralai/devstral-2512 - x-ai/grok-4-1-fast-non-reasoning
- mistralai/mistral-vibe-cli-latest - x-ai/grok-4-1-fast-reasoning
- mistralai/devstral-medium-latest - x-ai/grok-4-fast-non-reasoning
- mistralai/devstral-latest - x-ai/grok-4-fast-reasoning
- mistralai/mistral-small-2506 - x-ai/grok-4.20-0309-non-reasoning
- mistralai/mistral-small-latest - x-ai/grok-4.20-0309-reasoning
- mistralai/labs-mistral-small-creative - x-ai/grok-4.20-multi-agent-0309
- mistralai/magistral-medium-2509 - x-ai/grok-code-fast-1
- mistralai/magistral-medium-latest - x-ai/grok-imagine-image
- mistralai/magistral-small-2509 - x-ai/grok-imagine-video
- 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
openai: openai:
- openai/gpt-4-0613 - openai/gpt-4-0613
- openai/gpt-4 - openai/gpt-4
- openai/gpt-3.5-turbo - openai/gpt-3.5-turbo
- openai/gpt-5.4-mini
- openai/gpt-5.4 - openai/gpt-5.4
- openai/gpt-5.3-chat-latest - openai/gpt-5.4-nano-2026-03-17
- openai/gpt-5.4-2026-03-05 - openai/gpt-5.4-nano
- openai/gpt-5.4-pro - openai/gpt-5.4-mini-2026-03-17
- openai/gpt-5.4-pro-2026-03-05
- openai/gpt-3.5-turbo-instruct - openai/gpt-3.5-turbo-instruct
- openai/gpt-3.5-turbo-instruct-0914 - openai/gpt-3.5-turbo-instruct-0914
- openai/gpt-4-1106-preview
- openai/gpt-3.5-turbo-1106 - openai/gpt-3.5-turbo-1106
- openai/gpt-4-0125-preview
- openai/gpt-4-turbo-preview
- openai/gpt-3.5-turbo-0125 - openai/gpt-3.5-turbo-0125
- openai/gpt-4-turbo - openai/gpt-4-turbo
- openai/gpt-4-turbo-2024-04-09 - openai/gpt-4-turbo-2024-04-09
@ -312,9 +301,34 @@ providers:
- openai/gpt-5.3-codex - openai/gpt-5.3-codex
- openai/gpt-4o-search-preview - openai/gpt-4o-search-preview
- openai/gpt-4o-search-preview-2025-03-11 - 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/gpt-3.5-turbo-16k
- openai/ft:gpt-3.5-turbo-0613:katanemo::8CMZbm0P - 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: metadata:
total_providers: 10 total_providers: 11
total_models: 303 total_models: 316
last_updated: 2026-03-15T16:47:22.207197+00:00 last_updated: 2026-04-03T23:14:46.956158+00:00

View file

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

View file

@ -496,6 +496,51 @@ Zhipu AI
- model: zhipu/glm-4.5-air - model: zhipu/glm-4.5-air
access_key: $ZHIPU_API_KEY 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 <https://platform.xiaomimimo.com/#/docs/quick-start/model-hyperparameters>`_ 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 Providers Requiring Base URL
---------------------------- ----------------------------
@ -733,7 +778,7 @@ Automatically configure all available models from a provider using wildcard patt
**How Wildcards Work:** **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 - 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``) - Creates entries for both canonical (``openai/gpt-4``) and short names (``gpt-4``)