Adds first-class Xiaomi Token Plan provider support with regional onboarding/configuration, token-plan key prefix validation, runtime pricing/catalog metadata, and docs/test coverage. Keeps Token Plan model catalog discovery runtime-owned so region-specific base URLs are required and the provider cannot silently fall back to the static SGP manifest catalog. Fixes #86169. Verification: - node scripts/run-vitest.mjs src/plugins/provider-discovery.runtime.test.ts extensions/xiaomi/index.test.ts src/plugins/manifest-model-catalog.test.ts src/model-catalog/manifest-planner.test.ts - git diff --check - autoreview --mode local: clean, no accepted/actionable findings - CI run 26678998539: all relevant checks passed; check-prod-types failed on unrelated browser unused-function issue already present on origin/main Co-authored-by: NianJiuZst <3235467914@qq.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
11 KiB
summary, read_when, title
| summary | read_when | title | ||
|---|---|---|---|---|
| Use Xiaomi MiMo pay-as-you-go and Token Plan models with OpenClaw |
|
Xiaomi MiMo |
Xiaomi MiMo is the API platform for MiMo models. OpenClaw includes a bundled Xiaomi plugin with two text-provider presets:
xiaomifor pay-as-you-go keys (sk-...)xiaomi-token-planfor Token Plan keys (tp-...) with regional endpoint presets
The same plugin also registers the xiaomi speech (TTS) provider.
| Property | Value |
|---|---|
| Provider ids | xiaomi (pay-as-you-go), xiaomi-token-plan (Token Plan) |
| Plugin | bundled, enabledByDefault: true |
| Auth env vars | XIAOMI_API_KEY, XIAOMI_TOKEN_PLAN_API_KEY |
| Onboarding flags | --auth-choice xiaomi-api-key, --auth-choice xiaomi-token-plan-cn, --auth-choice xiaomi-token-plan-sgp, --auth-choice xiaomi-token-plan-ams |
| Direct CLI flags | --xiaomi-api-key <key>, --xiaomi-token-plan-api-key <key> |
| Contracts | chat completions + speechProviders |
| API | OpenAI-compatible (openai-completions) |
| Base URLs | Pay-as-you-go: https://api.xiaomimimo.com/v1; Token Plan presets: token-plan-{cn,sgp,ams}... |
| Default models | xiaomi/mimo-v2-flash, xiaomi-token-plan/mimo-v2.5-pro |
| TTS default | mimo-v2.5-tts, voice mimo_default |
Getting started
Create a pay-as-you-go key in the [Xiaomi MiMo console](https://platform.xiaomimimo.com/#/console/api-keys), or open your Token Plan subscription page and copy the regional OpenAI-compatible base URL plus the matching `tp-...` key. Pay-as-you-go:```bash
openclaw onboard --auth-choice xiaomi-api-key
```
Token Plan:
```bash
openclaw onboard --auth-choice xiaomi-token-plan-sgp
```
Or pass the keys directly:
```bash
openclaw onboard --auth-choice xiaomi-api-key --xiaomi-api-key "$XIAOMI_API_KEY"
openclaw onboard --auth-choice xiaomi-token-plan-sgp --xiaomi-token-plan-api-key "$XIAOMI_TOKEN_PLAN_API_KEY"
```
```bash
openclaw models list --provider xiaomi
openclaw models list --provider xiaomi-token-plan
```
Pay-as-you-go catalog
| Model ref | Input | Context | Max output | Reasoning | Notes |
|---|---|---|---|---|---|
xiaomi/mimo-v2-flash |
text | 262,144 | 8,192 | No | Default model |
xiaomi/mimo-v2-pro |
text | 1,048,576 | 32,000 | Yes | Large context |
xiaomi/mimo-v2-omni |
text, image | 262,144 | 32,000 | Yes | Multimodal |
Token Plan catalog
Choose the Token Plan auth choice that matches the regional base URL shown in Xiaomi's subscription UI:
xiaomi-token-plan-cn->https://token-plan-cn.xiaomimimo.com/v1xiaomi-token-plan-sgp->https://token-plan-sgp.xiaomimimo.com/v1xiaomi-token-plan-ams->https://token-plan-ams.xiaomimimo.com/v1
| Model ref | Input | Context | Max output | Reasoning | Notes |
|---|---|---|---|---|---|
xiaomi-token-plan/mimo-v2.5-pro |
text | 1,048,576 | 32,000 | Yes | Default model |
xiaomi-token-plan/mimo-v2.5 |
text, image | 1,048,576 | 32,000 | Yes | Multimodal |
Text-to-speech
The bundled xiaomi plugin also registers Xiaomi MiMo as a speech provider for
messages.tts. It calls Xiaomi's chat-completions TTS contract with the text as
an assistant message and optional style guidance as a user message.
| Property | Value |
|---|---|
| TTS id | xiaomi (mimo alias) |
| Auth | XIAOMI_API_KEY |
| API | POST /v1/chat/completions with audio |
| Default | mimo-v2.5-tts, voice mimo_default |
| Output | MP3 by default; WAV when configured |
{
messages: {
tts: {
auto: "always",
provider: "xiaomi",
providers: {
xiaomi: {
apiKey: "xiaomi_api_key",
model: "mimo-v2.5-tts",
speakerVoice: "mimo_default",
format: "mp3",
style: "Bright, natural, conversational tone.",
},
},
},
},
}
Supported built-in voices include mimo_default, default_zh, default_en,
Mia, Chloe, Milo, and Dean. mimo-v2-tts is supported for older MiMo
TTS accounts; the default uses the current MiMo-V2.5 TTS model. For voice-note
targets such as Feishu and Telegram, OpenClaw transcodes Xiaomi output to 48kHz
Opus with ffmpeg before delivery.
Config example
{
env: { XIAOMI_API_KEY: "your-key" },
agents: { defaults: { model: { primary: "xiaomi/mimo-v2-flash" } } },
models: {
mode: "merge",
providers: {
xiaomi: {
baseUrl: "https://api.xiaomimimo.com/v1",
api: "openai-completions",
apiKey: "XIAOMI_API_KEY",
models: [
{
id: "mimo-v2-flash",
name: "Xiaomi MiMo V2 Flash",
reasoning: false,
input: ["text"],
contextWindow: 262144,
maxTokens: 8192,
},
{
id: "mimo-v2-pro",
name: "Xiaomi MiMo V2 Pro",
reasoning: true,
input: ["text"],
contextWindow: 1048576,
maxTokens: 32000,
},
{
id: "mimo-v2-omni",
name: "Xiaomi MiMo V2 Omni",
reasoning: true,
input: ["text", "image"],
contextWindow: 262144,
maxTokens: 32000,
},
],
},
},
},
}
Pricing and compat flags come from the bundled plugin manifest, so the config example omits cost and compat to avoid diverging from runtime behavior.
Token Plan:
{
env: { XIAOMI_TOKEN_PLAN_API_KEY: "tp-your-key" },
agents: { defaults: { model: { primary: "xiaomi-token-plan/mimo-v2.5-pro" } } },
models: {
mode: "merge",
providers: {
"xiaomi-token-plan": {
baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1",
api: "openai-completions",
apiKey: "XIAOMI_TOKEN_PLAN_API_KEY",
models: [
{
id: "mimo-v2.5-pro",
name: "Xiaomi MiMo V2.5 Pro",
reasoning: true,
input: ["text"],
contextWindow: 1048576,
maxTokens: 32000,
},
{
id: "mimo-v2.5",
name: "Xiaomi MiMo V2.5",
reasoning: true,
input: ["text", "image"],
contextWindow: 1048576,
maxTokens: 32000,
},
],
},
},
},
}
Pricing comes from the bundled manifest (Token Plan models include tiered cache-read pricing), so the config example omits cost.
<Note>
Pay-as-you-go models use the `xiaomi/` prefix. Token Plan models use the `xiaomi-token-plan/` prefix.
</Note>
- If models do not appear, confirm the relevant key env var or auth profile is present and valid.
- For Token Plan, confirm the chosen onboarding region matches the subscription page base URL and that the key starts with `tp-`.
- When the Gateway runs as a daemon, ensure the key is available to that process (for example in `~/.openclaw/.env` or via `env.shellEnv`).
<Warning>
Keys set only in your interactive shell are not visible to daemon-managed gateway processes. Use `~/.openclaw/.env` or `env.shellEnv` config for persistent availability.
</Warning>