mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-21 10:16:44 +00:00
fix(opencode-go): remove deprecated mimo-v2-omni and mimo-v2-pro model aliases (#103329)
* fix(opencode-go): remove deprecated mimo-v2-omni and mimo-v2-pro model aliases These deprecated aliases reject agent requests from the OpenCode Go gateway. Remove them from the provider catalog and clean up all references in probe skip lists, CI workflows, and tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(opencode-go): complete deprecated MiMo cleanup --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
Peter Steinberger
parent
461772868d
commit
1a0dc9b83f
@@ -2123,7 +2123,7 @@ jobs:
|
||||
- suite_id: native-live-src-gateway-profiles-opencode-go-mimo
|
||||
suite_group: native-live-src-gateway-profiles-opencode-go
|
||||
label: Native live gateway profiles OpenCode Go MiMo
|
||||
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=opencode-go OPENCLAW_LIVE_GATEWAY_MODELS=opencode-go/mimo-v2-omni,opencode-go/mimo-v2-pro,opencode-go/mimo-v2.5,opencode-go/mimo-v2.5-pro node .release-harness/scripts/test-live-shard.mjs native-live-src-gateway-profiles
|
||||
command: OPENCLAW_LIVE_GATEWAY_PROVIDERS=opencode-go OPENCLAW_LIVE_GATEWAY_MODELS=opencode-go/mimo-v2.5,opencode-go/mimo-v2.5-pro node .release-harness/scripts/test-live-shard.mjs native-live-src-gateway-profiles
|
||||
timeout_minutes: 30
|
||||
profile_env_only: false
|
||||
advisory: true
|
||||
|
||||
@@ -25,6 +25,7 @@ Docs: https://docs.openclaw.ai
|
||||
|
||||
### Fixes
|
||||
|
||||
- **OpenCode Go MiMo catalog:** stop exposing the deprecated `mimo-v2-omni` and `mimo-v2-pro` aliases that reject agent requests, and keep release validation on the active MiMo V2.5 routes. (#103311, #103329) Thanks @krissding.
|
||||
- **OpenAI-compatible streamed tool calls:** execute complete native tool calls from streams that end with SSE `data: [DONE]` but omit `finish_reason`, while keeping transport EOF and visible-text cases fail-closed. (#98124, #97994) Thanks @SunnyShu0925.
|
||||
- **xAI provider aliases:** preserve Grok 4.3 and Grok 4.5 thinking profiles, fast-model routing, and encrypted reasoning replay when models use the shipped `x-ai` provider alias instead of clamping valid thinking requests to `minimal`. (#103315)
|
||||
- **Doctor state isolation:** prevent automated update and Gateway watch repair from importing and archiving default-home exec or plugin-binding approvals when `OPENCLAW_STATE_DIR` points elsewhere, keep implicit CLI preflight notice-only, and reserve cross-state imports for direct operator doctor runs. (#103247, #103317)
|
||||
|
||||
@@ -81,9 +81,7 @@ Bundled rows:
|
||||
| `opencode-go/kimi-k2.5` | Kimi K2.5 | 262,144 | 65,536 | Yes |
|
||||
| `opencode-go/kimi-k2.6` | Kimi K2.6 | 262,144 | 65,536 | Yes |
|
||||
| `opencode-go/kimi-k2.7-code` | Kimi K2.7 Code | 262,144 | 262,144 | Yes |
|
||||
| `opencode-go/mimo-v2-omni` | MiMo V2 Omni | 262,144 | 32,000 | Yes |
|
||||
| `opencode-go/mimo-v2.5` | MiMo V2.5 | 1M | 128,000 | Yes |
|
||||
| `opencode-go/mimo-v2-pro` | MiMo V2 Pro | 1,048,576 | 32,000 | No |
|
||||
| `opencode-go/mimo-v2.5-pro` | MiMo V2.5 Pro | 1,048,576 | 128,000 | No |
|
||||
| `opencode-go/minimax-m2.5` | MiniMax M2.5 | 204,800 | 65,536 | No |
|
||||
| `opencode-go/minimax-m2.7` | MiniMax M2.7 | 204,800 | 131,072 | No |
|
||||
|
||||
@@ -10,7 +10,10 @@ import { expectPassthroughReplayPolicy } from "openclaw/plugin-sdk/provider-test
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import plugin from "./index.js";
|
||||
import manifest from "./openclaw.plugin.json" with { type: "json" };
|
||||
import { buildOpencodeGoLiveProviderConfig } from "./provider-catalog.js";
|
||||
import {
|
||||
buildOpencodeGoLiveProviderConfig,
|
||||
buildStaticOpencodeGoProviderConfig,
|
||||
} from "./provider-catalog.js";
|
||||
import opencodeGoProviderDiscovery from "./provider-discovery.js";
|
||||
|
||||
function requireRecord(value: unknown, label: string): Record<string, unknown> {
|
||||
@@ -92,9 +95,7 @@ describe("opencode-go provider plugin", () => {
|
||||
"kimi-k2.5",
|
||||
"kimi-k2.6",
|
||||
"kimi-k2.7-code",
|
||||
"mimo-v2-omni",
|
||||
"mimo-v2.5",
|
||||
"mimo-v2-pro",
|
||||
"mimo-v2.5-pro",
|
||||
"minimax-m2.5",
|
||||
"minimax-m2.7",
|
||||
@@ -251,7 +252,7 @@ describe("opencode-go provider plugin", () => {
|
||||
const deepSeekPro = result.provider.models.find((model) => model.id === "deepseek-v4-pro");
|
||||
const glm52 = result.provider.models.find((model) => model.id === "glm-5.2");
|
||||
|
||||
expect(result.provider.models).toHaveLength(20);
|
||||
expect(result.provider.models).toHaveLength(18);
|
||||
expect(deepSeekPro).toMatchObject({
|
||||
provider: "opencode-go",
|
||||
contextWindow: 1_000_000,
|
||||
@@ -277,6 +278,31 @@ describe("opencode-go provider plugin", () => {
|
||||
).resolves.toBeNull();
|
||||
});
|
||||
|
||||
it("keeps deprecated upstream MiMo aliases out of static and live catalogs", async () => {
|
||||
const deprecatedModelIds = ["mimo-v2-omni", "mimo-v2-pro"];
|
||||
const activeModelIds = ["mimo-v2.5", "mimo-v2.5-pro"];
|
||||
const staticModelIds = buildStaticOpencodeGoProviderConfig().models.map((model) => model.id);
|
||||
|
||||
expect(staticModelIds).toEqual(expect.arrayContaining(activeModelIds));
|
||||
expect(staticModelIds).toEqual(expect.not.arrayContaining(deprecatedModelIds));
|
||||
|
||||
const fetchGuard = vi.fn(async () => ({
|
||||
response: new Response(
|
||||
JSON.stringify({
|
||||
data: [...deprecatedModelIds, ...activeModelIds].map((id) => ({ id, object: "model" })),
|
||||
}),
|
||||
),
|
||||
finalUrl: "https://opencode.ai/zen/go/v1/models",
|
||||
release: vi.fn(async () => undefined),
|
||||
}));
|
||||
const live = await buildOpencodeGoLiveProviderConfig({
|
||||
discoveryApiKey: "resolved-opencode-key",
|
||||
fetchGuard,
|
||||
});
|
||||
|
||||
expect(live.models.map((model) => model.id)).toEqual(activeModelIds);
|
||||
});
|
||||
|
||||
it("does not mix provider-specific runtime auth with shared discovery auth", async () => {
|
||||
const provider = await registerSingleProviderPlugin(plugin);
|
||||
const fetchMock = vi.spyOn(globalThis, "fetch").mockRejectedValue(new Error("blocked fetch"));
|
||||
|
||||
@@ -196,23 +196,6 @@ const OPENCODE_GO_MODELS = (
|
||||
contextWindow: 262_144,
|
||||
maxTokens: 262_144,
|
||||
},
|
||||
{
|
||||
id: "mimo-v2-omni",
|
||||
name: "MiMo V2 Omni",
|
||||
api: "openai-completions",
|
||||
provider: PROVIDER_ID,
|
||||
baseUrl: OPENCODE_GO_OPENAI_BASE_URL,
|
||||
reasoning: true,
|
||||
input: ["text", "image"],
|
||||
cost: {
|
||||
input: 0,
|
||||
output: 0,
|
||||
cacheRead: 0,
|
||||
cacheWrite: 0,
|
||||
},
|
||||
contextWindow: 262_144,
|
||||
maxTokens: 32_000,
|
||||
},
|
||||
{
|
||||
id: "mimo-v2.5",
|
||||
name: "MiMo V2.5",
|
||||
@@ -230,23 +213,6 @@ const OPENCODE_GO_MODELS = (
|
||||
contextWindow: 1_000_000,
|
||||
maxTokens: 128_000,
|
||||
},
|
||||
{
|
||||
id: "mimo-v2-pro",
|
||||
name: "MiMo V2 Pro",
|
||||
api: "openai-completions",
|
||||
provider: PROVIDER_ID,
|
||||
baseUrl: OPENCODE_GO_OPENAI_BASE_URL,
|
||||
reasoning: true,
|
||||
input: ["text"],
|
||||
cost: {
|
||||
input: 0,
|
||||
output: 0,
|
||||
cacheRead: 0,
|
||||
cacheWrite: 0,
|
||||
},
|
||||
contextWindow: 1_048_576,
|
||||
maxTokens: 32_000,
|
||||
},
|
||||
{
|
||||
id: "mimo-v2.5-pro",
|
||||
name: "MiMo V2.5 Pro",
|
||||
|
||||
@@ -103,10 +103,6 @@ describe("live model turn probes", () => {
|
||||
expect(shouldSkipLiveModelFileProbe({ provider: "google", id: "gemini-3.1-pro-preview" })).toBe(
|
||||
true,
|
||||
);
|
||||
expect(shouldSkipLiveModelFileProbe({ provider: "opencode-go", id: "mimo-v2-omni" })).toBe(
|
||||
true,
|
||||
);
|
||||
expect(shouldSkipLiveModelFileProbe({ provider: "opencode-go", id: "mimo-v2-pro" })).toBe(true);
|
||||
expect(shouldSkipLiveModelFileProbe({ provider: "opencode-go", id: "minimax-m2.5" })).toBe(
|
||||
true,
|
||||
);
|
||||
@@ -165,9 +161,6 @@ describe("live model turn probes", () => {
|
||||
id: "accounts/fireworks/models/kimi-k2p6",
|
||||
}),
|
||||
).toBe(true);
|
||||
expect(shouldSkipLiveModelImageProbe({ provider: "opencode-go", id: "mimo-v2-omni" })).toBe(
|
||||
true,
|
||||
);
|
||||
expect(shouldSkipLiveModelImageProbe({ provider: "opencode-go", id: "kimi-k2.5" })).toBe(true);
|
||||
expect(
|
||||
shouldSkipLiveModelImageProbe({
|
||||
|
||||
@@ -23,8 +23,6 @@ const KNOWN_EMPTY_FILE_PROBE_MODELS = new Set([
|
||||
"google/gemini-3.1-pro-preview-customtools",
|
||||
"opencode-go/glm-5",
|
||||
"opencode-go/glm-5.1",
|
||||
"opencode-go/mimo-v2-omni",
|
||||
"opencode-go/mimo-v2-pro",
|
||||
"opencode-go/minimax-m2.5",
|
||||
"openrouter/arcee-ai/trinity-mini",
|
||||
"openrouter/deepseek/deepseek-chat-v3.1",
|
||||
@@ -46,7 +44,6 @@ const KNOWN_EMPTY_IMAGE_PROBE_MODELS = new Set([
|
||||
"fireworks/accounts/fireworks/routers/kimi-k2p5-turbo",
|
||||
"google/gemini-3.1-pro-preview-customtools",
|
||||
"opencode/kimi-k2.6",
|
||||
"opencode-go/mimo-v2-omni",
|
||||
"opencode-go/kimi-k2.5",
|
||||
"opencode-go/kimi-k2.6",
|
||||
"openrouter/amazon/nova-pro-v1",
|
||||
|
||||
@@ -1165,13 +1165,13 @@ describe("image tool implicit imageModel config", () => {
|
||||
const result = await tool.execute("t1", {
|
||||
prompt: "Describe this image.",
|
||||
image: `data:image/png;base64,${ONE_PIXEL_PNG_B64}`,
|
||||
model: "opencode-go/mimo-v2-omni",
|
||||
model: "opencode-go/mimo-v2.5",
|
||||
});
|
||||
|
||||
const request = firstImageRequest(describeImage);
|
||||
expect(request.provider).toBe("opencode-go");
|
||||
expect(request.model).toBe("mimo-v2-omni");
|
||||
expectToolText(result, "ok opencode-go/mimo-v2-omni");
|
||||
expect(request.model).toBe("mimo-v2.5");
|
||||
expectToolText(result, "ok opencode-go/mimo-v2.5");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@ type WorkflowMatrixEntry = {
|
||||
advisory?: boolean;
|
||||
command?: string;
|
||||
profiles?: string;
|
||||
suite_group?: string;
|
||||
suite_id?: string;
|
||||
};
|
||||
|
||||
@@ -1079,8 +1080,6 @@ describe("package artifact reuse", () => {
|
||||
expect(workflow).toContain("suite_group: native-live-extensions-media-video");
|
||||
expect(workflow).toContain("OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS=google,minimax");
|
||||
expect(workflow).toContain("OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS=openai,openrouter,xai");
|
||||
expect(workflow).toContain("suite_group: native-live-src-gateway-profiles-opencode-go");
|
||||
expect(workflow).toContain("opencode-go/mimo-v2-omni");
|
||||
expect(workflow).toContain(
|
||||
"inputs.live_suite_filter == 'native-live-src-gateway-profiles-anthropic'",
|
||||
);
|
||||
@@ -1125,6 +1124,24 @@ describe("package artifact reuse", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("pins OpenCode Go MiMo live profiles to both current V2.5 model refs", () => {
|
||||
const mimo = workflowMatrixEntry(
|
||||
LIVE_E2E_WORKFLOW,
|
||||
"validate_live_provider_suites",
|
||||
"native-live-src-gateway-profiles-opencode-go-mimo",
|
||||
);
|
||||
|
||||
expect(mimo).toMatchObject({
|
||||
advisory: true,
|
||||
command:
|
||||
"OPENCLAW_LIVE_GATEWAY_PROVIDERS=opencode-go OPENCLAW_LIVE_GATEWAY_MODELS=opencode-go/mimo-v2.5,opencode-go/mimo-v2.5-pro node .release-harness/scripts/test-live-shard.mjs native-live-src-gateway-profiles",
|
||||
profiles: "full",
|
||||
suite_group: "native-live-src-gateway-profiles-opencode-go",
|
||||
});
|
||||
expect(mimo.command).not.toContain("opencode-go/mimo-v2-omni");
|
||||
expect(mimo.command).not.toContain("opencode-go/mimo-v2-pro");
|
||||
});
|
||||
|
||||
it("runs Docker live harnesses from trusted helper scripts", () => {
|
||||
const workflow = readFileSync(LIVE_E2E_WORKFLOW, "utf8");
|
||||
const scenarios = readFileSync("scripts/lib/docker-e2e-scenarios.mjs", "utf8");
|
||||
|
||||
Reference in New Issue
Block a user