Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/features/opencode-go-muse-spark-efforts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- feat(opencode-go): expose Muse Spark 1.2 Contributor reasoning-effort aliases (minimal/low/medium/high/xhigh) in the Combo Builder
63 changes: 63 additions & 0 deletions open-sse/config/providers/registry/opencode/go/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,69 @@ export const opencode_goProvider: RegistryEntry = {
supportsReasoning: true,
},
{ id: "hy3-preview", name: "Hunyuan3 Preview" },
// Muse Spark 1.2 Contributor — base + effort-tier aliases from the OpenCode Go
// registry (`opencode models opencode-go --verbose`; exact suffix set:
// minimal/low/medium/high/xhigh, no max).
{
id: "muse-spark-1.2-contributor",
name: "Muse Spark 1.2 Contributor",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsVision: true,
supportsAudio: true,
supportsVideo: true,
},
{
id: "muse-spark-1.2-contributor-minimal",
name: "Muse Spark 1.2 Contributor (minimal effort)",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsVision: true,
supportsAudio: true,
supportsVideo: true,
},
{
id: "muse-spark-1.2-contributor-low",
name: "Muse Spark 1.2 Contributor (low effort)",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsVision: true,
supportsAudio: true,
supportsVideo: true,
},
{
id: "muse-spark-1.2-contributor-medium",
name: "Muse Spark 1.2 Contributor (medium effort)",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsVision: true,
supportsAudio: true,
supportsVideo: true,
},
{
id: "muse-spark-1.2-contributor-high",
name: "Muse Spark 1.2 Contributor (high effort)",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsVision: true,
supportsAudio: true,
supportsVideo: true,
},
{
id: "muse-spark-1.2-contributor-xhigh",
name: "Muse Spark 1.2 Contributor (xhigh effort)",
contextLength: 1048576,
maxOutputTokens: 131072,
supportsReasoning: true,
supportsVision: true,
supportsAudio: true,
supportsVideo: true,
},
// #8353: Grok 4.5 + effort tiers from the OpenCode Go registry.
{ id: "grok-4.5", name: "Grok 4.5", supportsReasoning: true },
{ id: "grok-4.5-low", name: "Grok 4.5 (low effort)", supportsReasoning: true },
Expand Down
4 changes: 3 additions & 1 deletion open-sse/executors/opencode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ const OPENCODE_FREE_MODELS = new Set([
* `opencode models opencode-go --verbose`; MiniMax M3 excluded — different
* thinking-mode mapping):
* grok-4.5 low/medium/high; hy3 none/low/high; kimi-k3 max;
* qwen3.6-plus / qwen3.7-max / qwen3.7-plus high/max
* qwen3.6-plus / qwen3.7-max / qwen3.7-plus high/max;
* muse-spark-1.2-contributor minimal/low/medium/high/xhigh (no max)
*/
const EFFORT_TIERS: Record<string, readonly string[]> = {
"deepseek-v4-pro": EFFORT_LEVELS,
Expand All @@ -84,6 +85,7 @@ const EFFORT_TIERS: Record<string, readonly string[]> = {
"qwen3.6-plus": ["high", "max"],
"qwen3.7-max": ["high", "max"],
"qwen3.7-plus": ["high", "max"],
"muse-spark-1.2-contributor": ["minimal", "low", "medium", "high", "xhigh"],
};

/**
Expand Down
22 changes: 22 additions & 0 deletions tests/unit/opencode-go-catalog-alignment.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,25 @@ test("opencode-go hy3 variants expose their context window to combo compatibilit
);
}
});

test("opencode-go exposes Muse Spark Contributor effort aliases with a 1M context", () => {
const museModelIds = [
"muse-spark-1.2-contributor",
"muse-spark-1.2-contributor-minimal",
"muse-spark-1.2-contributor-low",
"muse-spark-1.2-contributor-medium",
"muse-spark-1.2-contributor-high",
"muse-spark-1.2-contributor-xhigh",
];
for (const modelId of museModelIds) {
assert.ok(
modelIds().includes(modelId),
`expected ${modelId} in opencode-go catalog, got: ${modelIds().join(", ")}`
);
assert.equal(
getResolvedModelCapabilities(`opencode-go/${modelId}`).contextWindow,
1048576,
`${modelId} should resolve a 1M context window`
);
}
});
41 changes: 38 additions & 3 deletions tests/unit/opencode-go-effort-aliases-8353.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,40 @@ const ISSUE_ALIASES: ReadonlyArray<{ alias: string; base: string; effort: string
{ alias: "qwen3.7-max-max", base: "qwen3.7-max", effort: "max" },
{ alias: "qwen3.7-plus-high", base: "qwen3.7-plus", effort: "high" },
{ alias: "qwen3.7-plus-max", base: "qwen3.7-plus", effort: "max" },
{
alias: "muse-spark-1.2-contributor-minimal",
base: "muse-spark-1.2-contributor",
effort: "minimal",
},
{
alias: "muse-spark-1.2-contributor-low",
base: "muse-spark-1.2-contributor",
effort: "low",
},
{
alias: "muse-spark-1.2-contributor-medium",
base: "muse-spark-1.2-contributor",
effort: "medium",
},
{
alias: "muse-spark-1.2-contributor-high",
base: "muse-spark-1.2-contributor",
effort: "high",
},
{
alias: "muse-spark-1.2-contributor-xhigh",
base: "muse-spark-1.2-contributor",
effort: "xhigh",
},
];

const NEW_BASES = ["grok-4.5", "hy3", "kimi-k3", "qwen3.7-plus"] as const;
const NEW_BASES = [
"grok-4.5",
"hy3",
"kimi-k3",
"qwen3.7-plus",
"muse-spark-1.2-contributor",
] as const;

function goModelIds(): string[] {
const entry = REGISTRY["opencode-go"];
Expand Down Expand Up @@ -101,13 +132,11 @@ test("#8353 catalog: aliases are NOT synthesized on opencode-zen", () => {
// kimi-k3 became a live zen model in the 2026-08-17 registry sync (present in
// https://opencode.ai/zen/v1/models) — only the remaining Go-tier-only bases
// must stay absent from zen. The effort alias kimi-k3-max is still Go-only
// and remains covered by the ISSUE_ALIASES loop above.
for (const base of NEW_BASES) {
if (base === "kimi-k3") continue;
assert.equal(zenIds.has(base), false, `opencode-zen must not expose base ${base}`);
}
});

test("#8353 catalog: qwen effort aliases keep Claude targetFormat", () => {
const models = REGISTRY["opencode-go"]?.models ?? [];
for (const id of [
Expand Down Expand Up @@ -138,6 +167,7 @@ test("#8353 parseEffortLevel: unsupported tiers stay null", () => {
assert.equal(parseEffortLevel("hy3-max"), null);
assert.equal(parseEffortLevel("kimi-k3-high"), null);
assert.equal(parseEffortLevel("qwen3.6-plus-low"), null);
assert.equal(parseEffortLevel("muse-spark-1.2-contributor-max"), null);
});

test("#8353 parseEffortLevel: existing DeepSeek V4 Pro / GLM / MiMo aliases still work", () => {
Expand Down Expand Up @@ -166,6 +196,11 @@ const TRANSFORM_SAMPLES = [
{ alias: "kimi-k3-max", base: "kimi-k3", effort: "max" },
{ alias: "qwen3.7-plus-max", base: "qwen3.7-plus", effort: "max" },
{ alias: "qwen3.7-max-high", base: "qwen3.7-max", effort: "high" },
{
alias: "muse-spark-1.2-contributor-xhigh",
base: "muse-spark-1.2-contributor",
effort: "xhigh",
},
] as const;

for (const { alias, base, effort } of TRANSFORM_SAMPLES) {
Expand Down
Loading