Skip to content

Commit f8e9ca6

Browse files
committed
fix: include entries with zero score in results
The change removes the conditional check that filtered out entries with zero scores. This ensures all entries are included in the results array, allowing for proper normalization of scores across the entire dataset. Signed-off-by: Tomas Slusny <[email protected]>
1 parent 0884422 commit f8e9ca6

File tree

1 file changed

+10
-15
lines changed

1 file changed

+10
-15
lines changed

lua/CopilotChat/context.lua

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -99,20 +99,18 @@ end
9999
---@param min_similarity number
100100
---@return table<CopilotChat.context.embed>
101101
local function data_ranked_by_relatedness(query, data, min_similarity)
102-
local results = {}
103102
for _, item in ipairs(data) do
104103
local score = spatial_distance_cosine(item.embedding, query.embedding)
105-
score = score or item.score or 0
106-
table.insert(results, vim.tbl_extend('force', item, { score = score }))
104+
item.score = score or item.score or 0
107105
end
108106

109-
table.sort(results, function(a, b)
107+
table.sort(data, function(a, b)
110108
return a.score > b.score
111109
end)
112110

113-
-- Take top MAX_RESULTS items that meet threshold, or at least MIN_RESULTS items
111+
-- Return top items meeting threshold
114112
local filtered = {}
115-
for i, result in ipairs(results) do
113+
for i, result in ipairs(data) do
116114
if (result.score >= min_similarity) or (i <= MULTI_FILE_THRESHOLD) then
117115
table.insert(filtered, result)
118116
end
@@ -170,7 +168,6 @@ local function data_ranked_by_symbols(query, data, min_similarity)
170168
query_trigrams[trigram] = true
171169
end
172170

173-
local results = {}
174171
local max_score = 0
175172

176173
for _, entry in ipairs(data) do
@@ -200,25 +197,23 @@ local function data_ranked_by_symbols(query, data, min_similarity)
200197
score = score + (symbol_score * 0.5) -- Weight symbol matches less
201198
end
202199

203-
if score > 0 then
204-
max_score = math.max(max_score, score)
205-
table.insert(results, vim.tbl_extend('force', entry, { score = score }))
206-
end
200+
max_score = math.max(max_score, score)
201+
entry.score = score
207202
end
208203

209204
-- Normalize scores
210-
for _, result in ipairs(results) do
211-
result.score = result.score / max_score
205+
for _, entry in ipairs(data) do
206+
entry.score = entry.score / max_score
212207
end
213208

214209
-- Sort by score first
215-
table.sort(results, function(a, b)
210+
table.sort(data, function(a, b)
216211
return a.score > b.score
217212
end)
218213

219214
-- Filter results while preserving top scores
220215
local filtered_results = {}
221-
for i, result in ipairs(results) do
216+
for i, result in ipairs(data) do
222217
if (result.score >= min_similarity) or (i <= MULTI_FILE_THRESHOLD) then
223218
table.insert(filtered_results, result)
224219
end

0 commit comments

Comments
 (0)