diff --git a/docs/concepts/model-providers/official-provider-plugins.md b/docs/concepts/model-providers/official-provider-plugins.md index 9266cb5a4a2c..341711f77f32 100644 --- a/docs/concepts/model-providers/official-provider-plugins.md +++ b/docs/concepts/model-providers/official-provider-plugins.md @@ -185,36 +185,36 @@ messages and normalizes `stats.cached` into `cacheRead`; legacy ### Other bundled provider plugins -| Provider | Id | Auth env | Example model | -| --------------------------------------- | -------------------------------- | ---------------------------------------------- | ------------------------------------------------------ | -| [Arcee](/providers/arcee) | `arcee` | `ARCEEAI_API_KEY` or `OPENROUTER_API_KEY` | `arcee/trinity-large-thinking` | -| BytePlus | `byteplus` / `byteplus-plan` | `BYTEPLUS_API_KEY` | `byteplus-plan/ark-code-latest` | -| Cerebras | `cerebras` | `CEREBRAS_API_KEY` | `cerebras/zai-glm-4.7` | -| Chutes | `chutes` | `CHUTES_API_KEY` or `CHUTES_OAUTH_TOKEN` | `chutes/zai-org/GLM-5-TEE` | -| ClawRouter | `clawrouter` | `CLAWROUTER_API_KEY` | `clawrouter/anthropic/claude-sonnet-4-6` | -| Cohere | `cohere` | `COHERE_API_KEY` | `cohere/command-a-plus-05-2026` | -| DeepInfra | `deepinfra` | `DEEPINFRA_API_KEY` | `deepinfra/deepseek-ai/DeepSeek-V4-Flash` | -| DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` | `deepseek/deepseek-v4-flash` | -| Featherless AI | `featherless` | `FEATHERLESS_API_KEY` | `featherless/Qwen/Qwen3-32B` | -| GitHub Copilot | `github-copilot` | `COPILOT_GITHUB_TOKEN` | - | -| GMI Cloud | `gmi` | `GMI_API_KEY` | `gmi/google/gemini-3.1-flash-lite` | -| Groq | `groq` | `GROQ_API_KEY` | `groq/llama-3.3-70b-versatile` | -| Hugging Face Inference | `huggingface` | `HUGGINGFACE_HUB_TOKEN` or `HF_TOKEN` | `huggingface/deepseek-ai/DeepSeek-R1` | -| MiniMax | `minimax` / `minimax-portal` | `MINIMAX_API_KEY` / `MINIMAX_OAUTH_TOKEN` | `minimax/MiniMax-M3` | -| Mistral | `mistral` | `MISTRAL_API_KEY` | `mistral/mistral-large-latest` | -| Moonshot | `moonshot` | `MOONSHOT_API_KEY` | `moonshot/kimi-k2.6` | -| NVIDIA | `nvidia` | `NVIDIA_API_KEY` | `nvidia/nvidia/nemotron-3-ultra-550b-a55b` | -| NovitaAI | `novita` | `NOVITA_API_KEY` | `novita/deepseek/deepseek-v3-0324` | -| [Ollama Cloud](/providers/ollama-cloud) | `ollama-cloud` | `OLLAMA_API_KEY` | `ollama-cloud/kimi-k2.6` | -| OpenRouter | `openrouter` | OpenRouter OAuth or `OPENROUTER_API_KEY` | `openrouter/auto` | -| Qianfan | `qianfan` | `QIANFAN_API_KEY` | `qianfan/deepseek-v3.2` | -| Tencent TokenHub | `tencent-tokenhub` | `TOKENHUB_API_KEY` | `tencent-tokenhub/hy3-preview` | -| Together | `together` | `TOGETHER_API_KEY` | `together/meta-llama/Llama-3.3-70B-Instruct-Turbo` | -| Venice | `venice` | `VENICE_API_KEY` | - | -| Vercel AI Gateway | `vercel-ai-gateway` | `AI_GATEWAY_API_KEY` | `vercel-ai-gateway/anthropic/claude-opus-4.6` | -| Volcano Engine (Doubao) | `volcengine` / `volcengine-plan` | `VOLCANO_ENGINE_API_KEY` | `volcengine-plan/ark-code-latest` | -| xAI | `xai` | SuperGrok/X Premium OAuth or `XAI_API_KEY` | `xai/grok-4.7` | -| Xiaomi | `xiaomi` / `xiaomi-token-plan` | `XIAOMI_API_KEY` / `XIAOMI_TOKEN_PLAN_API_KEY` | `xiaomi/mimo-v2.5` / `xiaomi-token-plan/mimo-v2.5-pro` | +| Provider | Id | Auth env | Example model | +| --------------------------------------- | -------------------------------- | ---------------------------------------------- | ---------------------------------------------------------- | +| [Arcee](/providers/arcee) | `arcee` | `ARCEEAI_API_KEY` or `OPENROUTER_API_KEY` | `arcee/trinity-large-thinking` | +| BytePlus | `byteplus` / `byteplus-plan` | `BYTEPLUS_API_KEY` | `byteplus-plan/ark-code-latest` | +| Cerebras | `cerebras` | `CEREBRAS_API_KEY` | `cerebras/zai-glm-4.7` | +| Chutes | `chutes` | `CHUTES_API_KEY` or `CHUTES_OAUTH_TOKEN` | `chutes/zai-org/GLM-5-TEE` | +| ClawRouter | `clawrouter` | `CLAWROUTER_API_KEY` | `clawrouter/anthropic/claude-sonnet-4-6` | +| Cohere | `cohere` | `COHERE_API_KEY` | `cohere/command-a-plus-05-2026` | +| DeepInfra | `deepinfra` | `DEEPINFRA_API_KEY` | `deepinfra/deepseek-ai/DeepSeek-V4-Flash` | +| DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` | `deepseek/deepseek-v4-flash` | +| Featherless AI | `featherless` | `FEATHERLESS_API_KEY` | `featherless/Qwen/Qwen3-32B` | +| GitHub Copilot | `github-copilot` | `COPILOT_GITHUB_TOKEN` | - | +| GMI Cloud | `gmi` | `GMI_API_KEY` | `gmi/google/gemini-3.1-flash-lite` | +| Groq | `groq` | `GROQ_API_KEY` | `groq/llama-3.3-70b-versatile` | +| Hugging Face Inference | `huggingface` | `HUGGINGFACE_HUB_TOKEN` or `HF_TOKEN` | `huggingface/deepseek-ai/DeepSeek-R1` | +| MiniMax | `minimax` / `minimax-portal` | `MINIMAX_API_KEY` / `MINIMAX_OAUTH_TOKEN` | `minimax/MiniMax-M3` | +| Mistral | `mistral` | `MISTRAL_API_KEY` | `mistral/mistral-large-latest` | +| Moonshot | `moonshot` | `MOONSHOT_API_KEY` | `moonshot/kimi-k2.6` | +| NVIDIA | `nvidia` | `NVIDIA_API_KEY` | `nvidia/nvidia/nemotron-3-ultra-550b-a55b` | +| NovitaAI | `novita` | `NOVITA_API_KEY` | `novita/deepseek/deepseek-v3-0324` | +| [Ollama Cloud](/providers/ollama-cloud) | `ollama-cloud` | `OLLAMA_API_KEY` | `ollama-cloud/kimi-k2.6` | +| OpenRouter | `openrouter` | OpenRouter OAuth or `OPENROUTER_API_KEY` | `openrouter/auto` | +| Qianfan | `qianfan` | `QIANFAN_API_KEY` | `qianfan/deepseek-v3.2` | +| Tencent TokenHub | `tencent-tokenhub` | `TOKENHUB_API_KEY` | `tencent-tokenhub/hy3-preview` | +| Together | `together` | `TOGETHER_API_KEY` | `together/meta-llama/Llama-3.3-70B-Instruct-Turbo` | +| Venice | `venice` | `VENICE_API_KEY` | - | +| Vercel AI Gateway | `vercel-ai-gateway` | `AI_GATEWAY_API_KEY` | `vercel-ai-gateway/anthropic/claude-opus-4.6` | +| Volcano Engine (Doubao) | `volcengine` / `volcengine-plan` | `VOLCANO_ENGINE_API_KEY` | `volcengine-plan/ark-code-latest` | +| xAI | `xai` | SuperGrok/X Premium OAuth or `XAI_API_KEY` | `xai/grok-4.7` | +| Xiaomi | `xiaomi` / `xiaomi-token-plan` | `XIAOMI_API_KEY` / `XIAOMI_TOKEN_PLAN_API_KEY` | `xiaomi/mimo-v2.6-pro` / `xiaomi-token-plan/mimo-v2.6-pro` | #### Quirks worth knowing diff --git a/docs/help/faq/skills-and-automation.md b/docs/help/faq/skills-and-automation.md index 8102e36836ee..6d60c29709a3 100644 --- a/docs/help/faq/skills-and-automation.md +++ b/docs/help/faq/skills-and-automation.md @@ -37,12 +37,12 @@ read_when: ownership: "explicit", entries: { coder: { - model: "xiaomi/mimo-v2.5-pro", + model: "xiaomi/mimo-v2.6-pro", thinkingDefault: "high", params: { temperature: 0.1 }, }, chat: { - model: "xiaomi/mimo-v2.5-pro", + model: "xiaomi/mimo-v2.6-pro", thinkingDefault: "off", params: { temperature: 0.8 }, }, diff --git a/docs/providers/xiaomi.md b/docs/providers/xiaomi.md index a86eeb5255ad..7c190c0b4bc2 100644 --- a/docs/providers/xiaomi.md +++ b/docs/providers/xiaomi.md @@ -21,7 +21,7 @@ Xiaomi MiMo is the API platform for **MiMo** models. The official external | API | OpenAI-compatible chat completions (`openai-completions`) | | Speech contract | `speechProviders: ["xiaomi"]` | | Base URLs | Pay-as-you-go: `https://api.xiaomimimo.com/v1`; Token Plan: `token-plan-{cn,sgp,ams}.xiaomimimo.com/v1` | -| Default models | `xiaomi/mimo-v2.5`, `xiaomi-token-plan/mimo-v2.5-pro` | +| Default models | `xiaomi/mimo-v2.6-pro`, `xiaomi-token-plan/mimo-v2.6-pro` | | TTS default | `mimo-v2.5-tts`, voice `mimo_default`; voicedesign model `mimo-v2.5-tts-voicedesign` | ## Getting started @@ -76,10 +76,13 @@ Onboarding validates the key shape and warns when a `tp-...` key is entered into ## Pay-as-you-go catalog -| Model ref | Input | Context | Max output | Reasoning | Notes | -| ---------------------- | ----------- | --------- | ---------- | --------- | ------------- | -| `xiaomi/mimo-v2.5` | text, image | 1,048,576 | 131,072 | Yes | Default model | -| `xiaomi/mimo-v2.5-pro` | text | 1,048,576 | 131,072 | Yes | Flagship | +| Model ref | Input | Context | Max output | Reasoning | Notes | +| --------------------------------- | ----------- | --------- | ---------- | --------- | ---------------------- | +| `xiaomi/mimo-v2.6-pro` | text, image | 1,048,576 | 131,072 | Yes | Default flagship | +| `xiaomi/mimo-v2.6-flash` | text, image | 1,048,576 | 131,072 | Yes | Efficient model | +| `xiaomi/mimo-v2.6-pro-ultraspeed` | text, image | 1,048,576 | 131,072 | Yes | Up to 20x output speed | +| `xiaomi/mimo-v2.5` | text, image | 1,048,576 | 131,072 | Yes | Previous generation | +| `xiaomi/mimo-v2.5-pro` | text | 1,048,576 | 131,072 | Yes | Previous generation | ## Token Plan catalog @@ -94,10 +97,12 @@ Choose the Token Plan auth choice that matches the regional base URL shown in Xi | `xiaomi-token-plan-sgp` | `https://token-plan-sgp.xiaomimimo.com/v1` | | `xiaomi-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 | 131,072 | Yes | Default model | -| `xiaomi-token-plan/mimo-v2.5` | text, image | 1,048,576 | 131,072 | Yes | Multimodal | +| Model ref | Input | Context | Max output | Reasoning | Notes | +| ----------------------------------- | ----------- | --------- | ---------- | --------- | ------------------- | +| `xiaomi-token-plan/mimo-v2.6-pro` | text, image | 1,048,576 | 131,072 | Yes | Default model | +| `xiaomi-token-plan/mimo-v2.6-flash` | text, image | 1,048,576 | 131,072 | Yes | Efficient model | +| `xiaomi-token-plan/mimo-v2.5-pro` | text | 1,048,576 | 131,072 | Yes | Previous generation | +| `xiaomi-token-plan/mimo-v2.5` | text, image | 1,048,576 | 131,072 | Yes | Previous generation | `xiaomi-token-plan` needs a regional base URL to resolve. The supported path is a Token Plan onboarding choice or an explicit @@ -106,7 +111,7 @@ provider is not offered without one of those. ## Reasoning models -`mimo-v2.5` and `mimo-v2.5-pro` support +The MiMo V2.5 and V2.6 text models support OpenClaw's [`/think` directive](/tools/thinking) with levels `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max` (default `high`). @@ -177,7 +182,7 @@ mono Opus with `ffmpeg` before delivery. ```json5 { env: { vars: { XIAOMI_API_KEY: "your-key" } }, - agents: { defaults: { model: { primary: "xiaomi/mimo-v2.5" } } }, + agents: { defaults: { model: { primary: "xiaomi/mimo-v2.6-pro" } } }, models: { mode: "merge", providers: { @@ -187,18 +192,18 @@ mono Opus with `ffmpeg` before delivery. apiKey: "XIAOMI_API_KEY", models: [ { - id: "mimo-v2.5", - name: "Xiaomi MiMo V2.5", + id: "mimo-v2.6-pro", + name: "Xiaomi MiMo V2.6 Pro", reasoning: true, input: ["text", "image"], contextWindow: 1048576, maxTokens: 131072, }, { - id: "mimo-v2.5-pro", - name: "Xiaomi MiMo V2.5 Pro", + id: "mimo-v2.6-flash", + name: "Xiaomi MiMo V2.6 Flash", reasoning: true, - input: ["text"], + input: ["text", "image"], contextWindow: 1048576, maxTokens: 131072, }, @@ -217,7 +222,7 @@ Token Plan: ```json5 { env: { vars: { XIAOMI_TOKEN_PLAN_API_KEY: "tp-your-key" } }, - agents: { defaults: { model: { primary: "xiaomi-token-plan/mimo-v2.5-pro" } } }, + agents: { defaults: { model: { primary: "xiaomi-token-plan/mimo-v2.6-pro" } } }, models: { mode: "merge", providers: { @@ -227,16 +232,16 @@ Token Plan: apiKey: "XIAOMI_TOKEN_PLAN_API_KEY", models: [ { - id: "mimo-v2.5-pro", - name: "Xiaomi MiMo V2.5 Pro", + id: "mimo-v2.6-pro", + name: "Xiaomi MiMo V2.6 Pro", reasoning: true, - input: ["text"], + input: ["text", "image"], contextWindow: 1048576, maxTokens: 131072, }, { - id: "mimo-v2.5", - name: "Xiaomi MiMo V2.5", + id: "mimo-v2.6-flash", + name: "Xiaomi MiMo V2.6 Flash", reasoning: true, input: ["text", "image"], contextWindow: 1048576, @@ -259,8 +264,10 @@ USD pricing, so its catalog rows use zero USD cost and the config example omits - - **mimo-v2.5** - pay-as-you-go default and Token Plan multimodal V2.5 route. - - **mimo-v2.5-pro** - flagship reasoning model and Token Plan default. + - **mimo-v2.6-pro** - flagship reasoning model and default for both providers. + - **mimo-v2.6-flash** - efficient pay-as-you-go and Token Plan route. + - **mimo-v2.6-pro-ultraspeed** - pay-as-you-go flagship route with up to 20x output speed. + - **mimo-v2.5** and **mimo-v2.5-pro** - previous-generation compatibility routes. Pay-as-you-go models use the `xiaomi/` prefix. Token Plan models use the `xiaomi-token-plan/` prefix. diff --git a/docs/tools/code-mode/configuration.md b/docs/tools/code-mode/configuration.md index c10aaeb05c6b..9e110b73efa7 100644 --- a/docs/tools/code-mode/configuration.md +++ b/docs/tools/code-mode/configuration.md @@ -96,7 +96,7 @@ Bundled provider catalogs currently flag these models as `"preferred"`: | minimax | `MiniMax-M3` | | moonshot | `kimi-k3` | | openai | `gpt-5.6`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5`, `gpt-5.5-pro` | -| xiaomi | `mimo-v2.5` | +| xiaomi | `mimo-v2.6-pro`, `mimo-v2.6-flash` | | zai | `glm-5.3`, `glm-5.2`, `glm-5.1` | Everything else, including all Ollama-served local models, stays unflagged and diff --git a/extensions/xiaomi/index.test.ts b/extensions/xiaomi/index.test.ts index 5296c81ca719..e31c05feeb4d 100644 --- a/extensions/xiaomi/index.test.ts +++ b/extensions/xiaomi/index.test.ts @@ -69,7 +69,12 @@ async function getXiaomiTokenPlanProvider() { } function mimoReasoningModel( - id: "mimo-v2.5" | "mimo-v2.5-pro" | "mimo-v2.6-pro", + id: + | "mimo-v2.5" + | "mimo-v2.5-pro" + | "mimo-v2.6-flash" + | "mimo-v2.6-pro" + | "mimo-v2.6-pro-ultraspeed", provider: "xiaomi" | "xiaomi-token-plan" = "xiaomi", ): OpenAICompletionsModel { return { @@ -255,18 +260,46 @@ describe("xiaomi provider plugin", () => { expect(catalogProvider.baseUrl).toBe("https://api.xiaomimimo.com/v1"); expect(catalogProvider.models?.map((model) => model.id)).toEqual([ + "mimo-v2.6-pro", + "mimo-v2.6-flash", + "mimo-v2.6-pro-ultraspeed", "mimo-v2.5", "mimo-v2.5-pro", ]); - expect(catalogProvider.models?.find((m) => m.id === "mimo-v2.5")?.input).toEqual([ + expect(catalogProvider.models?.find((m) => m.id === "mimo-v2.6-flash")?.input).toEqual([ "text", "image", ]); + expect(catalogProvider.models?.find((m) => m.id === "mimo-v2.6-flash")?.cost).toEqual({ + input: 0.14, + output: 0.28, + cacheRead: 0.0028, + cacheWrite: 0, + }); + expect(catalogProvider.models?.find((m) => m.id === "mimo-v2.6-pro")?.cost).toEqual({ + input: 0.435, + output: 0.87, + cacheRead: 0.0036, + cacheWrite: 0, + }); + expect(catalogProvider.models?.find((m) => m.id === "mimo-v2.6-pro-ultraspeed")?.cost).toEqual({ + input: 4.35, + output: 8.7, + cacheRead: 0.036, + cacheWrite: 0, + }); expect(catalogProvider.models?.every((model) => model.reasoning)).toBe(true); }); - it("exposes Token Plan v2.5 catalog rows only after a provider config selects a region", async () => { - const response = Response.json({ data: [{ id: "mimo-v2.5" }, { id: "mimo-v2.5-pro" }] }); + it("exposes Token Plan catalog rows only after a provider config selects a region", async () => { + const response = Response.json({ + data: [ + { id: "mimo-v2.6-pro" }, + { id: "mimo-v2.6-flash" }, + { id: "mimo-v2.5" }, + { id: "mimo-v2.5-pro" }, + ], + }); const release = vi.fn(async () => undefined); const guardedFetch = vi.spyOn(ssrfRuntime, "fetchWithSsrFGuard").mockResolvedValue({ response, @@ -317,11 +350,12 @@ describe("xiaomi provider plugin", () => { expect(configured.provider.models?.map((model) => model.id)).toEqual([ "mimo-v2.5", "mimo-v2.5-pro", + "mimo-v2.6-flash", + "mimo-v2.6-pro", ]); - expect(configured.provider.models?.find((model) => model.id === "mimo-v2.5")?.input).toEqual([ - "text", - "image", - ]); + expect( + configured.provider.models?.find((model) => model.id === "mimo-v2.6-flash")?.input, + ).toEqual(["text", "image"]); for (const model of configured.provider.models ?? []) { expect(model.cost).toEqual({ input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }); } @@ -474,7 +508,13 @@ describe("xiaomi provider plugin", () => { ); const expectedLevels = ["off", "minimal", "low", "medium", "high", "xhigh", "max"]; - for (const modelId of ["mimo-v2.5", "mimo-v2.5-pro", "mimo-v2.6-pro"]) { + for (const modelId of [ + "mimo-v2.5", + "mimo-v2.5-pro", + "mimo-v2.6-flash", + "mimo-v2.6-pro", + "mimo-v2.6-pro-ultraspeed", + ]) { const profile = resolveThinkingProfile({ provider: "xiaomi", modelId } as never); expect(profile?.levels.map((l) => l.id)).toEqual(expectedLevels); expect(profile?.defaultLevel).toBe("high"); @@ -494,6 +534,12 @@ describe("xiaomi provider plugin", () => { expect( provider.isModernModelRef?.({ provider: "xiaomi", modelId: "mimo-v2.6-pro" } as never), ).toBe(true); + expect( + provider.isModernModelRef?.({ + provider: "xiaomi", + modelId: "mimo-v2.6-pro-ultraspeed", + } as never), + ).toBe(true); expect( provider.isModernModelRef?.({ provider: "xiaomi", modelId: "custom-model" } as never), ).toBe(false); diff --git a/extensions/xiaomi/onboard.test.ts b/extensions/xiaomi/onboard.test.ts index 2e985aeff618..ef64ad718c57 100644 --- a/extensions/xiaomi/onboard.test.ts +++ b/extensions/xiaomi/onboard.test.ts @@ -16,9 +16,17 @@ describe("xiaomi onboard", () => { const cfg = applyXiaomiConfig({}); const provider = cfg.models?.providers?.xiaomi; expect(provider).toEqual(buildXiaomiProvider()); - expect(provider?.models.map((m) => m.id)).toEqual(["mimo-v2.5", "mimo-v2.5-pro"]); - expect(cfg.agents?.defaults?.models?.["xiaomi/mimo-v2.5"]).toEqual({ alias: "Xiaomi" }); - expect(cfg.agents?.defaults?.model).toEqual({ primary: "xiaomi/mimo-v2.5" }); + expect(provider?.models.map((m) => m.id)).toEqual([ + "mimo-v2.6-pro", + "mimo-v2.6-flash", + "mimo-v2.6-pro-ultraspeed", + "mimo-v2.5", + "mimo-v2.5-pro", + ]); + expect(cfg.agents?.defaults?.models?.["xiaomi/mimo-v2.6-pro"]).toEqual({ + alias: "Xiaomi", + }); + expect(cfg.agents?.defaults?.model).toEqual({ primary: "xiaomi/mimo-v2.6-pro" }); }); it("merges Xiaomi models and keeps existing provider overrides", () => { @@ -33,6 +41,9 @@ describe("xiaomi onboard", () => { }); expect(provider?.models.map((m) => m.id)).toEqual([ "custom-model", + "mimo-v2.6-pro", + "mimo-v2.6-flash", + "mimo-v2.6-pro-ultraspeed", "mimo-v2.5", "mimo-v2.5-pro", ]); @@ -45,14 +56,19 @@ describe("xiaomi onboard", () => { ...buildXiaomiTokenPlanProvider(), baseUrl: "https://token-plan-ams.xiaomimimo.com/v1", }); - expect(provider?.models.map((m) => m.id)).toEqual(["mimo-v2.5-pro", "mimo-v2.5"]); - expect(cfg.agents?.defaults?.models?.["xiaomi-token-plan/mimo-v2.5-pro"]).toEqual({ - alias: "Xiaomi MiMo V2.5 Pro", + expect(provider?.models.map((m) => m.id)).toEqual([ + "mimo-v2.6-pro", + "mimo-v2.6-flash", + "mimo-v2.5-pro", + "mimo-v2.5", + ]); + expect(cfg.agents?.defaults?.models?.["xiaomi-token-plan/mimo-v2.6-pro"]).toEqual({ + alias: "Xiaomi MiMo V2.6 Pro", }); - expect(cfg.agents?.defaults?.model).toEqual({ primary: "xiaomi-token-plan/mimo-v2.5-pro" }); + expect(cfg.agents?.defaults?.model).toEqual({ primary: "xiaomi-token-plan/mimo-v2.6-pro" }); expectProviderOnboardPrimaryModel({ applyConfig: (config) => applyXiaomiTokenPlanConfig(config, "ams"), - modelRef: "xiaomi-token-plan/mimo-v2.5-pro", + modelRef: "xiaomi-token-plan/mimo-v2.6-pro", }); }); @@ -75,8 +91,8 @@ describe("xiaomi onboard", () => { for (const mode of [undefined, "merge"] as const) { const cfg = applyXiaomiTokenPlanConfig({ models: { mode } }, region); expect(cfg.models?.providers?.["xiaomi-token-plan"]?.models).toEqual([]); - expect(cfg.agents?.defaults?.models?.["xiaomi-token-plan/mimo-v2.5-pro"]).toEqual({ - alias: "Xiaomi MiMo V2.5 Pro", + expect(cfg.agents?.defaults?.models?.["xiaomi-token-plan/mimo-v2.6-pro"]).toEqual({ + alias: "Xiaomi MiMo V2.6 Pro", }); expect(applyXiaomiTokenPlanConfig(cfg, region)).toEqual(cfg); } diff --git a/extensions/xiaomi/onboard.ts b/extensions/xiaomi/onboard.ts index 7d520612360e..d3fa5b29647f 100644 --- a/extensions/xiaomi/onboard.ts +++ b/extensions/xiaomi/onboard.ts @@ -55,7 +55,7 @@ const xiaomiTokenPlanPresetAppliers = createDefaultModelsPresetAppliers<[]>({ return [ { modelRef: XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_REF, - alias: defaultModel?.name ?? "MiMo V2.5 Pro", + alias: defaultModel?.name ?? "Xiaomi MiMo V2.6 Pro", }, ]; })(), diff --git a/extensions/xiaomi/openclaw.plugin.json b/extensions/xiaomi/openclaw.plugin.json index c4faf8ff0f12..b90606c62b91 100644 --- a/extensions/xiaomi/openclaw.plugin.json +++ b/extensions/xiaomi/openclaw.plugin.json @@ -30,6 +30,50 @@ "baseUrl": "https://api.xiaomimimo.com/v1", "api": "openai-completions", "models": [ + { + "id": "mimo-v2.6-pro", + "name": "Xiaomi MiMo V2.6 Pro", + "input": ["text", "image"], + "reasoning": true, + "contextWindow": 1048576, + "maxTokens": 131072, + "cost": { + "input": 0.435, + "output": 0.87, + "cacheRead": 0.0036, + "cacheWrite": 0 + }, + "compat": { "codeMode": "preferred" } + }, + { + "id": "mimo-v2.6-flash", + "name": "Xiaomi MiMo V2.6 Flash", + "input": ["text", "image"], + "reasoning": true, + "contextWindow": 1048576, + "maxTokens": 131072, + "cost": { + "input": 0.14, + "output": 0.28, + "cacheRead": 0.0028, + "cacheWrite": 0 + }, + "compat": { "codeMode": "preferred" } + }, + { + "id": "mimo-v2.6-pro-ultraspeed", + "name": "Xiaomi MiMo V2.6 Pro UltraSpeed", + "input": ["text", "image"], + "reasoning": true, + "contextWindow": 1048576, + "maxTokens": 131072, + "cost": { + "input": 4.35, + "output": 8.7, + "cacheRead": 0.036, + "cacheWrite": 0 + } + }, { "id": "mimo-v2.5", "name": "Xiaomi MiMo V2.5", @@ -65,6 +109,26 @@ "baseUrl": "https://token-plan-sgp.xiaomimimo.com/v1", "api": "openai-completions", "models": [ + { + "id": "mimo-v2.6-pro", + "name": "Xiaomi MiMo V2.6 Pro", + "input": ["text", "image"], + "reasoning": true, + "contextWindow": 1048576, + "maxTokens": 131072, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, + "compat": { "codeMode": "preferred" } + }, + { + "id": "mimo-v2.6-flash", + "name": "Xiaomi MiMo V2.6 Flash", + "input": ["text", "image"], + "reasoning": true, + "contextWindow": 1048576, + "maxTokens": 131072, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, + "compat": { "codeMode": "preferred" } + }, { "id": "mimo-v2.5-pro", "name": "Xiaomi MiMo V2.5 Pro", diff --git a/extensions/xiaomi/provider-catalog.ts b/extensions/xiaomi/provider-catalog.ts index bd142e969d4d..7e3f99a4535f 100644 --- a/extensions/xiaomi/provider-catalog.ts +++ b/extensions/xiaomi/provider-catalog.ts @@ -5,8 +5,8 @@ import manifest from "./openclaw.plugin.json" with { type: "json" }; export const XIAOMI_PROVIDER_ID = "xiaomi"; export const XIAOMI_TOKEN_PLAN_PROVIDER_ID = "xiaomi-token-plan"; -export const XIAOMI_DEFAULT_MODEL_ID = "mimo-v2.5"; -export const XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_ID = "mimo-v2.5-pro"; +export const XIAOMI_DEFAULT_MODEL_ID = "mimo-v2.6-pro"; +export const XIAOMI_TOKEN_PLAN_DEFAULT_MODEL_ID = "mimo-v2.6-pro"; const XIAOMI_TOKEN_PLAN_BASE_URLS = { ams: "https://token-plan-ams.xiaomimimo.com/v1", diff --git a/extensions/xiaomi/thinking.ts b/extensions/xiaomi/thinking.ts index 6063cd6fef65..5bedf0cf7f3b 100644 --- a/extensions/xiaomi/thinking.ts +++ b/extensions/xiaomi/thinking.ts @@ -2,7 +2,13 @@ import type { ProviderThinkingProfile } from "openclaw/plugin-sdk/plugin-entry"; import { XIAOMI_PROVIDER_ID, XIAOMI_TOKEN_PLAN_PROVIDER_ID } from "./provider-catalog.js"; -const MIMO_REASONING_MODEL_IDS = new Set(["mimo-v2.5", "mimo-v2.5-pro", "mimo-v2.6-pro"]); +const MIMO_REASONING_MODEL_IDS = new Set([ + "mimo-v2.5", + "mimo-v2.5-pro", + "mimo-v2.6-flash", + "mimo-v2.6-pro", + "mimo-v2.6-pro-ultraspeed", +]); function isMiMoReasoningModelId(modelId: string): boolean { return MIMO_REASONING_MODEL_IDS.has(modelId.toLowerCase()); diff --git a/packages/ai/src/transports/openai-completions-replay.test.ts b/packages/ai/src/transports/openai-completions-replay.test.ts index 52950770f607..aefcf27a5c7e 100644 --- a/packages/ai/src/transports/openai-completions-replay.test.ts +++ b/packages/ai/src/transports/openai-completions-replay.test.ts @@ -161,10 +161,20 @@ describe("buildOpenAICompletionsParams sanitizes reasoning replay fields", () => assertSanitizedFields: true, }, { - label: "preserves reasoning_content replay for custom MiMo V2.6 proxy routes", + label: "preserves reasoning_content replay for custom MiMo V2.6 Pro proxy routes", model: { ...customMiMoProxyModel, id: "xiaomi/mimo-v2.6-pro" }, assertSanitizedFields: true, }, + { + label: "preserves reasoning_content replay for custom MiMo V2.6 Flash proxy routes", + model: { ...customMiMoProxyModel, id: "xiaomi/mimo-v2.6-flash" }, + assertSanitizedFields: true, + }, + { + label: "preserves reasoning_content replay for custom MiMo V2.6 UltraSpeed proxy routes", + model: { ...customMiMoProxyModel, id: "xiaomi/mimo-v2.6-pro-ultraspeed" }, + assertSanitizedFields: true, + }, { label: "preserves reasoning_content replay for custom Kimi K2 proxy routes", model: customKimiProxyModel, diff --git a/packages/ai/src/transports/openai-completions-replay.ts b/packages/ai/src/transports/openai-completions-replay.ts index 4d8317f5ee5f..db5add10810b 100644 --- a/packages/ai/src/transports/openai-completions-replay.ts +++ b/packages/ai/src/transports/openai-completions-replay.ts @@ -185,7 +185,9 @@ const REASONING_CONTENT_REPLAY_MODEL_IDS = new Set([ "mimo-v2-omni", "mimo-v2.5", "mimo-v2.5-pro", + "mimo-v2.6-flash", "mimo-v2.6-pro", + "mimo-v2.6-pro-ultraspeed", ]); // Tier/access suffixes that some providers append to otherwise identical model diff --git a/src/agents/embedded-agent-runner-extraparams.test.ts b/src/agents/embedded-agent-runner-extraparams.test.ts index 03a2a39bf537..7dd21d615db3 100644 --- a/src/agents/embedded-agent-runner-extraparams.test.ts +++ b/src/agents/embedded-agent-runner-extraparams.test.ts @@ -828,12 +828,12 @@ describe("applyExtraParamsToAgent", () => { it("fills MiMo V2.6 reasoning_content for unowned OpenAI-compatible proxy models", () => { const payload = runResponsesPayloadMutationCase({ applyProvider: "opencode", - applyModelId: "xiaomi/mimo-v2.6-pro", + applyModelId: "xiaomi/mimo-v2.6-flash", thinkingLevel: "high", model: { api: "openai-completions", provider: "opencode", - id: "xiaomi/mimo-v2.6-pro", + id: "xiaomi/mimo-v2.6-flash", } as Model<"openai-completions">, payload: { messages: [ diff --git a/src/agents/embedded-agent-runner/extra-params.ts b/src/agents/embedded-agent-runner/extra-params.ts index ffeba559a7d9..e1d9ee0ce743 100644 --- a/src/agents/embedded-agent-runner/extra-params.ts +++ b/src/agents/embedded-agent-runner/extra-params.ts @@ -914,7 +914,7 @@ const MIMO_REASONING_OPENAI_COMPATIBLE_MODEL_IDS = new Set([ "mimo-v2-omni", "mimo-v2.5", "mimo-v2.5-pro", - "mimo-v2.6-pro", + ...["flash", "pro", "pro-ultraspeed"].map((variant) => `mimo-v2.6-${variant}`), ]); const MIMO_REASONING_AS_VISIBLE_TEXT_MODEL_IDS = new Set(["mimo-v2-pro", "mimo-v2-omni"]); diff --git a/src/agents/transcript-policy.test.ts b/src/agents/transcript-policy.test.ts index eb1d8100fdf4..617341b72b3a 100644 --- a/src/agents/transcript-policy.test.ts +++ b/src/agents/transcript-policy.test.ts @@ -395,7 +395,9 @@ describe("resolveTranscriptPolicy", () => { "moonshot/kimi-k3", "kimi-k2-thinking", "hf:moonshotai/kimi-k2-thinking", + "xiaomi/mimo-v2.6-flash", "xiaomi/mimo-v2.6-pro", + "xiaomi/mimo-v2.6-pro-ultraspeed", "xiaomi/mimo-v2.6-pro:cloud", ])( "preserves historical reasoning for %s replay-required OpenAI-compatible models", diff --git a/src/agents/transcript-policy.ts b/src/agents/transcript-policy.ts index 1dc977acfdc8..16585d9560c1 100644 --- a/src/agents/transcript-policy.ts +++ b/src/agents/transcript-policy.ts @@ -177,7 +177,9 @@ const REASONING_CONTENT_REPLAY_MODEL_IDS = new Set([ "mimo-v2-omni", "mimo-v2.5", "mimo-v2.5-pro", + "mimo-v2.6-flash", "mimo-v2.6-pro", + "mimo-v2.6-pro-ultraspeed", ]); function requiresReasoningContentReplay(modelId: string | null | undefined): boolean {