From 25b93290d8cd07b0d00732641f812ee34fd4c989 Mon Sep 17 00:00:00 2001 From: Krishna Chaitanya Date: Wed, 22 Jul 2026 11:53:32 -0700 Subject: [PATCH] fix: handle multiple tool calls in tools examples (#634) --- examples/async-tools.py | 13 +++++++------ examples/tools.py | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/examples/async-tools.py b/examples/async-tools.py index 16e123d..1143665 100644 --- a/examples/async-tools.py +++ b/examples/async-tools.py @@ -62,6 +62,9 @@ async def main(): if response.message.tool_calls: # There may be multiple tool calls in the response + # Add the assistant message with tool calls to the conversation + messages.append(response.message) + for tool in response.message.tool_calls: # Ensure the function is available, and then call it if function_to_call := available_functions.get(tool.function.name): @@ -71,14 +74,12 @@ async def main(): print('Function output:', output) else: print('Function', tool.function.name, 'not found') + output = 'Function not found' - # Only needed to chat with the model using the tool call results - if response.message.tool_calls: - # Add the function response to messages for the model to use - messages.append(response.message) - messages.append({'role': 'tool', 'content': str(output), 'tool_name': tool.function.name}) + # Add each tool result as a separate message + messages.append({'role': 'tool', 'content': str(output), 'tool_name': tool.function.name}) - # Get final response from model with function outputs + # Get final response from model with all tool call results final_response = await client.chat('llama3.1', messages=messages) print('Final response:', final_response.message.content) diff --git a/examples/tools.py b/examples/tools.py index 86019fd..a703256 100644 --- a/examples/tools.py +++ b/examples/tools.py @@ -60,6 +60,9 @@ response: ChatResponse = chat( if response.message.tool_calls: # There may be multiple tool calls in the response + # Add the assistant message with tool calls to the conversation + messages.append(response.message) + for tool in response.message.tool_calls: # Ensure the function is available, and then call it if function_to_call := available_functions.get(tool.function.name): @@ -69,14 +72,12 @@ if response.message.tool_calls: print('Function output:', output) else: print('Function', tool.function.name, 'not found') + output = 'Function not found' -# Only needed to chat with the model using the tool call results -if response.message.tool_calls: - # Add the function response to messages for the model to use - messages.append(response.message) - messages.append({'role': 'tool', 'content': str(output), 'tool_name': tool.function.name}) + # Add each tool result as a separate message + messages.append({'role': 'tool', 'content': str(output), 'tool_name': tool.function.name}) - # Get final response from model with function outputs + # Get final response from model with all tool call results final_response = chat('llama3.1', messages=messages) print('Final response:', final_response.message.content)