From e7d42f83e6a1334bcb9516b5c665a6892ffb5de0 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Mon, 31 Aug 2026 19:23:21 -0400 Subject: [PATCH] refactor(core): slice model references at the first slash (#46467) --- packages/core/src/model.ts | 6 +++--- packages/core/test/model.test.ts | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/core/src/model.ts b/packages/core/src/model.ts index 21bf996a1be..dec621381ac 100644 --- a/packages/core/src/model.ts +++ b/packages/core/src/model.ts @@ -38,10 +38,10 @@ export function compatibility(input: unknown): Compatibility | undefined { } export function parse(input: string): { providerID: Provider.ID; modelID: ID } { - const [providerID, ...modelID] = input.split("/") + const index = input.indexOf("/") return { - providerID: Provider.ID.make(providerID), - modelID: ID.make(modelID.join("/")), + providerID: Provider.ID.make(index === -1 ? input : input.slice(0, index)), + modelID: ID.make(index === -1 ? "" : input.slice(index + 1)), } } diff --git a/packages/core/test/model.test.ts b/packages/core/test/model.test.ts index 0c545eeeefd..3844e42a0dd 100644 --- a/packages/core/test/model.test.ts +++ b/packages/core/test/model.test.ts @@ -5,6 +5,23 @@ import { Provider } from "@opencode-ai/core/provider" const decode = Schema.decodeUnknownSync(Model.Ref) +describe("Model.parse", () => { + test.each([ + ["vendor/model", "vendor", "model"], + ["vendor/team/model", "vendor", "team/model"], + ["vendor", "vendor", ""], + ["", "", ""], + ["/model", "", "model"], + ["vendor/", "vendor", ""], + ["vendor//model/", "vendor", "/model/"], + ])("parses %j at the first slash", (input, providerID, modelID) => { + expect(Model.parse(input)).toEqual({ + providerID: Provider.ID.make(providerID), + modelID: Model.ID.make(modelID), + }) + }) +}) + describe("Model.Ref", () => { test("accepts a model selection without a variant", () => { expect(decode({ id: "claude-sonnet", providerID: "anthropic" })).toEqual({