lcipolina's picture
Fixed long names in leaderboards
8975c07 verified
"""
UI utilities for the Game Reasoning Arena Gradio app.
This module contains utility functions for the Gradio interface,
including model name cleaning and display formatting.
"""
def clean_model_name(model_name: str) -> str:
"""
Clean up long model names to display only the essential model name.
This function handles various model naming patterns from different providers:
- LiteLLM models with provider prefixes
- vLLM models with prefixes
- Models with slash-separated paths
- GPT model variants
Args:
model_name: Full model name from database
(e.g., "litellm_together_ai_meta_llama_Meta_Llama_3.1...")
Returns:
Cleaned model name (e.g., "Meta-Llama-3.1-8B-Instruct-Turbo")
Examples:
>>> clean_model_name("litellm_together_ai/meta-llama/Meta-Llama-3.1-8B")
"Meta-Llama-3.1-8B"
>>> clean_model_name("litellm_fireworks_ai/accounts/fireworks/models/glm-4p5-air")
"glm-4p5-air"
>>> clean_model_name("vllm_Qwen2-7B-Instruct")
"Qwen2-7B-Instruct"
>>> clean_model_name("litellm_gpt-4-turbo")
"GPT-4-turbo"
"""
if not model_name or model_name == "Unknown":
return model_name
# Handle special cases first
if model_name == "None" or model_name.lower() == "random":
return "Random Bot"
# Handle random_None specifically
if model_name == "random_None":
return "Random Bot"
# GPT models - keep the GPT part
if "gpt" in model_name.lower():
# Extract GPT model variants
if "gpt_3.5" in model_name.lower() or "gpt-3.5" in model_name.lower():
return "GPT-3.5-turbo"
elif "gpt_4" in model_name.lower() or "gpt-4" in model_name.lower():
if "turbo" in model_name.lower():
return "GPT-4-turbo"
elif "mini" in model_name.lower():
return "GPT-4-mini"
else:
return "GPT-4"
elif "gpt_5" in model_name.lower() or "gpt-5" in model_name.lower():
if "mini" in model_name.lower():
return "GPT-5-mini"
else:
return "GPT-5"
elif "gpt2" in model_name.lower() or "gpt-2" in model_name.lower():
return "GPT-2"
elif "distilgpt2" in model_name.lower():
return "DistilGPT-2"
elif "gpt-neo" in model_name.lower():
return "GPT-Neo-125M"
# For litellm models, extract everything after the last slash
if "litellm_" in model_name and "/" in model_name:
# Split by "/" and take the last part
model_part = model_name.split("/")[-1]
# Clean up underscores and make it more readable
cleaned = model_part.replace("_", "-")
return cleaned
# For vllm models, extract the model name part
if model_name.startswith("vllm_"):
# Remove vllm_ prefix
model_part = model_name[5:]
# Clean up underscores
cleaned = model_part.replace("_", "-")
return cleaned
# For litellm models without slashes (from database storage)
# These correspond to the slash-separated patterns in the YAML
if model_name.startswith("litellm_"):
parts = model_name.split("_")
# Handle Fireworks AI pattern: litellm_fireworks_ai_accounts_fireworks_models_*
if "fireworks" in model_name and "accounts" in model_name and "models" in model_name:
try:
models_idx = parts.index("models")
model_parts = parts[models_idx + 1:]
return "-".join(model_parts)
except ValueError:
pass
# Handle Together AI pattern: litellm_together_ai_meta_llama_*
# Original: litellm_together_ai/meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo
# Becomes: litellm_together_ai_meta_llama_Meta_Llama_3.1_8B_Instruct_Turbo
# We want: Meta-Llama-3.1-8B-Instruct-Turbo
if "together" in model_name and "meta" in model_name and "llama" in model_name:
try:
# Find "meta" and "llama" - the model name starts after "meta_llama_"
for i, part in enumerate(parts):
if part == "meta" and i + 1 < len(parts) and parts[i + 1] == "llama":
# Model name starts after "meta_llama_"
model_parts = parts[i + 2:]
return "-".join(model_parts)
except Exception:
pass
# Handle Groq pattern: litellm_groq_*
# These are simpler patterns
if parts[1] == "groq" and len(parts) >= 3:
model_parts = parts[2:] # Everything after "litellm_groq_"
cleaned = "-".join(model_parts)
# Special handling for common models
if "llama3" in cleaned.lower():
cleaned = cleaned.replace("llama3", "Llama-3")
elif "qwen" in cleaned.lower():
cleaned = cleaned.replace("qwen", "Qwen")
elif "gemma" in cleaned.lower():
cleaned = cleaned.replace("gemma", "Gemma")
return cleaned
# For other patterns, skip first two parts (litellm_provider_)
if len(parts) >= 3:
model_parts = parts[2:] # Everything after provider
cleaned = "-".join(model_parts)
return cleaned
# For models with slashes but not litellm (like direct model paths)
if "/" in model_name:
return model_name.split("/")[-1].replace("_", "-")
# Default: just replace underscores with dashes
return model_name.replace("_", "-")