🐛 Bug: Fix the bug where FastAPI internally used different types of streaming responses.
Browse files
main.py
CHANGED
@@ -9,7 +9,9 @@ from starlette.middleware.base import BaseHTTPMiddleware
|
|
9 |
|
10 |
from fastapi.middleware.cors import CORSMiddleware
|
11 |
from fastapi import FastAPI, HTTPException, Depends, Request
|
12 |
-
from fastapi.responses import
|
|
|
|
|
13 |
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
14 |
from fastapi.exceptions import RequestValidationError
|
15 |
|
@@ -390,7 +392,7 @@ class StatsMiddleware(BaseHTTPMiddleware):
|
|
390 |
try:
|
391 |
response = await call_next(request)
|
392 |
|
393 |
-
if isinstance(response,
|
394 |
response = LoggingStreamingResponse(
|
395 |
content=response.body_iterator,
|
396 |
status_code=response.status_code,
|
@@ -527,14 +529,15 @@ async def process_request(request: Union[RequestModel, ImageGenerationRequest, A
|
|
527 |
model = provider['model'][request.model]
|
528 |
generator = fetch_response_stream(app.state.client, url, headers, payload, engine, model)
|
529 |
wrapped_generator, first_response_time = await error_handling_wrapper(generator)
|
530 |
-
response =
|
531 |
else:
|
532 |
generator = fetch_response(app.state.client, url, headers, payload)
|
533 |
wrapped_generator, first_response_time = await error_handling_wrapper(generator)
|
534 |
first_element = await anext(wrapped_generator)
|
535 |
first_element = first_element.lstrip("data: ")
|
536 |
first_element = json.loads(first_element)
|
537 |
-
response =
|
|
|
538 |
|
539 |
# 更新成功计数和首次响应时间
|
540 |
await app.middleware_stack.app.update_channel_stats(current_info["request_id"], provider['provider'], request.model, token, success=True)
|
|
|
9 |
|
10 |
from fastapi.middleware.cors import CORSMiddleware
|
11 |
from fastapi import FastAPI, HTTPException, Depends, Request
|
12 |
+
from fastapi.responses import JSONResponse
|
13 |
+
from fastapi.responses import StreamingResponse as FastAPIStreamingResponse
|
14 |
+
from starlette.responses import StreamingResponse as StarletteStreamingResponse
|
15 |
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
16 |
from fastapi.exceptions import RequestValidationError
|
17 |
|
|
|
392 |
try:
|
393 |
response = await call_next(request)
|
394 |
|
395 |
+
if isinstance(response, (FastAPIStreamingResponse, StarletteStreamingResponse)):
|
396 |
response = LoggingStreamingResponse(
|
397 |
content=response.body_iterator,
|
398 |
status_code=response.status_code,
|
|
|
529 |
model = provider['model'][request.model]
|
530 |
generator = fetch_response_stream(app.state.client, url, headers, payload, engine, model)
|
531 |
wrapped_generator, first_response_time = await error_handling_wrapper(generator)
|
532 |
+
response = StarletteStreamingResponse(wrapped_generator, media_type="text/event-stream")
|
533 |
else:
|
534 |
generator = fetch_response(app.state.client, url, headers, payload)
|
535 |
wrapped_generator, first_response_time = await error_handling_wrapper(generator)
|
536 |
first_element = await anext(wrapped_generator)
|
537 |
first_element = first_element.lstrip("data: ")
|
538 |
first_element = json.loads(first_element)
|
539 |
+
response = StarletteStreamingResponse(iter([json.dumps(first_element)]), media_type="application/json")
|
540 |
+
# response = JSONResponse(first_element)
|
541 |
|
542 |
# 更新成功计数和首次响应时间
|
543 |
await app.middleware_stack.app.update_channel_stats(current_info["request_id"], provider['provider'], request.model, token, success=True)
|