File size: 7,709 Bytes
abcb943 7e4083f 291e330 7e4083f 291e330 7e4083f abcb943 7e4083f abcb943 7e4083f abcb943 7e4083f abcb943 1c99c03 7e4083f abcb943 7e4083f abcb943 7e4083f abcb943 7e4083f 291e330 7e4083f abcb943 7e4083f abcb943 2117cb6 abcb943 2117cb6 abcb943 |
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# app.py
import gradio as gr
import pandas as pd
import requests
import xgboost as xgb
from huggingface_hub import hf_hub_download
from Recent_match_scrapper import get_multiple_matches_stats
from Meta_scrapper import get_meta_stats
from Leaderboard_scrapper import scrape_leaderboards
from connection_check import check_connection
from helper import merge_stats, filter_leaderboard, get_player_list
from Player_scrapper import get_multiple_player_stats, get_player_stats
from feature_eng import create_champion_features
from Weekly_meta_scrapper import get_weekly_meta
from app_training_df_getter import create_app_user_training_df
from sklearn.metrics import top_k_accuracy_score
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from helper import format_summoner_name
# Define champion list for dropdowns
CHAMPIONS = [
"Aatrox", "Ahri", "Akali", "Akshan", "Alistar", "Amumu", "Anivia", "Annie", "Aphelios", "Ashe",
"Aurelion Sol", "Azir", "Bard", "Bel'Veth", "Blitzcrank", "Brand", "Braum", "Caitlyn", "Camille",
"Cassiopeia", "Cho'Gath", "Corki", "Darius", "Diana", "Dr. Mundo", "Draven", "Ekko", "Elise",
"Evelynn", "Ezreal", "Fiddlesticks", "Fiora", "Fizz", "Galio", "Gangplank", "Garen", "Gnar",
"Gragas", "Graves", "Gwen", "Hecarim", "Heimerdinger", "Illaoi", "Irelia", "Ivern", "Janna",
"Jarvan IV", "Jax", "Jayce", "Jhin", "Jinx", "Kai'Sa", "Kalista", "Karma", "Karthus", "Kassadin",
"Katarina", "Kayle", "Kayn", "Kennen", "Kha'Zix", "Kindred", "Kled", "Kog'Maw", "KSante", "LeBlanc",
"Lee Sin", "Leona", "Lillia", "Lissandra", "Lucian", "Lulu", "Lux", "Malphite", "Malzahar", "Maokai",
"Master Yi", "Milio", "Miss Fortune", "Mordekaiser", "Morgana", "Naafiri", "Nami", "Nasus", "Nautilus",
"Neeko", "Nidalee", "Nilah", "Nocturne", "Nunu & Willump", "Olaf", "Orianna", "Ornn", "Pantheon",
"Poppy", "Pyke", "Qiyana", "Quinn", "Rakan", "Rammus", "Rek'Sai", "Rell", "Renata Glasc", "Renekton",
"Rengar", "Riven", "Rumble", "Ryze", "Samira", "Sejuani", "Senna", "Seraphine", "Sett", "Shaco",
"Shen", "Shyvana", "Singed", "Sion", "Sivir", "Skarner", "Sona", "Soraka", "Swain", "Sylas",
"Syndra", "Tahm Kench", "Taliyah", "Talon", "Taric", "Teemo", "Thresh", "Tristana", "Trundle",
"Tryndamere", "Twisted Fate", "Twitch", "Udyr", "Urgot", "Varus", "Vayne", "Veigar", "Vel'Koz",
"Vex", "Vi", "Viego", "Viktor", "Vladimir", "Volibear", "Warwick", "Wukong", "Xayah", "Xerath",
"Xin Zhao", "Yasuo", "Yone", "Yorick", "Yuumi", "Zac", "Zed", "Zeri", "Ziggs", "Zilean", "Zoe", "Zyra"
]
# Load model
try:
model_path = hf_hub_download(
repo_id="ivwhy/champion-predictor-model",
filename="champion_predictor.json"
)
model = xgb.Booster()
model.load_model(model_path)
except Exception as e:
print(f"Error loading model: {e}")
model = None
def get_user_training_df(player_opgg_url):
try:
# Add input validation
if not player_opgg_url or not isinstance(player_opgg_url, str):
return "Invalid URL provided"
# Add debugging print
print(f"Processing URL: {player_opgg_url}")
training_df = create_app_user_training_df(player_opgg_url)
return training_df
except Exception as e:
# Add more detailed error information
import traceback
error_trace = traceback.format_exc()
print(f"Full error trace:\n{error_trace}")
return f"Error getting training data: {str(e)}"
#return f"Error getting training data: {e}"
def show_stats(player_opgg_url):
"""Display player statistics and recent matches"""
if not player_opgg_url:
return "Please enter a player link to OPGG", None
try:
training_features = get_user_training_df(player_opgg_url)
if isinstance(training_features, str): # Error message
return training_features, None
wins = training_features['result'].sum()
losses = len(training_features) - wins
winrate = f"{(wins / len(training_features)) * 100:.0f}%"
favorite_champions = (
training_features['champion']
.value_counts()
.head(3)
.index.tolist()
)
stats_html = f"""
<div style='padding: 20px; background: #f5f5f5; border-radius: 10px;'>
<h3>Player Stats</h3>
<p>Wins: {wins} | Losses: {losses}</p>
<p>Winrate: {winrate}</p>
<p>Favorite Champions: {', '.join(favorite_champions)}</p>
</div>
"""
return stats_html, None
except Exception as e:
return f"Error processing stats: {e}", None
def predict_champion(player_opgg_url, *champions):
"""Make prediction based on selected champions"""
if not player_opgg_url or None in champions:
return "Please fill in all fields"
try:
if model is None:
return "Model not loaded properly"
features = get_user_training_df(player_opgg_url)
if isinstance(features, str): # Error message
return features
prediction = model.predict(features)
predicted_champion = CHAMPIONS[prediction[0]]
return f"Predicted champion: {predicted_champion}"
except Exception as e:
return f"Error making prediction: {e}"
# Define your interface
with gr.Blocks() as demo:
gr.Markdown("# League of Legends Champion Prediction")
with gr.Row():
player_opgg_url = gr.Textbox(label="OPGG Player URL")
show_button = gr.Button("Show Player Stats")
with gr.Row():
stats_output = gr.HTML(label="Player Statistics")
recent_matches = gr.HTML(label="Recent Matches")
with gr.Row():
champion_dropdowns = [
gr.Dropdown(choices=CHAMPIONS, label=f"Champion {i+1}")
for i in range(9)
]
with gr.Row():
predict_button = gr.Button("Predict")
prediction_output = gr.Text(label="Prediction")
# Set up event handlers
show_button.click(
fn=show_stats,
inputs=[player_opgg_url],
outputs=[stats_output, recent_matches]
)
predict_button.click(
fn=predict_champion,
inputs=[player_opgg_url] + champion_dropdowns,
outputs=prediction_output
)
# Enable queuing
demo.queue()
# For local testing
if __name__ == "__main__":
demo.launch()
''' code graveyard
def get_player_stats(player_opgg_url):
"""Get player statistics from API"""
# Placeholder - implement actual API call
return {
'wins': 120,
'losses': 80,
'winrate': '60%',
'favorite_champions': ['Ahri', 'Zed', 'Yasuo']
}
def get_recent_matches(player_opgg_url):
"""Get recent match history"""
# Placeholder - implement actual API call
return pd.DataFrame({
'champion': ['Ahri', 'Zed', 'Yasuo'],
'result': ['Win', 'Loss', 'Win'],
'kda': ['8/2/10', '4/5/3', '12/3/7']
})
def prepare_features(player_opgg_url, champions):
"""Prepare features for model prediction"""
# Placeholder - implement actual feature engineering
features = [] # Transform champions into model features
return pd.DataFrame([features])
''' |