feat: citations, eval sidecar/pvalue/trace, nomic prefixes

mcp 2.x already on main. Does not replace the variety chunker
(one chunk per variety is the anti-hallucination contract).

- Numbered [1] citations on search_docs / search_trials
- Eval JSONL sidecar, k-curve, eval.pvalue, eval.trace
- Nomic prefixes at embed time only; stored text unprefixed

Closes #25
This commit is contained in:
2026-09-30 08:22:50 -04:00
parent 4de5aaa02f
commit d131e93252
12 changed files with 509 additions and 53 deletions
+9 -3
View File
@@ -71,8 +71,10 @@ class DenseRetriever:
def retrieve(self, query: str, k: int, filters: dict | None) -> list[str]:
where = _build_where(filters)
try:
from rag.embeddings import EMBED_QUERY_PREFIX, embed_texts
qvec = embed_texts([query], prefix=EMBED_QUERY_PREFIX)[0]
r = self.col.query(
query_texts=[query], n_results=max(k, self.pool), where=where,
query_embeddings=[qvec], n_results=max(k, self.pool), where=where,
)
except Exception:
return []
@@ -105,7 +107,9 @@ class HybridRetriever:
def retrieve(self, query: str, k: int, filters: dict | None) -> list[str]:
where = _build_where(filters)
try:
d = self.col.query(query_texts=[query], n_results=self.pool, where=where)
from rag.embeddings import EMBED_QUERY_PREFIX, embed_texts
qvec = embed_texts([query], prefix=EMBED_QUERY_PREFIX)[0]
d = self.col.query(query_embeddings=[qvec], n_results=self.pool, where=where)
dense_ids = (d.get("ids") or [[]])[0]
except Exception:
dense_ids = []
@@ -138,8 +142,10 @@ class HybridRerankRetriever:
def retrieve(self, query: str, k: int, filters: dict | None) -> list[str]:
where = _build_where(filters)
try:
from rag.embeddings import EMBED_QUERY_PREFIX, embed_texts
qvec = embed_texts([query], prefix=EMBED_QUERY_PREFIX)[0]
d = self.col.query(
query_texts=[query], n_results=self.pool, where=where,
query_embeddings=[qvec], n_results=self.pool, where=where,
include=["documents"],
)
dense_ids = (d.get("ids") or [[]])[0]