yym68686 commited on
Commit
e6673ca
·
1 Parent(s): 55a4247

Fix the bug of httpx.ReadError and asyncio.CancelledError errors

Browse files
Files changed (1) hide show
  1. utils.py +7 -1
utils.py CHANGED
@@ -73,12 +73,16 @@ def ensure_string(item):
73
  else:
74
  return str(item)
75
 
 
76
  async def error_handling_wrapper(generator, status_code=200):
77
  async def new_generator():
78
  try:
79
  yield ensure_string(first_item)
80
  async for item in generator:
81
  yield ensure_string(item)
 
 
 
82
  except Exception as e:
83
  logger.exception(f"Error in new_generator: {e}")
84
  raise HTTPException(status_code=status_code, detail=f"Stream error: {str(e)}")
@@ -104,13 +108,15 @@ async def error_handling_wrapper(generator, status_code=200):
104
  if isinstance(first_item_str, dict) and 'error' in first_item_str:
105
  raise HTTPException(status_code=status_code, detail=f"{first_item_str}"[:300])
106
 
107
- # 创建新的生成器并包装在 try-except 块中
108
  wrapped_generator = new_generator()
109
  try:
110
  async for item in wrapped_generator:
111
  yield item
112
  except HTTPException as http_exc:
113
  raise http_exc
 
 
 
114
  except Exception as e:
115
  logger.exception(f"Unexpected error in error_handling_wrapper: {e}")
116
  raise HTTPException(status_code=status_code, detail=f"Unexpected error: {str(e)}")
 
73
  else:
74
  return str(item)
75
 
76
+ import asyncio
77
  async def error_handling_wrapper(generator, status_code=200):
78
  async def new_generator():
79
  try:
80
  yield ensure_string(first_item)
81
  async for item in generator:
82
  yield ensure_string(item)
83
+ except (httpx.ReadError, asyncio.CancelledError) as e:
84
+ logger.error(f"Network error in new_generator: {e}")
85
+ raise HTTPException(status_code=503, detail=f"Stream interrupted: {str(e)}")
86
  except Exception as e:
87
  logger.exception(f"Error in new_generator: {e}")
88
  raise HTTPException(status_code=status_code, detail=f"Stream error: {str(e)}")
 
108
  if isinstance(first_item_str, dict) and 'error' in first_item_str:
109
  raise HTTPException(status_code=status_code, detail=f"{first_item_str}"[:300])
110
 
 
111
  wrapped_generator = new_generator()
112
  try:
113
  async for item in wrapped_generator:
114
  yield item
115
  except HTTPException as http_exc:
116
  raise http_exc
117
+ except (httpx.ReadError, asyncio.CancelledError) as e:
118
+ logger.error(f"Network error during streaming: {e}")
119
+ raise HTTPException(status_code=503, detail=f"Stream interrupted: {str(e)}")
120
  except Exception as e:
121
  logger.exception(f"Unexpected error in error_handling_wrapper: {e}")
122
  raise HTTPException(status_code=status_code, detail=f"Unexpected error: {str(e)}")