From cbd703270a479f5bb8fc7327026e6d3c72ca8e0c Mon Sep 17 00:00:00 2001 From: Adrien Date: Thu, 28 Nov 2024 18:33:12 +0100 Subject: [PATCH] fix: stream node response to user (#10068) * fix Signed-off-by: Adrien * add changeset * add changeset * format * add changeset * fix read content Signed-off-by: Adrien --------- Signed-off-by: Adrien Co-authored-by: gradio-pr-bot Co-authored-by: Abubakar Abid --- .changeset/cold-parents-crash.md | 5 +++++ gradio/routes.py | 29 +++++------------------------ 2 files changed, 10 insertions(+), 24 deletions(-) create mode 100644 .changeset/cold-parents-crash.md diff --git a/.changeset/cold-parents-crash.md b/.changeset/cold-parents-crash.md new file mode 100644 index 0000000000..25e0de4278 --- /dev/null +++ b/.changeset/cold-parents-crash.md @@ -0,0 +1,5 @@ +--- +"gradio": patch +--- + +feat:fix: stream node response to user diff --git a/gradio/routes.py b/gradio/routes.py index f23481a580..6425f82893 100644 --- a/gradio/routes.py +++ b/gradio/routes.py @@ -273,32 +273,13 @@ class App(FastAPI): new_request = App.client.build_request( request.method, httpx.URL(url), headers=headers ) - node_response = await App.client.send(new_request) - content = node_response.content - user_agent = request.headers.get("user-agent", "").lower() - is_safari = ( - "safari" in user_agent - and "chrome" not in user_agent - and "chromium" not in user_agent - ) - response_headers = {} - if is_safari: - response_headers = { - "Access-Control-Allow-Origin": "*", - "Cross-Origin-Opener-Policy": "same-origin", - "Cross-Origin-Embedder-Policy": "require-corp", - } - if request.url.path.endswith(".js"): - response_headers["Content-Type"] = ( - "application/javascript; charset=utf-8" - ) - elif request.url.path.endswith(".css"): - response_headers["Content-Type"] = "text/css; charset=utf-8" + node_response = await App.client.send(new_request, stream=True) - return Response( - content=content, + return StreamingResponse( + node_response.aiter_raw(), status_code=node_response.status_code, - headers=response_headers if is_safari else node_response.headers, + headers=node_response.headers, + background=BackgroundTask(node_response.aclose), ) def configure_app(self, blocks: gradio.Blocks) -> None: