-
Notifications
You must be signed in to change notification settings - Fork 95
feat (2/n): Agent lib using resume_turn #158
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
835a964
to
250676f
Compare
# What does this PR do? - #1178 - #1187 - #1194 **client changes** - llamastack/llama-stack-client-python#157 - llamastack/llama-stack-client-python#158 ## Test Plan ``` LLAMA_STACK_BASE_URL=http://localhost:8321 pytest -v tests/client-sdk/agents/test_agents.py --inference-model meta-llama/Llama-3.1-8B-Instruct ``` ``` LLAMA_STACK_CONFIG=fireworks pytest -v tests/client-sdk/agents/test_agents.py --inference-model meta-llama/Llama-3.1-8B-Instruct ``` <img width="1080" alt="image" src="https://github.com/user-attachments/assets/6c48e062-5d00-4fed-98de-ecca627e5195" /> **llama-stack-apps** ``` python -m examples.agents.react_agent localhost 8321 ``` - Test with script: https://gist.github.com/yanxi0830/f2e407527f468998a700cd29fd271b15 **Output Before**: we have 2 `turn_id` with 2 turns - https://gist.github.com/yanxi0830/9fbd7a80fcddc784a28c59d4a9c1d943 **Output After**: we have 1 `turn_id`, the final turn have all 3 steps - https://gist.github.com/yanxi0830/17754d56d08ccbeaec419b693137500c <img width="622" alt="image" src="https://github.com/user-attachments/assets/ed7f42ca-41c8-4ee9-b6fa-2299901cafb4" /> **Telemetry** <img width="1389" alt="image" src="https://github.com/user-attachments/assets/031bf6ab-959c-46a7-aa85-70a511cba296" /> [//]: # (## Documentation)
if n_iter == 0: | ||
yield chunk |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why yield when n_iter == 0?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
b/c when n_iter == 0, we will get back the actual Turn
with turn_awaiting_input
. e.g. https://gist.github.com/yanxi0830/17754d56d08ccbeaec419b693137500c
AgentTurnResponseStreamChunk(
│ event=TurnResponseEvent(
│ │ payload=AgentTurnResponseTurnAwaitingInputPayload(
│ │ │ event_type='turn_awaiting_input',
│ │ │ turn=Turn(
│ │ │ │ input_messages=[
│ │ │ │ │ UserMessage(
│ │ │ │ │ │ content='What is the boiling point of polyjuice in Celcius?',
│ │ │ │ │ │ role='user',
│ │ │ │ │ │ context=None
│ │ │ │ │ )
│ │ │ │ ],
│ │ │ │ output_message=CompletionMessage(
│ │ │ │ │ content='',
│ │ │ │ │ role='assistant',
│ │ │ │ │ stop_reason='end_of_turn',
│ │ │ │ │ tool_calls=[
│ │ │ │ │ │ ToolCall(
│ │ │ │ │ │ │ arguments={'liquid_name': 'polyjuice', 'celcius': 'True'},
│ │ │ │ │ │ │ call_id='782f2ba1-976d-45a5-874d-791c79ececf6',
│ │ │ │ │ │ │ tool_name='get_boiling_point'
│ │ │ │ │ │ )
│ │ │ │ │ ]
│ │ │ │ ),
│ │ │ │ session_id='8221e2f3-c4d3-44e7-ab7e-e74fdecb10e3',
│ │ │ │ started_at=datetime.datetime(2025, 2, 20, 21, 38, 8, 13477),
│ │ │ │ steps=[
│ │ │ │ │ InferenceStep(
│ │ │ │ │ │ api_model_response=CompletionMessage(
│ │ │ │ │ │ │ content='',
│ │ │ │ │ │ │ role='assistant',
│ │ │ │ │ │ │ stop_reason='end_of_turn',
│ │ │ │ │ │ │ tool_calls=[
│ │ │ │ │ │ │ │ ToolCall(
│ │ │ │ │ │ │ │ │ arguments={'liquid_name': 'polyjuice', 'celcius': 'True'},
│ │ │ │ │ │ │ │ │ call_id='782f2ba1-976d-45a5-874d-791c79ececf6',
│ │ │ │ │ │ │ │ │ tool_name='get_boiling_point'
│ │ │ │ │ │ │ │ )
│ │ │ │ │ │ │ ]
│ │ │ │ │ │ ),
│ │ │ │ │ │ step_id='c8a34ebd-2902-4da8-a78e-a549009880bb',
│ │ │ │ │ │ step_type='inference',
│ │ │ │ │ │ turn_id='38c0cc58-5c3b-4d8e-adf6-cb1c1a7bf0ee',
│ │ │ │ │ │ completed_at=datetime.datetime(2025, 2, 20, 21, 38, 8, 427067),
│ │ │ │ │ │ started_at=datetime.datetime(2025, 2, 20, 21, 38, 8, 24697)
│ │ │ │ │ )
│ │ │ │ ],
│ │ │ │ turn_id='38c0cc58-5c3b-4d8e-adf6-cb1c1a7bf0ee',
│ │ │ │ completed_at=datetime.datetime(2025, 2, 20, 21, 38, 8, 461543),
│ │ │ │ output_attachments=[]
│ │ │ )
│ │ )
│ )
)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just for my understanding: sorry am still confused. What about subsequent iteration? Why dont we need to yield? Might be good to add a comment here.
What does this PR do?
feat (1/n): agents resume turn (Sync updates from stainless branch: yanxi0830/dev) #157
Server change: feat(3/n): agent resume_turn llama-stack#1194
Test Plan