Spaces:
Sleeping
Sleeping
""" | |
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("_", "-") | |