Mimocode/Opencode 的 Responses API 支持

当前的 MiMoCodev0.1.13里,Responses API 有两套入口

  1. Vercel SDK 的 responses() 方法 —— 触发条件是 provider id 为 openai / github-copilot / azure
  2. provider 为 gitlab 且每个模型加上 "useResponsesApi": true

就tmd很神奇。。一眼 vibe coding。我感觉世界上理解 Responses API 意义的人可能比例很少。。。

gitlab

{
  "$schema": "https://mimo.xiaomi.com/mimocode/config.json",
  "provider": {
    "gitlab": {
      "name": "GitLab",
      "models": {
        "gpt-5-codex": { "useResponsesApi": true }
      }
    }
  }
}

可以通过 GITLAB_INSTANCE_URL GITLAB_TOKEN 环境变量去变通,但是 token 来自 directAccessClient.getDirectAccessToken() 走的是 GitLab 的 token-exchange 协议(auth.openai.com 那套 OAuth exchange)

所以即使能把 instanceUrl 骗过去,token 交换这一步也会因为不是真 GitLab token 而失败——没有可配置的开源端点/key 入口,也没有绕过 token-exchange 的开关。

复用 openai 这个 provider id

支持自定义 options.baseURL + apiKey

{
  "$schema": "https://mimo.xiaomi.com/mimocode/config.json",
  "provider": {
    "openai": {
      "name": "My Responses Backend",
      "npm": "@ai-sdk/openai",
      "models": { "my-model": { "name": "my-model" } },
      "options": {
        "baseURL": "https://你的后端域名/v1",
        "apiKey": "你的key"
      }
    }
  }
}

provider id 必须是 openai/github-copilot/azure 之一

两个npm包的区别

@ai-sdk/openai-compatible@ai-sdk/openai 都是来自 Vercel

@ai-sdk/openai-compatible @ai-sdk/openai
是什么 MiMoCode 自带/打包的通用 OpenAI 兼容适配器 Vercel 官方的 OpenAI 原生 provider
适用对象 任何"像 OpenAI"的第三方端点(OpenRouter、DeepSeek、本地 vLLM、各种网关) OpenAI 自家 API,或任何支持 OpenAI Responses API 的后端(靠 baseURL 指过去)
在 MiMoCode 里的默认角色 自定义 provider 的默认 npm(你不写 npm 时,up() 函数默认填它) 绑定内置 openai provider id
协议能力 只有 Chat Completions(languageModel() Chat Completions + Responses API(responses() 方法)
路由差异 通用路径 W() 里固定走 M.languageModel(id) → chat 内置 openai loader 的 getModelreturn Z.responses(Q) → 默认就走 Responses

实测模型支持

Opencode Go

model completions responses
deepseek-v4-flash ✅ 200 ✅ 200
deepseek-v4-flash-vision-exp ✅ 200 ✅ 200
deepseek-v4-pro ✅ 200 ✅ 200
glm-5 ✅ 200 ❌ 500
glm-5.1 ✅ 200 ❌ 500
glm-5.2 ✅ 200 ❌ 500
glm-5.3 ✅ 200 ❌ 500
glm-5.3-flash ✅ 200 ❌ 500
gpt-5.6-luna ❌ 500 ✅ 200
grok-4.5 ❌ 503 ✅ 200
grok-4.6 ❌ 401 ✅ 200
hy3 ✅ 200 ❌ 500
hy3-preview ❌ 400 ❌ 500
hy4-preview ✅ 200 ❌ 500
kimi-k2.5 ✅ 200 ❌ 500
kimi-k2.6 ✅ 200 ❌ 500
kimi-k2.7-code ✅ 200 ❌ 500
kimi-k3 ✅ 200 ❌ 401
longcat-2.0 ✅ 200 ❌ 500
mimo-v2-omni ❌ 400 ❌ 500
mimo-v2-pro ❌ 400 ❌ 500
mimo-v2.5 ✅ 200 ❌ 500
mimo-v2.5-pro ✅ 200 ❌ 500
minimax-m2.5 ✅ 200 ❌ 401
minimax-m2.7 ❌ 500 ❌ 500
minimax-m3 ✅ 200 ❌ 401
muse-spark-1.2-contributor ❌ 500 ✅ 200
qwen3.5-plus ✅ 200 ❌ 401
qwen3.6-plus ✅ 200 ❌ 401
qwen3.7-max ✅ 200 ❌ 401
qwen3.7-plus ✅ 200 ❌ 401
qwen3.8-flash ✅ 200 ❌ 401
qwen3.8-max ✅ 200 ❌ 401

Opencode Zen

model completions responses
big-pickle ⚠️ 429 ❌ 500
hy3-free ✅ 200 ❌ 500
laguna-s-2.1-free ✅ 200 ❌ 500
ling-3.0-flash-fin-free ✅ 200 ❌ 500
mimo-v2.5-free ⚠️ 429 ❌ 500
muse-spark-1.2-contributor-free ❌ 500 ✅ 200
nemotron-3-ultra-free ❌ 000 ❌ 500

需要付费的 401 Insufficient balance 我就懒得测了。

Comments