diff --git a/main.py b/main.py index caac15b..594652e 100644 --- a/main.py +++ b/main.py @@ -463,9 +463,9 @@ async def update_valves(pipeline_id: str, form_data: dict): return pipeline.valves -@app.post("/v1/{pipeline_id}/filter") -@app.post("/{pipeline_id}/filter") -async def filter(pipeline_id: str, form_data: FilterForm): +@app.post("/v1/{pipeline_id}/filter/inlet") +@app.post("/{pipeline_id}/filter/inlet") +async def filter_inlet(pipeline_id: str, form_data: FilterForm): if ( pipeline_id not in app.state.PIPELINES or app.state.PIPELINES[pipeline_id].get("type", "pipe") != "filter" @@ -478,8 +478,39 @@ async def filter(pipeline_id: str, form_data: FilterForm): pipeline = PIPELINE_MODULES[pipeline_id] try: - body = await pipeline.filter(form_data.body, form_data.user) - return body + if hasattr(pipeline, "inlet"): + body = await pipeline.inlet(form_data.body, form_data.user) + return body + else: + return form_data.body + except Exception as e: + print(e) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"{str(e)}", + ) + + +@app.post("/v1/{pipeline_id}/filter/outlet") +@app.post("/{pipeline_id}/filter/outlet") +async def filter_outlet(pipeline_id: str, form_data: FilterForm): + if ( + pipeline_id not in app.state.PIPELINES + or app.state.PIPELINES[pipeline_id].get("type", "pipe") != "filter" + ): + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=f"Filter {pipeline_id} not found", + ) + + pipeline = PIPELINE_MODULES[pipeline_id] + + try: + if hasattr(pipeline, "outlet"): + body = await pipeline.outlet(form_data.body, form_data.user) + return body + else: + return form_data.body except Exception as e: print(e) raise HTTPException( diff --git a/pipelines/examples/detoxify_filter_pipeline.py b/pipelines/examples/detoxify_filter_pipeline.py index fb82a37..d3dcb80 100644 --- a/pipelines/examples/detoxify_filter_pipeline.py +++ b/pipelines/examples/detoxify_filter_pipeline.py @@ -56,8 +56,9 @@ class Pipeline: # This function is called when the valves are updated. pass - async def filter(self, body: dict, user: Optional[dict] = None) -> dict: - print(f"filter:{__name__}") + async def inlet(self, body: dict, user: Optional[dict] = None) -> dict: + # This filter is applied to the form data before it is sent to the OpenAI API. + print(f"inlet:{__name__}") print(body) user_message = body["messages"][-1]["content"] diff --git a/pipelines/examples/filter_pipeline.py b/pipelines/examples/filter_pipeline.py index d376418..70a6f3e 100644 --- a/pipelines/examples/filter_pipeline.py +++ b/pipelines/examples/filter_pipeline.py @@ -43,8 +43,9 @@ class Pipeline: print(f"on_shutdown:{__name__}") pass - async def filter(self, body: dict, user: Optional[dict] = None) -> dict: - print(f"pipe:{__name__}") + async def inlet(self, body: dict, user: Optional[dict] = None) -> dict: + # This filter is applied to the form data before it is sent to the OpenAI API. + print(f"inlet:{__name__}") print(body) print(user) diff --git a/pipelines/examples/langfuse_filter_pipeline.py b/pipelines/examples/langfuse_filter_pipeline.py index f6fcc56..87bbf8e 100644 --- a/pipelines/examples/langfuse_filter_pipeline.py +++ b/pipelines/examples/langfuse_filter_pipeline.py @@ -77,8 +77,8 @@ class Pipeline: ) self.langfuse.auth_check() - async def filter(self, body: dict, user: Optional[dict] = None) -> dict: - print(f"filter:{__name__}") + async def inlet(self, body: dict, user: Optional[dict] = None) -> dict: + print(f"inlet:{__name__}") trace = self.langfuse.trace( name=f"filter:{__name__}", diff --git a/pipelines/examples/rate_limit_filter_pipeline.py b/pipelines/examples/rate_limit_filter_pipeline.py index d66bbc5..eb40041 100644 --- a/pipelines/examples/rate_limit_filter_pipeline.py +++ b/pipelines/examples/rate_limit_filter_pipeline.py @@ -103,7 +103,7 @@ class Pipeline: return False - async def filter(self, body: dict, user: Optional[dict] = None) -> dict: + async def inlet(self, body: dict, user: Optional[dict] = None) -> dict: print(f"pipe:{__name__}") print(body) print(user)