Skip to content

Commit 49af895

Browse files
authored
fix: restore search score threshold slider (#5410)
fix: restore search score threshold slider and fix value persistence (#5041) - Add codebaseIndexSearchMinScore to WebviewMessage type definition - Include codebaseIndexSearchMinScore in saveCodeIndexSettingsAtomic handler - Initialize codebaseIndexSearchMinScore in ExtensionStateContext - Fix logical OR operators to use nullish coalescing for proper 0 value handling - Ensure search threshold values persist correctly when saving settings This restores the deleted feature from PR #5041 and fixes the issue where the search score threshold value was being reset upon saving.
1 parent 4a78f51 commit 49af895

File tree

5 files changed

+58
-3
lines changed

5 files changed

+58
-3
lines changed

packages/types/src/codebase-index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ export const CODEBASE_INDEX_DEFAULTS = {
88
MAX_SEARCH_RESULTS: 200,
99
DEFAULT_SEARCH_RESULTS: 50,
1010
SEARCH_RESULTS_STEP: 10,
11+
MIN_SEARCH_SCORE: 0,
12+
MAX_SEARCH_SCORE: 1,
1113
DEFAULT_SEARCH_MIN_SCORE: 0.4,
14+
SEARCH_SCORE_STEP: 0.05,
1215
} as const
1316

1417
/**

src/core/webview/webviewMessageHandler.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1841,6 +1841,7 @@ export const webviewMessageHandler = async (
18411841
codebaseIndexOpenAiCompatibleBaseUrl: settings.codebaseIndexOpenAiCompatibleBaseUrl,
18421842
codebaseIndexOpenAiCompatibleModelDimension: settings.codebaseIndexOpenAiCompatibleModelDimension,
18431843
codebaseIndexSearchMaxResults: settings.codebaseIndexSearchMaxResults,
1844+
codebaseIndexSearchMinScore: settings.codebaseIndexSearchMinScore,
18441845
}
18451846

18461847
// Save global state first

src/shared/WebviewMessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ export interface WebviewMessage {
235235
codebaseIndexOpenAiCompatibleBaseUrl?: string
236236
codebaseIndexOpenAiCompatibleModelDimension?: number
237237
codebaseIndexSearchMaxResults?: number
238+
codebaseIndexSearchMinScore?: number
238239

239240
// Secret settings
240241
codeIndexOpenAiKey?: string

webview-ui/src/components/chat/CodeIndexPopover.tsx

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ interface LocalCodeIndexSettings {
5252
codebaseIndexEmbedderBaseUrl?: string
5353
codebaseIndexEmbedderModelId: string
5454
codebaseIndexSearchMaxResults?: number
55+
codebaseIndexSearchMinScore?: number
5556

5657
// Secret settings (start empty, will be loaded separately)
5758
codeIndexOpenAiKey?: string
@@ -85,6 +86,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
8586
codebaseIndexEmbedderBaseUrl: "",
8687
codebaseIndexEmbedderModelId: "",
8788
codebaseIndexSearchMaxResults: CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS,
89+
codebaseIndexSearchMinScore: CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_MIN_SCORE,
8890
codeIndexOpenAiKey: "",
8991
codeIndexQdrantApiKey: "",
9092
codebaseIndexOpenAiCompatibleBaseUrl: "",
@@ -114,7 +116,9 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
114116
codebaseIndexEmbedderBaseUrl: codebaseIndexConfig.codebaseIndexEmbedderBaseUrl || "",
115117
codebaseIndexEmbedderModelId: codebaseIndexConfig.codebaseIndexEmbedderModelId || "",
116118
codebaseIndexSearchMaxResults:
117-
codebaseIndexConfig.codebaseIndexSearchMaxResults || CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS,
119+
codebaseIndexConfig.codebaseIndexSearchMaxResults ?? CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS,
120+
codebaseIndexSearchMinScore:
121+
codebaseIndexConfig.codebaseIndexSearchMinScore ?? CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_MIN_SCORE,
118122
codeIndexOpenAiKey: "",
119123
codeIndexQdrantApiKey: "",
120124
codebaseIndexOpenAiCompatibleBaseUrl: "",
@@ -596,6 +600,51 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
596600

597601
{isAdvancedSettingsOpen && (
598602
<div className="mt-4 space-y-4 pl-4">
603+
{/* Search Score Threshold Slider */}
604+
<div className="space-y-2">
605+
<div className="flex items-center gap-2">
606+
<label className="text-sm font-medium">
607+
{t("settings:codeIndex.searchMinScoreLabel")}
608+
</label>
609+
<StandardTooltip content={t("settings:codeIndex.searchMinScoreDescription")}>
610+
<span className="codicon codicon-info text-xs text-vscode-descriptionForeground cursor-help" />
611+
</StandardTooltip>
612+
</div>
613+
<div className="flex items-center gap-2">
614+
<Slider
615+
min={CODEBASE_INDEX_DEFAULTS.MIN_SEARCH_SCORE}
616+
max={CODEBASE_INDEX_DEFAULTS.MAX_SEARCH_SCORE}
617+
step={CODEBASE_INDEX_DEFAULTS.SEARCH_SCORE_STEP}
618+
value={[
619+
currentSettings.codebaseIndexSearchMinScore ??
620+
CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_MIN_SCORE,
621+
]}
622+
onValueChange={(values) =>
623+
updateSetting("codebaseIndexSearchMinScore", values[0])
624+
}
625+
className="flex-1"
626+
data-testid="search-min-score-slider"
627+
/>
628+
<span className="w-12 text-center">
629+
{(
630+
currentSettings.codebaseIndexSearchMinScore ??
631+
CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_MIN_SCORE
632+
).toFixed(2)}
633+
</span>
634+
<VSCodeButton
635+
appearance="icon"
636+
title={t("settings:codeIndex.resetToDefault")}
637+
onClick={() =>
638+
updateSetting(
639+
"codebaseIndexSearchMinScore",
640+
CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_MIN_SCORE,
641+
)
642+
}>
643+
<span className="codicon codicon-discard" />
644+
</VSCodeButton>
645+
</div>
646+
</div>
647+
599648
{/* Maximum Search Results Slider */}
600649
<div className="space-y-2">
601650
<div className="flex items-center gap-2">
@@ -612,7 +661,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
612661
max={CODEBASE_INDEX_DEFAULTS.MAX_SEARCH_RESULTS}
613662
step={CODEBASE_INDEX_DEFAULTS.SEARCH_RESULTS_STEP}
614663
value={[
615-
currentSettings.codebaseIndexSearchMaxResults ||
664+
currentSettings.codebaseIndexSearchMaxResults ??
616665
CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS,
617666
]}
618667
onValueChange={(values) =>
@@ -622,7 +671,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
622671
data-testid="search-max-results-slider"
623672
/>
624673
<span className="w-12 text-center">
625-
{currentSettings.codebaseIndexSearchMaxResults ||
674+
{currentSettings.codebaseIndexSearchMaxResults ??
626675
CODEBASE_INDEX_DEFAULTS.DEFAULT_SEARCH_RESULTS}
627676
</span>
628677
<VSCodeButton

webview-ui/src/context/ExtensionStateContext.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
218218
codebaseIndexEmbedderBaseUrl: "",
219219
codebaseIndexEmbedderModelId: "",
220220
codebaseIndexSearchMaxResults: undefined,
221+
codebaseIndexSearchMinScore: undefined,
221222
},
222223
codebaseIndexModels: { ollama: {}, openai: {} },
223224
})

0 commit comments

Comments
 (0)