WarTitan2077's picture
Create main.py
0d592cb verified
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import pandas as pd
# Load model
model = joblib.load("speed_hit_model.pkl")
# Label decoding
label_reverse = {0: "Player attacks twice and counters twice",
1: "Enemy attacks twice and counters twice",
2: "Both attack once"}
# Define API input structure
class BattleStats(BaseModel):
player_speed: int
player_weight: int
player_attack_accuracy: float
player_hit_accuracy: float
player_avoidance: float
enemy_speed: int
enemy_weight: int
enemy_attack_accuracy: float
enemy_hit_accuracy: float
enemy_avoidance: float
# Initialize FastAPI app
app = FastAPI()
@app.post("/predict")
def predict(stats: BattleStats):
# Compute derived features
player_base_speed = stats.player_speed - stats.player_weight
enemy_base_speed = stats.enemy_speed - stats.enemy_weight
player_hit_chance = stats.player_attack_accuracy * stats.player_hit_accuracy * (1 - stats.enemy_avoidance)
enemy_hit_chance = stats.enemy_attack_accuracy * stats.enemy_hit_accuracy * (1 - stats.player_avoidance)
# Create DataFrame
features = pd.DataFrame([{
"Player Speed": stats.player_speed,
"Player Weight": stats.player_weight,
"Player Base Speed": player_base_speed,
"Player Attack Accuracy": stats.player_attack_accuracy,
"Player Hit Accuracy": stats.player_hit_accuracy,
"Player Avoidance": stats.player_avoidance,
"Player Hit Chance": player_hit_chance,
"Enemy Speed": stats.enemy_speed,
"Enemy Weight": stats.enemy_weight,
"Enemy Base Speed": enemy_base_speed,
"Enemy Attack Accuracy": stats.enemy_attack_accuracy,
"Enemy Hit Accuracy": stats.enemy_hit_accuracy,
"Enemy Avoidance": stats.enemy_avoidance,
"Enemy Hit Chance": enemy_hit_chance
}])
pred = model.predict(features)[0]
return {"outcome": label_reverse[pred]}