77 lines
2.1 KiB
Markdown
77 lines
2.1 KiB
Markdown
# Clutch-IQ Inference API Interface Guide
|
|
|
|
## Overview
|
|
The Inference Service (`src/inference/app.py`) supports **two types of payloads** to accommodate different use cases: Real-time Game Integration and Strategy Simulation (Dashboard).
|
|
|
|
## 1. Raw Game State Payload (Game Integration)
|
|
Used when receiving data directly from the CS2 Game State Integration (GSI) or Parser. The server performs Feature Engineering.
|
|
|
|
**Use Case:** Real-time match prediction.
|
|
|
|
**Payload Structure:**
|
|
```json
|
|
{
|
|
"game_time": 60.0,
|
|
"is_bomb_planted": 0,
|
|
"site": 0,
|
|
"players": [
|
|
{
|
|
"team_num": 2, // 2=T, 3=CT
|
|
"is_alive": true,
|
|
"health": 100,
|
|
"X": -1200, "Y": 500, "Z": 128,
|
|
"active_weapon_name": "ak47",
|
|
"balance": 4500,
|
|
"equip_value": 2700
|
|
},
|
|
...
|
|
]
|
|
}
|
|
```
|
|
|
|
**Processing Logic:**
|
|
- `process_payload` extracts `players` list.
|
|
- Calculates `t_alive`, `health_diff`, `t_spread`, `pincer_index`, etc.
|
|
- Returns feature vector.
|
|
|
|
---
|
|
|
|
## 2. Pre-calculated Feature Payload (Dashboard/Simulation)
|
|
Used when the client (e.g., Streamlit Dashboard) manually sets the tactical situation. The server skips feature engineering and uses provided values.
|
|
|
|
**Use Case:** "What-if" analysis, Strategy Dashboard.
|
|
|
|
**Payload Structure:**
|
|
```json
|
|
{
|
|
"t_alive": 2,
|
|
"ct_alive": 3,
|
|
"t_health": 180,
|
|
"ct_health": 290,
|
|
"t_equip_value": 8500,
|
|
"ct_equip_value": 14000,
|
|
"t_total_cash": 1200,
|
|
"ct_total_cash": 3500,
|
|
"team_distance": 1500.5,
|
|
"t_spread": 400.2,
|
|
"ct_spread": 800.1,
|
|
"t_area": 40000.0,
|
|
"ct_area": 64000.0,
|
|
"t_pincer_index": 0.45,
|
|
"ct_pincer_index": 0.22,
|
|
"is_bomb_planted": 0,
|
|
"site": 0,
|
|
"game_time": 60.0
|
|
}
|
|
```
|
|
|
|
**Processing Logic:**
|
|
- `process_payload` detects presence of `t_alive` / `ct_alive`.
|
|
- Uses values directly.
|
|
- Auto-calculates derived fields like `health_diff` (`ct - t`) if missing.
|
|
|
|
## Error Handling
|
|
If you receive `Error: {"error":"Not supported type for data.<class 'NoneType'>"}`:
|
|
- **Cause:** You sent a payload that matches neither format (e.g., missing `players` list AND missing direct features).
|
|
- **Fix:** Ensure your JSON body matches one of the structures above.
|