File size: 1,994 Bytes
0d592cb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
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]}
|