From 5096ff7929e2019c482f55faa4f0400705a58b1c Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sun, 18 Aug 2024 15:54:57 -0500 Subject: [PATCH] Added ability to use multiple tools --- telegram_inference_bot.py | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/telegram_inference_bot.py b/telegram_inference_bot.py index eba6345..70a2645 100644 --- a/telegram_inference_bot.py +++ b/telegram_inference_bot.py @@ -94,11 +94,12 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> response = get_chat_response(messages) tool_calls = [] if use_anthropic: - for message in response.content: - if message.type == "tool_use": - tool_calls.append(message) - else: - messages.append({"role": "assistant", "content": response.content}) + fullMessage = [] + for message_part in response.content: + fullMessage.append(message_part) + if message_part.type == "tool_use": + tool_calls.append(message_part) + messages.append({"role": "assistant", "content": fullMessage}) else: assistant_message = response.choices[0].message if hasattr(assistant_message, 'function_call') and assistant_message.function_call is not None: @@ -107,29 +108,33 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> toolUseCount = 0 while len(tool_calls) > 0 and toolUseCount < 50: + tool_use_results = [] + while len(tool_calls) > 0: + tool_call = tool_calls.pop(0) + function_name = tool_call.name + + tool_response = call_tool(tool_call) + tool_use_results.append({"type": "tool_result", "tool_use_id": tool_call.id, "content": json.dumps(tool_response)}) - tool_call = tool_calls.pop(0) - function_name = tool_call.name - tool_response = call_tool(tool_call) - formatted_result = {} if use_anthropic: - formatted_result = {"role": "user", "content":[{"type": "tool_result", "tool_use_id": tool_call.id, "content": json.dumps(tool_response)}]} + formatted_result = {"role": "user", "content":tool_use_results} else: - formatted_result = {"role": "function", "name": function_name, "content": json.dumps(tool_response)} + formatted_result = {"role": "function", "name": function_name, "content": json.dumps(tool_use_results[0])} messages.append(formatted_result) response = get_chat_response(messages) assistant_message = "" if use_anthropic: - for message in response.content: - if message.type == "tool_use": - tool_calls.append(message) - else: - messages.append({"role": "assistant", "content": response.content}) + fullMessage = [] + for message_part in response.content: + fullMessage.append(message_part) + if message_part.type == "tool_use": + tool_calls.append(message_part) + messages.append({"role": "assistant", "content": fullMessage}) else: assistant_message = response.choices[0].message conversation_history[user_id].append({"role": "assistant", "content": assistant_message})