mirror of
https://github.com/earendil-works/pi.git
synced 2026-10-02 08:44:38 +08:00
fix(ai,coding-agent): replace removed Together Kimi K2.6 with Kimi K3
Together no longer lists Kimi K2.6, which broke type checks against the hydrated catalog. Tests use Kimi K3 and the Together default model now points at it.
This commit is contained in:
@@ -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" });
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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" });
|
||||
|
||||
@@ -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, {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ export const defaultModelPerProvider: Partial<Record<KnownProvider, string>> = {
|
||||
"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",
|
||||
|
||||
Reference in New Issue
Block a user