From 0dd2cfe1f273fbacdbe90300a97c021f2e678656 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 21 Dec 2025 15:43:02 +0400 Subject: [PATCH] enh: models endpoint optimization Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com> #20010 --- backend/open_webui/models/models.py | 8 ++++++++ backend/open_webui/utils/models.py | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/models/models.py b/backend/open_webui/models/models.py index d5266119b7..08dcfe87a1 100755 --- a/backend/open_webui/models/models.py +++ b/backend/open_webui/models/models.py @@ -357,6 +357,14 @@ class ModelsTable: except Exception: return None + def get_models_by_ids(self, ids: list[str]) -> list[ModelModel]: + try: + with get_db() as db: + models = db.query(Model).filter(Model.id.in_(ids)).all() + return [ModelModel.model_validate(model) for model in models] + except Exception: + return [] + def toggle_model_by_id(self, id: str) -> Optional[ModelModel]: with get_db() as db: try: diff --git a/backend/open_webui/utils/models.py b/backend/open_webui/utils/models.py index 6c58459b17..431542d340 100644 --- a/backend/open_webui/utils/models.py +++ b/backend/open_webui/utils/models.py @@ -366,6 +366,12 @@ def get_filtered_models(models, user): user.role == "user" or (user.role == "admin" and not BYPASS_ADMIN_ACCESS_CONTROL) ) and not BYPASS_MODEL_ACCESS_CONTROL: + model_ids = [model["id"] for model in models if not model.get("arena")] + model_infos = { + model_info.id: model_info + for model_info in Models.get_models_by_ids(model_ids) + } + filtered_models = [] user_group_ids = {group.id for group in Groups.get_groups_by_member_id(user.id)} for model in models: @@ -381,7 +387,7 @@ def get_filtered_models(models, user): filtered_models.append(model) continue - model_info = Models.get_model_by_id(model["id"]) + model_info = model_infos.get(model["id"], None) if model_info: if ( (user.role == "admin" and BYPASS_ADMIN_ACCESS_CONTROL)