From 78ff2494367147d094f1bb81061ae13bc6d2b53f Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Thu, 16 Jul 2026 19:58:17 +0200 Subject: [PATCH] fix(ai): expose max thinking for Kimi Coding K3 Closes #6737 --- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/scripts/generate-models.ts | 4 +++- packages/ai/src/providers/kimi-coding.models.ts | 1 + packages/ai/test/supports-xhigh.test.ts | 6 ++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 8f8584bb..88361100 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed Kimi Coding K3 thinking-level metadata to expose only the supported `max` level ([#6737](https://github.com/earendil-works/pi/issues/6737)). + ## [0.80.9] - 2026-07-16 ### Added diff --git a/packages/ai/scripts/generate-models.ts b/packages/ai/scripts/generate-models.ts index 580ff04d..29a16190 100644 --- a/packages/ai/scripts/generate-models.ts +++ b/packages/ai/scripts/generate-models.ts @@ -1627,6 +1627,7 @@ async function loadModelsDevData(): Promise[]> { const normalizedId = kimiAliases.has(modelId) ? "kimi-for-coding" : modelId; const normalizedName = kimiAliases.has(modelId) ? "Kimi For Coding" : m.name || normalizedId; + const isKimiK3 = normalizedId === "k3"; models.push({ id: normalizedId, @@ -1636,7 +1637,8 @@ async function loadModelsDevData(): Promise[]> { // Kimi For Coding's Anthropic-compatible API - SDK appends /v1/messages baseUrl: "https://api.kimi.com/coding", headers: { ...KIMI_STATIC_HEADERS }, - reasoning: m.reasoning === true, + reasoning: isKimiK3 || m.reasoning === true, + ...(isKimiK3 ? { thinkingLevelMap: KIMI_K3_THINKING_LEVEL_MAP } : {}), input: m.modalities?.input?.includes("image") ? ["text", "image"] : ["text"], cost: { input: m.cost?.input || 0, diff --git a/packages/ai/src/providers/kimi-coding.models.ts b/packages/ai/src/providers/kimi-coding.models.ts index 6e324784..065e9913 100644 --- a/packages/ai/src/providers/kimi-coding.models.ts +++ b/packages/ai/src/providers/kimi-coding.models.ts @@ -30,6 +30,7 @@ export const KIMI_CODING_MODELS = { baseUrl: "https://api.kimi.com/coding", headers: {"User-Agent":"KimiCLI/1.5"}, reasoning: true, + thinkingLevelMap: {"off":null,"minimal":null,"low":null,"medium":null,"high":null,"xhigh":null,"max":"max"}, input: ["text", "image"], cost: { input: 0, diff --git a/packages/ai/test/supports-xhigh.test.ts b/packages/ai/test/supports-xhigh.test.ts index 9888e93d..fa1eba91 100644 --- a/packages/ai/test/supports-xhigh.test.ts +++ b/packages/ai/test/supports-xhigh.test.ts @@ -110,6 +110,12 @@ describe("getSupportedThinkingLevels", () => { } }); + it("includes only max for Kimi Coding K3", () => { + const model = getModel("kimi-coding", "k3"); + expect(model).toBeDefined(); + expect(getSupportedThinkingLevels(model!)).toEqual(["max"]); + }); + it("includes only high for OpenCode Grok Build", () => { const model = getModel("opencode", "grok-build-0.1"); expect(model).toBeDefined();