Spaces:
Sleeping
Sleeping
| """ | |
| LifeOS — Sample Data Fixtures | |
| Defines the canonical SAMPLE_* constants (Section 4) and TRAINING_SCENARIOS | |
| used by the Streamlit demo, training script, and baseline evaluator. | |
| The SAMPLE_* constants match exactly the Section 9 demo scenario so that | |
| judges see the expected reward curve (iteration 1 ~35, iter 2 ~60, iter 3 ~80). | |
| GAP 4: Each training scenario has a "difficulty" field (easy/medium/hard). | |
| Two new scenarios added: "gentle_start" (easy) and "deadline_storm" (hard). | |
| """ | |
| from typing import Any, Dict, List | |
| # --------------------------------------------------------------------------- | |
| # Section 9 demo scenario — use this for the pitch | |
| # --------------------------------------------------------------------------- | |
| SAMPLE_TASKS: List[Dict[str, Any]] = [ | |
| { | |
| "id": 1, | |
| "name": "Math exam preparation", | |
| "deadline": "2026-04-24 18:00", | |
| "duration_hrs": 6.0, | |
| "priority": "high", | |
| "subject": "Mathematics", | |
| }, | |
| { | |
| "id": 2, | |
| "name": "Write essay on climate change", | |
| "deadline": "2026-04-26 23:59", | |
| "duration_hrs": 4.0, | |
| "priority": "high", | |
| "subject": "English", | |
| }, | |
| { | |
| "id": 3, | |
| "name": "Physics project submission", | |
| "deadline": "2026-04-25 17:00", | |
| "duration_hrs": 3.0, | |
| "priority": "medium", | |
| "subject": "Physics", | |
| }, | |
| { | |
| "id": 4, | |
| "name": "Daily homework review", | |
| "deadline": "2026-04-23 22:00", | |
| "duration_hrs": 1.5, | |
| "priority": "low", | |
| "subject": "General", | |
| }, | |
| { | |
| "id": 5, | |
| "name": "Presentation practice", | |
| "deadline": "2026-04-23 16:00", | |
| "duration_hrs": 2.0, | |
| "priority": "medium", | |
| "subject": "Communication", | |
| }, | |
| ] | |
| SAMPLE_CALENDAR: Dict[str, Any] = { | |
| "2026-04-22": { | |
| "slots": ["09:00-12:00", "14:00-17:00", "19:00-21:00"], | |
| "day_name": "Tuesday", | |
| }, | |
| "2026-04-23": { | |
| "slots": ["09:00-12:00", "14:00-17:00", "19:00-21:00"], | |
| "day_name": "Wednesday", | |
| }, | |
| "2026-04-24": { | |
| "slots": ["09:00-12:00", "14:00-17:00"], | |
| "day_name": "Thursday", | |
| }, | |
| "2026-04-25": { | |
| "slots": ["09:00-12:00", "14:00-17:00", "19:00-21:00"], | |
| "day_name": "Friday", | |
| }, | |
| "2026-04-26": { | |
| "slots": ["10:00-13:00", "15:00-18:00"], | |
| "day_name": "Saturday", | |
| }, | |
| } | |
| SAMPLE_PREFERENCES: Dict[str, Any] = { | |
| "prefers_morning": True, | |
| "max_daily_hours": 8, | |
| "min_break_gap_mins": 90, | |
| "end_by": "22:00", | |
| } | |
| SAMPLE_ENERGY_PROFILE: Dict[str, float] = { | |
| "morning": 0.9, | |
| "afternoon": 0.7, | |
| "evening": 0.5, | |
| } | |
| # --------------------------------------------------------------------------- | |
| # 7 training scenarios — varied difficulty, priorities, and deadlines | |
| # --------------------------------------------------------------------------- | |
| TRAINING_SCENARIOS: List[Dict[str, Any]] = [ | |
| # 1 — Gentle start (easy: 2 tasks, 2 days, relaxed deadlines) | |
| { | |
| "label": "gentle_start", | |
| "difficulty": "easy", | |
| "tasks": [ | |
| {"id": 1, "name": "Read short story", "deadline": "2026-05-10 23:59", "duration_hrs": 1.5, "priority": "low", "subject": "English"}, | |
| {"id": 2, "name": "Practice math basics", "deadline": "2026-05-11 23:59", "duration_hrs": 2.0, "priority": "medium", "subject": "Mathematics"}, | |
| ], | |
| "calendar": { | |
| "2026-05-09": {"slots": ["10:00-12:00", "14:00-16:00"], "day_name": "Friday"}, | |
| "2026-05-10": {"slots": ["09:00-12:00", "14:00-16:00"], "day_name": "Saturday"}, | |
| }, | |
| "preferences": {"prefers_morning": True, "max_daily_hours": 4, "min_break_gap_mins": 90, "end_by": "21:00"}, | |
| "energy_profile": {"morning": 0.85, "afternoon": 0.7, "evening": 0.5}, | |
| }, | |
| # 2 — Light week (easy: 3 low-stakes tasks) | |
| { | |
| "label": "light_week", | |
| "difficulty": "easy", | |
| "tasks": [ | |
| {"id": 1, "name": "Read history chapter", "deadline": "2026-05-09 23:59", "duration_hrs": 2.0, "priority": "low", "subject": "History"}, | |
| {"id": 2, "name": "French vocabulary", "deadline": "2026-05-10 12:00", "duration_hrs": 1.5, "priority": "low", "subject": "French"}, | |
| {"id": 3, "name": "Art portfolio review", "deadline": "2026-05-08 17:00", "duration_hrs": 2.5, "priority": "medium", "subject": "Art"}, | |
| ], | |
| "calendar": { | |
| "2026-05-05": {"slots": ["09:00-11:00", "16:00-18:00"], "day_name": "Monday"}, | |
| "2026-05-06": {"slots": ["10:00-12:00", "14:00-16:00"], "day_name": "Tuesday"}, | |
| "2026-05-07": {"slots": ["09:00-11:00"], "day_name": "Wednesday"}, | |
| "2026-05-08": {"slots": ["10:00-13:00"], "day_name": "Thursday"}, | |
| }, | |
| "preferences": {"prefers_morning": False, "max_daily_hours": 4, "min_break_gap_mins": 90, "end_by": "21:00"}, | |
| "energy_profile": {"morning": 0.6, "afternoon": 0.85, "evening": 0.7}, | |
| }, | |
| # 3 — Exam crunch (medium: 3 high-priority, tight 4-day window) | |
| { | |
| "label": "exam_crunch", | |
| "difficulty": "medium", | |
| "tasks": [ | |
| {"id": 1, "name": "Chemistry revision", "deadline": "2026-05-03 18:00", "duration_hrs": 5.0, "priority": "high", "subject": "Chemistry"}, | |
| {"id": 2, "name": "Biology diagrams", "deadline": "2026-05-04 12:00", "duration_hrs": 3.0, "priority": "high", "subject": "Biology"}, | |
| {"id": 3, "name": "Math problem sets", "deadline": "2026-05-02 20:00", "duration_hrs": 4.0, "priority": "high", "subject": "Mathematics"}, | |
| ], | |
| "calendar": { | |
| "2026-05-01": {"slots": ["09:00-13:00", "15:00-19:00"], "day_name": "Thursday"}, | |
| "2026-05-02": {"slots": ["09:00-13:00", "14:00-18:00"], "day_name": "Friday"}, | |
| "2026-05-03": {"slots": ["09:00-12:00", "13:00-17:00"], "day_name": "Saturday"}, | |
| "2026-05-04": {"slots": ["09:00-11:00"], "day_name": "Sunday"}, | |
| }, | |
| "preferences": {"prefers_morning": True, "max_daily_hours": 8, "min_break_gap_mins": 60, "end_by": "20:00"}, | |
| "energy_profile": {"morning": 0.95, "afternoon": 0.75, "evening": 0.4}, | |
| }, | |
| # 4 — Weekend warrior (medium: free only Sat/Sun) | |
| { | |
| "label": "weekend_warrior", | |
| "difficulty": "medium", | |
| "tasks": [ | |
| {"id": 1, "name": "Statistics homework", "deadline": "2026-05-19 23:59", "duration_hrs": 3.0, "priority": "high", "subject": "Statistics"}, | |
| {"id": 2, "name": "Philosophy essay draft", "deadline": "2026-05-19 23:59", "duration_hrs": 4.0, "priority": "medium", "subject": "Philosophy"}, | |
| {"id": 3, "name": "Geography map work", "deadline": "2026-05-18 17:00", "duration_hrs": 2.0, "priority": "medium", "subject": "Geography"}, | |
| ], | |
| "calendar": { | |
| "2026-05-17": {"slots": ["08:00-12:00", "13:00-17:00", "18:00-21:00"], "day_name": "Saturday"}, | |
| "2026-05-18": {"slots": ["09:00-12:00", "13:00-16:00"], "day_name": "Sunday"}, | |
| }, | |
| "preferences": {"prefers_morning": True, "max_daily_hours": 8, "min_break_gap_mins": 60, "end_by": "21:00"}, | |
| "energy_profile": {"morning": 0.9, "afternoon": 0.65, "evening": 0.45}, | |
| }, | |
| # 5 — Project-heavy (hard: 7 tasks, mixed priorities, 6 days) | |
| { | |
| "label": "project_heavy", | |
| "difficulty": "hard", | |
| "tasks": [ | |
| {"id": 1, "name": "CS assignment code", "deadline": "2026-05-15 23:59", "duration_hrs": 5.0, "priority": "high", "subject": "CS"}, | |
| {"id": 2, "name": "CS assignment writeup", "deadline": "2026-05-15 23:59", "duration_hrs": 2.0, "priority": "high", "subject": "CS"}, | |
| {"id": 3, "name": "Economics essay", "deadline": "2026-05-17 12:00", "duration_hrs": 4.0, "priority": "high", "subject": "Economics"}, | |
| {"id": 4, "name": "Physics lab report", "deadline": "2026-05-16 17:00", "duration_hrs": 3.0, "priority": "medium", "subject": "Physics"}, | |
| {"id": 5, "name": "Spanish speaking prep", "deadline": "2026-05-14 09:00", "duration_hrs": 1.5, "priority": "medium", "subject": "Spanish"}, | |
| {"id": 6, "name": "Weekly reading", "deadline": "2026-05-18 23:59", "duration_hrs": 2.0, "priority": "low", "subject": "English"}, | |
| {"id": 7, "name": "Revision session", "deadline": "2026-05-18 23:59", "duration_hrs": 1.0, "priority": "low", "subject": "General"}, | |
| ], | |
| "calendar": { | |
| "2026-05-12": {"slots": ["09:00-13:00", "14:00-18:00", "19:00-21:00"], "day_name": "Monday"}, | |
| "2026-05-13": {"slots": ["09:00-13:00", "14:00-18:00"], "day_name": "Tuesday"}, | |
| "2026-05-14": {"slots": ["09:00-13:00", "14:00-18:00", "19:00-21:00"], "day_name": "Wednesday"}, | |
| "2026-05-15": {"slots": ["09:00-13:00", "14:00-18:00"], "day_name": "Thursday"}, | |
| "2026-05-16": {"slots": ["09:00-13:00", "14:00-17:00"], "day_name": "Friday"}, | |
| "2026-05-17": {"slots": ["10:00-13:00", "15:00-18:00"], "day_name": "Saturday"}, | |
| }, | |
| "preferences": {"prefers_morning": True, "max_daily_hours": 8, "min_break_gap_mins": 90, "end_by": "22:00"}, | |
| "energy_profile": {"morning": 0.9, "afternoon": 0.7, "evening": 0.5}, | |
| }, | |
| # 6 — Balanced (medium: 5 tasks, 5 days, moderate load) | |
| { | |
| "label": "balanced_week", | |
| "difficulty": "medium", | |
| "tasks": [ | |
| {"id": 1, "name": "Algebra problem sets", "deadline": "2026-05-22 18:00", "duration_hrs": 3.0, "priority": "high", "subject": "Mathematics"}, | |
| {"id": 2, "name": "Literature analysis", "deadline": "2026-05-23 23:59", "duration_hrs": 2.5, "priority": "medium", "subject": "English"}, | |
| {"id": 3, "name": "Biology notes", "deadline": "2026-05-24 12:00", "duration_hrs": 2.0, "priority": "medium", "subject": "Biology"}, | |
| {"id": 4, "name": "Music theory worksheet", "deadline": "2026-05-25 17:00", "duration_hrs": 1.0, "priority": "low", "subject": "Music"}, | |
| {"id": 5, "name": "Weekly review session", "deadline": "2026-05-25 23:59", "duration_hrs": 1.5, "priority": "low", "subject": "General"}, | |
| ], | |
| "calendar": { | |
| "2026-05-19": {"slots": ["09:00-12:00", "15:00-17:00"], "day_name": "Monday"}, | |
| "2026-05-20": {"slots": ["09:00-11:00", "14:00-17:00"], "day_name": "Tuesday"}, | |
| "2026-05-21": {"slots": ["09:00-12:00", "16:00-18:00"], "day_name": "Wednesday"}, | |
| "2026-05-22": {"slots": ["09:00-12:00", "14:00-16:00"], "day_name": "Thursday"}, | |
| "2026-05-23": {"slots": ["10:00-13:00"], "day_name": "Friday"}, | |
| }, | |
| "preferences": {"prefers_morning": True, "max_daily_hours": 6, "min_break_gap_mins": 90, "end_by": "21:00"}, | |
| "energy_profile": {"morning": 0.85, "afternoon": 0.7, "evening": 0.55}, | |
| }, | |
| # 7 — Deadline storm (hard: 8 tasks, 5 days, 3 same-day deadlines) | |
| { | |
| "label": "deadline_storm", | |
| "difficulty": "hard", | |
| "tasks": [ | |
| {"id": 1, "name": "Calculus final prep", "deadline": "2026-05-27 09:00", "duration_hrs": 4.0, "priority": "high", "subject": "Mathematics"}, | |
| {"id": 2, "name": "Data structures project", "deadline": "2026-05-27 09:00", "duration_hrs": 5.0, "priority": "high", "subject": "CS"}, | |
| {"id": 3, "name": "Technical writing report", "deadline": "2026-05-27 09:00", "duration_hrs": 3.0, "priority": "high", "subject": "English"}, | |
| {"id": 4, "name": "Chemistry lab analysis", "deadline": "2026-05-28 17:00", "duration_hrs": 2.5, "priority": "medium", "subject": "Chemistry"}, | |
| {"id": 5, "name": "Psychology case study", "deadline": "2026-05-28 23:59", "duration_hrs": 3.0, "priority": "medium", "subject": "Psychology"}, | |
| {"id": 6, "name": "Statistics problem set", "deadline": "2026-05-29 12:00", "duration_hrs": 2.0, "priority": "medium", "subject": "Statistics"}, | |
| {"id": 7, "name": "Group presentation prep", "deadline": "2026-05-26 20:00", "duration_hrs": 1.5, "priority": "high", "subject": "Communication"}, | |
| {"id": 8, "name": "Final review session", "deadline": "2026-05-29 23:59", "duration_hrs": 1.0, "priority": "low", "subject": "General"}, | |
| ], | |
| "calendar": { | |
| "2026-05-25": {"slots": ["08:00-12:00", "13:00-17:00", "18:00-21:00"], "day_name": "Sunday"}, | |
| "2026-05-26": {"slots": ["08:00-12:00", "13:00-17:00", "18:00-21:00"], "day_name": "Monday"}, | |
| "2026-05-27": {"slots": ["09:00-13:00", "14:00-18:00"], "day_name": "Tuesday"}, | |
| "2026-05-28": {"slots": ["09:00-13:00", "14:00-18:00", "19:00-21:00"], "day_name": "Wednesday"}, | |
| "2026-05-29": {"slots": ["09:00-12:00", "14:00-17:00"], "day_name": "Thursday"}, | |
| }, | |
| "preferences": {"prefers_morning": True, "max_daily_hours": 9, "min_break_gap_mins": 60, "end_by": "22:00"}, | |
| "energy_profile": {"morning": 0.95, "afternoon": 0.8, "evening": 0.5}, | |
| }, | |
| ] | |
| # Difficulty ordering for training curriculum | |
| DIFFICULTY_ORDER = {"easy": 0, "medium": 1, "hard": 2} | |
| # --------------------------------------------------------------------------- | |
| # Backward-compat alias for run_baseline.py | |
| # --------------------------------------------------------------------------- | |
| SCENARIOS = [ | |
| { | |
| "label": s["label"], | |
| "difficulty": s.get("difficulty", "medium"), | |
| "student_id": f"train_{s['label']}", | |
| "tasks": s["tasks"], | |
| "calendar": s["calendar"], | |
| "preferences": s["preferences"], | |
| "energy_profile": s.get("energy_profile", {}), | |
| "history": [], | |
| "iteration": 0, | |
| "current_plan": None, | |
| } | |
| for s in TRAINING_SCENARIOS | |
| ] | |