From 90ca2e9b0f15cc9be7cf298fbefacaa45074cae9 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Tue, 24 Mar 2026 20:48:10 -0500 Subject: [PATCH] refac --- backend/open_webui/models/models.py | 17 +++++++++++++++-- backend/open_webui/routers/models.py | 10 +++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/backend/open_webui/models/models.py b/backend/open_webui/models/models.py index 1069d93708..9d2b5819bc 100755 --- a/backend/open_webui/models/models.py +++ b/backend/open_webui/models/models.py @@ -10,7 +10,7 @@ from open_webui.models.users import User, UserModel, Users, UserResponse from open_webui.models.access_grants import AccessGrantModel, AccessGrants -from pydantic import BaseModel, ConfigDict, Field +from pydantic import BaseModel, ConfigDict, Field, model_validator from sqlalchemy import String, cast, or_, and_, func from sqlalchemy.dialects import postgresql, sqlite @@ -47,7 +47,20 @@ class ModelMeta(BaseModel): model_config = ConfigDict(extra='allow') - pass + @model_validator(mode='before') + @classmethod + def normalize_tags(cls, data): + if isinstance(data, dict) and 'tags' in data: + raw_tags = data['tags'] + if isinstance(raw_tags, list): + normalized = [] + for tag in raw_tags: + if isinstance(tag, str): + normalized.append({'name': tag}) + elif isinstance(tag, dict) and 'name' in tag: + normalized.append(tag) + data['tags'] = normalized + return data class Model(Base): diff --git a/backend/open_webui/routers/models.py b/backend/open_webui/routers/models.py index 21b80e36c2..5a56e11b68 100644 --- a/backend/open_webui/routers/models.py +++ b/backend/open_webui/routers/models.py @@ -151,10 +151,14 @@ async def get_model_tags(user=Depends(get_verified_user), db: Session = Depends( if model.meta: meta = model.meta.model_dump() for tag in meta.get('tags', []): - tags_set.add((tag.get('name'))) + try: + name = tag.get('name') if isinstance(tag, dict) else str(tag) + if name: + tags_set.add(name) + except Exception: + continue - tags = [tag for tag in tags_set] - tags.sort() + tags = sorted(tags_set) return tags