Spaces:
Sleeping
Sleeping
yu commited on
Commit ·
d2d27ed
1
Parent(s): 18bd78d
fix: 修复请求失败不触发熔断机制并补充缺失参数
Browse files- 请求失败时增加 error_count 并触发熔断(达到阈值标记账户为不可用)
- 请求成功时重置 error_count 和 is_available 状态
- 补充 MAX_ACCOUNT_SWITCH_TRIES 到前端环境变量显示
- core/templates.py +4 -0
- 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 |
# 详细记录错误信息
|