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) ---
|
# --- 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")
|
@app.get("/v1/models")
|
||||||
@limiter.limit("60/minute")
|
@limiter.limit("60/minute")
|
||||||
async def list_models(request: Request):
|
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)]
|
payload["data"] = [m for m in payload.get("data", []) if not is_audio_model(m)]
|
||||||
|
|
||||||
for model in payload.get("data", []):
|
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.setdefault("info", {}).setdefault("meta", {})
|
||||||
model["info"]["meta"].setdefault("capabilities", {})["web_search"] = True
|
model["info"]["meta"].setdefault("capabilities", {})["web_search"] = True
|
||||||
model["info"]["meta"].setdefault("defaultFeatureIds", [])
|
model["info"]["meta"].setdefault("defaultFeatureIds", [])
|
||||||
|
|||||||
Reference in new issue
Block a user