feat: Implement async generator tools #2
Closed
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.
Description
Enable decorated tools to be an async generator, enabling streaming of tool events back to to the caller. Assuming strands-agents#773 is merged, the changes needed are fairly minor, as currently we're just swallowing tool stream events.
Implements strands-agents#543
Api Bar-raising
The tool event being emitted (as a dictionary) needs to go through bar-raising.
Proposed new Event
(event type is purely our internal name).
ToolStreamEvent
:tool_stream_tool_use: ToolUse
- the tool use that emitted the eventtool_stream_data: Any
- the data that was streamed/yielded from the toolOur existing events are as follows:
InitEventLoopEvent
init_event_loop: bool
StartEvent
start: bool
StartEventLoopEvent
start_event_loop: bool
ModelStreamChunkEvent
event: StreamEvent
ToolUseStreamEvent
delta: ContentBlockDelta
current_tool_use: dict[str, Any]
TextStreamEvent
data: str
,delta: ContentBlockDelta
ReasoningTextStreamEvent
reasoningText: str | None
delta: ContentBlockDelta
reasoning: bool
ReasoningSignatureStreamEvent
reasoning_signature: str | None
,delta: ContentBlockDelta
,reasoning: bool
EventLoopThrottleEvent
event_loop_throttled_delay: int
ModelMessageEvent
message: Message
ToolResultMessageEvent
message: Any
ForceStopEvent
force_stop: bool
,force_stop_reason: str
AgentResultEvent
result: AgentResult
Related Issues
strands-agents#543
Documentation PR
Type of Change
Bug fix
New feature
Breaking change
Documentation update
Other (please describe):
Testing
How have you tested the change? Verify that the changes do not break functionality or introduce warnings in consuming repositories: agents-docs, agents-tools, agents-cli
hatch run prepare
Checklist
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.