220 lines
5.1 KiB
Markdown
220 lines
5.1 KiB
Markdown
# Testing the AI Intelligence Layer
|
|
|
|
## Quick Test Options
|
|
|
|
### Option 1: Python Script (RECOMMENDED - No dependencies)
|
|
```bash
|
|
python3 test_api.py
|
|
```
|
|
|
|
**Advantages:**
|
|
- ✅ No external tools required
|
|
- ✅ Clear, formatted output
|
|
- ✅ Built-in error handling
|
|
- ✅ Works on all systems
|
|
|
|
### Option 2: Shell Script
|
|
```bash
|
|
./test_api.sh
|
|
```
|
|
|
|
**Note:** Uses pure Python for JSON processing (no `jq` required)
|
|
|
|
### Option 3: Manual Testing
|
|
|
|
#### Health Check
|
|
```bash
|
|
curl http://localhost:9000/api/health | python3 -m json.tool
|
|
```
|
|
|
|
#### Brainstorm Test
|
|
```bash
|
|
python3 << 'EOF'
|
|
import json
|
|
import urllib.request
|
|
|
|
# Load data
|
|
with open('sample_data/sample_enriched_telemetry.json') as f:
|
|
telemetry = json.load(f)
|
|
with open('sample_data/sample_race_context.json') as f:
|
|
context = json.load(f)
|
|
|
|
# Make request
|
|
data = json.dumps({
|
|
"enriched_telemetry": telemetry,
|
|
"race_context": context
|
|
}).encode('utf-8')
|
|
|
|
req = urllib.request.Request(
|
|
'http://localhost:9000/api/strategy/brainstorm',
|
|
data=data,
|
|
headers={'Content-Type': 'application/json'}
|
|
)
|
|
|
|
with urllib.request.urlopen(req, timeout=120) as response:
|
|
result = json.loads(response.read())
|
|
print(f"Generated {len(result['strategies'])} strategies")
|
|
for s in result['strategies'][:3]:
|
|
print(f"{s['strategy_id']}. {s['strategy_name']} - {s['risk_level']} risk")
|
|
EOF
|
|
```
|
|
|
|
## Expected Output
|
|
|
|
### Successful Test Run
|
|
|
|
```
|
|
======================================================================
|
|
AI Intelligence Layer - Test Suite
|
|
======================================================================
|
|
1. Testing health endpoint...
|
|
✓ Status: healthy
|
|
✓ Service: AI Intelligence Layer
|
|
✓ Demo mode: False
|
|
|
|
2. Testing brainstorm endpoint...
|
|
(This may take 15-30 seconds...)
|
|
✓ Generated 20 strategies in 18.3s
|
|
|
|
Sample strategies:
|
|
1. Conservative 1-Stop
|
|
Stops: 1, Risk: low
|
|
2. Standard Medium-Hard
|
|
Stops: 1, Risk: medium
|
|
3. Aggressive Undercut
|
|
Stops: 2, Risk: high
|
|
|
|
3. Testing analyze endpoint...
|
|
(This may take 20-40 seconds...)
|
|
✓ Analysis complete in 24.7s
|
|
|
|
Top 3 strategies:
|
|
|
|
1. Aggressive Undercut (RECOMMENDED)
|
|
Predicted: P3
|
|
P3 or better: 75%
|
|
Risk: medium
|
|
|
|
2. Standard Two-Stop (ALTERNATIVE)
|
|
Predicted: P4
|
|
P3 or better: 63%
|
|
Risk: medium
|
|
|
|
3. Conservative 1-Stop (CONSERVATIVE)
|
|
Predicted: P5
|
|
P3 or better: 37%
|
|
Risk: low
|
|
|
|
======================================================================
|
|
RECOMMENDED STRATEGY DETAILS:
|
|
======================================================================
|
|
|
|
Engineer Brief:
|
|
Undercut Leclerc on lap 32. 75% chance of P3 or better.
|
|
|
|
Driver Radio:
|
|
"Box this lap. Soft tires going on. Push mode for next 8 laps."
|
|
|
|
ECU Commands:
|
|
Fuel: RICH
|
|
ERS: AGGRESSIVE_DEPLOY
|
|
Engine: PUSH
|
|
|
|
======================================================================
|
|
|
|
======================================================================
|
|
✓ ALL TESTS PASSED!
|
|
======================================================================
|
|
|
|
Results saved to:
|
|
- /tmp/brainstorm_result.json
|
|
- /tmp/analyze_result.json
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### "Connection refused"
|
|
```bash
|
|
# Service not running. Start it:
|
|
python main.py
|
|
```
|
|
|
|
### "Timeout" errors
|
|
```bash
|
|
# Check .env settings:
|
|
cat .env | grep TIMEOUT
|
|
|
|
# Should see:
|
|
# BRAINSTORM_TIMEOUT=90
|
|
# ANALYZE_TIMEOUT=120
|
|
|
|
# Also check Fast Mode is enabled:
|
|
cat .env | grep FAST_MODE
|
|
# Should see: FAST_MODE=true
|
|
```
|
|
|
|
### "422 Unprocessable Content"
|
|
This usually means invalid JSON in the request. The new test scripts handle this automatically.
|
|
|
|
### Test takes too long
|
|
```bash
|
|
# Enable fast mode in .env:
|
|
FAST_MODE=true
|
|
|
|
# Restart service:
|
|
# Press Ctrl+C in the terminal running python main.py
|
|
# Then: python main.py
|
|
```
|
|
|
|
## Performance Benchmarks
|
|
|
|
With `FAST_MODE=true` and `gemini-2.5-flash`:
|
|
|
|
| Test | Expected Time | Status |
|
|
|------|--------------|--------|
|
|
| Health | <1s | ✅ |
|
|
| Brainstorm | 15-30s | ✅ |
|
|
| Analyze | 20-40s | ✅ |
|
|
| **Total** | **40-70s** | ✅ |
|
|
|
|
## Component Tests
|
|
|
|
To test just the data models and validators (no API calls):
|
|
|
|
```bash
|
|
python test_components.py
|
|
```
|
|
|
|
This runs instantly and doesn't require the Gemini API.
|
|
|
|
## Files Created During Tests
|
|
|
|
- `/tmp/test_request.json` - Brainstorm request payload
|
|
- `/tmp/brainstorm_result.json` - 20 generated strategies
|
|
- `/tmp/analyze_request.json` - Analyze request payload
|
|
- `/tmp/analyze_result.json` - Top 3 analyzed strategies
|
|
|
|
You can inspect these files to see the full API responses.
|
|
|
|
## Integration with Enrichment Service
|
|
|
|
If the enrichment service is running on `localhost:8000`, the AI layer will automatically fetch telemetry data when not provided in the request:
|
|
|
|
```bash
|
|
# Test without providing telemetry (will fetch from enrichment service)
|
|
curl -X POST http://localhost:9000/api/strategy/brainstorm \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"race_context": {
|
|
"race_info": {"track_name": "Monaco", "current_lap": 27, "total_laps": 58},
|
|
"driver_state": {"driver_name": "Hamilton", "current_position": 4}
|
|
}
|
|
}'
|
|
```
|
|
|
|
---
|
|
|
|
**Ready to test!** 🚀
|
|
|
|
Just run: `python3 test_api.py`
|