Files
Guido.Tech/test_integration_live.py
Karan Dubey 57e2b7712d the behemoth
2025-10-19 02:00:56 -05:00

162 lines
6.7 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Quick test to verify the complete integration workflow.
Run this after starting both services to test end-to-end.
"""
import requests
import json
import time
def test_complete_workflow():
"""Test the complete workflow from raw telemetry to strategy generation."""
print("🧪 Testing Complete Integration Workflow\n")
print("=" * 70)
# Test 1: Check services are running
print("\n1⃣ Checking service health...")
try:
enrichment_health = requests.get("http://localhost:8000/healthz", timeout=2)
print(f" ✅ Enrichment service: {enrichment_health.json()}")
except Exception as e:
print(f" ❌ Enrichment service not responding: {e}")
print(" → Start with: uvicorn hpcsim.api:app --port 8000")
return False
try:
ai_health = requests.get("http://localhost:9000/api/health", timeout=2)
print(f" ✅ AI Intelligence Layer: {ai_health.json()}")
except Exception as e:
print(f" ❌ AI Intelligence Layer not responding: {e}")
print(" → Start with: cd ai_intelligence_layer && uvicorn main:app --port 9000")
return False
# Test 2: Send telemetry with race context
print("\n2⃣ Sending telemetry with race context...")
telemetry_samples = []
for lap in range(1, 6):
sample = {
'lap_number': lap,
'total_laps': 51,
'speed': 280.0 + (lap * 2),
'throttle': 0.85 + (lap * 0.01),
'brake': 0.05,
'tire_compound': 'MEDIUM',
'tire_life_laps': lap,
'track_temperature': 42.5,
'rainfall': False,
'track_name': 'Monza',
'driver_name': 'Alonso',
'current_position': 5,
'fuel_level': 0.9 - (lap * 0.02),
}
telemetry_samples.append(sample)
responses = []
for i, sample in enumerate(telemetry_samples, 1):
try:
response = requests.post(
"http://localhost:8000/ingest/telemetry",
json=sample,
timeout=5
)
if response.status_code == 200:
result = response.json()
responses.append(result)
print(f" Lap {sample['lap_number']}: ✅ Enriched")
# Check if we got enriched_telemetry and race_context
if 'enriched_telemetry' in result and 'race_context' in result:
print(f" └─ Enriched telemetry + race context included")
if i == len(telemetry_samples):
# Show last response details
enriched = result['enriched_telemetry']
context = result['race_context']
print(f"\n 📊 Final Enriched Metrics:")
print(f" - Aero Efficiency: {enriched['aero_efficiency']:.3f}")
print(f" - Tire Degradation: {enriched['tire_degradation_index']:.3f}")
print(f" - Driver Consistency: {enriched['driver_consistency']:.3f}")
print(f"\n 🏎️ Race Context:")
print(f" - Track: {context['race_context']['race_info']['track_name']}")
print(f" - Lap: {context['race_context']['race_info']['current_lap']}/{context['race_context']['race_info']['total_laps']}")
print(f" - Position: P{context['race_context']['driver_state']['current_position']}")
print(f" - Fuel: {context['race_context']['driver_state']['fuel_remaining_percent']:.1f}%")
print(f" - Competitors: {len(context['race_context']['competitors'])} shown")
else:
print(f" ⚠️ Legacy format (no race context)")
else:
print(f" Lap {sample['lap_number']}: ❌ Failed ({response.status_code})")
except Exception as e:
print(f" Lap {sample['lap_number']}: ❌ Error: {e}")
time.sleep(0.5) # Small delay between requests
# Test 3: Check AI layer buffer
print("\n3⃣ Checking AI layer webhook processing...")
# The AI layer should have received webhooks and auto-generated strategies
# Let's verify by checking if we can call brainstorm manually
# (The auto-brainstorm happens in the webhook, but we can verify the buffer)
print(" Auto-brainstorming triggers when buffer has ≥3 laps")
print(" Strategies are returned in the webhook response to enrichment service")
print(" Check the AI Intelligence Layer logs for auto-generated strategies")
# Test 4: Manual brainstorm call (to verify the endpoint still works)
print("\n4⃣ Testing manual brainstorm endpoint...")
try:
brainstorm_request = {
"race_context": {
"race_info": {
"track_name": "Monza",
"total_laps": 51,
"current_lap": 5,
"weather_condition": "Dry",
"track_temp_celsius": 42.5
},
"driver_state": {
"driver_name": "Alonso",
"current_position": 5,
"current_tire_compound": "medium",
"tire_age_laps": 5,
"fuel_remaining_percent": 82.0
},
"competitors": []
}
}
response = requests.post(
"http://localhost:9000/api/strategy/brainstorm",
json=brainstorm_request,
timeout=30
)
if response.status_code == 200:
result = response.json()
print(f" ✅ Generated {len(result['strategies'])} strategies")
if result['strategies']:
strategy = result['strategies'][0]
print(f"\n 🎯 Sample Strategy:")
print(f" - Name: {strategy['strategy_name']}")
print(f" - Stops: {strategy['stop_count']}")
print(f" - Pit Laps: {strategy['pit_laps']}")
print(f" - Tires: {''.join(strategy['tire_sequence'])}")
print(f" - Risk: {strategy['risk_level']}")
else:
print(f" ⚠️ Brainstorm returned {response.status_code}")
print(f" (This might be expected if Gemini API is not configured)")
except Exception as e:
print(f" Manual brainstorm skipped: {e}")
print("\n" + "=" * 70)
print("✅ Integration test complete!\n")
return True
if __name__ == '__main__':
test_complete_workflow()