diff --git a/packages/types/src/codebase-index.ts b/packages/types/src/codebase-index.ts index 35cae053e4..51a10f0154 100644 --- a/packages/types/src/codebase-index.ts +++ b/packages/types/src/codebase-index.ts @@ -8,7 +8,10 @@ export const CODEBASE_INDEX_DEFAULTS = { MAX_SEARCH_RESULTS: 200, DEFAULT_SEARCH_RESULTS: 50, SEARCH_RESULTS_STEP: 10, + MIN_SEARCH_SCORE: 0, + MAX_SEARCH_SCORE: 1, DEFAULT_SEARCH_MIN_SCORE: 0.4, + SEARCH_SCORE_STEP: 0.05, } as const /** diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 483373b893..0ec14ca27e 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -1841,6 +1841,7 @@ export const webviewMessageHandler = async ( codebaseIndexOpenAiCompatibleBaseUrl: settings.codebaseIndexOpenAiCompatibleBaseUrl, codebaseIndexOpenAiCompatibleModelDimension: settings.codebaseIndexOpenAiCompatibleModelDimension, codebaseIndexSearchMaxResults: settings.codebaseIndexSearchMaxResults, + codebaseIndexSearchMinScore: settings.codebaseIndexSearchMinScore, } // Save global state first diff --git a/src/shared/WebviewMessage.ts b/src/shared/WebviewMessage.ts index 9dcc4004d9..a50e30b67e 100644 --- a/src/shared/WebviewMessage.ts +++ b/src/shared/WebviewMessage.ts @@ -235,6 +235,7 @@ export interface WebviewMessage { codebaseIndexOpenAiCompatibleBaseUrl?: string codebaseIndexOpenAiCompatibleModelDimension?: number codebaseIndexSearchMaxResults?: number + codebaseIndexSearchMinScore?: number // Secret settings codeIndexOpenAiKey?: string diff --git a/webview-ui/src/components/chat/CodeIndexPopover.tsx b/webview-ui/src/components/chat/CodeIndexPopover.tsx index 410636045e..22b4d28192 100644 --- a/webview-ui/src/components/chat/CodeIndexPopover.tsx +++ b/webview-ui/src/components/chat/CodeIndexPopover.tsx @@ -52,6 +52,7 @@ interface LocalCodeIndexSettings { codebaseIndexEmbedderBaseUrl?: string codebaseIndexEmbedderModelId: string codebaseIndexSearchMaxResults?: number + codebaseIndexSearchMinScore?: number // Secret settings (start empty, will be loaded separately) codeIndexOpenAiKey?: string @@ -85,6 +86,7 @@ export const CodeIndexPopover: React.FC = ({ codebaseIndexEmbedderBaseUrl: "", codebaseIndexEmbedderModelId: "", codebaseIndexSearchMaxResults: CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS, + codebaseIndexSearchMinScore: CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_MIN_SCORE, codeIndexOpenAiKey: "", codeIndexQdrantApiKey: "", codebaseIndexOpenAiCompatibleBaseUrl: "", @@ -114,7 +116,9 @@ export const CodeIndexPopover: React.FC = ({ codebaseIndexEmbedderBaseUrl: codebaseIndexConfig.codebaseIndexEmbedderBaseUrl || "", codebaseIndexEmbedderModelId: codebaseIndexConfig.codebaseIndexEmbedderModelId || "", codebaseIndexSearchMaxResults: - codebaseIndexConfig.codebaseIndexSearchMaxResults || CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS, + codebaseIndexConfig.codebaseIndexSearchMaxResults ?? CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS, + codebaseIndexSearchMinScore: + codebaseIndexConfig.codebaseIndexSearchMinScore ?? CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_MIN_SCORE, codeIndexOpenAiKey: "", codeIndexQdrantApiKey: "", codebaseIndexOpenAiCompatibleBaseUrl: "", @@ -596,6 +600,51 @@ export const CodeIndexPopover: React.FC = ({ {isAdvancedSettingsOpen && (
+ {/* Search Score Threshold Slider */} +
+
+ + + + +
+
+ + updateSetting("codebaseIndexSearchMinScore", values[0]) + } + className="flex-1" + data-testid="search-min-score-slider" + /> + + {( + currentSettings.codebaseIndexSearchMinScore ?? + CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_MIN_SCORE + ).toFixed(2)} + + + updateSetting( + "codebaseIndexSearchMinScore", + CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_MIN_SCORE, + ) + }> + + +
+
+ {/* Maximum Search Results Slider */}
@@ -612,7 +661,7 @@ export const CodeIndexPopover: React.FC = ({ max={CODEBASE_INDEX_DEFAULTS.MAX_SEARCH_RESULTS} step={CODEBASE_INDEX_DEFAULTS.SEARCH_RESULTS_STEP} value={[ - currentSettings.codebaseIndexSearchMaxResults || + currentSettings.codebaseIndexSearchMaxResults ?? CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS, ]} onValueChange={(values) => @@ -622,7 +671,7 @@ export const CodeIndexPopover: React.FC = ({ data-testid="search-max-results-slider" /> - {currentSettings.codebaseIndexSearchMaxResults || + {currentSettings.codebaseIndexSearchMaxResults ?? CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS}