AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.
feat(backend/copilot): parallel block execution via infrastructure-level pre-launch (#12472)
## Summary - Implements **infrastructure-level parallel tool execution** for CoPilot: all tools called in a single LLM turn now execute concurrently with zero changes to individual tool implementations or LLM prompts. - Adds `pre_launch_tool_call()` to `tool_adapter.py`: when an `AssistantMessage` with `ToolUseBlock`s arrives, all tools are immediately fired as `asyncio.Task`s before the SDK dispatches MCP handlers. Each MCP handler then awaits its pre-launched task instead of executing fresh. - Adds a `_tool_task_queues` `ContextVar` (initialized per-session in `set_execution_context()`) so concurrent sessions never share task queues. - DRY refactor: extracts `prepare_block_for_execution()`, `check_hitl_review()`, and `BlockPreparation` dataclass into `helpers.py` so the execution pipeline is reusable. - 10 unit tests for the parallel pre-launch infrastructure (queue enqueue/dequeue, MCP prefix stripping, fallback path, `CancelledError` handling, multi-same-tool FIFO ordering). ## Root cause The Claude Agent SDK CLI sends MCP tool calls as sequential request-response pairs: it waits for each `control_response` before issuing the next `mcp_message`. Even though Python dispatches handlers with `start_soon`, the CLI never issues call B until call A's response is sent — blocks always ran sequentially. The pre-launch pattern fixes this at the infrastructure level by starting all tasks before the SDK even dispatches the first handler. ## Test plan - [x] `poetry run pytest backend/copilot/sdk/tool_adapter_test.py` — 27 tests pass (10 new parallel infra tests) - [x] `poetry run pytest backend/copilot/tools/helpers_test.py` — 20 tests pass - [x] `poetry run pytest backend/copilot/tools/run_block_test.py backend/copilot/tools/test_run_block_details.py` — all pass - [x] Manually test in CoPilot: ask the agent to run two blocks simultaneously — verify both start executing before either completes - [x] E2E: Both GetCurrentTimeBlock and CalculatorBlock executed concurrently (time=09:35:42, 42×7=294) - [x] E2E: Pre-launch mechanism active — two run_block events at same timestamp (3ms apart) - [x] E2E: Arg-mismatch fallback tested — system correctly cancels and falls back to direct execution
Z
Zamil Majdy committed
edb3d322f0547f93ff7006dcda899e172dbaee62
Parent: 9381057
Committed by GitHub <[email protected]>
on 3/24/2026, 1:27:46 PM