From 4984be82a1652d5935562101a3538497d9398e49 Mon Sep 17 00:00:00 2001
From: CharlesJay01 <38678594+CharlesJay01@users.noreply.github.com>
Date: Sun, 12 Jul 2026 08:10:12 +0800
Subject: [PATCH] feat: add MiMo (Xiaomi) as AI provider (#887)
* feat: add MiMo (Xiaomi) as AI provider
* fix: correct MiMo default base URL, suggested models, and reasoning support
- Default base URL was the China Token Plan endpoint (tp- keys only);
switch to https://api.xiaomimimo.com/v1 which works with standard
pay-as-you-go sk- keys. Token Plan users can override in settings.
- Replace deprecated mimo-v2-flash suggestion with mimo-v2.5
(v2 series was deprecated on 2026-06-30).
- Use createDeepSeek instead of createOpenAI so reasoning_content is
passed back during multi-turn tool calls (MiMo returns 400 without
it), matching the existing Kimi implementation.
- Add mimo to SINGLE_SYSTEM_PROVIDERS so system messages are merged.
- Fold validate-model case into the shared OpenAI-compatible group.
- Drop the Bot icon special case; models.dev serves a real xiaomi logo
via PROVIDER_LOGO_MAP.
- Document MIMO_API_KEY/MIMO_BASE_URL in env.example and
docs/{en,cn,ja}/ai-providers.md.
* feat: show base URL hint for MiMo in provider settings
MiMo has two endpoints tied to key type: pay-as-you-go keys (sk-...)
use the default api.xiaomimimo.com/v1, while Token Plan keys (tp-...)
require token-plan-cn.xiaomimimo.com/v1. Surface this under the Base
URL field like the existing MiniMax hint, in all four locales.
---------
Co-authored-by: mapengfei
Co-authored-by: dayuan.jiang
---
app/api/validate-model/route.ts | 5 +++--
components/provider-credentials-fields.tsx | 5 +++++
docs/cn/ai-providers.md | 15 ++++++++++++-
docs/en/ai-providers.md | 15 ++++++++++++-
docs/ja/ai-providers.md | 15 ++++++++++++-
env.example | 5 +++++
lib/ai-providers.ts | 25 ++++++++++++++++++++--
lib/i18n/dictionaries/en.json | 4 +++-
lib/i18n/dictionaries/ja.json | 4 +++-
lib/i18n/dictionaries/zh-Hant.json | 4 +++-
lib/i18n/dictionaries/zh.json | 4 +++-
lib/types/model-config.ts | 7 ++++++
12 files changed, 97 insertions(+), 11 deletions(-)
diff --git a/app/api/validate-model/route.ts b/app/api/validate-model/route.ts
index 6f3b5b9..9622b29 100644
--- a/app/api/validate-model/route.ts
+++ b/app/api/validate-model/route.ts
@@ -372,12 +372,13 @@ export async function POST(req: Request) {
break
}
- // GLM, Qwen, Kimi, Qiniu, Novita - OpenAI compatible
+ // GLM, Qwen, Kimi, Qiniu, Novita, MiMo - OpenAI compatible
case "glm":
case "qwen":
case "kimi":
case "qiniu":
- case "novita": {
+ case "novita":
+ case "mimo": {
const baseURL =
baseUrl ||
PROVIDER_INFO[provider as ProviderName]?.defaultBaseUrl ||
diff --git a/components/provider-credentials-fields.tsx b/components/provider-credentials-fields.tsx
index 9a83020..8a9bf0d 100644
--- a/components/provider-credentials-fields.tsx
+++ b/components/provider-credentials-fields.tsx
@@ -249,6 +249,11 @@ export function ProviderCredentialsFields({
{dict.modelConfig.minimaxBaseUrlHint}
)}
+ {provider === "mimo" && (
+
+ {dict.modelConfig.mimoBaseUrlHint}
+
+ )}
>
)}
diff --git a/docs/cn/ai-providers.md b/docs/cn/ai-providers.md
index c221cd0..d963e68 100644
--- a/docs/cn/ai-providers.md
+++ b/docs/cn/ai-providers.md
@@ -308,6 +308,19 @@ AI_MODEL=your_model_id
QINIU_BASE_URL=https://your-custom-endpoint
```
+### MiMo (小米)
+
+```bash
+MIMO_API_KEY=your_api_key
+AI_MODEL=mimo-v2.5-pro
+```
+
+可选的自定义端点(Token Plan 订阅用户请设置专属 Base URL):
+
+```bash
+MIMO_BASE_URL=https://token-plan-cn.xiaomimimo.com/v1
+```
+
## 自动检测
如果您只配置了**一个**提供商的 API 密钥,系统将自动检测并使用该提供商。无需设置 `AI_PROVIDER`。
@@ -315,7 +328,7 @@ QINIU_BASE_URL=https://your-custom-endpoint
如果您配置了**多个** API 密钥,则必须显式设置 `AI_PROVIDER`:
```bash
-AI_PROVIDER=google # 或:openai, anthropic, aihubmix, deepseek, siliconflow, doubao, azure, bedrock, openrouter, ollama, gateway, sglang, modelscope, minimax, glm, qwen, kimi, qiniu
+AI_PROVIDER=google # 或:openai, anthropic, aihubmix, deepseek, siliconflow, doubao, azure, bedrock, openrouter, ollama, gateway, sglang, modelscope, minimax, glm, qwen, kimi, qiniu, mimo
```
## 服务端多模型配置
diff --git a/docs/en/ai-providers.md b/docs/en/ai-providers.md
index b89ef60..c23bf9c 100644
--- a/docs/en/ai-providers.md
+++ b/docs/en/ai-providers.md
@@ -323,6 +323,19 @@ Optional custom endpoint:
QINIU_BASE_URL=https://your-custom-endpoint
```
+### MiMo (Xiaomi)
+
+```bash
+MIMO_API_KEY=your_api_key
+AI_MODEL=mimo-v2.5-pro
+```
+
+Optional custom endpoint (Token Plan subscribers should set their dedicated Base URL):
+
+```bash
+MIMO_BASE_URL=https://token-plan-cn.xiaomimimo.com/v1
+```
+
## Auto-Detection
If you only configure **one** provider's API key, the system will automatically detect and use that provider. No need to set `AI_PROVIDER`.
@@ -330,7 +343,7 @@ If you only configure **one** provider's API key, the system will automatically
If you configure **multiple** API keys, you must explicitly set `AI_PROVIDER`:
```bash
-AI_PROVIDER=google # or: openai, anthropic, aihubmix, deepseek, siliconflow, doubao, azure, bedrock, openrouter, ollama, gateway, sglang, modelscope, minimax, glm, qwen, kimi, qiniu
+AI_PROVIDER=google # or: openai, anthropic, aihubmix, deepseek, siliconflow, doubao, azure, bedrock, openrouter, ollama, gateway, sglang, modelscope, minimax, glm, qwen, kimi, qiniu, mimo
```
## Server-Side Multi-Model Configuration
diff --git a/docs/ja/ai-providers.md b/docs/ja/ai-providers.md
index aeaffb2..b09a8bb 100644
--- a/docs/ja/ai-providers.md
+++ b/docs/ja/ai-providers.md
@@ -308,6 +308,19 @@ AI_MODEL=your_model_id
QINIU_BASE_URL=https://your-custom-endpoint
```
+### MiMo (Xiaomi)
+
+```bash
+MIMO_API_KEY=your_api_key
+AI_MODEL=mimo-v2.5-pro
+```
+
+オプションのカスタムエンドポイント(Token Plan 加入者は専用の Base URL を設定してください):
+
+```bash
+MIMO_BASE_URL=https://token-plan-cn.xiaomimimo.com/v1
+```
+
## 自動検出
**1つ**のプロバイダーの API キーのみを設定した場合、システムはそのプロバイダーを自動的に検出して使用します。`AI_PROVIDER` を設定する必要はありません。
@@ -315,7 +328,7 @@ QINIU_BASE_URL=https://your-custom-endpoint
**複数**の API キーを設定する場合は、`AI_PROVIDER` を明示的に設定する必要があります:
```bash
-AI_PROVIDER=google # または: openai, anthropic, aihubmix, deepseek, siliconflow, doubao, azure, bedrock, openrouter, ollama, gateway, sglang, modelscope, minimax, glm, qwen, kimi, qiniu
+AI_PROVIDER=google # または: openai, anthropic, aihubmix, deepseek, siliconflow, doubao, azure, bedrock, openrouter, ollama, gateway, sglang, modelscope, minimax, glm, qwen, kimi, qiniu, mimo
```
## サーバーサイドマルチモデル設定
diff --git a/env.example b/env.example
index fbf1d49..d1fafb5 100644
--- a/env.example
+++ b/env.example
@@ -189,3 +189,8 @@ AI_MODEL=global.anthropic.claude-sonnet-4-5-20250929-v1:0
# Get your API key from: https://novita.ai/dashboard/key
# NOVITA_API_KEY=your_novita_api_key
# NOVITA_BASE_URL=https://api.novita.ai/openai # Optional, default
+
+# MiMo (Xiaomi) Configuration (Optional)
+# Get your API key from: https://platform.xiaomimimo.com/
+# MIMO_API_KEY=your_mimo_api_key
+# MIMO_BASE_URL=https://api.xiaomimimo.com/v1 # Optional, default. Token Plan users: https://token-plan-cn.xiaomimimo.com/v1
diff --git a/lib/ai-providers.ts b/lib/ai-providers.ts
index 14798f5..61e19e7 100644
--- a/lib/ai-providers.ts
+++ b/lib/ai-providers.ts
@@ -32,6 +32,7 @@ export const SINGLE_SYSTEM_PROVIDERS = new Set([
"kimi",
"qiniu",
"novita",
+ "mimo",
])
/**
@@ -116,6 +117,7 @@ const ALLOWED_CLIENT_PROVIDERS: ProviderName[] = [
"kimi",
"minimax",
"novita",
+ "mimo",
]
// Bedrock provider options for Anthropic beta features
@@ -540,7 +542,8 @@ function buildProviderOptions(
case "qwen":
case "kimi":
case "qiniu":
- case "novita": {
+ case "novita":
+ case "mimo": {
// These providers don't have reasoning configs in AI SDK yet
// Gateway passes through to underlying providers which handle their own configs
break
@@ -577,6 +580,7 @@ export const PROVIDER_ENV_VARS: Record = {
kimi: "KIMI_API_KEY",
minimax: "MINIMAX_API_KEY",
novita: "NOVITA_API_KEY",
+ mimo: "MIMO_API_KEY",
}
/**
@@ -1346,6 +1350,23 @@ export function getAIModel(overrides?: ClientOverrides): ModelConfig {
break
}
+ case "mimo": {
+ const apiKey = resolveApiKey(overrides, "MIMO_API_KEY")
+ const baseURL = resolveBaseURL(
+ overrides?.apiKey,
+ overrides?.baseUrl,
+ resolveBaseUrlEnv(overrides, "MIMO_BASE_URL"),
+ PROVIDER_INFO.mimo?.defaultBaseUrl,
+ )
+ // Use createDeepSeek to properly handle reasoning_content for MiMo
+ // thinking models (e.g., mimo-v2.5-pro). MiMo's API requires
+ // reasoning_content to be passed back during multi-turn tool calls
+ // (returns 400 otherwise), same convention as DeepSeek and Kimi.
+ const mimoProvider = createDeepSeek({ apiKey, baseURL })
+ model = mimoProvider(modelId)
+ break
+ }
+
case "glm":
case "qwen":
case "qiniu":
@@ -1393,7 +1414,7 @@ export function getAIModel(overrides?: ClientOverrides): ModelConfig {
default:
throw new Error(
- `Unknown AI provider: ${provider}. Supported providers: bedrock, openai, anthropic, google, azure, ollama, openrouter, aihubmix, deepseek, siliconflow, sglang, gateway, edgeone, doubao, modelscope, glm, qwen, qiniu, kimi, minimax, novita`,
+ `Unknown AI provider: ${provider}. Supported providers: bedrock, openai, anthropic, google, azure, ollama, openrouter, aihubmix, deepseek, siliconflow, sglang, gateway, edgeone, doubao, modelscope, glm, qwen, qiniu, kimi, minimax, novita, mimo`,
)
}
diff --git a/lib/i18n/dictionaries/en.json b/lib/i18n/dictionaries/en.json
index 0de5b7b..e9ed6ac 100644
--- a/lib/i18n/dictionaries/en.json
+++ b/lib/i18n/dictionaries/en.json
@@ -34,7 +34,8 @@
"glm": "GLM",
"qwen": "Qwen",
"kimi": "Kimi",
- "qiniu": "Qiniu"
+ "qiniu": "Qiniu",
+ "mimo": "MiMo (Xiaomi)"
},
"chat": {
"placeholder": "Describe your diagram or upload a file...",
@@ -371,6 +372,7 @@
"baseUrlWithExample": "Base URL (optional, e.g. {example})",
"customEndpoint": "Custom endpoint URL",
"minimaxBaseUrlHint": "Use /anthropic for Anthropic-compatible API (recommended), or /v1 for OpenAI-compatible API",
+ "mimoBaseUrlHint": "Default works with pay-as-you-go keys (sk-...). Token Plan subscribers (tp-... keys) must set https://token-plan-cn.xiaomimimo.com/v1",
"models": "Models",
"customModelId": "Custom model ID...",
"allAdded": "All added",
diff --git a/lib/i18n/dictionaries/ja.json b/lib/i18n/dictionaries/ja.json
index 262d7c6..0b7da83 100644
--- a/lib/i18n/dictionaries/ja.json
+++ b/lib/i18n/dictionaries/ja.json
@@ -34,7 +34,8 @@
"glm": "GLM",
"qwen": "Qwen",
"kimi": "Kimi",
- "qiniu": "Qiniu"
+ "qiniu": "Qiniu",
+ "mimo": "MiMo (Xiaomi)"
},
"chat": {
"placeholder": "ダイアグラムを説明するか、ファイルをアップロード...",
@@ -325,6 +326,7 @@
"baseUrlWithExample": "ベース URL(オプション、例: {example})",
"customEndpoint": "カスタムエンドポイント URL",
"minimaxBaseUrlHint": "/anthropic で Anthropic 互換 API(推奨)、または /v1 で OpenAI 互換 API を使用",
+ "mimoBaseUrlHint": "デフォルトは従量課金キー(sk-...)用です。Token Plan 加入者(tp-... キー)は https://token-plan-cn.xiaomimimo.com/v1 を設定してください",
"models": "モデル",
"customModelId": "カスタムモデル ID...",
"allAdded": "すべて追加済み",
diff --git a/lib/i18n/dictionaries/zh-Hant.json b/lib/i18n/dictionaries/zh-Hant.json
index 586dcc4..6b7aa89 100644
--- a/lib/i18n/dictionaries/zh-Hant.json
+++ b/lib/i18n/dictionaries/zh-Hant.json
@@ -34,7 +34,8 @@
"glm": "GLM",
"qwen": "Qwen",
"kimi": "Kimi",
- "qiniu": "Qiniu"
+ "qiniu": "Qiniu",
+ "mimo": "MiMo (小米)"
},
"chat": {
"placeholder": "描述您的圖表或上傳檔案...",
@@ -371,6 +372,7 @@
"baseUrlWithExample": "基礎 URL(可選,例如 {example})",
"customEndpoint": "自訂端點 URL",
"minimaxBaseUrlHint": "使用 /anthropic 端點為 Anthropic 相容 API(推薦),或使用 /v1 端點為 OpenAI 相容 API",
+ "mimoBaseUrlHint": "預設地址適用於按量付費金鑰(sk-...)。Token Plan 訂閱用戶(tp-... 金鑰)請設定為 https://token-plan-cn.xiaomimimo.com/v1",
"models": "模型",
"customModelId": "自訂模型 ID...",
"allAdded": "已全部新增",
diff --git a/lib/i18n/dictionaries/zh.json b/lib/i18n/dictionaries/zh.json
index 38c6404..8f4a4e2 100644
--- a/lib/i18n/dictionaries/zh.json
+++ b/lib/i18n/dictionaries/zh.json
@@ -34,7 +34,8 @@
"glm": "GLM",
"qwen": "Qwen",
"kimi": "Kimi",
- "qiniu": "Qiniu"
+ "qiniu": "Qiniu",
+ "mimo": "MiMo (小米)"
},
"chat": {
"placeholder": "描述您的图表或上传文件...",
@@ -371,6 +372,7 @@
"baseUrlWithExample": "基础 URL(可选,例如 {example})",
"customEndpoint": "自定义端点 URL",
"minimaxBaseUrlHint": "使用 /anthropic 端点为 Anthropic 兼容 API(推荐),或使用 /v1 端点为 OpenAI 兼容 API",
+ "mimoBaseUrlHint": "默认地址适用于按量付费密钥(sk-...)。Token Plan 订阅用户(tp-... 密钥)请设置为 https://token-plan-cn.xiaomimimo.com/v1",
"models": "模型",
"customModelId": "自定义模型 ID...",
"allAdded": "已全部添加",
diff --git a/lib/types/model-config.ts b/lib/types/model-config.ts
index c715b3f..810edd3 100644
--- a/lib/types/model-config.ts
+++ b/lib/types/model-config.ts
@@ -23,6 +23,7 @@ export type ProviderName =
| "kimi"
| "minimax"
| "novita"
+ | "mimo"
// Individual model configuration
export interface ModelConfig {
@@ -114,6 +115,7 @@ export const PROVIDER_LOGO_MAP: Record = {
modelscope: "modelscope",
minimax: "minimax",
novita: "novita",
+ mimo: "xiaomi",
}
// Provider metadata
@@ -200,6 +202,10 @@ export const PROVIDER_INFO: Record<
label: "Novita AI",
defaultBaseUrl: "https://api.novita.ai/openai",
},
+ mimo: {
+ label: "MiMo (Xiaomi)",
+ defaultBaseUrl: "https://api.xiaomimimo.com/v1",
+ },
}
// Suggested models per provider for quick add
@@ -437,6 +443,7 @@ export const SUGGESTED_MODELS: Partial> = {
"moonshotai/kimi-k2.6",
"deepseek/deepseek-v4-flash",
],
+ mimo: ["mimo-v2.5-pro", "mimo-v2.5"],
}
// Helper to generate UUID