File tree Expand file tree Collapse file tree 4 files changed +53
-2
lines changed
src/Providers/Anthropic/Handlers
tests/Providers/Anthropic Expand file tree Collapse file tree 4 files changed +53
-2
lines changed Original file line number Diff line number Diff line change @@ -98,7 +98,7 @@ public static function buildHttpRequestPayload(PrismRequest $request): array
9898 : config ('prism.anthropic.default_thinking_budget ' , 1024 ),
9999 ]
100100 : null ,
101- 'max_tokens ' => $ request ->maxTokens (),
101+ 'max_tokens ' => $ request ->maxTokens () ?? 64000 ,
102102 'temperature ' => $ request ->temperature (),
103103 'top_p ' => $ request ->topP (),
104104 'mcp_servers ' => $ request ->providerOptions ('mcp_servers ' ),
Original file line number Diff line number Diff line change @@ -90,7 +90,7 @@ public static function buildHttpRequestPayload(PrismRequest $request): array
9090 : config ('prism.anthropic.default_thinking_budget ' , 1024 ),
9191 ]
9292 : null ,
93- 'max_tokens ' => $ request ->maxTokens (),
93+ 'max_tokens ' => $ request ->maxTokens () ?? 64000 ,
9494 'temperature ' => $ request ->temperature (),
9595 'top_p ' => $ request ->topP (),
9696 'tools ' => static ::buildTools ($ request ) ?: null ,
Original file line number Diff line number Diff line change 319319 return true ;
320320 });
321321});
322+
323+ it ('always includes max_tokens in payload because it is required by anthropic ' , function (): void {
324+ FixtureResponse::fakeResponseSequence ('v1/messages ' , 'anthropic/structured ' );
325+
326+ $ schema = new ObjectSchema (
327+ 'simple ' ,
328+ 'Simple object ' ,
329+ [
330+ 'data ' => new StringSchema ('data ' , 'Some data ' ),
331+ ],
332+ ['data ' ]
333+ );
334+
335+ // Note: NOT calling withMaxTokens() - simulating user not setting it
336+ Prism::structured ()
337+ ->using (Provider::Anthropic, 'claude-3-5-haiku-latest ' )
338+ ->withMessages ([new UserMessage ('Generate simple data ' )])
339+ ->withSchema ($ schema )
340+ ->asStructured ();
341+
342+ Http::assertSent (function (Request $ request ): bool {
343+ $ payload = $ request ->data ();
344+
345+ // Anthropic API requires max_tokens - it should always be present
346+ expect ($ payload )->toHaveKey ('max_tokens ' );
347+ expect ($ payload ['max_tokens ' ])->toBeInt ();
348+ expect ($ payload ['max_tokens ' ])->toBeGreaterThan (0 );
349+
350+ return true ;
351+ });
352+ });
Original file line number Diff line number Diff line change 241241 });
242242});
243243
244+ it ('always includes max_tokens in payload because it is required by anthropic ' , function (): void {
245+ FixtureResponse::fakeResponseSequence ('v1/messages ' , 'anthropic/generate-text-with-a-prompt ' );
246+
247+ Prism::text ()
248+ ->using (Provider::Anthropic, 'claude-3-5-haiku-latest ' )
249+ ->withMessages ([new UserMessage ('Test ' )])
250+ ->asText ();
251+
252+ Http::assertSent (function (Request $ request ): bool {
253+ $ payload = $ request ->data ();
254+
255+ // Anthropic API requires max_tokens - it should always be present
256+ expect ($ payload )->toHaveKey ('max_tokens ' );
257+ expect ($ payload ['max_tokens ' ])->toBeInt ();
258+ expect ($ payload ['max_tokens ' ])->toBeGreaterThan (0 );
259+
260+ return true ;
261+ });
262+ });
263+
244264it ('can send images from file ' , function (): void {
245265 FixtureResponse::fakeResponseSequence ('v1/messages ' , 'anthropic/generate-text-with-image ' );
246266
You can’t perform that action at this time.
0 commit comments