From 710171278a56a568c10e3ece7b0439b39c6a8c5c Mon Sep 17 00:00:00 2001 From: Chen Tao <70054568+eeee0717@users.noreply.github.com> Date: Thu, 27 Mar 2025 20:04:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(Reranker):=20=E4=BF=AE=E5=A4=8Drerank=20400?= =?UTF-8?q?=20and=20=E5=AE=8C=E5=96=84=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=20(#4013)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(Reranker): enhance error handling with detailed error messages and early return for empty results --- src/main/reranker/BaseReranker.ts | 11 +++++++++++ src/main/reranker/JinaReranker.ts | 6 ++++-- src/main/reranker/SiliconFlowReranker.ts | 6 ++++-- src/main/reranker/VoyageReranker.ts | 6 ++++-- src/main/services/KnowledgeService.ts | 3 +++ 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/reranker/BaseReranker.ts b/src/main/reranker/BaseReranker.ts index 54382908..58a64269 100644 --- a/src/main/reranker/BaseReranker.ts +++ b/src/main/reranker/BaseReranker.ts @@ -17,4 +17,15 @@ export default abstract class BaseReranker { 'Content-Type': 'application/json' } } + + public formatErrorMessage(url: string, error: any, requestBody: any) { + const errorDetails = { + url: url, + message: error.message, + status: error.response?.status, + statusText: error.response?.statusText, + requestBody: requestBody + } + return JSON.stringify(errorDetails, null, 2) + } } diff --git a/src/main/reranker/JinaReranker.ts b/src/main/reranker/JinaReranker.ts index ed14f474..718774ee 100644 --- a/src/main/reranker/JinaReranker.ts +++ b/src/main/reranker/JinaReranker.ts @@ -47,8 +47,10 @@ export default class JinaReranker extends BaseReranker { .filter((doc): doc is ExtractChunkData => doc !== undefined) .sort((a, b) => b.score - a.score) } catch (error: any) { - console.error('Jina Reranker API 错误:', error.status) - throw new Error(`${error} - BaseUrl: ${baseURL}`) + const errorDetails = this.formatErrorMessage(url, error, requestBody) + + console.error('Jina Reranker API Error:', errorDetails) + throw new Error(`重排序请求失败: ${error.message}\n请求详情: ${errorDetails}`) } } } diff --git a/src/main/reranker/SiliconFlowReranker.ts b/src/main/reranker/SiliconFlowReranker.ts index bba8d540..d37f547b 100644 --- a/src/main/reranker/SiliconFlowReranker.ts +++ b/src/main/reranker/SiliconFlowReranker.ts @@ -49,8 +49,10 @@ export default class SiliconFlowReranker extends BaseReranker { .filter((doc): doc is ExtractChunkData => doc !== undefined) .sort((a, b) => b.score - a.score) } catch (error: any) { - console.error('SiliconFlow Reranker API 错误:', error.status) - throw new Error(`${error} - BaseUrl: ${baseURL}`) + const errorDetails = this.formatErrorMessage(url, error, requestBody) + + console.error('SiliconFlow Reranker API 错误:', errorDetails) + throw new Error(`重排序请求失败: ${error.message}\n请求详情: ${errorDetails}`) } } } diff --git a/src/main/reranker/VoyageReranker.ts b/src/main/reranker/VoyageReranker.ts index c48fbb9b..0cfc024e 100644 --- a/src/main/reranker/VoyageReranker.ts +++ b/src/main/reranker/VoyageReranker.ts @@ -53,8 +53,10 @@ export default class VoyageReranker extends BaseReranker { .filter((doc): doc is ExtractChunkData => doc !== undefined) .sort((a, b) => b.score - a.score) } catch (error: any) { - console.error('Voyage Reranker API 错误:', error.message || error) - throw new Error(`${error} - BaseUrl: ${baseURL}`) + const errorDetails = this.formatErrorMessage(url, error, requestBody) + + console.error('Voyage Reranker API Error:', errorDetails) + throw new Error(`重排序请求失败: ${error.message}\n请求详情: ${errorDetails}`) } } } diff --git a/src/main/services/KnowledgeService.ts b/src/main/services/KnowledgeService.ts index b224458a..0e8cb9de 100644 --- a/src/main/services/KnowledgeService.ts +++ b/src/main/services/KnowledgeService.ts @@ -475,6 +475,9 @@ class KnowledgeService { _: Electron.IpcMainInvokeEvent, { search, base, results }: { search: string; base: KnowledgeBaseParams; results: ExtractChunkData[] } ): Promise => { + if (results.length === 0) { + return results + } return await new Reranker(base).rerank(search, results) } }