fix(ai): cap context-sized default output budgets

closes #4614
This commit is contained in:
Mario Zechner
2026-05-17 20:06:59 +02:00
parent 6236ad5077
commit 6d474f8c1a
2 changed files with 17 additions and 1 deletions

View File

@@ -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

View File

@@ -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<Api>, 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,