diff --git a/backend/rag/dspy_heritage_rag.py b/backend/rag/dspy_heritage_rag.py index b89f8ee773..85a9df44d0 100644 --- a/backend/rag/dspy_heritage_rag.py +++ b/backend/rag/dspy_heritage_rag.py @@ -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}")