Skip to content

Add Concurrent marker interface for tools#286

Open
CamilleScholtz wants to merge 1 commit intolaravel:0.xfrom
CamilleScholtz:feat/concurrent-tool-support
Open

Add Concurrent marker interface for tools#286
CamilleScholtz wants to merge 1 commit intolaravel:0.xfrom
CamilleScholtz:feat/concurrent-tool-support

Conversation

@CamilleScholtz
Copy link

Summary

Prism PHP supports concurrent tool execution via ->concurrent() on tools, allowing multiple I/O-bound tool calls to run in parallel using Laravel's Concurrency facade. However, the Laravel AI SDK has no way to expose this — createPrismTool() never calls ->concurrent().

This PR adds a Concurrent marker interface that tools can implement to opt-in to parallel execution.

Changes

  • New Laravel\Ai\Contracts\Concurrent interface — empty marker interface following the existing pattern (HasTools, HasStructuredOutput, HasMiddleware, etc.)
  • Modified AddsToolsToPrismRequests::createPrismTool() — checks if the tool implements Concurrent and calls ->concurrent() on the Prism tool
  • Added tests — verifies concurrent tools get marked, and non-concurrent tools don't

Usage

use Laravel\Ai\Contracts\Concurrent;
use Laravel\Ai\Contracts\Tool;

class SearchPlacesTool implements Concurrent, Tool
{
    // Tool implementation...
}

When the AI model requests multiple tool calls in a single step, tools implementing Concurrent will execute in parallel rather than sequentially — reducing total wait time for I/O-bound operations like API calls, database queries, or file reads.

How it works

Prism groups tool calls by their concurrency flag. Concurrent tools are batched and executed via Concurrency::run() (Laravel's Concurrency facade), while sequential tools run one at a time. Results are returned in the original order regardless of execution timing. Error handling is identical for both — if one concurrent tool fails, others still complete.

Tools implementing the Concurrent interface will have their Prism tool
marked as concurrent, enabling parallel execution when multiple tools
are called in a single step.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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.

1 participant