From 12315f61baa5fbdafe23f60282ed1ad0bb177a55 Mon Sep 17 00:00:00 2001 From: Zortos Date: Tue, 17 Mar 2026 20:09:31 +0100 Subject: [PATCH] Add new Copilot model aliases and catalog entries --- packages/contracts/src/model.ts | 6 ++++++ packages/shared/src/model.test.ts | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/packages/contracts/src/model.ts b/packages/contracts/src/model.ts index af7fb956..6b01a325 100644 --- a/packages/contracts/src/model.ts +++ b/packages/contracts/src/model.ts @@ -35,6 +35,7 @@ export const MODEL_OPTIONS_BY_PROVIDER = { ], copilot: [ { slug: "gpt-5.4", name: "GPT-5.4" }, + { slug: "gpt-5.4-mini", name: "GPT-5.4 mini" }, { slug: "claude-sonnet-4.6", name: "Claude Sonnet 4.6" }, { slug: "claude-sonnet-4.5", name: "Claude Sonnet 4.5" }, { slug: "claude-haiku-4.5", name: "Claude Haiku 4.5" }, @@ -43,6 +44,7 @@ export const MODEL_OPTIONS_BY_PROVIDER = { { slug: "claude-opus-4.5", name: "Claude Opus 4.5" }, { slug: "claude-sonnet-4", name: "Claude Sonnet 4" }, { slug: "gemini-3-pro-preview", name: "Gemini 3 Pro (Preview)" }, + { slug: "gemini-3.1-pro", name: "Gemini 3.1 Pro" }, { slug: "gpt-5.3-codex", name: "GPT-5.3 Codex" }, { slug: "gpt-5.2-codex", name: "GPT-5.2 Codex" }, { slug: "gpt-5.2", name: "GPT-5.2" }, @@ -52,6 +54,7 @@ export const MODEL_OPTIONS_BY_PROVIDER = { { slug: "gpt-5.1", name: "GPT-5.1" }, { slug: "gpt-5-mini", name: "GPT-5 mini" }, { slug: "gpt-4.1", name: "GPT-4.1" }, + { slug: "raptor-mini", name: "Raptor mini" }, ], } as const satisfies Record; export type ModelOptionsByProvider = typeof MODEL_OPTIONS_BY_PROVIDER; @@ -75,6 +78,7 @@ export const MODEL_SLUG_ALIASES_BY_PROVIDER = { copilot: { "4.1": "gpt-4.1", "5.4": "gpt-5.4", + "5.4-mini": "gpt-5.4-mini", "5-mini": "gpt-5-mini", "5.1": "gpt-5.1", "5.1-codex": "gpt-5.1-codex", @@ -87,6 +91,8 @@ export const MODEL_SLUG_ALIASES_BY_PROVIDER = { sonnet: "claude-sonnet-4.6", opus: "claude-opus-4.6", gemini: "gemini-3-pro-preview", + "gemini-3.1": "gemini-3.1-pro", + raptor: "raptor-mini", }, } as const satisfies Record>; diff --git a/packages/shared/src/model.test.ts b/packages/shared/src/model.test.ts index 8771a24c..18334f2c 100644 --- a/packages/shared/src/model.test.ts +++ b/packages/shared/src/model.test.ts @@ -16,6 +16,12 @@ describe("normalizeModelSlug", () => { expect(normalizeModelSlug("gpt-5.3")).toBe("gpt-5.3-codex"); }); + it("maps copilot aliases to canonical slugs", () => { + expect(normalizeModelSlug("5.4-mini", "copilot")).toBe("gpt-5.4-mini"); + expect(normalizeModelSlug("gemini-3.1", "copilot")).toBe("gemini-3.1-pro"); + expect(normalizeModelSlug("raptor", "copilot")).toBe("raptor-mini"); + }); + it("returns null for empty or missing values", () => { expect(normalizeModelSlug("")).toBeNull(); expect(normalizeModelSlug(" ")).toBeNull(); @@ -50,6 +56,13 @@ describe("resolveModelSlug", () => { expect(resolveModelSlug(model.slug)).toBe(model.slug); } }); + + it("resolves supported copilot model options", () => { + for (const model of MODEL_OPTIONS_BY_PROVIDER.copilot) { + expect(resolveModelSlug(model.slug, "copilot")).toBe(model.slug); + } + }); + it("keeps codex defaults for backward compatibility", () => { expect(getDefaultModel()).toBe(DEFAULT_MODEL_BY_PROVIDER.codex); expect(getModelOptions()).toEqual(MODEL_OPTIONS_BY_PROVIDER.codex);