Files
Guido.Tech/ai_intelligence_layer/TESTING.md

220 lines
5.1 KiB
Markdown
Raw Normal View History

2025-10-18 22:36:20 -05:00
# 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`