fix: complete requirements.txt and inference.py output correctness.

- Add faiss-cpu, rank-bm25, sentence-transformers, numpy to requirements.txt.
  (previously only pymupdf was listed; other deps were manual-install only)
- Cast score to float() before round() to avoid numpy type serialization errors.
- Pass expected_standards through _format_result for eval script compatibility.
- Update retrieval_results.json with expected_standards per query for eval.
This commit is contained in:
K
2026-05-03 00:03:03 +05:30
parent 8e1348fb63
commit 29b32dfcac
3 changed files with 58 additions and 15 deletions
+14 -5
View File
@@ -267,7 +267,7 @@ class Retriever:
"standard_id": sid,
"title": std_rec.get("title", std_chunk_repr[sid].get("title", "")),
"category": std_rec.get("category", std_chunk_repr[sid].get("category", "")),
"score": round(score, 4),
"score": round(float(score), 4),
"matched_section": std_chunk_repr[sid].get("section", ""),
})
@@ -303,14 +303,23 @@ def load_or_build(force_rebuild: bool = False) -> tuple[RetrievalIndex, Retrieve
# ---------------------------------------------------------------------------
# CLI
# ---------------------------------------------------------------------------
def _format_result(query_id: str, query: str, results: list[dict], latency: float) -> dict:
return {
def _format_result(
query_id: str,
query: str,
results: list[dict],
latency: float,
expected_standards: list[str] | None = None,
) -> dict:
out: dict[str, Any] = {
"id": query_id,
"query": query,
"retrieved_standards": [r["standard_id"] for r in results],
"details": results,
"latency_seconds": round(latency, 4),
}
if expected_standards is not None:
out["expected_standards"] = expected_standards
return out
def main() -> None:
@@ -348,9 +357,9 @@ def main() -> None:
qtext = q.get("query", "")
results, latency = retriever.retrieve(qtext)
latencies.append(latency)
out = _format_result(qid, qtext, results, latency)
all_results.append(out)
expected = q.get("expected_standards", [])
out = _format_result(qid, qtext, results, latency, expected_standards=expected or None)
all_results.append(out)
hit = any(r["standard_id"] in expected for r in results)
print(f"[{qid}] latency={latency:.3f}s hit={hit} retrieved={[r['standard_id'] for r in results]}")