yym68686 commited on
Commit
08f4342
·
1 Parent(s): fc9790b

💻 Code: Optimize log display: add error provider name display.

Browse files
Files changed (2) hide show
  1. main.py +7 -6
  2. utils.py +7 -7
main.py CHANGED
@@ -706,7 +706,8 @@ async def process_request(request: Union[RequestModel, ImageGenerationRequest, A
706
  if provider.get("engine"):
707
  engine = provider["engine"]
708
 
709
- logger.info(f"provider: {provider['provider']:<11} model: {request.model:<22} engine: {engine}")
 
710
 
711
  url, headers, payload = await get_payload(request, engine, provider)
712
  if is_debug:
@@ -738,11 +739,11 @@ async def process_request(request: Union[RequestModel, ImageGenerationRequest, A
738
  async with app.state.client_manager.get_client(timeout_value) as client:
739
  if request.stream:
740
  generator = fetch_response_stream(client, url, headers, payload, engine, original_model)
741
- wrapped_generator, first_response_time = await error_handling_wrapper(generator)
742
  response = StarletteStreamingResponse(wrapped_generator, media_type="text/event-stream")
743
  else:
744
  generator = fetch_response(client, url, headers, payload, engine, original_model)
745
- wrapped_generator, first_response_time = await error_handling_wrapper(generator)
746
  first_element = await anext(wrapped_generator)
747
  first_element = first_element.lstrip("data: ")
748
  # print("first_element", first_element)
@@ -751,14 +752,14 @@ async def process_request(request: Union[RequestModel, ImageGenerationRequest, A
751
  # response = JSONResponse(first_element)
752
 
753
  # 更新成功计数和首次响应时间
754
- await update_channel_stats(current_info["request_id"], provider['provider'], request.model, current_info["api_key"], success=True)
755
  current_info["first_response_time"] = first_response_time
756
  current_info["success"] = True
757
- current_info["provider"] = provider['provider']
758
  return response
759
 
760
  except (Exception, HTTPException, asyncio.CancelledError, httpx.ReadError, httpx.RemoteProtocolError, httpx.ReadTimeout) as e:
761
- await update_channel_stats(current_info["request_id"], provider['provider'], request.model, current_info["api_key"], success=False)
762
  raise e
763
 
764
  def weighted_round_robin(weights):
 
706
  if provider.get("engine"):
707
  engine = provider["engine"]
708
 
709
+ channel_id = f"{provider['provider']}"
710
+ logger.info(f"provider: {channel_id:<11} model: {request.model:<22} engine: {engine}")
711
 
712
  url, headers, payload = await get_payload(request, engine, provider)
713
  if is_debug:
 
739
  async with app.state.client_manager.get_client(timeout_value) as client:
740
  if request.stream:
741
  generator = fetch_response_stream(client, url, headers, payload, engine, original_model)
742
+ wrapped_generator, first_response_time = await error_handling_wrapper(generator, channel_id)
743
  response = StarletteStreamingResponse(wrapped_generator, media_type="text/event-stream")
744
  else:
745
  generator = fetch_response(client, url, headers, payload, engine, original_model)
746
+ wrapped_generator, first_response_time = await error_handling_wrapper(generator, channel_id)
747
  first_element = await anext(wrapped_generator)
748
  first_element = first_element.lstrip("data: ")
749
  # print("first_element", first_element)
 
752
  # response = JSONResponse(first_element)
753
 
754
  # 更新成功计数和首次响应时间
755
+ await update_channel_stats(current_info["request_id"], channel_id, request.model, current_info["api_key"], success=True)
756
  current_info["first_response_time"] = first_response_time
757
  current_info["success"] = True
758
+ current_info["provider"] = channel_id
759
  return response
760
 
761
  except (Exception, HTTPException, asyncio.CancelledError, httpx.ReadError, httpx.RemoteProtocolError, httpx.ReadTimeout) as e:
762
+ await update_channel_stats(current_info["request_id"], channel_id, request.model, current_info["api_key"], success=False)
763
  raise e
764
 
765
  def weighted_round_robin(weights):
utils.py CHANGED
@@ -405,7 +405,7 @@ def ensure_string(item):
405
 
406
  import asyncio
407
  import time as time_module
408
- async def error_handling_wrapper(generator):
409
  start_time = time_module.time()
410
  try:
411
  first_item = await generator.__anext__()
@@ -418,18 +418,18 @@ async def error_handling_wrapper(generator):
418
  if first_item_str.startswith("data:"):
419
  first_item_str = first_item_str.lstrip("data: ")
420
  if first_item_str.startswith("[DONE]"):
421
- logger.error("error_handling_wrapper [DONE]!")
422
  raise StopAsyncIteration
423
  if "The bot's usage is covered by the developer" in first_item_str:
424
- logger.error("error const string: %s", first_item_str)
425
  raise StopAsyncIteration
426
  if "process this request due to overload or policy" in first_item_str:
427
- logger.error("error const string: %s", first_item_str)
428
  raise StopAsyncIteration
429
  try:
430
  first_item_str = json.loads(first_item_str)
431
  except json.JSONDecodeError:
432
- logger.error("error_handling_wrapper JSONDecodeError!" + repr(first_item_str))
433
  raise StopAsyncIteration
434
  if isinstance(first_item_str, dict) and 'error' in first_item_str:
435
  # 如果第一个 yield 的项是错误信息,抛出 HTTPException
@@ -445,11 +445,11 @@ async def error_handling_wrapper(generator):
445
  yield ensure_string(item)
446
  except asyncio.CancelledError:
447
  # 客户端断开连接是正常行为,不需要记录错误日志
448
- logger.debug("Stream cancelled by client")
449
  return
450
  except (httpx.ReadError, httpx.RemoteProtocolError) as e:
451
  # 只记录真正的网络错误
452
- logger.error(f"Network error in new_generator: {e}")
453
  raise
454
 
455
  return new_generator(), first_response_time
 
405
 
406
  import asyncio
407
  import time as time_module
408
+ async def error_handling_wrapper(generator, channel_id):
409
  start_time = time_module.time()
410
  try:
411
  first_item = await generator.__anext__()
 
418
  if first_item_str.startswith("data:"):
419
  first_item_str = first_item_str.lstrip("data: ")
420
  if first_item_str.startswith("[DONE]"):
421
+ logger.error(f"provider: {channel_id:<11} error_handling_wrapper [DONE]!")
422
  raise StopAsyncIteration
423
  if "The bot's usage is covered by the developer" in first_item_str:
424
+ logger.error(f"provider: {channel_id:<11} error const string: %s", first_item_str)
425
  raise StopAsyncIteration
426
  if "process this request due to overload or policy" in first_item_str:
427
+ logger.error(f"provider: {channel_id:<11} error const string: %s", first_item_str)
428
  raise StopAsyncIteration
429
  try:
430
  first_item_str = json.loads(first_item_str)
431
  except json.JSONDecodeError:
432
+ logger.error(f"provider: {channel_id:<11} error_handling_wrapper JSONDecodeError! {repr(first_item_str)}")
433
  raise StopAsyncIteration
434
  if isinstance(first_item_str, dict) and 'error' in first_item_str:
435
  # 如果第一个 yield 的项是错误信息,抛出 HTTPException
 
445
  yield ensure_string(item)
446
  except asyncio.CancelledError:
447
  # 客户端断开连接是正常行为,不需要记录错误日志
448
+ logger.debug(f"provider: {channel_id:<11} Stream cancelled by client")
449
  return
450
  except (httpx.ReadError, httpx.RemoteProtocolError) as e:
451
  # 只记录真正的网络错误
452
+ logger.error(f"provider: {channel_id:<11} Network error in new_generator: {e}")
453
  raise
454
 
455
  return new_generator(), first_response_time