fix: #2386 offload sync tool execution to worker threads #2387
+71
−3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request resolves #2386 by preventing sync tool functions from blocking the event loop: sync tools are now invoked via asyncio.to_thread in src/agents/tool.py, so parallel tool calls can run concurrently even when some tools are synchronous, and the loop remains responsive. It adds focused tests in tests/test_function_tool.py.
to_thread is chosen over manual run_in_executor because it uses the default thread pool, propagates contextvars automatically (important for tracing/telemetry), and keeps the implementation concise while preserving compatibility with Python 3.9+.