refac/enh: function valves validation

This commit is contained in:
Timothy Jaeryang Baek 2025-09-16 12:00:59 -05:00
parent fed5615c19
commit e66e0526ed
2 changed files with 70 additions and 45 deletions

View file

@ -19,6 +19,7 @@ from fastapi import (
from starlette.responses import Response, StreamingResponse
from open_webui.constants import ERROR_MESSAGES
from open_webui.socket.main import (
get_event_call,
get_event_emitter,
@ -60,8 +61,18 @@ def get_function_module_by_id(request: Request, pipe_id: str):
function_module, _, _ = get_function_module_from_cache(request, pipe_id)
if hasattr(function_module, "valves") and hasattr(function_module, "Valves"):
Valves = function_module.Valves
valves = Functions.get_function_valves_by_id(pipe_id)
function_module.valves = function_module.Valves(**(valves if valves else {}))
if valves:
try:
function_module.valves = Valves(
**({k: v for k, v in valves if v is not None})
)
except Exception as e:
log.exception(f"Error loading valves for function {pipe_id}: {e}")
raise e
return function_module
@ -70,6 +81,7 @@ async def get_function_models(request):
pipe_models = []
for pipe in pipes:
try:
function_module = get_function_module_by_id(request, pipe.id)
# Check if function is a manifold
@ -129,6 +141,9 @@ async def get_function_models(request):
"pipe": pipe_flag,
}
)
except Exception as e:
log.exception(e)
continue
return pipe_models

View file

@ -148,6 +148,16 @@ async def sync_functions(
content=function.content,
)
if hasattr(function_module, "Valves") and function.valves:
Valves = function_module.Valves
try:
Valves(**{k: v for k, v in function.valves if v is not None})
except Exception as e:
log.exception(
f"Error validating valves for function {function.id}: {e}"
)
raise e
return Functions.sync_functions(user.id, form_data.functions)
except Exception as e:
log.exception(f"Failed to load a function: {e}")