| """End-to-end test for Phase 3: Session Intelligence.""" |
|
|
| import uuid |
| from app.services.retrieval import load_games_dataset, normalize_game_record, retrieve_examples |
| from app.services.generator import generate_game |
| from app.services.validator import validate_game, repair_game |
| from app.services.tracing import log_event, load_events |
| from app.services.journal import create_journal_entry, save_journal_entry, summarize_journal, load_journal_entries |
| from app.services.scoring import compute_scores |
| from app.services.story import build_story_packet, generate_story |
|
|
| |
| raw = load_games_dataset("app/data/games_dataset.json") |
| records = [normalize_game_record(r) for r in raw] |
| print(f"β Loaded {len(records)} records") |
|
|
| |
| config = { |
| "game_type": "scavenger_hunt", |
| "city": "Paris", |
| "area": "Le Marais", |
| "location_type": "mixed", |
| "duration_minutes": 60, |
| "num_players": 4, |
| "difficulty": "medium", |
| "age_group": "adults", |
| "energy_level": "medium", |
| "photo_enabled": True, |
| } |
|
|
| |
| retrieved = retrieve_examples(config, records, k=3) |
| game = generate_game(config, retrieved) |
| print(f"β Generated: {game['title']} with {len(game['tasks'])} tasks") |
|
|
| |
| is_valid, failures = validate_game(game, config) |
| status = "PASS" if is_valid else f"FAIL ({len(failures)} issues)" |
| print(f"β Validation: {status}") |
|
|
| |
| session_id = f"test-{uuid.uuid4().hex[:8]}" |
|
|
| |
| for t in game["tasks"]: |
| log_event(session_id, "task_revealed", {"task_id": t["task_id"], "title": t["title"]}) |
| log_event(session_id, "task_completed", {"task_id": "t1", "summary": "Completed first task"}, team_id="team-a") |
| log_event(session_id, "task_completed", {"task_id": "t2", "summary": "Completed second task"}, team_id="team-a") |
| log_event(session_id, "hint_used", {"task_id": "t2", "summary": "Used hint"}, team_id="team-a") |
| log_event(session_id, "task_skipped", {"task_id": "t3", "summary": "Skipped"}, team_id="team-a") |
| events = load_events(session_id) |
| print(f"β Logged {len(events)} events") |
|
|
| |
| entry = create_journal_entry( |
| transcript="We found the mural near the canal, it was incredible! The whole team cheered.", |
| session_id=session_id, |
| team_id="team-a", |
| task_id="t1", |
| location_note="Canal area", |
| ) |
| summary = summarize_journal(entry["transcript"], task_id="t1") |
| entry.update(summary) |
| save_journal_entry(entry) |
| journals = load_journal_entries(session_id) |
| print(f"β Journal mood={entry['mood']}, story_value={entry['story_value']}") |
|
|
| |
| scores = compute_scores(events, game) |
| print(f"β Winner: {scores['winner']}") |
| for s in scores["team_scores"]: |
| print(f" - {s['team_id']}: {s['points']} pts ({s['completed_tasks']}/{s['total_tasks']} tasks)") |
|
|
| |
| packet = build_story_packet(game, events, scores, journals) |
| story = generate_story(packet, session_id=session_id) |
| print(f"β Story recap: {len(story['short_recap'])} chars short, {len(story['long_summary'])} chars long") |
|
|
| print() |
| print("=== SHORT RECAP ===") |
| print(story["short_recap"]) |
| print() |
| print("=== PIPELINE COMPLETE β ===") |
|
|