# Integration Updates - Enrichment to AI Intelligence Layer ## Overview This document describes the updates made to integrate the HPC enrichment stage with the AI Intelligence Layer for automatic strategy generation. ## Changes Summary ### 1. AI Intelligence Layer (`/api/ingest/enriched` endpoint) **Previous behavior:** - Received only enriched telemetry data - Stored data in buffer - Required manual calls to `/api/strategy/brainstorm` endpoint **New behavior:** - Receives **both** enriched telemetry AND race context - Stores telemetry in buffer AND updates global race context - **Automatically triggers strategy brainstorming** when sufficient data is available (≥3 laps) - Returns generated strategies in the webhook response **Updated Input Model:** ```python class EnrichedTelemetryWithContext(BaseModel): enriched_telemetry: EnrichedTelemetryWebhook race_context: RaceContext ``` **Response includes:** - `status`: Processing status - `lap`: Current lap number - `buffer_size`: Number of telemetry records in buffer - `strategies_generated`: Number of strategies created (if auto-brainstorm triggered) - `strategies`: List of strategy objects (if auto-brainstorm triggered) ### 2. Enrichment Stage Output **Previous output (enriched telemetry only):** ```json { "lap": 27, "aero_efficiency": 0.83, "tire_degradation_index": 0.65, "ers_charge": 0.72, "fuel_optimization_score": 0.91, "driver_consistency": 0.89, "weather_impact": "low" } ``` **New output (enriched telemetry + race context):** ```json { "enriched_telemetry": { "lap": 27, "aero_efficiency": 0.83, "tire_degradation_index": 0.65, "ers_charge": 0.72, "fuel_optimization_score": 0.91, "driver_consistency": 0.89, "weather_impact": "low" }, "race_context": { "race_info": { "track_name": "Monza", "total_laps": 51, "current_lap": 27, "weather_condition": "Dry", "track_temp_celsius": 42.5 }, "driver_state": { "driver_name": "Alonso", "current_position": 5, "current_tire_compound": "medium", "tire_age_laps": 12, "fuel_remaining_percent": 65.0 }, "competitors": [ { "position": 4, "driver": "Sainz", "tire_compound": "medium", "tire_age_laps": 10, "gap_seconds": -2.3 }, // ... more competitors ] } } ``` ### 3. Modified Components #### `hpcsim/enrichment.py` - Added `enrich_with_context()` method (new primary method) - Maintains backward compatibility with `enrich()` (legacy method) - Builds complete race context including: - Race information (track, laps, weather) - Driver state (position, tires, fuel) - Competitor data (mock generation for testing) #### `hpcsim/adapter.py` - Extended to normalize additional fields: - `track_name` - `total_laps` - `driver_name` - `current_position` - `tire_life_laps` - `rainfall` #### `hpcsim/api.py` - Updated `/ingest/telemetry` endpoint to use `enrich_with_context()` - Webhook now sends complete payload with enriched telemetry + race context #### `scripts/simulate_pi_stream.py` - Updated to include race context fields in telemetry data: - `track_name`: "Monza" - `driver_name`: "Alonso" - `current_position`: 5 - `fuel_level`: Calculated based on lap progress #### `scripts/enrich_telemetry.py` - Added `--full-context` flag for outputting complete race context - Default behavior unchanged (backward compatible) #### `ai_intelligence_layer/main.py` - Updated `/api/ingest/enriched` endpoint to: - Accept `EnrichedTelemetryWithContext` model - Store race context globally - Auto-trigger strategy brainstorming with ≥3 laps of data - Return strategies in webhook response #### `ai_intelligence_layer/models/input_models.py` - Added `EnrichedTelemetryWithContext` model ## Usage ### Running the Full Pipeline 1. **Start the enrichment service:** ```bash export NEXT_STAGE_CALLBACK_URL=http://localhost:9000/api/ingest/enriched uvicorn hpcsim.api:app --host 0.0.0.0 --port 8000 ``` 2. **Start the AI Intelligence Layer:** ```bash cd ai_intelligence_layer uvicorn main:app --host 0.0.0.0 --port 9000 ``` 3. **Stream telemetry data:** ```bash python scripts/simulate_pi_stream.py \ --data ALONSO_2023_MONZA_RACE \ --endpoint http://localhost:8000/ingest/telemetry \ --speed 10.0 ``` ### What Happens 1. Pi simulator sends raw telemetry to enrichment service (port 8000) 2. Enrichment service: - Normalizes telemetry - Enriches with HPC metrics - Builds race context - Forwards to AI layer webhook (port 9000) 3. AI Intelligence Layer: - Receives enriched telemetry + race context - Stores in buffer - **Automatically generates strategies** when buffer has ≥3 laps - Returns strategies in webhook response ### Manual Testing Test enrichment with context: ```bash echo '{"lap":10,"speed":280,"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}' | \ python scripts/enrich_telemetry.py --full-context ``` Test webhook directly: ```bash curl -X POST http://localhost:9000/api/ingest/enriched \ -H "Content-Type: application/json" \ -d '{ "enriched_telemetry": { "lap": 15, "aero_efficiency": 0.85, "tire_degradation_index": 0.3, "ers_charge": 0.75, "fuel_optimization_score": 0.9, "driver_consistency": 0.88, "weather_impact": "low" }, "race_context": { "race_info": { "track_name": "Monza", "total_laps": 51, "current_lap": 15, "weather_condition": "Dry", "track_temp_celsius": 42.5 }, "driver_state": { "driver_name": "Alonso", "current_position": 5, "current_tire_compound": "medium", "tire_age_laps": 10, "fuel_remaining_percent": 70.0 }, "competitors": [] } }' ``` ## Testing Run all tests: ```bash python -m pytest tests/ -v ``` Specific test files: ```bash # Unit tests for enrichment python -m pytest tests/test_enrichment.py -v # Integration tests python -m pytest tests/test_integration.py -v ``` ## Backward Compatibility - The legacy `enrich()` method still works and returns only enriched metrics - The `/api/strategy/brainstorm` endpoint can still be called manually - Scripts work with or without race context fields - Existing tests continue to pass ## Key Benefits 1. **Automatic Strategy Generation**: No manual endpoint calls needed 2. **Complete Context**: AI layer receives all necessary data in one webhook 3. **Real-time Processing**: Strategies generated as telemetry arrives 4. **Stateful Enrichment**: Enricher maintains race state across laps 5. **Realistic Competitor Data**: Mock competitors generated for testing 6. **Type Safety**: Pydantic models ensure data validity ## Data Flow ``` Pi/Simulator → Enrichment Service → AI Intelligence Layer (raw) (enrich + context) (auto-brainstorm) ↓ Strategies ``` ## Notes - **Minimum buffer size**: AI layer waits for ≥3 laps before auto-brainstorming - **Competitor data**: Currently mock-generated; can be replaced with real data - **Fuel conversion**: Automatically converts 0-1 range to 0-100 percentage - **Tire normalization**: Maps all tire compound variations to standard names - **Weather detection**: Based on `rainfall` boolean and temperature