From 525a82a971e749ca7d694c4e6cabffbc81cdc8a2 Mon Sep 17 00:00:00 2001 From: Leo Date: Thu, 5 Nov 2026 03:52:43 +0800 Subject: [PATCH] chore(catalog): refresh for the Go plane's new model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The nightly's source moved again: the Go plane gained one model (`hy4`), 30 → 31 served, and the Zen plane is unchanged at 82. - `src/catalog-data.ts` regenerated (`pnpm run catalog:shim -- --write`); - `docs/redirect-planes.md`: the served/listed cell, the `0 of 31` sentence and the plane-by-plane `(none)` cell; - `test/catalog.test.ts`: the Go count constant, which stays literal on purpose. `pnpm run catalog:shim` now reports the shim current and `pnpm run limits:shim` reports the allowance table up to date. --- docs/redirect-planes.md | 6 +++--- src/catalog-data.ts | 14 ++++++++++++++ test/catalog.test.ts | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/redirect-planes.md b/docs/redirect-planes.md index 6d9251d..bcc0402 100644 --- a/docs/redirect-planes.md +++ b/docs/redirect-planes.md @@ -11,7 +11,7 @@ A **plane** is one gateway base URL with its own catalog and its own credential. | Plane | Route id | Base URL | Credential | Models | | :-- | :-- | :-- | :-- | --: | | Zen (pay-as-you-go, free tier) | `opencode` | the `endpoint` family's | `OPENCODE_API_KEY` | 82 served / 132 listed | -| Go (subscription) | `opencode-go` | the `endpoint` family's | `OPENCODE_GO_API_KEY` | 30 served / 37 listed | +| Go (subscription) | `opencode-go` | the `endpoint` family's | `OPENCODE_GO_API_KEY` | 31 served / 38 listed | Counts as of 2026-11-03 (the shipped shim, regenerated in #132 and refreshed for `pulse-alpha-free`); the document's 2026-10-09 stamp is for its measurements. @@ -27,13 +27,13 @@ A **shape** is one wire protocol, named by the SDK a model declares in the catal | SDK in the catalog | Protocol | Zen | Go | | :------------------ | :---------------------- | --: | ----: | -| _(none)_ | `openai-completions` | 25 | 19 | +| _(none)_ | `openai-completions` | 25 | 20 | | `@ai-sdk/openai` | `openai-responses` | 31 | **5** | | `@ai-sdk/anthropic` | `anthropic-messages` | 17 | **5** | | `@ai-sdk/mistral` | `mistral-conversations` | 1 | — | | `@ai-sdk/google` | `google-generative-ai` | 8 | **1** | -**Absence is the signal, and it is a real one.** Both planes set a provider-level `npm` of `@ai-sdk/openai-compatible` in `models.dev`, and **no model declares it explicitly**: 0 of 82 on Zen, 0 of 30 on Go. A model that speaks the completions shape simply omits `provider.npm` and inherits it. So "no SDK" does not mean "unknown"; it means _the provider default_, which is the protocol the route was itself registered with. +**Absence is the signal, and it is a real one.** Both planes set a provider-level `npm` of `@ai-sdk/openai-compatible` in `models.dev`, and **no model declares it explicitly**: 0 of 82 on Zen, 0 of 31 on Go. A model that speaks the completions shape simply omits `provider.npm` and inherits it. So "no SDK" does not mean "unknown"; it means _the provider default_, which is the protocol the route was itself registered with. That is why the servability check treats `undefined` as servable, and why `@ai-sdk/openai-compatible` is deliberately **not** in `PROTOCOL_FOR_SDK`: listing it would record the default as though it were an override. The coverage guard still covers the case where a model declares it explicitly. None do today, and if one did, the test would name it rather than drop the model. diff --git a/src/catalog-data.ts b/src/catalog-data.ts index 30739dd..5a42159 100644 --- a/src/catalog-data.ts +++ b/src/catalog-data.ts @@ -309,6 +309,20 @@ export const OPENCODE_GO_CATALOG: readonly CatalogModelSpec[] = [ reasoning: true, reasoning_options: [{ type: "effort", values: ["none", "low", "high"] }], }, + { + context_window: 1_048_576, + cost: { + cache_read: 0.042, + input: 0.834, + output: 2.501, + }, + id: "hy4", + input_modalities: ["text", "image"], + max_output_tokens: 65_536, + name: "Hy4", + reasoning: true, + reasoning_options: [{ type: "effort", values: ["none", "high"] }], + }, { context_window: 1_024_000, cost: { diff --git a/test/catalog.test.ts b/test/catalog.test.ts index 0c0aaa0..9377f2d 100644 --- a/test/catalog.test.ts +++ b/test/catalog.test.ts @@ -92,7 +92,7 @@ describe("OpenCode Model Catalog & Enrichment", () => { }); it("ships only active, priced models in the bundled Go shim", () => { - expect(OPENCODE_GO_CATALOG.length).toBe(30); + expect(OPENCODE_GO_CATALOG.length).toBe(31); for (const model of OPENCODE_GO_CATALOG) { expect(model.id.length).toBeGreaterThan(0); expect(model.name.length).toBeGreaterThan(0);