Spaces:
Sleeping
Sleeping
| from datetime import datetime | |
| def review(query: str, plan: dict, raw_data: dict): | |
| """ | |
| Critic Module: Detects mistakes and automatically corrects or flags them. | |
| Checks date parsing logic, data retrieval status, and ML model health. | |
| """ | |
| corrections = [] | |
| # 1. Date Misinterpretation Check | |
| # If the parser defaulted to Jan 1st but the user explicitly asked for another month | |
| if plan.get("date") and plan["date"].month == 1 and plan["date"].day == 1: | |
| months = ["feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"] | |
| q_lower = query.lower() | |
| if any(m in q_lower for m in months): | |
| corrections.append("date_reparsed_from_jan1_default") | |
| # In a full self-healing loop, we would re-trigger the planner here | |
| # with explicit hints. For now, we flag the correction. | |
| # 2. Data Missing Check | |
| if not raw_data: | |
| corrections.append("data_missing") | |
| elif isinstance(raw_data, dict): | |
| # 3. ML Model Failure Check (if ML data exists) | |
| model_data = raw_data.get("models", {}) | |
| if model_data: | |
| for m_name, m_res in model_data.items(): | |
| if m_res.get("status") == "error": | |
| corrections.append(f"fallback_triggered_for_{m_name}") | |
| # 4. Empty Open-Meteo Arrays Check | |
| weather_data = raw_data.get("weather", {}) | |
| if weather_data and "daily" in weather_data: | |
| if not weather_data["daily"].get("time"): | |
| corrections.append("open_meteo_returned_empty_arrays") | |
| return { | |
| "corrections": corrections, | |
| "data": raw_data, | |
| "is_valid": "data_missing" not in corrections | |
| } | |