Can't reproduce directly. but I think the builder agent shouldn't abort due to ThrottlingException - or at least should have a mechanism to ask the user what they want to do. For example, being able to dump the status so it is possible to debug or even continue later, would be a great alternative.
The builder shouldn't abort without leaving a mechansim to retry later on.
While running a task to modify an existing agent, after many proper steps the application aborted with the following stack trace
cycle failed
Traceback (most recent call last):
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/models/bedrock.py", line 252, in stream
response = self.client.converse_stream(**request)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/botocore/client.py", line 595, in _api_call
return self._make_api_call(operation_name, kwargs)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/botocore/context.py", line 123, in wrapper
return func(*args, **kwargs)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/botocore/client.py", line 1058, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.ThrottlingException: An error occurred (ThrottlingException) when calling the ConverseStream operation: Too many tokens, please wait before trying again.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 186, in event_loop_cycle
raise e
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 148, in event_loop_cycle
stop_reason, message, usage, metrics, kwargs["request_state"] = stream_messages(
~~~~~~~~~~~~~~~^
model,
^^^^^^
...<4 lines>...
**kwargs,
^^^^^^^^^
)
^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/streaming.py", line 340, in stream_messages
return process_stream(chunks, callback_handler, messages, **kwargs)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/streaming.py", line 290, in process_stream
for chunk in chunks:
^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/types/models.py", line 115, in converse
for event in response:
^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/models/bedrock.py", line 303, in stream
raise ModelThrottledException(str(e)) from e
strands.types.exceptions.ModelThrottledException: An error occurred (ThrottlingException) when calling the ConverseStream operation: Too many tokens, please wait before trying again.
Traceback (most recent call last):
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/models/bedrock.py", line 252, in stream
response = self.client.converse_stream(**request)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/botocore/client.py", line 595, in _api_call
return self._make_api_call(operation_name, kwargs)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/botocore/context.py", line 123, in wrapper
return func(*args, **kwargs)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/botocore/client.py", line 1058, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.ThrottlingException: An error occurred (ThrottlingException) when calling the ConverseStream operation: Too many tokens, please wait before trying again.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 186, in event_loop_cycle
raise e
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 148, in event_loop_cycle
stop_reason, message, usage, metrics, kwargs["request_state"] = stream_messages(
~~~~~~~~~~~~~~~^
model,
^^^^^^
...<4 lines>...
**kwargs,
^^^^^^^^^
)
^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/streaming.py", line 340, in stream_messages
return process_stream(chunks, callback_handler, messages, **kwargs)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/streaming.py", line 290, in process_stream
for chunk in chunks:
^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/types/models.py", line 115, in converse
for event in response:
^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/models/bedrock.py", line 303, in stream
raise ModelThrottledException(str(e)) from e
strands.types.exceptions.ModelThrottledException: An error occurred (ThrottlingException) when calling the ConverseStream operation: Too many tokens, please wait before trying again.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/bin/strands", line 8, in <module>
sys.exit(main())
~~~~^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands_agents_builder/strands.py", line 122, in main
agent(query)
~~~~~^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/agent/agent.py", line 343, in __call__
result = self._run_loop(prompt, kwargs)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/agent/agent.py", line 445, in _run_loop
return self._execute_event_loop_cycle(invocation_callback_handler, kwargs)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/agent/agent.py", line 472, in _execute_event_loop_cycle
stop_reason, message, metrics, state = event_loop_cycle(
~~~~~~~~~~~~~~~~^
model=self.model,
^^^^^^^^^^^^^^^^^
...<9 lines>...
**kwargs,
^^^^^^^^^
)
^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 272, in event_loop_cycle
return recurse_event_loop(
model=model,
...<5 lines>...
**kwargs,
)
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 350, in recurse_event_loop
) = event_loop_cycle(**kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/Users/user/.virtualenvs/dev-portal-UWCK_VoB/lib/python3.13/site-packages/strands/event_loop/event_loop.py", line 303, in event_loop_cycle
raise EventLoopException(e, kwargs["request_state"]) from e
strands.types.exceptions.EventLoopException: An error occurred (ThrottlingException) when calling the ConverseStream operation: Too many tokens, please wait before trying again.
There should be a generic Exception handling that can export the status of the execution in a way that can be used for further debugging or even to restart the process.
Checks
Strands CLI Version
0.1.3
Strands Tools Version
0.1.5
Strands Version
0.1.7
Python Version
Python 3.13.4
Operating System
MacOS 15.5
Installation Method
pip
Steps to Reproduce
Can't reproduce directly. but I think the builder agent shouldn't abort due to ThrottlingException - or at least should have a mechanism to ask the user what they want to do. For example, being able to dump the status so it is possible to debug or even continue later, would be a great alternative.
Expected Behavior
The builder shouldn't abort without leaving a mechansim to retry later on.
Actual Behavior
While running a task to modify an existing agent, after many proper steps the application aborted with the following stack trace
Additional Context
No response
Possible Solution
There should be a generic Exception handling that can export the status of the execution in a way that can be used for further debugging or even to restart the process.
Related Issues
No response