mirror of
https://github.com/marcogll/talia_bot.git
synced 2026-01-13 13:25:19 +00:00
feat: Implement LLM and scheduler modules
- Implement `llm.py` with OpenAI API integration for smart responses. - Implement `scheduler.py` to send a daily summary to the bot owner using `python-telegram-bot`'s `JobQueue`. - Integrate the scheduler into the main application. - Add `pytz` as a new dependency. - Update `tasks.md` to mark all tasks as complete.
This commit is contained in:
22
app/llm.py
22
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}"
|
||||
|
||||
@@ -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$')],
|
||||
|
||||
@@ -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}")
|
||||
|
||||
@@ -5,3 +5,4 @@ google-api-python-client
|
||||
google-auth-httplib2
|
||||
google-auth-oauthlib
|
||||
openai
|
||||
pytz
|
||||
|
||||
4
tasks.md
4
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user