feat: global filter

This commit is contained in:
Timothy J. Baek 2024-06-23 18:39:27 -07:00
parent d8c112d8b0
commit 3a629ffe00
2 changed files with 62 additions and 53 deletions

View File

@ -376,70 +376,77 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
) )
model = app.state.MODELS[model_id] model = app.state.MODELS[model_id]
filter_ids = [
function.id
for function in Functions.get_functions_by_type(
"filter", active_only=True
)
]
# Check if the model has any filters # Check if the model has any filters
if "info" in model and "meta" in model["info"]: if "info" in model and "meta" in model["info"]:
for filter_id in model["info"]["meta"].get("filterIds", []): filter_ids.extend(model["info"]["meta"].get("filterIds", []))
filter = Functions.get_function_by_id(filter_id) filter_ids = list(set(filter_ids))
if filter:
if filter_id in webui_app.state.FUNCTIONS:
function_module = webui_app.state.FUNCTIONS[filter_id]
else:
function_module, function_type = load_function_module_by_id(
filter_id
)
webui_app.state.FUNCTIONS[filter_id] = function_module
# Check if the function has a file_handler variable for filter_id in filter_ids:
if hasattr(function_module, "file_handler"): filter = Functions.get_function_by_id(filter_id)
skip_files = function_module.file_handler if filter:
if filter_id in webui_app.state.FUNCTIONS:
function_module = webui_app.state.FUNCTIONS[filter_id]
else:
function_module, function_type = load_function_module_by_id(
filter_id
)
webui_app.state.FUNCTIONS[filter_id] = function_module
try: # Check if the function has a file_handler variable
if hasattr(function_module, "inlet"): if hasattr(function_module, "file_handler"):
inlet = function_module.inlet skip_files = function_module.file_handler
# Get the signature of the function try:
sig = inspect.signature(inlet) if hasattr(function_module, "inlet"):
params = {"body": data} inlet = function_module.inlet
if "__user__" in sig.parameters: # Get the signature of the function
__user__ = { sig = inspect.signature(inlet)
"id": user.id, params = {"body": data}
"email": user.email,
"name": user.name,
"role": user.role,
}
try: if "__user__" in sig.parameters:
if hasattr(function_module, "UserValves"): __user__ = {
__user__["valves"] = ( "id": user.id,
function_module.UserValves( "email": user.email,
**Functions.get_user_valves_by_id_and_user_id( "name": user.name,
filter_id, user.id "role": user.role,
) }
)
try:
if hasattr(function_module, "UserValves"):
__user__["valves"] = function_module.UserValves(
**Functions.get_user_valves_by_id_and_user_id(
filter_id, user.id
) )
except Exception as e: )
print(e) except Exception as e:
print(e)
params = {**params, "__user__": __user__} params = {**params, "__user__": __user__}
if "__id__" in sig.parameters: if "__id__" in sig.parameters:
params = { params = {
**params, **params,
"__id__": filter_id, "__id__": filter_id,
} }
if inspect.iscoroutinefunction(inlet): if inspect.iscoroutinefunction(inlet):
data = await inlet(**params) data = await inlet(**params)
else: else:
data = inlet(**params) data = inlet(**params)
except Exception as e: except Exception as e:
print(f"Error: {e}") print(f"Error: {e}")
return JSONResponse( return JSONResponse(
status_code=status.HTTP_400_BAD_REQUEST, status_code=status.HTTP_400_BAD_REQUEST,
content={"detail": str(e)}, content={"detail": str(e)},
) )
# Set the task model # Set the task model
task_model_id = data["model"] task_model_id = data["model"]
@ -863,6 +870,7 @@ async def generate_chat_completions(form_data: dict, user=Depends(get_verified_u
pipe = model.get("pipe") pipe = model.get("pipe")
if pipe: if pipe:
async def job(): async def job():
pipe_id = form_data["model"] pipe_id = form_data["model"]
if "." in pipe_id: if "." in pipe_id:

View File

@ -227,8 +227,9 @@
<div class=" self-center mx-1"> <div class=" self-center mx-1">
<Switch <Switch
bind:state={func.is_active} bind:state={func.is_active}
on:change={(e) => { on:change={async (e) => {
toggleFunctionById(localStorage.token, func.id); toggleFunctionById(localStorage.token, func.id);
models.set(await getModels(localStorage.token));
}} }}
/> />
</div> </div>