diff --git a/src/services/claudeAccountService.js b/src/services/claudeAccountService.js index 97748393..ec50f65f 100644 --- a/src/services/claudeAccountService.js +++ b/src/services/claudeAccountService.js @@ -1704,6 +1704,9 @@ class ClaudeAccountService { delete updatedAccountData.rateLimitedAt delete updatedAccountData.rateLimitStatus delete updatedAccountData.rateLimitEndAt + delete updatedAccountData.tempErrorAt + delete updatedAccountData.sessionWindowStart + delete updatedAccountData.sessionWindowEnd // 保存更新后的账户数据 await redis.setClaudeAccount(accountId, updatedAccountData) @@ -1716,6 +1719,10 @@ class ClaudeAccountService { const rateLimitKey = `ratelimit:${accountId}` await redis.client.del(rateLimitKey) + // 清除5xx错误计数 + const serverErrorKey = `claude_account:${accountId}:5xx_errors` + await redis.client.del(serverErrorKey) + logger.info( `✅ Successfully reset all error states for account ${accountData.name} (${accountId})` ) @@ -1740,7 +1747,7 @@ class ClaudeAccountService { try { const accounts = await redis.getAllClaudeAccounts() let cleanedCount = 0 - const TEMP_ERROR_RECOVERY_MINUTES = 60 // 临时错误状态恢复时间(分钟) + const TEMP_ERROR_RECOVERY_MINUTES = 5 // 临时错误状态恢复时间(分钟) for (const account of accounts) { if (account.status === 'temp_error' && account.tempErrorAt) { diff --git a/src/services/claudeRelayService.js b/src/services/claudeRelayService.js index 0ca60f1b..a8b2f5b9 100644 --- a/src/services/claudeRelayService.js +++ b/src/services/claudeRelayService.js @@ -207,7 +207,7 @@ class ClaudeRelayService { logger.info( `🔥 Account ${accountId} has ${errorCount} consecutive 5xx errors in the last 5 minutes` ) - if (errorCount >= 3) { + if (errorCount > 10) { logger.error( `❌ Account ${accountId} exceeded 5xx error threshold (${errorCount} errors), marking as temp_error` ) @@ -915,7 +915,7 @@ class ClaudeRelayService { logger.info( `🔥 [Stream] Account ${accountId} has ${errorCount} consecutive 5xx errors in the last 5 minutes` ) - if (errorCount >= 3) { + if (errorCount > 10) { logger.error( `❌ [Stream] Account ${accountId} exceeded 5xx error threshold (${errorCount} errors), marking as temp_error` ) diff --git a/web/admin-spa/src/views/AccountsView.vue b/web/admin-spa/src/views/AccountsView.vue index f0555b6e..631d2a3b 100644 --- a/web/admin-spa/src/views/AccountsView.vue +++ b/web/admin-spa/src/views/AccountsView.vue @@ -1323,7 +1323,8 @@ const resetAccountStatus = async (account) => { if (data.success) { showToast('账户状态已重置', 'success') - loadAccounts() + // 强制刷新,绕过前端缓存,确保最终一致性 + loadAccounts(true) } else { showToast(data.message || '状态重置失败', 'error') }