From 6d474f8c1ac09f44f07b22991942c2ab0da6d63e Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Sun, 17 May 2026 20:06:59 +0200 Subject: [PATCH] fix(ai): cap context-sized default output budgets closes #4614 --- packages/ai/CHANGELOG.md | 6 ++++++ packages/ai/src/providers/simple-options.ts | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index ffa59a3c..18759b97 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [Unreleased] + +### Fixed + +- Fixed `streamSimple()` defaults for models whose advertised output limit is effectively their full context window to avoid impossible default requests ([#4614](https://github.com/earendil-works/pi/issues/4614)). + ## [0.74.1] - 2026-05-16 ### Added diff --git a/packages/ai/src/providers/simple-options.ts b/packages/ai/src/providers/simple-options.ts index 288f2c52..d9dcc348 100644 --- a/packages/ai/src/providers/simple-options.ts +++ b/packages/ai/src/providers/simple-options.ts @@ -1,9 +1,19 @@ import type { Api, Model, SimpleStreamOptions, StreamOptions, ThinkingBudgets, ThinkingLevel } from "../types.js"; +const DEFAULT_MAX_OUTPUT_TOKENS = 32000; +const CONTEXT_WINDOW_OUTPUT_TOLERANCE = 1024; + export function buildBaseOptions(model: Model, options?: SimpleStreamOptions, apiKey?: string): StreamOptions { + const defaultMaxTokens = + model.maxTokens > 0 + ? model.maxTokens >= model.contextWindow - CONTEXT_WINDOW_OUTPUT_TOLERANCE + ? Math.min(model.maxTokens, DEFAULT_MAX_OUTPUT_TOKENS) + : model.maxTokens + : undefined; + return { temperature: options?.temperature, - maxTokens: options?.maxTokens ?? (model.maxTokens > 0 ? model.maxTokens : undefined), + maxTokens: options?.maxTokens ?? defaultMaxTokens, signal: options?.signal, apiKey: apiKey || options?.apiKey, transport: options?.transport,