From 503d536d4d324b70310d1cbcb7008c9ff53407d2 Mon Sep 17 00:00:00 2001 From: bucolucas Date: Sun, 18 Aug 2024 18:36:24 -0500 Subject: [PATCH] Add JSON serialization helper and update handle_message function --- telegram_inference_bot.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/telegram_inference_bot.py b/telegram_inference_bot.py index 6200393..f109930 100644 --- a/telegram_inference_bot.py +++ b/telegram_inference_bot.py @@ -51,6 +51,18 @@ functions = [] for tool in tools: functions.extend(tool.get_functions()) +def json_serializable(obj): + if isinstance(obj, (str, int, float, bool, type(None))): + return obj + elif isinstance(obj, (list, tuple)): + return [json_serializable(item) for item in obj] + elif isinstance(obj, dict): + return {key: json_serializable(value) for key, value in obj.items()} + elif hasattr(obj, '__dict__'): + return json_serializable(obj.__dict__) + else: + return str(obj) + async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: logging.info("Bot started") await update.message.reply_text( @@ -98,7 +110,7 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> tool_calls = [] fullMessage = [] for message_part in response.content: - fullMessage.append(message_part) + fullMessage.append(json_serializable(message_part)) if message_part.type == "tool_use": tool_calls.append(message_part) messages.append({"role": "assistant", "content": fullMessage}) @@ -118,33 +130,31 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> previous_function_name = function_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_use_results.append({"type": "tool_result", "tool_use_id": tool_call.id, "content": json.dumps(json_serializable(tool_response))}) - formatted_result = {} - - formatted_result = {"role": "user", "content":tool_use_results} + formatted_result = {"role": "user", "content": tool_use_results} messages.append(formatted_result) response = get_chat_response(messages) fullMessage = [] for message_part in response.content: - fullMessage.append(message_part) + fullMessage.append(json_serializable(message_part)) if message_part.type == "tool_use": tool_calls.append(message_part) messages.append({"role": "assistant", "content": fullMessage}) toolUseCount += 1 - if (toolUseCount == 0): - assistant_reply = response.content + if toolUseCount == 0: + assistant_reply = json_serializable(response.content) messages.append({"role": "assistant", "content": assistant_reply}) if len(messages) > 20: messages = messages[-20:] # Save the updated conversation history - db.save_conversation(user_id, messages) + db.save_conversation(user_id, json_serializable(messages)) # Remove the status message await context.bot.delete_message(chat_id=update.effective_chat.id, message_id=status_message.message_id)