fix(rag): use SPARQL results for COUNT queries in streaming fast-path

- Fix bug where COUNT queries showed Qdrant result count (10) instead of
  actual SPARQL count (e.g., 204 musea in Noord-Holland)
- Use sparql_results for count extraction in factual query fast-path
- Also fix fallback COUNT/LIST handling to use sparql_results
This commit is contained in:
kempersc 2026-01-09 18:47:56 +01:00
parent eaf80ec756
commit 8a7ed757b8

View file

@ -4967,9 +4967,22 @@ class HeritageRAGPipeline(dspy.Module):
ui_tmpl = template_result.ui_template.get(lang, template_result.ui_template.get("nl", ""))
# Build context for template rendering
# CRITICAL: Use sparql_results for counts, NOT retrieved_results (Qdrant)
# For COUNT queries, SPARQL returns [{"count": 204}]
# For LIST queries, SPARQL returns the actual institutions
# retrieved_results is from Qdrant vector search (max 10 results)
if "count" in response_modes and sparql_results:
# COUNT query - extract count from SPARQL result
count_value = sparql_results[0].get("count", 0) if sparql_results else 0
result_count = count_value
else:
# LIST/TABLE query - use SPARQL result count (not Qdrant limit)
count_value = len(sparql_results) if sparql_results else len(retrieved_results)
result_count = count_value
template_context = {
"result_count": len(retrieved_results),
"count": retrieved_results[0].get("count", len(retrieved_results)) if retrieved_results else 0,
"result_count": result_count,
"count": count_value,
**(template_result.slots or {})
}
@ -5015,12 +5028,13 @@ class HeritageRAGPipeline(dspy.Module):
factual_answer_text = factual_answer_text.replace("{{" + key + "}}", str(value))
elif "count" in response_modes:
# Count query
count_value = retrieved_results[0].get("count", len(retrieved_results)) if retrieved_results else 0
# Count query - use SPARQL results, NOT Qdrant results
count_value = sparql_results[0].get("count", 0) if sparql_results else 0
factual_answer_text = f"Aantal: {count_value}"
else:
# List/table query - simple result count
factual_answer_text = f"Gevonden: {len(retrieved_results)} resultaten."
# List/table query - use SPARQL result count (not Qdrant limit)
result_count = len(sparql_results) if sparql_results else len(retrieved_results)
factual_answer_text = f"Gevonden: {result_count} resultaten."
logger.info(f"[Streaming FAST-PATH] Generated factual answer: {factual_answer_text}")