diff --git a/src/bot/bot.py b/src/bot/bot.py index a4bf5c4..e29fa37 100644 --- a/src/bot/bot.py +++ b/src/bot/bot.py @@ -112,8 +112,23 @@ async def run_scheduled_research(bot, chat_id: int, topic: str, f"🔍 Investigación completada — analizando novedades…" ) else: + async def get_session_cost(session_id: int) -> float: + try: + stats = await db.get_usage_stats(session_id) + return sum(s.get("total_cost", 0) for s in stats) + except Exception: + return 0.0 + + session_cost = await get_session_cost(session_id) + cost_warning = "" + if session_cost > settings.cost_alert_threshold: + cost_warning = ( + f"\n⚠️ Coste: ${session_cost:.4f}" + f" (umbral: ${settings.cost_alert_threshold:.2f})" + ) await reporter.done( f"✅ Listo — `{scraped}` fuentes · `{chunk_count}` chunks · usa /generate " + f"{cost_warning}" ) else: await reporter.done( diff --git a/src/config.py b/src/config.py index 8363b87..03420de 100644 --- a/src/config.py +++ b/src/config.py @@ -33,6 +33,9 @@ class Settings(BaseSettings): chunk_overlap: int = Field(100, env="CHUNK_OVERLAP") quality_threshold: float = Field(0.3, env="QUALITY_THRESHOLD") # 0-1, chunks below discarded + # Alerts + cost_alert_threshold: float = Field(0.15, env="COST_ALERT_THRESHOLD") + # App log_level: str = Field("INFO", env="LOG_LEVEL")