mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-23 15:42:12 +03:00
fix(providers): route Muse Spark to the Responses API on opencode-zen too (#11049)
⭐5 — Muse Spark responde só na Responses API; #10874 corrigiu só o provider `opencode`, mas `opencode-zen` (faltava targetFormat em 2 entries) e `opencode-go` (6 entries effort-tier) nunca receberam. Espelha a declaração. freebuff NÃO tocado (backend codebuff.com /chat/completions distinto, verificado). TDD 2/2 + 18/18 irmãos. Fecha #11048. Base-red #9985 inherited.
This commit is contained in:
@@ -138,6 +138,7 @@ export const opencode_goProvider: RegistryEntry = {
|
||||
supportsVision: true,
|
||||
supportsAudio: true,
|
||||
supportsVideo: true,
|
||||
targetFormat: "openai-responses",
|
||||
},
|
||||
{
|
||||
id: "muse-spark-1.2-contributor-minimal",
|
||||
@@ -148,6 +149,7 @@ export const opencode_goProvider: RegistryEntry = {
|
||||
supportsVision: true,
|
||||
supportsAudio: true,
|
||||
supportsVideo: true,
|
||||
targetFormat: "openai-responses",
|
||||
},
|
||||
{
|
||||
id: "muse-spark-1.2-contributor-low",
|
||||
@@ -158,6 +160,7 @@ export const opencode_goProvider: RegistryEntry = {
|
||||
supportsVision: true,
|
||||
supportsAudio: true,
|
||||
supportsVideo: true,
|
||||
targetFormat: "openai-responses",
|
||||
},
|
||||
{
|
||||
id: "muse-spark-1.2-contributor-medium",
|
||||
@@ -168,6 +171,7 @@ export const opencode_goProvider: RegistryEntry = {
|
||||
supportsVision: true,
|
||||
supportsAudio: true,
|
||||
supportsVideo: true,
|
||||
targetFormat: "openai-responses",
|
||||
},
|
||||
{
|
||||
id: "muse-spark-1.2-contributor-high",
|
||||
@@ -178,6 +182,7 @@ export const opencode_goProvider: RegistryEntry = {
|
||||
supportsVision: true,
|
||||
supportsAudio: true,
|
||||
supportsVideo: true,
|
||||
targetFormat: "openai-responses",
|
||||
},
|
||||
{
|
||||
id: "muse-spark-1.2-contributor-xhigh",
|
||||
@@ -188,6 +193,7 @@ export const opencode_goProvider: RegistryEntry = {
|
||||
supportsVision: true,
|
||||
supportsAudio: true,
|
||||
supportsVideo: true,
|
||||
targetFormat: "openai-responses",
|
||||
},
|
||||
// #8353: Grok 4.5 + effort tiers from the OpenCode Go registry.
|
||||
{ id: "grok-4.5", name: "Grok 4.5", supportsReasoning: true },
|
||||
|
||||
@@ -51,7 +51,25 @@ export const opencode_zenProvider: RegistryEntry = {
|
||||
{ id: "grok-4.6", name: "Grok 4.6" },
|
||||
|
||||
// ── Muse ───────────────────────────────────────────────────
|
||||
{ id: "muse-spark-1.2", name: "Muse Spark 1.2" },
|
||||
// Muse Spark is served by OpenCode Zen only on the OpenAI Responses API
|
||||
// endpoint, not /chat/completions (see the opencode provider's own
|
||||
// muse-spark entries, #10874/#10867) — this provider is a separate
|
||||
// registry entry for the same upstream and never got the same
|
||||
// targetFormat declaration, so requests routed here still hit
|
||||
// /chat/completions with a mismatched or unanswerable body and the
|
||||
// upstream returns an empty message.
|
||||
{
|
||||
id: "muse-spark-1.2",
|
||||
name: "Muse Spark 1.2",
|
||||
supportsReasoning: true,
|
||||
targetFormat: "openai-responses",
|
||||
},
|
||||
{
|
||||
id: "muse-spark-1.2-contributor-free",
|
||||
name: "Muse Spark 1.2 Contributor Free",
|
||||
supportsReasoning: true,
|
||||
targetFormat: "openai-responses",
|
||||
},
|
||||
|
||||
// ── DeepSeek ────────────────────────────────────────────────
|
||||
{ id: "deepseek-v4-pro", name: "DeepSeek V4 Pro" },
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
|
||||
import { opencode_zenProvider } from "../../open-sse/config/providers/registry/opencode/zen/index.ts";
|
||||
import { opencode_goProvider } from "../../open-sse/config/providers/registry/opencode/go/index.ts";
|
||||
|
||||
// opencode-zen and opencode-go both serve the same upstream family
|
||||
// (opencode.ai/zen/*) as the opencode provider for Muse Spark, but neither
|
||||
// got the targetFormat:"openai-responses" declaration that #10874 added to
|
||||
// the opencode provider's entries — so requests routed to either still hit
|
||||
// /chat/completions and the upstream returns an empty message.
|
||||
test("muse-spark-1.2 and muse-spark-1.2-contributor-free route to the Responses API on opencode-zen too", () => {
|
||||
for (const id of ["muse-spark-1.2", "muse-spark-1.2-contributor-free"]) {
|
||||
const model = opencode_zenProvider.models.find((m) => m.id === id);
|
||||
assert.ok(model, `${id} should be registered in the opencode-zen provider`);
|
||||
assert.equal(
|
||||
model?.targetFormat,
|
||||
"openai-responses",
|
||||
`${id} must target the Responses API, not the default chat/completions pass-through`
|
||||
);
|
||||
assert.equal(model?.supportsReasoning, true);
|
||||
}
|
||||
});
|
||||
|
||||
test("all muse-spark-1.2-contributor effort-tier entries route to the Responses API on opencode-go too", () => {
|
||||
const ids = [
|
||||
"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 id of ids) {
|
||||
const model = opencode_goProvider.models.find((m) => m.id === id);
|
||||
assert.ok(model, `${id} should be registered in the opencode-go provider`);
|
||||
assert.equal(
|
||||
model?.targetFormat,
|
||||
"openai-responses",
|
||||
`${id} must target the Responses API, not the default chat/completions pass-through`
|
||||
);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user