diff --git a/packages/core/src/aisdk.ts b/packages/core/src/aisdk.ts index 492428426a6..b7683122711 100644 --- a/packages/core/src/aisdk.ts +++ b/packages/core/src/aisdk.ts @@ -413,7 +413,7 @@ function mapBodyToProviderOptions(model: Info, packageName: string) { function callOptions(request: LLMRequest): LanguageModelV3CallOptions { return { prompt: prompt(request), - maxOutputTokens: request.generation?.maxTokens ?? request.model.route.defaults.limits?.output, + maxOutputTokens: request.generation?.maxTokens, temperature: request.generation?.temperature, stopSequences: request.generation?.stop === undefined ? undefined : [...request.generation.stop], topP: request.generation?.topP, diff --git a/packages/core/test/aisdk.test.ts b/packages/core/test/aisdk.test.ts index 693d790685c..ccf666a8ea3 100644 --- a/packages/core/test/aisdk.test.ts +++ b/packages/core/test/aisdk.test.ts @@ -98,6 +98,23 @@ it.effect("projects request settings, headers, and body overlays", () => }), ) +it.effect("leaves max output tokens unset when the request omits them", () => + Effect.gen(function* () { + const aisdk = yield* AISDK.Service + yield* aisdk.hook.sdk((event) => { + event.sdk = { languageModel: () => ({ provider: event.model.providerID }) } + }) + + const resolved = yield* aisdk.model({ + ...model("@openrouter/ai-sdk-provider"), + limit: { context: 500_000, output: 500_000 }, + }) + const prepared = yield* compileRequest(LLM.request({ model: resolved, prompt: "Hello" })) + + expect(prepared.body.maxOutputTokens).toBeUndefined() + }), +) + it.effect("maps pro reasoning bodies to AI SDK provider options", () => Effect.gen(function* () { const aisdk = yield* AISDK.Service