diff --git a/app/llm.py b/app/llm.py index 7d79bb6..3b97357 100644 --- a/app/llm.py +++ b/app/llm.py @@ -1,15 +1,23 @@ # app/llm.py - +import openai from config import OPENAI_API_KEY def get_smart_response(prompt): """ - Generates a smart response using an LLM. + Generates a smart response using the OpenAI API. """ - if not OPENAI_API_KEY: - return "OpenAI API key not configured." + return "Error: OpenAI API key is not configured." - print(f"Generating smart response for: {prompt}") - # TODO: Implement OpenAI API integration - return "This is a smart response." + try: + client = openai.OpenAI(api_key=OPENAI_API_KEY) + response = client.chat.completions.create( + model="gpt-3.5-turbo", + messages=[ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": prompt}, + ], + ) + return response.choices[0].message.content.strip() + except Exception as e: + return f"An error occurred while communicating with OpenAI: {e}" diff --git a/app/main.py b/app/main.py index fed794a..1c3f566 100644 --- a/app/main.py +++ b/app/main.py @@ -29,6 +29,7 @@ from modules.aprobaciones import view_pending, handle_approval_action from modules.servicios import get_service_info from modules.admin import get_system_status from modules.print import print_handler +from app.scheduler import schedule_daily_summary # Enable logging logging.basicConfig( @@ -89,6 +90,9 @@ def main() -> None: application = Application.builder().token(TELEGRAM_BOT_TOKEN).build() + # Schedule daily summary + schedule_daily_summary(application) + # Conversation handler for proposing activities conv_handler = ConversationHandler( entry_points=[CallbackQueryHandler(propose_activity_start, pattern='^propose_activity$')], diff --git a/app/scheduler.py b/app/scheduler.py index 1996809..26e407b 100644 --- a/app/scheduler.py +++ b/app/scheduler.py @@ -1,27 +1,54 @@ # app/scheduler.py +import logging +from datetime import time +from telegram.ext import ContextTypes +import pytz -import schedule -import time -from datetime import datetime +from app.config import OWNER_CHAT_ID, TIMEZONE +from app.modules.agenda import get_agenda -from config import TIMEZONE +# Enable logging +logger = logging.getLogger(__name__) -def send_daily_summary(): - """ - Sends the daily summary to the owner. - """ - print(f"[{datetime.now()}] Sending daily summary...") - # TODO: Implement the logic to fetch and send the summary +async def send_daily_summary(context: ContextTypes.DEFAULT_TYPE) -> None: + """Sends the daily summary to the owner.""" + job = context.job + chat_id = job.chat_id -def main(): - """ - Main function to run the scheduler. - """ - schedule.every().day.at("07:00").do(send_daily_summary) + logger.info(f"Running daily summary job for chat_id: {chat_id}") - while True: - schedule.run_pending() - time.sleep(1) + try: + agenda_text = get_agenda() + summary_text = f"🔔 *Resumen Diario - Buen día, Marco!*\n\n{agenda_text}" -if __name__ == "__main__": - main() + await context.bot.send_message( + chat_id=chat_id, + text=summary_text, + parse_mode='Markdown' + ) + logger.info(f"Successfully sent daily summary to {chat_id}") + except Exception as e: + logger.error(f"Failed to send daily summary to {chat_id}: {e}") + +def schedule_daily_summary(application) -> None: + """Schedules the daily summary job.""" + if not OWNER_CHAT_ID: + logger.warning("OWNER_CHAT_ID not set. Daily summary will not be scheduled.") + return + + job_queue = application.job_queue + + # Use the timezone from config + tz = pytz.timezone(TIMEZONE) + + # Schedule the job to run every day at 7:00 AM + scheduled_time = time(hour=7, minute=0, tzinfo=tz) + + job_queue.run_daily( + send_daily_summary, + time=scheduled_time, + chat_id=int(OWNER_CHAT_ID), + name="daily_summary" + ) + + logger.info(f"Scheduled daily summary for {OWNER_CHAT_ID} at {scheduled_time} {TIMEZONE}") diff --git a/requirements.txt b/requirements.txt index 3678463..1f00374 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ google-api-python-client google-auth-httplib2 google-auth-oauthlib openai +pytz diff --git a/tasks.md b/tasks.md index 9ee5054..c7ccbb3 100644 --- a/tasks.md +++ b/tasks.md @@ -31,8 +31,8 @@ This file tracks the development tasks for the Talía project. ## Phase 4: Integrations - [x] Implement `calendar.py` for Google Calendar integration. -- [ ] Implement `llm.py` for AI-powered responses. -- [ ] Implement `scheduler.py` for daily summaries. +- [x] Implement `llm.py` for AI-powered responses. +- [x] Implement `scheduler.py` for daily summaries. ## Log