diff --git a/backend/open_webui/utils/filter.py b/backend/open_webui/utils/filter.py index 37349d290..9c71f0d65 100644 --- a/backend/open_webui/utils/filter.py +++ b/backend/open_webui/utils/filter.py @@ -22,10 +22,14 @@ def get_function_module(request, function_id, load_from_db=True): def get_sorted_filter_ids(request, model: dict, enabled_filter_ids: list = None): def get_priority(function_id): - function = Functions.get_function_by_id(function_id) - if function is not None: - valves = Functions.get_function_valves_by_id(function_id) - return valves.get("priority", 0) if valves else 0 + try: + function_module = get_function_module(request, function_id) + if function_module and hasattr(function_module, "Valves"): + valves_db = Functions.get_function_valves_by_id(function_id) + valves = function_module.Valves(**(valves_db if valves_db else {})) + return getattr(valves, "priority", 0) + except Exception: + pass return 0 filter_ids = [function.id for function in Functions.get_global_filter_functions()] @@ -50,7 +54,7 @@ def get_sorted_filter_ids(request, model: dict, enabled_filter_ids: list = None) ] filter_ids = [fid for fid in filter_ids if fid in active_filter_ids] - filter_ids.sort(key=get_priority) + filter_ids.sort(key=lambda fid: (get_priority(fid), fid)) return filter_ids diff --git a/backend/open_webui/utils/models.py b/backend/open_webui/utils/models.py index d890dc0a2..6c82b4aa9 100644 --- a/backend/open_webui/utils/models.py +++ b/backend/open_webui/utils/models.py @@ -332,8 +332,15 @@ async def get_all_models(request, refresh: bool = False, user: UserModel = None) meta[key] = copy.deepcopy(value) def get_action_priority(action_id): - valves = Functions.get_function_valves_by_id(action_id) - return valves.get("priority", 0) if valves else 0 + try: + function_module = request.app.state.FUNCTIONS.get(action_id) + if function_module and hasattr(function_module, "Valves"): + valves_db = Functions.get_function_valves_by_id(action_id) + valves = function_module.Valves(**(valves_db if valves_db else {})) + return getattr(valves, "priority", 0) + except Exception: + pass + return 0 for model in models: action_ids = [ @@ -341,7 +348,7 @@ async def get_all_models(request, refresh: bool = False, user: UserModel = None) for action_id in list(set(model.pop("action_ids", []) + global_action_ids)) if action_id in enabled_action_ids ] - action_ids.sort(key=get_action_priority) + action_ids.sort(key=lambda aid: (get_action_priority(aid), aid)) filter_ids = [ filter_id