diff --git a/app/main.py b/app/main.py index bd7a40e..db176e8 100644 --- a/app/main.py +++ b/app/main.py @@ -1701,6 +1701,29 @@ async def opencollective_webhook(request: Request, token: str): # --- B. Key injector (proxy) --- +# --- Model picker: value-based naming --- +# The chat model picker displays each model's `name` field. We set it to a +# friendly name prefixed with an emoji for the provider's value tier, so the +# flat picker list clusters by what members care about (privacy / green / +# openness). The `id` field is left untouched — it remains the canonical key +# used for actual API calls. Same emoji as the docs (models.md). +MODEL_VALUE_EMOJI = { + "tinfoil": "🔒", # architecturally private (TEE) + "greenpt": "🌱", # 100% renewable energy + "publicai": "📖", # publicly developed, sovereign open models +} +MODEL_FRIENDLY_NAMES = { + "greenpt/deepseek-v4.1-flash": "DeepSeek V4.1", + "tinfoil/deepseek-v4-1-flash": "DeepSeek V4.1", + "tinfoil/glm-5-3-flash": "GLM-5.3 Flash", + "greenpt/glm-5.3-flash": "GLM-5.3 Flash", + "greenpt/glm-5.3": "GLM-5.3", + "tinfoil/gpt-oss-120b": "GPT-OSS 120B", + "publicai/apertus-v1.5-8b": "Apertus 8B", + "publicai/apertus-v1.5-70b": "Apertus 70B", +} + + @app.get("/v1/models") @limiter.limit("60/minute") async def list_models(request: Request): @@ -1742,6 +1765,16 @@ async def list_models(request: Request): payload["data"] = [m for m in payload.get("data", []) if not is_audio_model(m)] for model in payload.get("data", []): + # Friendly display name: emoji value-tier + short name. The `id` + # stays canonical (Open WebUI keys lookups and requests on it). + mid = model.get("id", "") + provider = mid.split("/", 1)[0] if "/" in mid else "" + emoji = MODEL_VALUE_EMOJI.get(provider, "") + friendly = MODEL_FRIENDLY_NAMES.get( + mid, mid.split("/", 1)[-1] if "/" in mid else mid + ) + model["name"] = f"{emoji} {friendly}".strip() + model.setdefault("info", {}).setdefault("meta", {}) model["info"]["meta"].setdefault("capabilities", {})["web_search"] = True model["info"]["meta"].setdefault("defaultFeatureIds", [])