feat(kiro): add GPT-5.6 model family (#2596)

Add GPT-5.6 Sol/Terra/Luna and their synthetic thinking/agentic/
thinking-agentic variants to the Kiro static catalog with the observed
272k context window and credit multipliers (2.4/1.2/0.6), register MITM
mapping slots for the new base ids, and override runtime capabilities so
the GPT-5.6 family reports the 272k window instead of the generic GPT-5
profile.
This commit is contained in:
Edison42
2026-07-16 14:38:08 +07:00
committed by decolua
parent 0248dd5348
commit b94685b80d
5 changed files with 106 additions and 4 deletions
+17
View File
@@ -11,6 +11,15 @@ describe("getCapabilitiesForModel", () => {
search: true,
};
const kiroGpt56Expected = {
contextWindow: 272000,
maxOutput: 128000,
thinkingFormat: "openai",
reasoning: true,
vision: true,
search: true,
};
it("reports Kiro Claude Opus 4.8 as a 1M context model", () => {
expect(getCapabilitiesForModel("kiro", "claude-opus-4.8").contextWindow).toBe(1000000);
expect(getCapabilitiesForModel("kiro", "anthropic/claude-opus-4.8").contextWindow).toBe(1000000);
@@ -26,4 +35,12 @@ describe("getCapabilitiesForModel", () => {
expect(getCapabilitiesForModel("kiro", "claude-sonnet-5-agentic")).toMatchObject(claudeSonnet5Expected);
expect(getCapabilitiesForModel("kiro", "claude-sonnet-5-thinking-agentic")).toMatchObject(claudeSonnet5Expected);
});
it("reports Kiro GPT 5.6 models with the Kiro 272k context window", () => {
expect(getCapabilitiesForModel("kiro", "gpt-5.6-sol")).toMatchObject(kiroGpt56Expected);
expect(getCapabilitiesForModel("kiro", "openai/gpt-5.6-sol")).toMatchObject(kiroGpt56Expected);
expect(getCapabilitiesForModel("kiro", "gpt-5.6-terra-thinking")).toMatchObject(kiroGpt56Expected);
expect(getCapabilitiesForModel("kiro", "gpt-5.6-luna-agentic")).toMatchObject(kiroGpt56Expected);
expect(getCapabilitiesForModel("kiro", "gpt-5.6-sol-thinking-agentic")).toMatchObject(kiroGpt56Expected);
});
});
+50
View File
@@ -25,6 +25,13 @@ describe("Kiro MITM model slots", () => {
expect(simpleTask).toBeTruthy();
expect(simpleTask.alias).toBe("simple-task");
});
it("offers mappable slots for GPT-5.6 family models", () => {
const models = new Map(kiro.defaultModels.map((m) => [m.id, m]));
expect(models.get("gpt-5.6-sol")).toMatchObject({ alias: "gpt-5.6-sol", contextLength: 272000, rateMultiplier: 2.4 });
expect(models.get("gpt-5.6-terra")).toMatchObject({ alias: "gpt-5.6-terra", contextLength: 272000, rateMultiplier: 1.2 });
expect(models.get("gpt-5.6-luna")).toMatchObject({ alias: "gpt-5.6-luna", contextLength: 272000, rateMultiplier: 0.6 });
});
});
describe("Kiro static provider models", () => {
@@ -37,4 +44,47 @@ describe("Kiro static provider models", () => {
"claude-sonnet-5-thinking-agentic",
]));
});
it("includes GPT-5.6 family and synthetic Kiro variants", () => {
const models = new Map((PROVIDER_MODELS.kr || []).map((model) => [model.id, model]));
const ids = [...models.keys()];
expect(ids).toEqual(expect.arrayContaining([
"gpt-5.6-sol",
"gpt-5.6-sol-thinking",
"gpt-5.6-sol-agentic",
"gpt-5.6-sol-thinking-agentic",
"gpt-5.6-terra",
"gpt-5.6-terra-thinking",
"gpt-5.6-terra-agentic",
"gpt-5.6-terra-thinking-agentic",
"gpt-5.6-luna",
"gpt-5.6-luna-thinking",
"gpt-5.6-luna-agentic",
"gpt-5.6-luna-thinking-agentic",
]));
for (const [id, rateMultiplier] of [
["gpt-5.6-sol", 2.4],
["gpt-5.6-sol-thinking", 2.4],
["gpt-5.6-sol-agentic", 2.4],
["gpt-5.6-sol-thinking-agentic", 2.4],
["gpt-5.6-terra", 1.2],
["gpt-5.6-terra-thinking", 1.2],
["gpt-5.6-terra-agentic", 1.2],
["gpt-5.6-terra-thinking-agentic", 1.2],
["gpt-5.6-luna", 0.6],
["gpt-5.6-luna-thinking", 0.6],
["gpt-5.6-luna-agentic", 0.6],
["gpt-5.6-luna-thinking-agentic", 0.6],
]) {
const model = models.get(id);
const upstreamModelId = id.replace(/-(thinking-agentic|thinking|agentic)$/, "");
expect(model).toMatchObject({
contextLength: 272000,
rateMultiplier,
upstreamModelId,
});
expect(model.description).toContain("272k context window");
}
});
});