|
3 | 3 | import contextlib |
4 | 4 | from dataclasses import asdict |
5 | 5 | import json |
| 6 | +import logging |
6 | 7 | import typing |
7 | 8 | from json.decoder import JSONDecodeError |
8 | 9 |
|
|
45 | 46 | from .types.v2embed_request_truncate import V2EmbedRequestTruncate |
46 | 47 | from .types.v2rerank_response import V2RerankResponse |
47 | 48 |
|
| 49 | +logger = logging.getLogger(__name__) |
| 50 | + |
48 | 51 | # this is used as the default value for optional parameters |
49 | 52 | OMIT = typing.cast(typing.Any, ...) |
50 | 53 |
|
@@ -236,11 +239,17 @@ def _iter(): |
236 | 239 | ), |
237 | 240 | ) |
238 | 241 | except json.JSONDecodeError as e: |
239 | | - print(f"JSON decode error: {e}, data: {repr(_sse.data)}") |
240 | | - continue |
| 242 | + logger.warning( |
| 243 | + f"Skipping SSE event with invalid JSON: {e}, sse: {_sse!r}" |
| 244 | + ) |
| 245 | + except (TypeError, ValueError, KeyError, AttributeError) as e: |
| 246 | + logger.warning( |
| 247 | + f"Skipping SSE event due to model construction error: {type(e).__name__}: {e}, sse: {_sse!r}" |
| 248 | + ) |
241 | 249 | except Exception as e: |
242 | | - print(f"Parsing error: {e}, event: {_sse.event}, data: {repr(_sse.data)}") |
243 | | - continue |
| 250 | + logger.error( |
| 251 | + f"Unexpected error processing SSE event: {type(e).__name__}: {e}, sse: {_sse!r}" |
| 252 | + ) |
244 | 253 |
|
245 | 254 | return |
246 | 255 |
|
@@ -1327,29 +1336,25 @@ async def _iter(): |
1327 | 1336 | _event_source = EventSource(_response) |
1328 | 1337 | async for _sse in _event_source.aiter_sse(): |
1329 | 1338 | try: |
1330 | | - # Skip empty events |
1331 | | - if not _sse.data or _sse.data.strip() == "": |
1332 | | - continue |
1333 | | - |
1334 | | - # Handle [DONE] token from OpenAI-style APIs |
1335 | | - if _sse.data.strip() == '[DONE]': |
1336 | | - continue |
1337 | | - |
1338 | | - parsed_data = json.loads(_sse.data) |
1339 | | - |
1340 | 1339 | yield typing.cast( |
1341 | 1340 | V2ChatStreamResponse, |
1342 | 1341 | construct_type( |
1343 | 1342 | type_=V2ChatStreamResponse, # type: ignore |
1344 | | - object_=parsed_data, |
| 1343 | + object_=_sse.json(), |
1345 | 1344 | ), |
1346 | 1345 | ) |
1347 | 1346 | except json.JSONDecodeError as e: |
1348 | | - print(f"JSON decode error: {e}, data: {repr(_sse.data)}") |
1349 | | - continue |
| 1347 | + logger.warning( |
| 1348 | + f"Skipping SSE event with invalid JSON: {e}, sse: {_sse!r}" |
| 1349 | + ) |
| 1350 | + except (TypeError, ValueError, KeyError, AttributeError) as e: |
| 1351 | + logger.warning( |
| 1352 | + f"Skipping SSE event due to model construction error: {type(e).__name__}: {e}, sse: {_sse!r}" |
| 1353 | + ) |
1350 | 1354 | except Exception as e: |
1351 | | - print(f"Parsing error: {e}, event: {_sse.event}, data: {repr(_sse.data)}") |
1352 | | - continue |
| 1355 | + logger.error( |
| 1356 | + f"Unexpected error processing SSE event: {type(e).__name__}: {e}, sse: {_sse!r}" |
| 1357 | + ) |
1353 | 1358 |
|
1354 | 1359 | return |
1355 | 1360 |
|
|
0 commit comments