P-Bench / model_display.py
minette-kaunismaki's picture
ui-updates (#1)
e680130
Raw
History Blame Contribute Delete
8.63 kB
"""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)