From 126908cbcd31929d3a6001e3dd82e9b80b822844 Mon Sep 17 00:00:00 2001 From: weberm1 Date: Wed, 21 May 2025 12:21:01 +0200 Subject: [PATCH] Feature: Added function to check if reranking or embedding models are in use in another knowledge base --- backend/open_webui/models/knowledge.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/backend/open_webui/models/knowledge.py b/backend/open_webui/models/knowledge.py index 0a8072880..966f36144 100644 --- a/backend/open_webui/models/knowledge.py +++ b/backend/open_webui/models/knowledge.py @@ -236,5 +236,31 @@ class KnowledgeTable: except Exception as e: log.exception(e) return None + + def is_model_in_use_elsewhere( + self, model: str, model_type: str, id: Optional[str] = None + ) -> bool: + try: + from sqlalchemy import func + with get_db() as db: + if db.bind.dialect.name == "sqlite": + func.json_extract(Knowledge.rag_config, f'$.{model_type}') == model, + + elif db.bind.dialect.name == "postgresql": + query = db.query(Knowledge).filter( + Knowledge.rag_config.op("->>")(model_type) == model, + ) + else: + raise NotImplementedError( + f"Unsupported dialect: {db.bind.dialect.name}" + ) + if id: + query = query.filter(Knowledge.id != id) + + return query.first() is not None + + except Exception as e: + log.exception(f"Error checking model usage elsewhere: {e}") + return False Knowledges = KnowledgeTable()