morphos / evals /dump_retrieval.py
Jose Salazar
Añadir el stack nuevo: Vite/TypeScript + FastAPI
70e641d
Raw
History Blame Contribute Delete
1.64 kB
"""Vuelca los fragmentos recuperados por caso (para juzgar la relevancia fuera de línea, p.
ej. por el propio asistente en sesión, sin API key). La config se toma del entorno."""
from __future__ import annotations
import json
import sys
from pathlib import Path
AQUI = Path(__file__).resolve().parent
sys.path.insert(0, str(AQUI.parent / "backend"))
from run_retrieval_eval import cargar_casos, construir_query_eval # noqa: E402
from app.config import obtener_config # noqa: E402
from app.rag.retriever import recuperar # noqa: E402
def main() -> None:
salida = Path(sys.argv[1])
k = int(sys.argv[2]) if len(sys.argv) > 2 else 6
cfg = obtener_config()
filas = []
for caso in cargar_casos():
query = construir_query_eval(caso)
frags = recuperar(query, especie=caso.get("paciente", {}).get("especie"), top_k=k)
filas.append({
"id": caso["id"],
"descripcion": caso.get("descripcion", ""),
"diferenciales_esperados": caso.get("esperado", {}).get("diferenciales_aceptables", []),
"query": query,
"fragmentos": [
{"n": i + 1, "capitulo": f.capitulo, "pagina": f.pagina, "texto": f.texto[:320]}
for i, f in enumerate(frags)
],
})
meta = {"embed": cfg.rag_embed_model, "query_lang": cfg.rag_query_lang,
"hibrido": cfg.rag_hibrido, "rerank": cfg.rag_rerank}
salida.write_text(json.dumps({"config": meta, "casos": filas}, ensure_ascii=False, indent=2), encoding="utf-8")
print(f"escrito {salida} | config={meta}")
if __name__ == "__main__":
main()