Skip to content

[0.x] Fix PrismTool dropping arguments when provider uses 'input' key#355

Open
sumaiazaman wants to merge 1 commit intolaravel:0.xfrom
sumaiazaman:fix-prism-tool-input-key
Open

[0.x] Fix PrismTool dropping arguments when provider uses 'input' key#355
sumaiazaman wants to merge 1 commit intolaravel:0.xfrom
sumaiazaman:fix-prism-tool-input-key

Conversation

@sumaiazaman
Copy link
Copy Markdown
Contributor

Fixes #291

Summary

Some AI providers (notably Anthropic) send tool call arguments under the `input` key instead of `arguments`. `PrismTool::toLaravelToolCall()` and `toLaravelToolResult()` only check for `arguments`, silently dropping all arguments when `input` is used.

The Bug

// Tool call from Anthropic uses 'input' key
$toolCall = [
    'id' => 'call_123',
    'name' => 'search',
    'input' => '{"query": "Laravel AI"}',  // 'input' not 'arguments'
];

$result = PrismTool::toLaravelToolCall($toolCall);
$result->arguments; // [] — all arguments silently lost

The Fix

Check `input` as a fallback when `arguments` is not present:

// Before
$toolCall['arguments']['schema_definition'] ?? $toolCall['arguments'] ?? []

// After
$arguments = $toolCall['arguments'] ?? $toolCall['input'] ?? [];

Applied to both `toLaravelToolCall()` and `toLaravelToolResult()`.

Consistency

This follows the same pattern used in PR #326 which fixed the identical issue in `DatabaseConversationStore`.

Changes

  • `src/Gateway/Prism/PrismTool.php` — Add `input` key fallback in both methods

Some providers send tool call arguments under the 'input' key instead
of 'arguments'. PrismTool::toLaravelToolCall() and toLaravelToolResult()
only check for 'arguments', silently dropping all arguments when
'input' is used.

Fixes laravel#291
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PrismTool: tool call arguments not mapped when provider uses 'input' key instead of 'arguments'

1 participant