# Retrieval recall, per question, per intent def evaluate_retrieval(reference_set, retrieve_fn): rows = [] for ref in reference_set: retrieved_lines = retrieve_fn(ref.question) recall = len(set(retrieved_lines) & set(ref.expected_lines)) / len(ref.expected_lines) rows.append({ "question": ref.question, "intent": ref.intent, "recall": recall, "hit": recall > 0, }) return pd.DataFrame(rows) # Always break down by question type, never just an aggregate df.groupby("intent")["hit"].mean() # point_lookup 0.92 # section_retrieval 0.41 <-- this is the real problem # comparison 0.55