Skip to content

[BUG] Builder aborts with An error occurred (ThrottlingException) when calling the ConverseStream operation: Too many tokens, please wait before trying again. #31

@pcolazurdo

Description

@pcolazurdo

Checks

  • I have updated to the lastest minor and patch version of Strands
  • I have checked the documentation and this is not expected behavior
  • I have searched ./issues and there are no duplicates of my issue

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

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.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions