Spaces:
Running
Running
| """Force-generate the current week's report for local testing. | |
| Usage: | |
| uv run python scripts/generate_weekly_report.py --seed --fallback-only | |
| uv run python scripts/generate_weekly_report.py --seed | |
| """ | |
| import argparse | |
| import sys | |
| from datetime import date, datetime, timezone | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parents[1] | |
| if str(ROOT) not in sys.path: | |
| sys.path.insert(0, str(ROOT)) | |
| from db.database import initialize_database | |
| from db import queries | |
| from vital_types.db import ExerciseLogEntry, FoodLogEntry, ProfileInput | |
| from llm.weekly_report import generate_weekly_report | |
| def _seed_week_data() -> None: | |
| """Insert sample logs for the current week so the report has content.""" | |
| today = date.today() | |
| week_start = queries.monday_of_week(today) | |
| if queries.get_profile() is None: | |
| queries.save_profile( | |
| ProfileInput( | |
| name="Test User", | |
| age=28, | |
| city="Port Harcourt", | |
| profession="Engineer", | |
| goal="Manage wellness", | |
| conditions=["sickle cell disease"], | |
| medications=[], | |
| triggers=["dehydration"], | |
| wake_time="07:00", | |
| sleep_time="23:00", | |
| desk_worker=True, | |
| exercise_level="light", | |
| dietary_notes="", | |
| local_foods="beans, plantain, jollof rice", | |
| ) | |
| ) | |
| queries.set_onboarding_complete(True) | |
| queries.save_weekly_check_structure( | |
| { | |
| "report_day": "Sunday", | |
| "report_time": "20:00", | |
| "replan_day": "Sunday", | |
| "replan_time": "20:30", | |
| } | |
| ) | |
| queries.upsert_daily_log(today, "pain_level", "2") | |
| queries.log_water(3, today) | |
| queries.insert_food_log( | |
| FoodLogEntry( | |
| date=today, | |
| meal_type="lunch", | |
| food_description="beans and plantain", | |
| logged_at=datetime.now(timezone.utc), | |
| ) | |
| ) | |
| queries.insert_exercise_log( | |
| ExerciseLogEntry( | |
| date=today, | |
| exercise_type="walking", | |
| duration_minutes=20, | |
| completed=True, | |
| logged_at=datetime.now(timezone.utc), | |
| ) | |
| ) | |
| print(f"Seeded sample logs for week starting {week_start.isoformat()}.") | |
| def main() -> None: | |
| """Run weekly report generation from the command line.""" | |
| parser = argparse.ArgumentParser(description="Generate Vitál weekly report.") | |
| parser.add_argument( | |
| "--seed", | |
| action="store_true", | |
| help="Insert sample week logs before generating.", | |
| ) | |
| parser.add_argument( | |
| "--week-start", | |
| type=str, | |
| default="", | |
| help="Monday week_start as YYYY-MM-DD (defaults to current week).", | |
| ) | |
| parser.add_argument( | |
| "--fallback-only", | |
| action="store_true", | |
| help="Skip LLM and use the template report (fast local smoke test).", | |
| ) | |
| args = parser.parse_args() | |
| initialize_database() | |
| if args.seed: | |
| _seed_week_data() | |
| week_start = ( | |
| date.fromisoformat(args.week_start) | |
| if args.week_start | |
| else queries.monday_of_week(date.today()) | |
| ) | |
| print(f"Generating weekly report for {week_start.isoformat()}...") | |
| report = generate_weekly_report( | |
| week_start, | |
| force=True, | |
| fallback_only=args.fallback_only, | |
| ) | |
| if report is None: | |
| print("Weekly report generation failed.") | |
| raise SystemExit(1) | |
| print(f"Weekly report saved for {report.week_start.isoformat()}.") | |
| print("---") | |
| print(report.report_text[:1200]) | |
| if len(report.report_text) > 1200: | |
| print("...") | |
| if __name__ == "__main__": | |
| main() | |