diff --git a/packages/ai/test/abort.test.ts b/packages/ai/test/abort.test.ts index 767be7d04..7e2b9f97b 100644 --- a/packages/ai/test/abort.test.ts +++ b/packages/ai/test/abort.test.ts @@ -178,7 +178,7 @@ describe("AI Providers Abort Tests", () => { }); describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI Provider Abort", () => { - const llm = getModel("together", "moonshotai/Kimi-K2.6"); + const llm = getModel("together", "moonshotai/Kimi-K3"); it("should abort mid-stream", { retry: 3 }, async () => { await testAbortSignal(llm, { reasoningEffort: "high" }); diff --git a/packages/ai/test/context-overflow.test.ts b/packages/ai/test/context-overflow.test.ts index 564f3a10a..15d860435 100644 --- a/packages/ai/test/context-overflow.test.ts +++ b/packages/ai/test/context-overflow.test.ts @@ -338,8 +338,8 @@ describe("Context overflow error handling", () => { // ============================================================================= describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI", () => { - it("Kimi-K2.6 - should detect overflow via isContextOverflow", async () => { - const model = getModel("together", "moonshotai/Kimi-K2.6"); + it("Kimi-K3 - should detect overflow via isContextOverflow", async () => { + const model = getModel("together", "moonshotai/Kimi-K3"); const result = await testContextOverflow(model, process.env.TOGETHER_API_KEY!); logResult(result); diff --git a/packages/ai/test/cross-provider-handoff.test.ts b/packages/ai/test/cross-provider-handoff.test.ts index ab02b8248..93dc93f01 100644 --- a/packages/ai/test/cross-provider-handoff.test.ts +++ b/packages/ai/test/cross-provider-handoff.test.ts @@ -107,7 +107,7 @@ const PROVIDER_MODEL_PAIRS: ProviderModelPair[] = [ // Hugging Face { provider: "huggingface", model: "moonshotai/Kimi-K2.5", label: "huggingface-kimi-k2.5" }, // Together AI - { provider: "together", model: "moonshotai/Kimi-K2.6", label: "together-kimi-k2.6" }, + { provider: "together", model: "moonshotai/Kimi-K3", label: "together-kimi-k3" }, // Baseten { provider: "baseten", model: "zai-org/GLM-5.2", label: "baseten-glm-5.2" }, // Kimi For Coding diff --git a/packages/ai/test/empty.test.ts b/packages/ai/test/empty.test.ts index b45ceed68..a7a9c5f45 100644 --- a/packages/ai/test/empty.test.ts +++ b/packages/ai/test/empty.test.ts @@ -367,7 +367,7 @@ describe("AI Providers Empty Message Tests", () => { }); describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI Provider Empty Messages", () => { - const llm = getModel("together", "moonshotai/Kimi-K2.6"); + const llm = getModel("together", "moonshotai/Kimi-K3"); it("should handle empty content array", { retry: 3, timeout: 30000 }, async () => { await testEmptyMessage(llm); diff --git a/packages/ai/test/image-tool-result.test.ts b/packages/ai/test/image-tool-result.test.ts index a331f2a34..76ca2374b 100644 --- a/packages/ai/test/image-tool-result.test.ts +++ b/packages/ai/test/image-tool-result.test.ts @@ -298,8 +298,8 @@ describe("Tool Results with Images", () => { }); }); - describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI Provider (Kimi-K2.6)", () => { - const llm = getModel("together", "moonshotai/Kimi-K2.6"); + describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI Provider (Kimi-K3)", () => { + const llm = getModel("together", "moonshotai/Kimi-K3"); const options = { reasoningEffort: "high" } satisfies StreamOptionsWithExtras; it("should handle tool result with only image", { retry: 3, timeout: 30000 }, async () => { diff --git a/packages/ai/test/stream.test.ts b/packages/ai/test/stream.test.ts index eb9afa226..cf48452b2 100644 --- a/packages/ai/test/stream.test.ts +++ b/packages/ai/test/stream.test.ts @@ -756,8 +756,8 @@ describe("Generate E2E Tests", () => { }); }); - describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI Provider (Kimi-K2.6 via OpenAI Completions)", () => { - const llm = getModel("together", "moonshotai/Kimi-K2.6"); + describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI Provider (Kimi-K3 via OpenAI Completions)", () => { + const llm = getModel("together", "moonshotai/Kimi-K3"); it("should complete basic text generation", { retry: 3 }, async () => { await basicTextGeneration(llm); diff --git a/packages/ai/test/together-models.test.ts b/packages/ai/test/together-models.test.ts index 89c85525d..fb28555b9 100644 --- a/packages/ai/test/together-models.test.ts +++ b/packages/ai/test/together-models.test.ts @@ -13,8 +13,8 @@ afterEach(() => { }); describe("Together models", () => { - it("registers the default Kimi K2.6 model via OpenAI-compatible Chat Completions API", () => { - const model = getModel("together", "moonshotai/Kimi-K2.6"); + it("registers the default Kimi K3 model via OpenAI-compatible Chat Completions API", () => { + const model = getModel("together", "moonshotai/Kimi-K3"); expect(model).toBeDefined(); expect(model.api).toBe("openai-completions"); @@ -23,12 +23,12 @@ describe("Together models", () => { expect(model.reasoning).toBe(true); expect(model.thinkingLevelMap).toEqual({ minimal: null, low: null, medium: null }); expect(model.input).toEqual(["text", "image"]); - expect(model.contextWindow).toBe(262144); - expect(model.maxTokens).toBe(131000); + expect(model.contextWindow).toBe(1048576); + expect(model.maxTokens).toBe(131072); expect(model.cost).toEqual({ - input: 1.2, - output: 4.5, - cacheRead: 0.2, + input: 3, + output: 15, + cacheRead: 0.3, cacheWrite: 0, }); expect(model.compat).toEqual({ diff --git a/packages/ai/test/tokens.test.ts b/packages/ai/test/tokens.test.ts index f85535e9f..2355cd992 100644 --- a/packages/ai/test/tokens.test.ts +++ b/packages/ai/test/tokens.test.ts @@ -186,7 +186,7 @@ describe("Token Statistics on Abort", () => { }); describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI Provider", () => { - const llm = getModel("together", "moonshotai/Kimi-K2.6"); + const llm = getModel("together", "moonshotai/Kimi-K3"); it("should include token stats when aborted mid-stream", { retry: 3, timeout: 30000 }, async () => { await testTokensOnAbort(llm); diff --git a/packages/ai/test/tool-call-without-result.test.ts b/packages/ai/test/tool-call-without-result.test.ts index 57945ccad..2937ffdcb 100644 --- a/packages/ai/test/tool-call-without-result.test.ts +++ b/packages/ai/test/tool-call-without-result.test.ts @@ -191,7 +191,7 @@ describe("Tool Call Without Result Tests", () => { }); describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI Provider", () => { - const model = getModel("together", "moonshotai/Kimi-K2.6"); + const model = getModel("together", "moonshotai/Kimi-K3"); it("should filter out tool calls without corresponding tool results", { retry: 3, timeout: 30000 }, async () => { await testToolCallWithoutResult(model, { reasoningEffort: "high" }); diff --git a/packages/ai/test/total-tokens.test.ts b/packages/ai/test/total-tokens.test.ts index fabff7f69..1d558631a 100644 --- a/packages/ai/test/total-tokens.test.ts +++ b/packages/ai/test/total-tokens.test.ts @@ -379,7 +379,7 @@ describe("totalTokens field", () => { describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI", () => { it("Kimi-K2.6 - should return totalTokens equal to sum of components", { retry: 3, timeout: 60000 }, async () => { - const llm = getModel("together", "moonshotai/Kimi-K2.6"); + const llm = getModel("together", "moonshotai/Kimi-K3"); console.log(`\nTogether AI / ${llm.id}:`); const { first, second } = await testTotalTokensWithCache(llm, { diff --git a/packages/ai/test/unicode-surrogate.test.ts b/packages/ai/test/unicode-surrogate.test.ts index b9113c381..d9f825341 100644 --- a/packages/ai/test/unicode-surrogate.test.ts +++ b/packages/ai/test/unicode-surrogate.test.ts @@ -546,7 +546,7 @@ describe("AI Providers Unicode Surrogate Pair Tests", () => { }); describe.skipIf(!process.env.TOGETHER_API_KEY)("Together AI Provider Unicode Handling", () => { - const llm = getModel("together", "moonshotai/Kimi-K2.6"); + const llm = getModel("together", "moonshotai/Kimi-K3"); const options = { reasoningEffort: "high" } satisfies StreamOptionsWithExtras; it("should handle emoji in tool results", { retry: 3, timeout: 30000 }, async () => { diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 5766db7a9..572b4e79f 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -27,6 +27,7 @@ - Fixed new sessions being lost when pi exits before the first assistant response. The session file is now created when the first user message is sent ([#10000](https://github.com/earendil-works/pi/issues/10000)). - Fixed the Fireworks default model pointing at the removed Kimi K2.6 model; it now defaults to Kimi K3. - Fixed the OpenCode Go default model pointing at the removed Kimi K2.6 model; it now defaults to Kimi K3. +- Fixed the Together default model pointing at the removed Kimi K2.6 model; it now defaults to Kimi K3. ## [0.87.1] - 2026-09-22 diff --git a/packages/coding-agent/src/core/model-resolver.ts b/packages/coding-agent/src/core/model-resolver.ts index f2c749bbe..5eef3690f 100644 --- a/packages/coding-agent/src/core/model-resolver.ts +++ b/packages/coding-agent/src/core/model-resolver.ts @@ -44,7 +44,7 @@ export const defaultModelPerProvider: Partial> = { "moonshotai-cn": "kimi-k2.6", huggingface: "moonshotai/Kimi-K2.6", fireworks: "accounts/fireworks/models/kimi-k3", - together: "moonshotai/Kimi-K2.6", + together: "moonshotai/Kimi-K3", baseten: "zai-org/GLM-5.2", opencode: "kimi-k2.6", "opencode-go": "kimi-k3",