Spaces:
Running on Zero
Running on Zero
| """ | |
| Test and demonstrate the retrieval system. | |
| Run this script to: | |
| 1. Load and normalize the dataset | |
| 2. Test retrieval with various config examples | |
| 3. Display retrieved results with similarity scores | |
| """ | |
| import json | |
| from app.services.retrieval import load_games_dataset, normalize_game_record, retrieve_examples | |
| def main(): | |
| # Load and normalize dataset | |
| print("Loading and normalizing dataset...") | |
| raw_records = load_games_dataset("app/data/games_dataset.json") | |
| normalized_records = [normalize_game_record(r) for r in raw_records] | |
| print(f"✓ Loaded {len(normalized_records)} normalized records\n") | |
| # Test cases: different user configurations | |
| test_configs = [ | |
| { | |
| "name": "Scavenger Hunt - Adults - Medium", | |
| "config": { | |
| "game_type": "scavenger_hunt", | |
| "city": "Paris", | |
| "area": "free text", | |
| "location_type": "mixed", | |
| "duration_minutes": 60, | |
| "num_players": 4, | |
| "difficulty": "medium", | |
| "age_group": "adults", | |
| "energy_level": "medium", | |
| "photo_enabled": True | |
| } | |
| }, | |
| { | |
| "name": "Hide and Seek - Kids - Easy", | |
| "config": { | |
| "game_type": "hide_and_seek", | |
| "city": "Paris", | |
| "area": "park area", | |
| "location_type": "park", | |
| "duration_minutes": 45, | |
| "num_players": 5, | |
| "difficulty": "easy", | |
| "age_group": "kids", | |
| "energy_level": "high", | |
| "photo_enabled": False | |
| } | |
| }, | |
| { | |
| "name": "Tag - Teens - Hard", | |
| "config": { | |
| "game_type": "tag", | |
| "city": "Paris", | |
| "area": "outdoor spaces", | |
| "location_type": "mixed", | |
| "duration_minutes": 30, | |
| "num_players": 8, | |
| "difficulty": "hard", | |
| "age_group": "teens", | |
| "energy_level": "high", | |
| "photo_enabled": False | |
| } | |
| }, | |
| { | |
| "name": "Mixed Age - 90 minutes - Medium", | |
| "config": { | |
| "game_type": "scavenger_hunt", | |
| "city": "Paris", | |
| "area": "outdoor", | |
| "location_type": "mixed", | |
| "duration_minutes": 90, | |
| "num_players": 6, | |
| "difficulty": "medium", | |
| "age_group": "mixed", | |
| "energy_level": "medium", | |
| "photo_enabled": True | |
| } | |
| } | |
| ] | |
| # Run retrieval tests | |
| for test in test_configs: | |
| print("=" * 80) | |
| print(f"TEST: {test['name']}") | |
| print("=" * 80) | |
| config = test['config'] | |
| print(f"Query Config:") | |
| print(f" Game Type: {config['game_type']}") | |
| print(f" Duration: {config['duration_minutes']} min | Players: {config['num_players']}") | |
| print(f" Difficulty: {config['difficulty']} | Age Group: {config['age_group']}") | |
| print(f" Location Type: {config['location_type']}") | |
| # Retrieve top 5 examples | |
| retrieved = retrieve_examples(config, normalized_records, k=5) | |
| print(f"\nTop 5 Retrieved Examples:") | |
| print("-" * 80) | |
| for i, example in enumerate(retrieved, 1): | |
| print(f"\n{i}. {example['id']} (Score: {example['retrieval_score']:.1f})") | |
| print(f" Game Type: {example['game_type']}") | |
| print(f" Area: {example['area']}") | |
| print(f" Duration: {example['duration_minutes']} min | Difficulty: {example['difficulty']}") | |
| print(f" Age Group: {example['age_group']} | Quality: {example['quality_score']}/5") | |
| print(f" Rules: {len(example['rules_summary'])} examples") | |
| if example['rules_summary']: | |
| print(f" • {example['rules_summary'][0][:70]}...") | |
| print(f" Tasks: {len(example['task_patterns'])} patterns") | |
| for task in example['task_patterns'][:2]: | |
| print(f" • {task['task_id']}: {task['points']} pts ({task['proof_type']})") | |
| if example['safety_patterns']: | |
| print(f" Safety Flags: {example['safety_patterns']}") | |
| print("\n") | |
| # Demonstrate retrieval output format | |
| print("=" * 80) | |
| print("EXEMPLAR BUNDLE OUTPUT FORMAT") | |
| print("=" * 80) | |
| sample_config = test_configs[0]["config"] | |
| sample_retrieved = retrieve_examples(sample_config, normalized_records, k=2) | |
| print("\nJSON Output (first 2 results):") | |
| print(json.dumps(sample_retrieved, indent=2)) | |
| print("\n" + "=" * 80) | |
| print("RETRIEVAL TESTS COMPLETE") | |
| print("=" * 80) | |
| if __name__ == "__main__": | |
| main() | |