From a7b29d9d4811179fdc395a53e5e1fef789b9ae6b Mon Sep 17 00:00:00 2001 From: hex2077 Date: Mon, 9 Feb 2026 21:58:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(provider-pool):=20=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E6=A0=87=E8=AE=B0=E4=B8=8D=E5=81=A5=E5=BA=B7=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E8=80=85=E6=97=B6=E7=9A=84=E9=94=99=E8=AF=AF=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将标记不健康提供者时的状态检查从 `status === 400` 改为 `error.code === 400`,确保正确识别客户端错误。同时在标记时传递错误信息给 `markProviderUnhealthy` 方法,以提供更详细的故障原因。 --- src/utils/common.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/utils/common.js b/src/utils/common.js index 43eacc6..f3cb01f 100644 --- a/src/utils/common.js +++ b/src/utils/common.js @@ -494,14 +494,14 @@ export async function handleStreamRequest(res, service, model, requestBody, from // 如果底层未标记,且不跳过错误计数,则在此处标记 if (!credentialMarkedUnhealthy && !skipErrorCount && providerPoolManager && pooluuid) { // 400 报错码通常是请求参数问题,不记录为提供商错误 - if (status === 400) { + if (error.code === 400) { logger.info(`[Provider Pool] Skipping unhealthy marking for ${toProvider} (${pooluuid}) due to status 400 (client error)`); } else { logger.info(`[Provider Pool] Marking ${toProvider} as unhealthy due to stream error (status: ${status || 'unknown'})`); // 如果是号池模式,并且请求处理失败,则标记当前使用的提供者为不健康 providerPoolManager.markProviderUnhealthy(toProvider, { uuid: pooluuid - }); + }, error.message); credentialMarkedUnhealthy = true; } } else if (credentialMarkedUnhealthy) { @@ -695,14 +695,14 @@ export async function handleUnaryRequest(res, service, model, requestBody, fromP // 如果底层未标记,且不跳过错误计数,则在此处标记 if (!credentialMarkedUnhealthy && !skipErrorCount && providerPoolManager && pooluuid) { // 400 报错码通常是请求参数问题,不记录为提供商错误 - if (status === 400) { + if (error.code === 400) { logger.info(`[Provider Pool] Skipping unhealthy marking for ${toProvider} (${pooluuid}) due to status 400 (client error)`); } else { logger.info(`[Provider Pool] Marking ${toProvider} as unhealthy due to unary error (status: ${status || 'unknown'})`); // 如果是号池模式,并且请求处理失败,则标记当前使用的提供者为不健康 providerPoolManager.markProviderUnhealthy(toProvider, { uuid: pooluuid - }); + }, error.message); credentialMarkedUnhealthy = true; } } else if (credentialMarkedUnhealthy) { @@ -814,7 +814,7 @@ export async function handleModelListRequest(req, res, service, endpointType, CO // 如果是号池模式,并且请求处理失败,则标记当前使用的提供者为不健康 providerPoolManager.markProviderUnhealthy(toProvider, { uuid: pooluuid - }); + }, error.message); } } }