From 382c7580fa25587564da32cdb32c77fb3d8137cd Mon Sep 17 00:00:00 2001 From: bucolucas Date: Sat, 17 Aug 2024 18:31:53 -0500 Subject: [PATCH 1/2] Add logging functionality for console and file outputs. --- telegram_inference_bot.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/telegram_inference_bot.py b/telegram_inference_bot.py index a00bdfe..6fbe137 100644 --- a/telegram_inference_bot.py +++ b/telegram_inference_bot.py @@ -4,6 +4,7 @@ import importlib import inspect import tempfile import base64 +import logging from telegram import Update from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes from openai import OpenAI @@ -18,7 +19,20 @@ client = OpenAI() GPT_4O = "gpt-4o" GPT_4O_MINI = "gpt-4o-mini" -# TODO: ensure log output goes to both console and logs/output.log +# Set up logging +log_file = 'logs/output.log' +os.makedirs(os.path.dirname(log_file), exist_ok=True) + +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s', + handlers=[ + logging.FileHandler(log_file, mode='a'), + logging.StreamHandler() + ] +) + +logging.info("Logging has been set up.") # Set up Telegram bot TELEGRAM_BOT_TOKEN = os.getenv('TELEGRAM_BOT_TOKEN') @@ -154,9 +168,10 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> await update.message.reply_text(assistant_reply) except Exception as e: - print(f"An error occurred: {str(e)}") + logging.error(f"An error occurred: {str(e)}") await update.message.reply_text("Sorry, an error occurred while processing your request.") + def call_tool(function_call, messages): # Execute the function function_name = function_call.name @@ -165,6 +180,7 @@ def call_tool(function_call, messages): if function_name in [f["name"] for f in tool.get_functions()]: return tool.execute(function_name, **eval(function_args)) + def get_chat_response(client, messages, max_tokens, model): response = client.chat.completions.create( model=model, @@ -175,6 +191,7 @@ def get_chat_response(client, messages, max_tokens, model): ) return response + def main() -> None: # Create the Application and pass it your bot's token application = Application.builder().token(TELEGRAM_BOT_TOKEN).build() @@ -186,7 +203,7 @@ def main() -> None: application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)) # Start the Bot - print("Bot is running...") + logging.info("Bot is running...") application.run_polling() if __name__ == '__main__': From b20d8707aa29a510c79142c694c409f5c0655cff Mon Sep 17 00:00:00 2001 From: bucolucas Date: Sat, 17 Aug 2024 18:32:08 -0500 Subject: [PATCH 2/2] Implemented logging output to both console and logs/output.log in telegram_inference_bot.py. --- telegram_inference_bot.py | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/telegram_inference_bot.py b/telegram_inference_bot.py index 6fbe137..90f28d8 100644 --- a/telegram_inference_bot.py +++ b/telegram_inference_bot.py @@ -19,20 +19,13 @@ client = OpenAI() GPT_4O = "gpt-4o" GPT_4O_MINI = "gpt-4o-mini" -# Set up logging -log_file = 'logs/output.log' -os.makedirs(os.path.dirname(log_file), exist_ok=True) +# Set up logging to console and file +logging.basicConfig(level=logging.INFO, handlers=[ + logging.StreamHandler(), + logging.FileHandler('logs/output.log', mode='a') +]) -logging.basicConfig( - level=logging.INFO, - format='%(asctime)s - %(levelname)s - %(message)s', - handlers=[ - logging.FileHandler(log_file, mode='a'), - logging.StreamHandler() - ] -) - -logging.info("Logging has been set up.") +# TODO: ensure log output goes to both console and logs/output.log # Set up Telegram bot TELEGRAM_BOT_TOKEN = os.getenv('TELEGRAM_BOT_TOKEN') @@ -64,6 +57,7 @@ for tool in tools: functions.extend(tool.get_functions()) async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: + logging.info("Bot started") await update.message.reply_text("Hello! I'm your AI assistant. How can I help you today? You can send me images and then ask questions about them.") async def clear(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: @@ -73,6 +67,7 @@ async def clear(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: if user_id in user_images: os.remove(user_images[user_id]) del user_images[user_id] + logging.info(f"Cleared conversation history and image for user {user_id}") await update.message.reply_text("Conversation history and image cleared. Let's start fresh!") async def handle_image(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: @@ -89,6 +84,7 @@ async def handle_image(update: Update, context: ContextTypes.DEFAULT_TYPE) -> No await photo_file.download_to_drive(custom_path=temp_file.name) user_images[user_id] = temp_file.name + logging.info(f"Received image from user {user_id}") await update.message.reply_text("I've received your image. What would you like to know about it?") async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: @@ -96,6 +92,8 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> user_id = update.effective_user.id user_message = update.message.text + logging.info(f"Message from user {user_id}: {user_message}") + # Initialize conversation history for new users if user_id not in conversation_history: conversation_history[user_id] = [] @@ -171,7 +169,6 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> logging.error(f"An error occurred: {str(e)}") await update.message.reply_text("Sorry, an error occurred while processing your request.") - def call_tool(function_call, messages): # Execute the function function_name = function_call.name @@ -180,7 +177,6 @@ def call_tool(function_call, messages): if function_name in [f["name"] for f in tool.get_functions()]: return tool.execute(function_name, **eval(function_args)) - def get_chat_response(client, messages, max_tokens, model): response = client.chat.completions.create( model=model, @@ -191,7 +187,6 @@ def get_chat_response(client, messages, max_tokens, model): ) return response - def main() -> None: # Create the Application and pass it your bot's token application = Application.builder().token(TELEGRAM_BOT_TOKEN).build()