lcipolina commited on
Commit
c87879e
·
verified ·
1 Parent(s): e1bfbe8

Fixed several functions to enhance the game name display

Browse files
Files changed (1) hide show
  1. app.py +44 -11
app.py CHANGED
@@ -66,6 +66,7 @@ HUGGINGFACE_MODELS: Dict[str, str] = {
66
  }
67
 
68
  GAMES_REGISTRY: Dict[str, Any] = {}
 
69
  db_dir = Path(__file__).resolve().parent / "results"
70
 
71
  LEADERBOARD_COLUMNS = [
@@ -111,6 +112,22 @@ except Exception as e:
111
  log.warning("Failed to load games registry: %s", e)
112
  GAMES_REGISTRY = {}
113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  # -----------------------------------------------------------------------------
115
  # DB helpers
116
  # -----------------------------------------------------------------------------
@@ -210,11 +227,12 @@ def extract_illegal_moves_summary() -> pd.DataFrame:
210
  summary.append({"agent_name": model_name, "illegal_moves": count})
211
  return pd.DataFrame(summary)
212
 
 
 
213
  # -----------------------------------------------------------------------------
214
  # Player config
215
  # -----------------------------------------------------------------------------
216
 
217
-
218
  class PlayerConfigData(TypedDict, total=False):
219
  player_types: List[str]
220
  player_type_display: Dict[str, str]
@@ -257,14 +275,21 @@ def setup_player_config(
257
 
258
 
259
  def create_player_config() -> GameArenaConfig:
260
- available_games = get_available_games(include_aggregated=False)
 
261
 
262
- # Collect models seen in DBs (for charts/labels)
 
 
 
 
 
 
 
263
  database_models = [model for _, _, model in iter_agent_databases()]
264
 
265
  player_types = ["random_bot"]
266
  player_type_display = {"random_bot": "Random Bot"}
267
-
268
  if BACKEND_SYSTEM_AVAILABLE:
269
  for model_key in HUGGINGFACE_MODELS.keys():
270
  key = f"hf_{model_key}"
@@ -273,15 +298,21 @@ def create_player_config() -> GameArenaConfig:
273
  player_type_display[key] = f"HuggingFace: {tag}"
274
 
275
  all_models = list(HUGGINGFACE_MODELS.keys()) + database_models
276
-
277
  model_info = (
278
  "HuggingFace transformer models integrated with backend system."
279
  if BACKEND_SYSTEM_AVAILABLE
280
  else "Backend system not available - limited functionality."
281
  )
282
 
 
 
 
 
 
 
283
  return {
284
  "available_games": available_games,
 
285
  "player_config": {
286
  "player_types": player_types,
287
  "player_type_display": player_type_display,
@@ -291,11 +322,11 @@ def create_player_config() -> GameArenaConfig:
291
  "backend_available": BACKEND_SYSTEM_AVAILABLE,
292
  }
293
 
 
294
  # -----------------------------------------------------------------------------
295
  # Main game entry
296
  # -----------------------------------------------------------------------------
297
 
298
-
299
  def play_game(
300
  game_name: str,
301
  player1_type: str,
@@ -317,8 +348,12 @@ def play_game(
317
  rounds,
318
  )
319
 
320
- # Gradio passes display labels sometimes—map back to keys
321
  config = create_player_config()
 
 
 
 
322
  display_to_key = {
323
  v: k for k, v in config["player_config"]["player_type_display"].items()
324
  }
@@ -328,11 +363,9 @@ def play_game(
328
  player2_type = display_to_key[player2_type]
329
 
330
  try:
331
- # IMPORTANT: rename your local folder to 'ui/'
332
  from ui.gradio_config_generator import (
333
  run_game_with_existing_infrastructure,
334
  )
335
-
336
  result = run_game_with_existing_infrastructure(
337
  game_name=game_name,
338
  player1_type=player1_type,
@@ -346,7 +379,6 @@ def play_game(
346
  except Exception as e:
347
  return f"Error during game simulation: {e}"
348
 
349
-
350
  def extract_leaderboard_stats(game_name: str) -> pd.DataFrame:
351
  all_stats = []
352
  for db_file, agent_type, model_name in iter_agent_databases():
@@ -428,11 +460,12 @@ def extract_leaderboard_stats(game_name: str) -> pd.DataFrame:
428
  leaderboard_df = pd.concat(all_stats, ignore_index=True)
429
  return leaderboard_df[LEADERBOARD_COLUMNS]
430
 
 
 
431
  # -----------------------------------------------------------------------------
432
  # Simple plotting helpers
433
  # -----------------------------------------------------------------------------
434
 
435
-
436
  def create_bar_plot(
437
  data: pd.DataFrame,
438
  x_col: str,
 
66
  }
67
 
68
  GAMES_REGISTRY: Dict[str, Any] = {}
69
+
70
  db_dir = Path(__file__).resolve().parent / "results"
71
 
72
  LEADERBOARD_COLUMNS = [
 
112
  log.warning("Failed to load games registry: %s", e)
113
  GAMES_REGISTRY = {}
114
 
115
+ def _get_game_display_mapping() -> Dict[str, str]:
116
+ """
117
+ Build a mapping from internal game keys to their human‑friendly display names.
118
+ If the registry is not available or a game has no explicit display_name,
119
+ fall back to a title‑cased version of the internal key.
120
+ """
121
+ mapping: Dict[str, str] = {}
122
+ if games_registry is not None and hasattr(games_registry, "_registry"):
123
+ for key, info in games_registry._registry.items():
124
+ display = info.get("display_name") if isinstance(info, dict) else None
125
+ if not display:
126
+ display = key.replace("_", " ").title()
127
+ mapping[key] = display
128
+ return mapping
129
+
130
+
131
  # -----------------------------------------------------------------------------
132
  # DB helpers
133
  # -----------------------------------------------------------------------------
 
227
  summary.append({"agent_name": model_name, "illegal_moves": count})
228
  return pd.DataFrame(summary)
229
 
230
+
231
+
232
  # -----------------------------------------------------------------------------
233
  # Player config
234
  # -----------------------------------------------------------------------------
235
 
 
236
  class PlayerConfigData(TypedDict, total=False):
237
  player_types: List[str]
238
  player_type_display: Dict[str, str]
 
275
 
276
 
277
  def create_player_config() -> GameArenaConfig:
278
+ # Internal names for arena dropdown
279
+ available_keys = get_available_games(include_aggregated=False)
280
 
281
+ # Map internal names to display names
282
+ key_to_display = _get_game_display_mapping()
283
+ available_games = [
284
+ key_to_display.get(key, key.replace("_", " ").title())
285
+ for key in available_keys
286
+ ]
287
+
288
+ # Collect models seen in DBs for charts/labels
289
  database_models = [model for _, _, model in iter_agent_databases()]
290
 
291
  player_types = ["random_bot"]
292
  player_type_display = {"random_bot": "Random Bot"}
 
293
  if BACKEND_SYSTEM_AVAILABLE:
294
  for model_key in HUGGINGFACE_MODELS.keys():
295
  key = f"hf_{model_key}"
 
298
  player_type_display[key] = f"HuggingFace: {tag}"
299
 
300
  all_models = list(HUGGINGFACE_MODELS.keys()) + database_models
 
301
  model_info = (
302
  "HuggingFace transformer models integrated with backend system."
303
  if BACKEND_SYSTEM_AVAILABLE
304
  else "Backend system not available - limited functionality."
305
  )
306
 
307
+ # Build display→key mapping for games
308
+ display_to_key = {
309
+ key_to_display.get(key, key.replace("_", " ").title()): key
310
+ for key in available_keys
311
+ }
312
+
313
  return {
314
  "available_games": available_games,
315
+ "game_display_to_key": display_to_key,
316
  "player_config": {
317
  "player_types": player_types,
318
  "player_type_display": player_type_display,
 
322
  "backend_available": BACKEND_SYSTEM_AVAILABLE,
323
  }
324
 
325
+
326
  # -----------------------------------------------------------------------------
327
  # Main game entry
328
  # -----------------------------------------------------------------------------
329
 
 
330
  def play_game(
331
  game_name: str,
332
  player1_type: str,
 
348
  rounds,
349
  )
350
 
351
+ # Map human‑friendly game name back to internal key if needed
352
  config = create_player_config()
353
+ if "game_display_to_key" in config and game_name in config["game_display_to_key"]:
354
+ game_name = config["game_display_to_key"][game_name]
355
+
356
+ # Map display labels for player types back to keys
357
  display_to_key = {
358
  v: k for k, v in config["player_config"]["player_type_display"].items()
359
  }
 
363
  player2_type = display_to_key[player2_type]
364
 
365
  try:
 
366
  from ui.gradio_config_generator import (
367
  run_game_with_existing_infrastructure,
368
  )
 
369
  result = run_game_with_existing_infrastructure(
370
  game_name=game_name,
371
  player1_type=player1_type,
 
379
  except Exception as e:
380
  return f"Error during game simulation: {e}"
381
 
 
382
  def extract_leaderboard_stats(game_name: str) -> pd.DataFrame:
383
  all_stats = []
384
  for db_file, agent_type, model_name in iter_agent_databases():
 
460
  leaderboard_df = pd.concat(all_stats, ignore_index=True)
461
  return leaderboard_df[LEADERBOARD_COLUMNS]
462
 
463
+
464
+
465
  # -----------------------------------------------------------------------------
466
  # Simple plotting helpers
467
  # -----------------------------------------------------------------------------
468
 
 
469
  def create_bar_plot(
470
  data: pd.DataFrame,
471
  x_col: str,