cq-test / test_retrieval.py
NANI-Nithin's picture
Phase 1: establish the baseline
eaf7eca
Raw
History Blame Contribute Delete
4.9 kB
"""
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()