From 22a9c484e73506777e8e678913bdd275f00d7951 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Sat, 16 May 2026 23:33:06 +0200 Subject: [PATCH] fix(ai): respect model output token limits closes #4539 --- packages/ai/CHANGELOG.md | 1 + packages/ai/src/providers/simple-options.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index f962fcee..cec9ae7c 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -16,6 +16,7 @@ - Fixed Inception Mercury 2 tool calling on OpenRouter by marking `off` as unsupported in `thinkingLevelMap`, so the openai-completions provider omits the reasoning param instead of defaulting to `{reasoning:{effort:"none"}}` (which puts Mercury 2 in instant mode, disabling tool calls). - Fixed OpenAI Codex SSE retries to honor `retry-after-ms` and `retry-after` headers before falling back to exponential backoff. - Fixed context overflow detection for LiteLLM-wrapped OpenAI-compatible errors using `exceeds the model's maximum context length of ... tokens` wording ([#4563](https://github.com/earendil-works/pi/issues/4563)). +- Fixed `streamSimple()` defaults to respect model output limits above 32000 tokens instead of clamping provider requests to 32000 ([#4539](https://github.com/earendil-works/pi/issues/4539)). ## [0.74.0] - 2026-05-07 diff --git a/packages/ai/src/providers/simple-options.ts b/packages/ai/src/providers/simple-options.ts index 914ba5e7..288f2c52 100644 --- a/packages/ai/src/providers/simple-options.ts +++ b/packages/ai/src/providers/simple-options.ts @@ -3,7 +3,7 @@ import type { Api, Model, SimpleStreamOptions, StreamOptions, ThinkingBudgets, T export function buildBaseOptions(model: Model, options?: SimpleStreamOptions, apiKey?: string): StreamOptions { return { temperature: options?.temperature, - maxTokens: options?.maxTokens ?? (model.maxTokens > 0 ? Math.min(model.maxTokens, 32000) : undefined), + maxTokens: options?.maxTokens ?? (model.maxTokens > 0 ? model.maxTokens : undefined), signal: options?.signal, apiKey: apiKey || options?.apiKey, transport: options?.transport,