Skip to content

Commit 8dfa338

Browse files
author
harvey_xiang
committed
feat: add chat_time
1 parent a19584f commit 8dfa338

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

src/memos/api/middleware/request_context.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from collections.abc import Callable
88

9+
from fastapi.responses import StreamingResponse
910
from starlette.middleware.base import BaseHTTPMiddleware
1011
from starlette.requests import Request
1112
from starlette.responses import Response
@@ -15,6 +16,20 @@
1516
from memos.context.context import RequestContext, generate_trace_id, set_request_context
1617

1718

19+
async def _tee_stream(
20+
original: StreamingResponse,
21+
) -> str:
22+
chunks = []
23+
24+
async for chunk in original.body_iterator:
25+
chunks.append(chunk)
26+
yield chunk
27+
28+
body_str = "".join(chunks)
29+
30+
return body_str
31+
32+
1833
logger = memos.log.get_logger(__name__)
1934

2035

@@ -67,21 +82,15 @@ async def dispatch(self, request: Request, call_next: Callable) -> Response:
6782
# Process the request
6883
response = await call_next(request)
6984
end_time = time.time()
70-
71-
try:
72-
print(f"response.json(): {response}")
73-
response_json = response.json()
74-
except Exception as e:
75-
response_json = None
76-
logger.error(f"Error getting response body: {e}")
85+
content = await _tee_stream(response)
7786

7887
if response.status_code == 200:
7988
logger.info(
80-
f"Request completed: {request.url.path}, response: {response_json}, status: {response.status_code}, cost: {(end_time - start_time) * 1000:.2f}ms"
89+
f"Request completed: {request.url.path}, content: {content}, status: {response.status_code}, cost: {(end_time - start_time) * 1000:.2f}ms"
8190
)
8291
else:
8392
logger.error(
84-
f"Request Failed: {request.url.path}, response: {response_json}, status: {response.status_code}, cost: {(end_time - start_time) * 1000:.2f}ms"
93+
f"Request Failed: {request.url.path}, content: {content}, status: {response.status_code}, cost: {(end_time - start_time) * 1000:.2f}ms"
8594
)
8695

8796
return response

0 commit comments

Comments
 (0)