lcipolina commited on
Commit
bd5bff8
·
verified ·
1 Parent(s): 67f4d84

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -16
app.py CHANGED
@@ -32,6 +32,24 @@ def extract_agent_info(filename: str):
32
  agent_type, model_name = parts[0], "Unknown"
33
  return agent_type, model_name
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  def extract_leaderboard_stats(game_name: str) -> pd.DataFrame:
36
  """Extract and aggregate leaderboard stats from all SQLite databases."""
37
  db_files = find_or_download_db()
@@ -41,16 +59,11 @@ def extract_leaderboard_stats(game_name: str) -> pd.DataFrame:
41
  conn = sqlite3.connect(db_file)
42
  agent_type, model_name = extract_agent_info(db_file)
43
 
44
- if game_name == "Total Performance":
45
- query = "SELECT game_name, COUNT(DISTINCT episode) AS games_played, " \
46
- "AVG(generation_time) AS avg_gen_time, SUM(reward) AS total_rewards " \
47
- "FROM game_results GROUP BY game_name"
48
- else:
49
- query = "SELECT COUNT(DISTINCT episode) AS games_played, " \
50
- "AVG(generation_time) AS avg_gen_time, SUM(reward) AS total_rewards " \
51
- "FROM game_results WHERE game_name = ?"
52
 
53
- df = pd.read_sql_query(query, conn, params=(game_name,) if game_name != "Total Performance" else None)
54
  df["agent_name"] = model_name
55
  df["agent_type"] = agent_type
56
  all_stats.append(df)
@@ -61,7 +74,8 @@ def extract_leaderboard_stats(game_name: str) -> pd.DataFrame:
61
 
62
  def generate_leaderboard_json():
63
  """Generate a JSON file containing leaderboard stats."""
64
- leaderboard = extract_leaderboard_stats("Total Performance").to_dict(orient="records")
 
65
  json_file = "results/leaderboard_stats.json"
66
  with open(json_file, "w", encoding="utf-8") as f:
67
  json.dump({"timestamp": datetime.utcnow().isoformat(), "leaderboard": leaderboard}, f, indent=4)
@@ -70,16 +84,15 @@ def generate_leaderboard_json():
70
  with gr.Blocks() as interface:
71
  with gr.Tab("Leaderboard"):
72
  gr.Markdown("# Leaderboard")
73
- leaderboard_game_dropdown = gr.Dropdown(["Total Performance", "tic_tac_toe"], label="Select Game")
 
74
  leaderboard_table = gr.Dataframe()
75
- download_button = gr.File(label="Download Leaderboard")
 
76
  refresh_button = gr.Button("Refresh Leaderboard")
 
77
  leaderboard_game_dropdown.change(extract_leaderboard_stats, inputs=[leaderboard_game_dropdown], outputs=[leaderboard_table])
78
  refresh_button.click(extract_leaderboard_stats, inputs=[leaderboard_game_dropdown], outputs=[leaderboard_table])
79
- generate_button = gr.Button("Generate Leaderboard JSON")
80
- download_component = gr.File(label="Download Leaderboard JSON")
81
-
82
  generate_button.click(generate_leaderboard_json, outputs=[download_component])
83
 
84
-
85
  interface.launch()
 
32
  agent_type, model_name = parts[0], "Unknown"
33
  return agent_type, model_name
34
 
35
+ def get_available_games() -> List[str]:
36
+ """Extracts all unique game names from all SQLite databases."""
37
+ db_files = find_or_download_db()
38
+ game_names = set()
39
+
40
+ for db_file in db_files:
41
+ conn = sqlite3.connect(db_file)
42
+ try:
43
+ query = "SELECT DISTINCT game_name FROM moves"
44
+ df = pd.read_sql_query(query, conn)
45
+ game_names.update(df["game_name"].tolist())
46
+ except Exception:
47
+ pass # Ignore errors if table doesn't exist
48
+ finally:
49
+ conn.close()
50
+
51
+ return sorted(game_names) if game_names else ["No Games Found"]
52
+
53
  def extract_leaderboard_stats(game_name: str) -> pd.DataFrame:
54
  """Extract and aggregate leaderboard stats from all SQLite databases."""
55
  db_files = find_or_download_db()
 
59
  conn = sqlite3.connect(db_file)
60
  agent_type, model_name = extract_agent_info(db_file)
61
 
62
+ query = "SELECT COUNT(DISTINCT episode) AS games_played, " \
63
+ "AVG(generation_time) AS avg_gen_time, SUM(reward) AS total_rewards " \
64
+ "FROM game_results WHERE game_name = ?"
 
 
 
 
 
65
 
66
+ df = pd.read_sql_query(query, conn, params=(game_name,))
67
  df["agent_name"] = model_name
68
  df["agent_type"] = agent_type
69
  all_stats.append(df)
 
74
 
75
  def generate_leaderboard_json():
76
  """Generate a JSON file containing leaderboard stats."""
77
+ available_games = get_available_games()
78
+ leaderboard = extract_leaderboard_stats(available_games[0]).to_dict(orient="records")
79
  json_file = "results/leaderboard_stats.json"
80
  with open(json_file, "w", encoding="utf-8") as f:
81
  json.dump({"timestamp": datetime.utcnow().isoformat(), "leaderboard": leaderboard}, f, indent=4)
 
84
  with gr.Blocks() as interface:
85
  with gr.Tab("Leaderboard"):
86
  gr.Markdown("# Leaderboard")
87
+ available_games = get_available_games()
88
+ leaderboard_game_dropdown = gr.Dropdown(available_games, label="Select Game", value=available_games[0])
89
  leaderboard_table = gr.Dataframe()
90
+ generate_button = gr.Button("Generate Leaderboard JSON")
91
+ download_component = gr.File(label="Download Leaderboard JSON")
92
  refresh_button = gr.Button("Refresh Leaderboard")
93
+
94
  leaderboard_game_dropdown.change(extract_leaderboard_stats, inputs=[leaderboard_game_dropdown], outputs=[leaderboard_table])
95
  refresh_button.click(extract_leaderboard_stats, inputs=[leaderboard_game_dropdown], outputs=[leaderboard_table])
 
 
 
96
  generate_button.click(generate_leaderboard_json, outputs=[download_component])
97
 
 
98
  interface.launch()