适用于
opencode桌面版 / CLI v2,模型muse-spark-1.2-contributor走自建sub2api中转
已按 v2 规范修正:variants为数组 +settings,并补全medium
- sub2api 已建独立分组(
platform: openai,上游https://opencode.ai/zen/go/v1),令牌YOUR_SUB2API_TOKEN仅返回["muse-spark-1.2-contributor"] - 中转:
http://YOUR_SUB2API_HOST:8080/v1
- 全局(桌面版通用):
~/.config/opencode/opencode.json或opencode.jsonc - 项目:
./opencode.json - 桌面版与 CLI 共用同一套,改全局即生效
v2 键变更:
npm→package,options→settings,variants由对象改为数组。旧写法会被静默忽略,导致“同一模型内 variants 未识别”。
文档:https://opencode.ai/docs/config/ · https://opencode.ai/docs/providers/ · https://opencode.ai/v2/docs/models
~/.config/opencode/opencode.jsonc:
要点:
- 必须写
limit/capabilities:自定义 provider 不在models.dev,缺limit会被 cap 到 32k 输出(#29363) - 思考强度 = 同一
models."muse-spark-1.2-contributor"内的variants数组,每项{ id, settings }。minimal/low/medium/high/xhigh为 models.dev 官方 effort 全量(none已于 #3347 移除,不支持) - 选择方式:
muse/muse-spark-1.2-contributor#medium、#high等(provider/model#variant),桌面版/models也会列出 settings在 provider → model → variant 三层合并,variant 最终覆盖。勿用旧的options键apiKey用{env:SUB2API_MUSE_TOKEN}或{file:~/.secrets/muse-token}
export SUB2API_MUSE_TOKEN="YOUR_SUB2API_TOKEN"
# 图形启动的桌面版需写入 ~/.zshrc 或 launchd env,改后重启 opencodevariants写成对象{"high": {...}}→ v2 需改为数组[{"id":"high", "settings":{...}}]options→settings,npm→package- 缺
limit/capabilities→ 上下文被截、工具调用失效 none已不支持,Muse Spark 仅minimal/low/medium/high/xhigh(models.dev #3347)
# 中转直测
curl -s http://YOUR_SUB2API_HOST:8080/v1/models -H "Authorization: Bearer YOUR_SUB2API_TOKEN" | jq .
curl -s http://YOUR_SUB2API_HOST:8080/v1/chat/completions \
-H "Authorization: Bearer YOUR_SUB2API_TOKEN" -H "Content-Type: application/json" \
-d '{"model":"muse-spark-1.2-contributor","messages":[{"role":"user","content":"ping"}]}' | jq .
# opencode 侧
opencode debug config | jq '.provider.muse.models."muse-spark-1.2-contributor".variants'桌面版 /models 应出现 muse/muse-spark-1.2-contributor 及其 minimal/low/medium/high/xhigh。
占位符 YOUR_* 替换为真实地址与令牌,切勿公开 sk-...
Sources:
- opencode v2 Models - variants
- fix(muse-spark): omit none from reasoning effort options #3347 - final effort values:
minimal,low,medium,high,xhigh - models.dev - Muse Spark 1.2 1M context
{ "$schema": "https://opencode.ai/config.json", "provider": { "muse": { "package": "@opencode-ai/ai/providers/openai-compatible", "name": "Muse Spark (sub2api)", "settings": { "baseURL": "http://YOUR_SUB2API_HOST:8080/v1", "apiKey": "{env:SUB2API_MUSE_TOKEN}" }, "models": { "muse-spark-1.2-contributor": { "name": "Muse Spark 1.2 Contributor", "modelID": "muse-spark-1.2-contributor", "capabilities": { "tools": true, "input": ["text", "image"], "output": ["text"] }, "limit": { "context": 1048576, "output": 131072 }, "settings": { "reasoningEffort": "high", "reasoningSummary": "auto", "textVerbosity": "medium" }, "variants": [ { "id": "minimal", "settings": { "reasoningEffort": "minimal", "reasoningSummary": "auto", "textVerbosity": "low" } }, { "id": "low", "settings": { "reasoningEffort": "low", "reasoningSummary": "auto", "textVerbosity": "low" } }, { "id": "medium", "settings": { "reasoningEffort": "medium", "reasoningSummary": "auto", "textVerbosity": "medium" } }, { "id": "high", "settings": { "reasoningEffort": "high", "reasoningSummary": "auto", "textVerbosity": "medium" } }, { "id": "xhigh", "settings": { "reasoningEffort": "xhigh", "reasoningSummary": "detailed", "textVerbosity": "medium" } } ] } } } }, "model": "muse/muse-spark-1.2-contributor#high" }