yu commited on
Commit
d2d27ed
·
1 Parent(s): 18bd78d

fix: 修复请求失败不触发熔断机制并补充缺失参数

Browse files

- 请求失败时增加 error_count 并触发熔断(达到阈值标记账户为不可用)
- 请求成功时重置 error_count 和 is_available 状态
- 补充 MAX_ACCOUNT_SWITCH_TRIES 到前端环境变量显示

Files changed (2) hide show
  1. core/templates.py +4 -0
  2. main.py +11 -0
core/templates.py CHANGED
@@ -513,6 +513,10 @@ def generate_admin_html(request: Request, multi_account_mgr, show_hide_tip: bool
513
  <div><div class="env-name">MAX_REQUEST_RETRIES</div><div class="env-desc">请求失败重试次数</div></div>
514
  <div class="env-value">{main.MAX_REQUEST_RETRIES}</div>
515
  </div>
 
 
 
 
516
  <div class="env-var">
517
  <div><div class="env-name">ACCOUNT_FAILURE_THRESHOLD</div><div class="env-desc">账户失败阈值</div></div>
518
  <div class="env-value">{main.ACCOUNT_FAILURE_THRESHOLD} 次</div>
 
513
  <div><div class="env-name">MAX_REQUEST_RETRIES</div><div class="env-desc">请求失败重试次数</div></div>
514
  <div class="env-value">{main.MAX_REQUEST_RETRIES}</div>
515
  </div>
516
+ <div class="env-var">
517
+ <div><div class="env-name">MAX_ACCOUNT_SWITCH_TRIES</div><div class="env-desc">每次重试查找账户次数</div></div>
518
+ <div class="env-value">{main.MAX_ACCOUNT_SWITCH_TRIES}</div>
519
+ </div>
520
  <div class="env-var">
521
  <div><div class="env-name">ACCOUNT_FAILURE_THRESHOLD</div><div class="env-desc">账户失败阈值</div></div>
522
  <div class="env-value">{main.ACCOUNT_FAILURE_THRESHOLD} 次</div>
main.py CHANGED
@@ -1385,12 +1385,23 @@ async def chat(
1385
  request
1386
  ):
1387
  yield chunk
 
 
 
 
1388
  break
1389
 
1390
  except (httpx.ConnectError, httpx.ReadTimeout, ssl.SSLError, HTTPException) as e:
1391
  # 记录当前失败的账户
1392
  failed_accounts.add(account_manager.config.account_id)
1393
 
 
 
 
 
 
 
 
1394
  retry_count += 1
1395
 
1396
  # 详细记录错误信息
 
1385
  request
1386
  ):
1387
  yield chunk
1388
+
1389
+ # 请求成功,重置账户失败计数
1390
+ account_manager.is_available = True
1391
+ account_manager.error_count = 0
1392
  break
1393
 
1394
  except (httpx.ConnectError, httpx.ReadTimeout, ssl.SSLError, HTTPException) as e:
1395
  # 记录当前失败的账户
1396
  failed_accounts.add(account_manager.config.account_id)
1397
 
1398
+ # 增加账户失败计数(触发熔断机制)
1399
+ account_manager.last_error_time = time.time()
1400
+ account_manager.error_count += 1
1401
+ if account_manager.error_count >= ACCOUNT_FAILURE_THRESHOLD:
1402
+ account_manager.is_available = False
1403
+ logger.error(f"[ACCOUNT] [{account_manager.config.account_id}] [req_{request_id}] 请求连续失败{account_manager.error_count}次,账户已标记为不可用")
1404
+
1405
  retry_count += 1
1406
 
1407
  # 详细记录错误信息