chore(vendor): import pi 1.3.0

Imported as a linear vendor commit so forge rebases do not replay the upstream root tree.

git-subtree-dir: third_party/pi

git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
This commit is contained in:
alexion committed 2026-10-15 17:58:48 -04:00
1 parent 719370c8f7
commit 6081e3e325
1743 files changed
+205459 -131704

No files matched your search

+22 -2
View File
@@ -2,12 +2,12 @@ import { describe, expect, it } from "vitest";
import type { AssistantMessage } from "../src/types.ts";
import { isContextOverflow, isRecoverableLength } from "../src/utils/overflow.ts";
function createErrorMessage(errorMessage: string): AssistantMessage {
function createErrorMessage(errorMessage: string, provider = "ollama"): AssistantMessage {
return {
role: "assistant",
content: [],
api: "openai-completions",
provider: "ollama",
provider,
model: "qwen3.5:35b",
usage: {
input: 0,
@@ -35,6 +35,18 @@ describe("isContextOverflow", () => {
expect(isContextOverflow(message, 32768)).toBe(true);
});
it("detects z.ai prompt-too-long errors", () => {
// Regression for #9805.
const message = createErrorMessage('400 {"code":"1261","message":"Prompt too long"}', "zai");
expect(isContextOverflow(message, 1048576)).toBe(true);
});
it("detects z.ai CN endpoint prompt-exceeds-max-length errors", () => {
// Regression for #10208.
const message = createErrorMessage('400 {"code":"1261","message":"Prompt exceeds max length"}', "zai");
expect(isContextOverflow(message, 1048576)).toBe(true);
});
it("detects Together AI context length errors", () => {
const message = createErrorMessage(
"400 The input (516368 tokens) is longer than the model's context length (262144 tokens).",
@@ -80,6 +92,14 @@ describe("isContextOverflow", () => {
expect(isContextOverflow(message, 32768)).toBe(false);
});
it("only treats bodyless 400 and 413 errors as overflow for Cerebras", () => {
// Regression for #9482.
for (const errorMessage of ["400 status code (no body)", "413 status code (no body)"]) {
expect(isContextOverflow(createErrorMessage(errorMessage, "cerebras"), 131072)).toBe(true);
expect(isContextOverflow(createErrorMessage(errorMessage, "opencode-go"), 1000000)).toBe(false);
}
});
it("does not treat Bedrock throttling 'Too many tokens' as overflow", () => {
// Bedrock returns this for HTTP 429 rate limiting, NOT context overflow.
// formatBedrockError uses a human-readable prefix for ThrottlingException.