Spaces:
Sleeping
Sleeping
| """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() | |