the behemoth

This commit is contained in:
Karan Dubey
2025-10-19 02:00:56 -05:00
parent ad845169f4
commit 57e2b7712d
33 changed files with 1964 additions and 28 deletions

260
validate_integration.py Normal file
View File

@@ -0,0 +1,260 @@
#!/usr/bin/env python3
"""
Validation script to demonstrate the complete integration.
This shows that all pieces fit together correctly.
"""
from hpcsim.enrichment import Enricher
from hpcsim.adapter import normalize_telemetry
import json
def validate_task_1():
"""Validate Task 1: AI layer receives enriched_telemetry + race_context"""
print("=" * 70)
print("TASK 1 VALIDATION: AI Layer Input Structure")
print("=" * 70)
enricher = Enricher()
# Simulate telemetry from Pi
raw_telemetry = {
'lap_number': 15,
'total_laps': 51,
'speed': 285.5,
'throttle': 88.0,
'brake': False,
'tire_compound': 'MEDIUM',
'tire_life_laps': 12,
'track_temperature': 42.5,
'rainfall': False,
'track_name': 'Monza',
'driver_name': 'Alonso',
'current_position': 5,
'fuel_level': 0.65,
}
# Process through pipeline
normalized = normalize_telemetry(raw_telemetry)
result = enricher.enrich_with_context(normalized)
print("\n✅ Input to AI Layer (/api/ingest/enriched):")
print(json.dumps(result, indent=2))
# Validate structure
assert 'enriched_telemetry' in result, "Missing enriched_telemetry"
assert 'race_context' in result, "Missing race_context"
enriched = result['enriched_telemetry']
context = result['race_context']
# Validate enriched telemetry fields
required_enriched = ['lap', 'aero_efficiency', 'tire_degradation_index',
'ers_charge', 'fuel_optimization_score',
'driver_consistency', 'weather_impact']
for field in required_enriched:
assert field in enriched, f"Missing enriched field: {field}"
# Validate race context structure
assert 'race_info' in context, "Missing race_info"
assert 'driver_state' in context, "Missing driver_state"
assert 'competitors' in context, "Missing competitors"
# Validate race_info
race_info = context['race_info']
assert race_info['track_name'] == 'Monza'
assert race_info['total_laps'] == 51
assert race_info['current_lap'] == 15
# Validate driver_state
driver_state = context['driver_state']
assert driver_state['driver_name'] == 'Alonso'
assert driver_state['current_position'] == 5
assert driver_state['current_tire_compound'] in ['soft', 'medium', 'hard', 'intermediate', 'wet']
print("\n✅ TASK 1 VALIDATION PASSED")
print(" - enriched_telemetry: ✅")
print(" - race_context.race_info: ✅")
print(" - race_context.driver_state: ✅")
print(" - race_context.competitors: ✅")
return True
def validate_task_2():
"""Validate Task 2: Enrichment outputs complete race context"""
print("\n" + "=" * 70)
print("TASK 2 VALIDATION: Enrichment Output Structure")
print("=" * 70)
enricher = Enricher()
# Test with minimal input
minimal_input = {
'lap': 10,
'speed': 280.0,
'throttle': 0.85,
'brake': 0.05,
'tire_compound': 'medium',
'fuel_level': 0.7,
}
# Old method (legacy) - should still work
legacy_result = enricher.enrich(minimal_input)
print("\n📊 Legacy Output (enrich method):")
print(json.dumps(legacy_result, indent=2))
assert 'lap' in legacy_result
assert 'aero_efficiency' in legacy_result
assert 'race_context' not in legacy_result # Legacy doesn't include context
print("✅ Legacy method still works (backward compatible)")
# New method - with context
full_input = {
'lap': 10,
'speed': 280.0,
'throttle': 0.85,
'brake': 0.05,
'tire_compound': 'medium',
'fuel_level': 0.7,
'track_temp': 42.5,
'total_laps': 51,
'track_name': 'Monza',
'driver_name': 'Alonso',
'current_position': 5,
'tire_life_laps': 8,
'rainfall': False,
}
new_result = enricher.enrich_with_context(full_input)
print("\n📊 New Output (enrich_with_context method):")
print(json.dumps(new_result, indent=2))
# Validate new output
assert 'enriched_telemetry' in new_result
assert 'race_context' in new_result
enriched = new_result['enriched_telemetry']
context = new_result['race_context']
# Check all 7 enriched fields
assert enriched['lap'] == 10
assert 0.0 <= enriched['aero_efficiency'] <= 1.0
assert 0.0 <= enriched['tire_degradation_index'] <= 1.0
assert 0.0 <= enriched['ers_charge'] <= 1.0
assert 0.0 <= enriched['fuel_optimization_score'] <= 1.0
assert 0.0 <= enriched['driver_consistency'] <= 1.0
assert enriched['weather_impact'] in ['low', 'medium', 'high']
# Check race context
assert context['race_info']['track_name'] == 'Monza'
assert context['race_info']['total_laps'] == 51
assert context['race_info']['current_lap'] == 10
assert context['driver_state']['driver_name'] == 'Alonso'
assert context['driver_state']['current_position'] == 5
assert context['driver_state']['fuel_remaining_percent'] == 70.0 # 0.7 * 100
assert len(context['competitors']) > 0
print("\n✅ TASK 2 VALIDATION PASSED")
print(" - Legacy enrich() still works: ✅")
print(" - New enrich_with_context() works: ✅")
print(" - All 7 enriched fields present: ✅")
print(" - race_info complete: ✅")
print(" - driver_state complete: ✅")
print(" - competitors generated: ✅")
return True
def validate_data_transformations():
"""Validate data transformations and conversions"""
print("\n" + "=" * 70)
print("DATA TRANSFORMATIONS VALIDATION")
print("=" * 70)
enricher = Enricher()
# Test tire compound normalization
test_cases = [
('SOFT', 'soft'),
('Medium', 'medium'),
('HARD', 'hard'),
('inter', 'intermediate'),
('INTERMEDIATE', 'intermediate'),
('wet', 'wet'),
]
print("\n🔧 Tire Compound Normalization:")
for input_tire, expected_output in test_cases:
result = enricher.enrich_with_context({
'lap': 1,
'speed': 280.0,
'throttle': 0.85,
'brake': 0.05,
'tire_compound': input_tire,
'fuel_level': 0.7,
})
actual = result['race_context']['driver_state']['current_tire_compound']
assert actual == expected_output, f"Expected {expected_output}, got {actual}"
print(f" {input_tire}{actual}")
# Test fuel conversion
print("\n🔧 Fuel Level Conversion (0-1 → 0-100%):")
fuel_tests = [0.0, 0.25, 0.5, 0.75, 1.0]
for fuel_in in fuel_tests:
result = enricher.enrich_with_context({
'lap': 1,
'speed': 280.0,
'throttle': 0.85,
'brake': 0.05,
'tire_compound': 'medium',
'fuel_level': fuel_in,
})
fuel_out = result['race_context']['driver_state']['fuel_remaining_percent']
expected = fuel_in * 100.0
assert fuel_out == expected, f"Expected {expected}, got {fuel_out}"
print(f" {fuel_in:.2f}{fuel_out:.1f}% ✅")
print("\n✅ DATA TRANSFORMATIONS VALIDATION PASSED")
return True
def main():
"""Run all validations"""
print("\n" + "🎯" * 35)
print("COMPLETE INTEGRATION VALIDATION")
print("🎯" * 35)
try:
# Task 1: AI layer receives enriched_telemetry + race_context
validate_task_1()
# Task 2: Enrichment outputs complete race context
validate_task_2()
# Data transformations
validate_data_transformations()
print("\n" + "=" * 70)
print("🎉 ALL VALIDATIONS PASSED! 🎉")
print("=" * 70)
print("\n✅ Task 1: AI layer webhook receives enriched_telemetry + race_context")
print("✅ Task 2: Enrichment outputs all expected fields")
print("✅ All data transformations working correctly")
print("✅ All pieces fit together properly")
print("\n" + "=" * 70)
return True
except AssertionError as e:
print(f"\n❌ VALIDATION FAILED: {e}")
return False
except Exception as e:
print(f"\n❌ ERROR: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == '__main__':
success = main()
exit(0 if success else 1)