Chat model picker: value-tier emoji + friendly names in /v1/models (🔒 private / 🌱 green / 📖 public), id stays canonical
This commit is contained in:
1 parent
1fe0e47802
commit
3cdc250d52
1 file changed
+33
+33
@@ -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", [])
|
||||
|
||||
Reference in new issue
Block a user