"""UI-only model display names. Raw CSV / sample IDs stay unchanged; this maps aliases to a shared label shown in leaderboards, Pareto plots, dropdowns, and sample headers. """ from __future__ import annotations import re # Explicit aliases (any leaderboard / sample id) -> shared display label. MODEL_DISPLAY_NAMES = { # FLUX "flux_2_pro": "FLUX.2 [pro]", "flux_2_max": "FLUX.2 [max]", "flux_2_flex": "FLUX.2 [flex]", "flux_2_dev": "FLUX.2 [dev]", "flux_1_1_pro": "FLUX1.1 [pro]", "flux_1_1_pro_ultra": "FLUX1.1 [pro] Ultra", "flux_dev": "FLUX.1 [dev]", "flux_schnell": "FLUX.1 [schnell]", "flux_krea": "FLUX.1 Krea [dev]", # GPT Image "gpt_image_2": "GPT Image 2", "GPT Image 2 (high)": "GPT Image 2", "gpt_image_1_5": "GPT Image 1.5", "GPT Image 1.5 (high)": "GPT Image 1.5", "gpt_image_1": "GPT Image 1", "GPT Image 1 (high)": "GPT Image 1", "GPT Image 1 Mini (medium)": "GPT Image 1 Mini", # Nano Banana / Gemini "nano_banana_2_0": "Nano Banana 2", "nano_banana_2": "Nano Banana 2", "Nano Banana 2 (Gemini 3.1 Flash Image Preview)": "Nano Banana 2", "Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)": "Nano Banana 2 Lite", "nano_banana_pro": "Nano Banana Pro", "Nano Banana Pro (Gemini 3 Pro Image)": "Nano Banana Pro", "Nano Banana (Gemini 2.5 Flash Image)": "Nano Banana", # Seedream "seedream_5_0": "Seedream 5.0", "seedream_4_5": "Seedream 4.5", "seedream_4_0": "Seedream 4.0", "seedream_3": "Seedream 3.0", # Qwen "qwen_image": "Qwen Image", "qwen_image_2_0_pro": "Qwen Image 2.0 Pro", "Qwen Image 2.0 Pro (2026-04-22)": "Qwen Image 2.0 Pro", "Qwen Image 2.0 (2026-03-03)": "Qwen Image 2.0", "qwen_image_2512": "Qwen Image 2512", "Qwen Image Max 2512": "Qwen Image 2512", "qwen_image_fast": "Qwen Image Fast", # Ideogram "ideogram_4_0_quality": "Ideogram 4.0 Quality", "Ideogram 4.0 (Quality)": "Ideogram 4.0 Quality", "Ideogram 4.0 Fast (Quality)": "Ideogram 4.0 Fast Quality", # Imagen "imagen_4_0": "Imagen 4", "imagen_4": "Imagen 4", "Imagen 4 Standard": "Imagen 4", "imagen_4_0_ultra": "Imagen 4 Ultra", "imagen_4_ultra": "Imagen 4 Ultra", "imagen_4_fast": "Imagen 4 Fast", "Imagen 3 (v002)": "Imagen 3", # HiDream "hidream_i1_dev": "HiDream-I1 Dev", "HiDream-I1-Dev": "HiDream-I1 Dev", "hidream_i1_fast": "HiDream-I1 Fast", "HiDream-I1-Fast": "HiDream-I1 Fast", "hidream_i1_full": "HiDream-I1 Full", "HiDream-O1-Image": "HiDream-O1", "HiDream-O1-Image-1.5": "HiDream-O1 1.5", "HiDream-O1-Image-Dev": "HiDream-O1 Dev", # Reve "reve_2_1": "Reve 2.1", "Reve Image (Halfmoon)": "Reve Image", # P-Image "p_image": "P-Image", "p_image_2_ideogram_very_low_1k": "P-Image-Ideogram Very Low 1K", "p_image_2_ideogram_very_low_2k": "P-Image-Ideogram Very Low 2K", "P-Image-Ideogram (Very Low)": "P-Image-Ideogram Very Low", "p_image_2_ideogram_low_1k": "P-Image-Ideogram Low 1K", "p_image_2_ideogram_low_2k": "P-Image-Ideogram Low 2K", "P-Image-Ideogram (Low)": "P-Image-Ideogram Low", "p_image_2_ideogram_medium_1k": "P-Image-Ideogram Medium 1K", "p_image_2_ideogram_medium_2k": "P-Image-Ideogram Medium 2K", "P-Image-Ideogram (Medium)": "P-Image-Ideogram Medium", "p_image_2_ideogram_high_1k": "P-Image-Ideogram High 1K", "p_image_2_ideogram_high_2k": "P-Image-Ideogram High 2K", "P-Image-Ideogram (High)": "P-Image-Ideogram High", # Others overlapping P-Bench "z_image": "Z-Image", "glm_image": "GLM-Image", "hunyuanimage_3_0": "HunyuanImage 3.0", "hunyuan_image_3": "HunyuanImage 3.0", "HunyuanImage 3.0 (Fal)": "HunyuanImage 3.0", "HunyuanImage 3.0 Instruct (Fal)": "HunyuanImage 3.0 Instruct", "wan_2_2_image": "Wan 2.2 Image", "Wan2.6 Text to Image": "Wan 2.6 Text to Image", "kling_v2_1": "Kling v2.1", "juggernaut_base_flux": "Juggernaut Base FLUX", "juggernaut_pro_flux": "Juggernaut Pro FLUX", "juggernaut_lightning_flux": "Juggernaut Lightning FLUX", "bria_4_fibo": "Bria FIBO", "sdxl": "SDXL 1.0", "Stable Diffusion XL 1.0": "SDXL 1.0", "sdxl_lightning": "SDXL Lightning", # Arena AI (kebab / arena.ai ids) "gpt-image-2 (medium)": "GPT Image 2", "gpt-image-1.5-high-fidelity": "GPT Image 1.5", "gpt-image-1": "GPT Image 1", "gpt-image-1-mini": "GPT Image 1 Mini", "mai-image-2.6-preview": "MAI-Image-2.6 Preview", "mai-image-2.5": "MAI-Image-2.5", "mai-image-2": "MAI-Image-2", "mai-image-1": "MAI Image 1", "grok-imagine-image-2.0 (low)": "Grok Imagine Image 2.0", "grok-imagine-image": "Grok Imagine Image", "grok-imagine-image-pro": "Grok Imagine Image Pro", "reve-2.1": "Reve 2.1", "reve-2.0": "Reve 2.0", "reve-v1.5": "Reve 1.5", "muse-image": "Muse Image", "gemini-3.1-flash-image (nano-banana-2) [web-search]": "Nano Banana 2", "gemini-3.1-flash-lite-image (nano-banana-2-lite)": "Nano Banana 2 Lite", "gemini-3-pro-image-2k (nano-banana-pro)": "Nano Banana Pro 2K", "gemini-3-pro-image-preview (nano-banana-pro)": "Nano Banana Pro", "gemini-2.5-flash-image-preview (nano-banana)": "Nano Banana", "gemini-2.0-flash-preview-image-generation": "Gemini 2.0 Flash Image", "seedream-5.0-pro": "Seedream 5.0 Pro", "seedream-5.0-lite": "Seedream 5.0 Lite", "seedream-4.5": "Seedream 4.5", "seedream-4-2k": "Seedream 4.0 2K", "seedream-4-fal": "Seedream 4.0", "seedream-4-high-res-fal": "Seedream 4.0 High Res", "seedream-3": "Seedream 3.0", "qwen-image-3.0-pro": "Qwen Image 3.0 Pro", "qwen-image-2.0-pro-2026-06-22": "Qwen Image 2.0 Pro", "qwen-image-2512": "Qwen Image 2512", "qwen-image-prompt-extend": "Qwen Image Prompt Extend", "qwen-image": "Qwen Image", "uni-1.1-max": "Luma UNI 1 Max", "uni-1.1": "Luma UNI 1", "Cosmos3-Super-Text2Image (Agentic)": "Cosmos3 Super Text2Image (Agentic)", "Cosmos3-Super-Text2Image": "Cosmos3 Super Text2Image", "recraft-v4.1-utility-pro": "Recraft V4.1 Utility Pro", "recraft-v4.1-pro": "Recraft V4.1 Pro", "recraft-v4": "Recraft V4", "recraft-v3": "Recraft V3", "flux-2-max": "FLUX.2 [max]", "flux-2-flex": "FLUX.2 [flex]", "flux-2-pro": "FLUX.2 [pro]", "flux-2-dev": "FLUX.2 [dev]", "flux-2-klein-9b": "FLUX.2 [klein] 9B", "flux-2-klein-4b": "FLUX.2 [klein] 4B", "flux-1-kontext-max": "FLUX.1 Kontext [max]", "flux-1-kontext-pro": "FLUX.1 Kontext [pro]", "flux-1-kontext-dev": "FLUX.1 Kontext [dev]", "flux-1.1-pro": "FLUX1.1 [pro]", "flux-1-dev-fp8": "FLUX.1 [dev]", "hunyuan-image-3.0": "HunyuanImage 3.0", "imagen-ultra-4.0-generate-001": "Imagen 4 Ultra", "imagen-4.0-generate-001": "Imagen 4", "imagen-3.0-generate-002": "Imagen 3", "wan2.6-t2i": "Wan 2.6 Text to Image", "wan2.5-t2i-preview": "Wan 2.5 Preview", "wan2.7-image-pro": "Wan 2.7 Pro", "wan2.7-image": "Wan 2.7", "ideogram-4.0-quality": "Ideogram 4.0 Quality", "ideogram-v3-quality": "Ideogram 3.0", "ideogram-v2": "Ideogram v2", "krea-2-medium": "Krea 2 Medium", "krea-2-turbo": "Krea 2 Medium Turbo", "krea-2-large": "Krea 2 Large", "hidream-o1-image": "HiDream-O1", "z-image-turbo": "Z-Image Turbo", "photon": "Luma Photon", "p-image": "P-Image", "runway-gen4": "Runway Gen-4 Image", "lucid-origin": "Lucid Origin", "glm-image": "GLM-Image", "dall-e-3": "DALLE 3", "stable-diffusion-v35-large": "Stable Diffusion 3.5 Large", "bagel": "Bagel", } def _prettify_snake_case(model_id: str) -> str: parts = [part for part in str(model_id).split("_") if part] pretty = [] for part in parts: if part.isdigit(): pretty.append(part) elif re.fullmatch(r"\d+k", part, flags=re.IGNORECASE): pretty.append(part.upper()) elif part.lower() in {"flux", "gpt", "sdxl", "glm"}: pretty.append(part.upper()) else: pretty.append(part.capitalize()) return " ".join(pretty) def display_model_name(model_id) -> str: """Return the shared UI label for a raw model id / source name.""" if model_id is None: return "" raw = str(model_id).strip() if not raw: return "" if raw in MODEL_DISPLAY_NAMES: return MODEL_DISPLAY_NAMES[raw] # Already a human label (spaces / punctuation) — keep as-is. if re.search(r"[\s.\[\]()]", raw): return raw return _prettify_snake_case(raw)