""" backend/config.py ───────────────────────────────────────────── Configuración centralizada del backend. Variables de entorno, paths y constantes. ───────────────────────────────────────────── """ import os from pathlib import Path # ───────────────────────────────────────────── # Paths # ───────────────────────────────────────────── PROJECT_ROOT = Path(__file__).parent.parent MODELS_DIR = PROJECT_ROOT / "models" # Model files XGBOOST_MODEL_PATH = MODELS_DIR / "xgboost.pkl" LSTM_MODEL_PATH = MODELS_DIR / "lstm.pt" LOGREG_MODEL_PATH = MODELS_DIR / "logistic_regression.pkl" SCALER_PATH = MODELS_DIR / "scaler_lr.pkl" # ───────────────────────────────────────────── # Riot API # ───────────────────────────────────────────── RIOT_API_KEY: str = os.environ.get("HF_SECRET") if not RIOT_API_KEY: raise ValueError("HF_SECRET no está configurado en el entorno") # Riot API routing RIOT_REGION = "americas" # Regional routing for Match-V5 RIOT_PLATFORM = "na1" # Platform routing RIOT_BASE_URL = f"https://{RIOT_REGION}.api.riotgames.com" RIOT_PLATFORM_URL = f"https://{RIOT_PLATFORM}.api.riotgames.com" # ───────────────────────────────────────────── # Model constants (must match training) # ───────────────────────────────────────────── LSTM_HIDDEN_DIM = 64 LSTM_DROPOUT = 0.3 LSTM_MAX_SEQ_LEN = 20 SEED = 42 # ───────────────────────────────────────────── # Feature columns (80 features, exact order from training) # Excludes: match_id, blue_win # ───────────────────────────────────────────── FEATURE_COLUMNS = [ "minute", "blue_totalGold", "red_totalGold", "goldDiff", "blue_totalXP", "red_totalXP", "xpDiff", "blue_totalLevel", "red_totalLevel", "levelDiff", "blue_totalMinions", "red_totalMinions", "minionsDiff", "blue_totalDmgChamp", "red_totalDmgChamp", "dmgChampDiff", "blue_totalDmgTaken", "red_totalDmgTaken", "dmgTakenDiff", "blue_kills", "red_kills", "killsDiff", "blue_assists", "red_assists", "assistsDiff", "blue_wardsPlaced", "red_wardsPlaced", "wardsPlacedDiff", "blue_wardsKilled", "red_wardsKilled", "wardsKilledDiff", "blue_dragons", "red_dragons", "dragonsDiff", "blue_barons", "red_barons", "baronsDiff", "blue_towers", "red_towers", "towersDiff", "blue_inhibitors", "red_inhibitors", "inhibitorsDiff", "blue_heralds", "red_heralds", "heraldsDiff", "blue_grubs", "red_grubs", "grubsDiff", "first_blood", "first_tower", "first_dragon", "first_baron", "blue_baron_active", "red_baron_active", "blue_goldPerMin", "red_goldPerMin", "blue_killsPerMin", "gold_ratio", "xp_ratio", "blue_kda", "red_kda", "goldDiff_3min_delta", "xpDiff_3min_delta", "killsDiff_3min_delta", "blue_dragons_weighted", "red_dragons_weighted", "blue_gold_share", "blue_dmg_efficiency", "red_dmg_efficiency", "dmg_efficiency_diff", "blue_obj_conversion", "red_obj_conversion", "obj_conversion_diff", "blue_vision_density", "red_vision_density", "vision_density_diff", "blue_teamwork_score", "red_teamwork_score", "teamwork_diff", ]