Merge pull request #11 from bucolucas/feature/logging-output

Implement logging for console and file output
This commit is contained in:
2024-08-17 18:34:13 -05:00
committed by GitHub
+14 -2
View File
@@ -4,6 +4,7 @@ import importlib
import inspect import inspect
import tempfile import tempfile
import base64 import base64
import logging
from telegram import Update from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
from openai import OpenAI from openai import OpenAI
@@ -18,6 +19,12 @@ client = OpenAI()
GPT_4O = "gpt-4o" GPT_4O = "gpt-4o"
GPT_4O_MINI = "gpt-4o-mini" GPT_4O_MINI = "gpt-4o-mini"
# Set up logging to console and file
logging.basicConfig(level=logging.INFO, handlers=[
logging.StreamHandler(),
logging.FileHandler('logs/output.log', mode='a')
])
# TODO: ensure log output goes to both console and logs/output.log # TODO: ensure log output goes to both console and logs/output.log
# Set up Telegram bot # Set up Telegram bot
@@ -50,6 +57,7 @@ for tool in tools:
functions.extend(tool.get_functions()) functions.extend(tool.get_functions())
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: 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.") 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: async def clear(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
@@ -59,6 +67,7 @@ async def clear(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
if user_id in user_images: if user_id in user_images:
os.remove(user_images[user_id]) os.remove(user_images[user_id])
del 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!") 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: async def handle_image(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
@@ -75,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) await photo_file.download_to_drive(custom_path=temp_file.name)
user_images[user_id] = 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?") 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: async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
@@ -82,6 +92,8 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) ->
user_id = update.effective_user.id user_id = update.effective_user.id
user_message = update.message.text user_message = update.message.text
logging.info(f"Message from user {user_id}: {user_message}")
# Initialize conversation history for new users # Initialize conversation history for new users
if user_id not in conversation_history: if user_id not in conversation_history:
conversation_history[user_id] = [] conversation_history[user_id] = []
@@ -154,7 +166,7 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) ->
await update.message.reply_text(assistant_reply) await update.message.reply_text(assistant_reply)
except Exception as e: 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.") await update.message.reply_text("Sorry, an error occurred while processing your request.")
def call_tool(function_call, messages): def call_tool(function_call, messages):
@@ -186,7 +198,7 @@ def main() -> None:
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)) application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
# Start the Bot # Start the Bot
print("Bot is running...") logging.info("Bot is running...")
application.run_polling() application.run_polling()
if __name__ == '__main__': if __name__ == '__main__':