Is it correct? (recall@k vs exact NN)·10 min
Implement recall@k
0 / 1
# grade this stage (from your course directory)
npx theinference test --stage recall-at-k --watchCompute recall for one query, then you'll average it over the whole query set in the next step.
What to build
Your task
Implement recallAtK
Implement recallAtK(retrieved, relevant, k) in src/metrics.ts: retrieved is your ranked number[], relevant is the set of true-relevant indices (number[]); return |first-k-of-retrieved ∩ relevant| / |relevant|.
src/metrics.ts
export function recallAtK(retrieved: number[], relevant: number[], k: number): number {
// fraction of `relevant` present in retrieved.slice(0, k)
// (a Set of relevant + a loop over the top-k is plenty)
}
How it's graded
adapter — allclose vs reference on a hand-built (retrieved, relevant) case, atol=1e-6.
Denominator is |relevant|, not k
recall@k divides by the number of relevant docs, not by k. If a query has only 1 relevant doc, recall@10 is either 0 or 1 — never 0.1. Guard |relevant| === 0 (return 0) so you never divide by zero.