RooCode 修复 Mimo OpenAI 兼容指南
问题背景
通过 OpenAI Compatible 提供商使用模型名包含 "mimo" 的模型时,API 返回 400 错误。原因是 Mimo API 有以下特殊要求:
reasoning_content字段 :当 assistant 消息包含tool_calls时,必须同时携带reasoning_content字段,否则报 400thinking参数 :需要发送thinking: { type: "enabled" }以启用推理模式- 消息格式 :Mimo 的消息格式与标准 OpenAI 格式有差异,需要使用专门的
convertToMimoFormat转换器
修改文件清单
1. webview-ui/src/components/ui/hooks/useSelectedModel.ts
问题 :satisfies 联合类型缺少 "mimo" provider,导致 TypeScript 编译错误。
修改:
typescript
// 修改前
provider satisfies "anthropic" | "gemini-cli" | "fake-ai"
// 修改后
provider satisfies "anthropic" | "gemini-cli" | "fake-ai" | "mimo"
2. src/api/providers/openai.ts
问题 :OpenAI 提供商使用 convertToOpenAiMessages 转换消息,不保留 reasoning_content,也不发送 thinking 参数。
修改:
- 新增
convertToMimoFormat导入:
typescript
import { convertToMimoFormat } from "../transform/mimo-format"
- 新增 Mimo 模型检测:
typescript
const isMimoModel = modelId.toLowerCase().includes("mimo")
- 流式路径消息转换(在
deepseekReasoner判断之后):
typescript
} else if (isMimoModel) {
convertedMessages = [
{ role: "system" as const, content: systemPrompt },
...convertToMimoFormat(messages, {
mergeToolResultText: true,
forceReasoningContent: true,
}),
]
}
- 流式请求参数添加
thinking:
typescript
...(isMimoModel && { thinking: { type: "enabled" } }),
- 非流式路径同样处理:
typescript
if (deepseekReasoner) {
nonStreamingMessages = convertToR1Format([...])
} else if (isMimoModel) {
nonStreamingMessages = [
{ role: "system" as const, content: systemPrompt },
...convertToMimoFormat(messages, {
mergeToolResultText: true,
forceReasoningContent: true,
}),
]
} else {
nonStreamingMessages = [systemMessage, ...convertToOpenAiMessages(messages)]
}
3. src/api/providers/base-openai-compatible-provider.ts
问题 :BaseOpenAiCompatibleProvider 是 OpenRouter、LM Studio 等兼容提供商的基类,同样需要支持 mimo 模型。
修改:
- 新增导入:
typescript
import { convertToMimoFormat } from "../transform/mimo-format"
createStream方法中新增检测和转换:
typescript
const isMimoModel = model.toLowerCase().includes("mimo")
const convertedMessages = isMimoModel
? convertToMimoFormat(messages, { mergeToolResultText: true, forceReasoningContent: true })
: convertToOpenAiMessages(messages)
- 请求参数添加
thinking:
typescript
...(isMimoModel && { thinking: { type: "enabled" } }),
4. src/package.json
版本号从 3.53.0 更新为 3.53.0-fix-mimo。
关键参数说明
| 参数 | 作用 |
|---|---|
forceReasoningContent: true |
强制为包含 tool_calls 的 assistant 消息添加空的 reasoning_content 字段,避免 Mimo API 报 400 |
mergeToolResultText: true |
将 tool_result 后的文本块合并到 tool 消息中(Mimo 不支持 tool 消息后跟独立文本块) |
thinking: { type: "enabled" } |
启用 Mimo 的推理模式,使其返回 reasoning_content 字段 |
影响范围
- OpenAI Compatible 提供商 :通过
src/api/providers/openai.ts - 所有 OpenAI 兼容基类的子提供商 :通过
src/api/providers/base-openai-compatible-provider.ts,包括 OpenRouter、LM Studio、ZAi、MiniMax 等
只要模型 ID 中包含 "mimo"(不区分大小写),就会自动应用 Mimo 格式转换和 thinking 参数。
打包产物
bin/roo-cline-3.53.0-fix-mimo.vsix (31.71 MB)