mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-05-23 12:58:18 -05:00
Fix gzip breaks streaming and flush stream
This commit is contained in:
parent
7ab15cda96
commit
dd3322cb82
@ -1144,6 +1144,7 @@ class DocumentViewSet(
|
|||||||
@method_decorator(login_required, name="dispatch")
|
@method_decorator(login_required, name="dispatch")
|
||||||
class ChatStreamingView(View):
|
class ChatStreamingView(View):
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
request.compress_exempt = True
|
||||||
ai_config = AIConfig()
|
ai_config = AIConfig()
|
||||||
if not ai_config.ai_enabled:
|
if not ai_config.ai_enabled:
|
||||||
return HttpResponseBadRequest("AI is required for this feature")
|
return HttpResponseBadRequest("AI is required for this feature")
|
||||||
@ -1174,7 +1175,7 @@ class ChatStreamingView(View):
|
|||||||
|
|
||||||
response = StreamingHttpResponse(
|
response = StreamingHttpResponse(
|
||||||
stream_chat_with_documents(query_str=question, documents=documents),
|
stream_chat_with_documents(query_str=question, documents=documents),
|
||||||
content_type="text/plain",
|
content_type="text/event-stream",
|
||||||
)
|
)
|
||||||
response["Cache-Control"] = "no-cache"
|
response["Cache-Control"] = "no-cache"
|
||||||
return response
|
return response
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
import sys
|
||||||
|
|
||||||
from llama_index.core import VectorStoreIndex
|
from llama_index.core import VectorStoreIndex
|
||||||
from llama_index.core.prompts import PromptTemplate
|
from llama_index.core.prompts import PromptTemplate
|
||||||
@ -70,4 +71,6 @@ def stream_chat_with_documents(query_str: str, documents: list[Document]):
|
|||||||
|
|
||||||
response_stream = query_engine.query(prompt)
|
response_stream = query_engine.query(prompt)
|
||||||
|
|
||||||
yield from response_stream.response_gen
|
for chunk in response_stream.response_gen:
|
||||||
|
yield chunk
|
||||||
|
sys.stdout.flush()
|
||||||
|
@ -11,6 +11,7 @@ from typing import Final
|
|||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from celery.schedules import crontab
|
from celery.schedules import crontab
|
||||||
|
from compression_middleware.middleware import CompressionMiddleware
|
||||||
from concurrent_log_handler.queue import setup_logging_queues
|
from concurrent_log_handler.queue import setup_logging_queues
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
@ -375,6 +376,19 @@ MIDDLEWARE = [
|
|||||||
if __get_boolean("PAPERLESS_ENABLE_COMPRESSION", "yes"): # pragma: no cover
|
if __get_boolean("PAPERLESS_ENABLE_COMPRESSION", "yes"): # pragma: no cover
|
||||||
MIDDLEWARE.insert(0, "compression_middleware.middleware.CompressionMiddleware")
|
MIDDLEWARE.insert(0, "compression_middleware.middleware.CompressionMiddleware")
|
||||||
|
|
||||||
|
# Workaround to not compress streaming responses (e.g. chat).
|
||||||
|
# See https://github.com/friedelwolff/django-compression-middleware/pull/7
|
||||||
|
original_process_response = CompressionMiddleware.process_response
|
||||||
|
|
||||||
|
|
||||||
|
def patched_process_response(self, request, response):
|
||||||
|
if getattr(request, "compress_exempt", False):
|
||||||
|
return response
|
||||||
|
return original_process_response(self, request, response)
|
||||||
|
|
||||||
|
|
||||||
|
CompressionMiddleware.process_response = patched_process_response
|
||||||
|
|
||||||
ROOT_URLCONF = "paperless.urls"
|
ROOT_URLCONF = "paperless.urls"
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user