M2 — Retrieval + embed CPU verificado (pyme-rag-fusion)
Fecha: 2026-09-27 Estado: M2 verificado en local (docker compose). No subido a OCI.
Qué se integró
- Embed CPU:
fastembedMiniLM multilingüe (ONNX, 384d). Corre en CPU sin servidor. - Retrieval: FAISS (coseno) + BM25 + fusión RRF. Multi-tenant (un dir por cliente).
- Reranker CPU:
BAAI/bge-reranker-basevía ONNX Runtime (onnxruntime+tokenizers), sin torch. Reordena el top-24 del RRF al top-k.
Verificación (local)
| Prueba | Resultado |
|---|---|
GET /health | {"ok":true} |
POST /ingest (PDF real) | 11 chunks indexados |
POST /ask (retrieval) | 6 sources con score |
eval/harness.py | hit@6 = 100%, MRR = 1.000 |
Notas técnicas
fastembed0.8.1 NO tiene CrossEncoder → el reranker usaonnxruntime+tokenizersdirectamente con el ONNX deBAAI/bge-reranker-base(ligero, sin torch).- El score que devuelve
/askes el RRF (el reranker reordena pero no re-escala el score). Aceptable para M2; en M4 se combina con citation accuracy. - Bug corregido en M1:
closing(Path)→Path(el reranker multi-hilo de FastAPI exigía quitar elwith closing()).
Pendiente (M3-M5)
- M3: LLM con cadena ZeroGPU → Groq → local.
- M4: eval combinada (citation accuracy + escalate + RAGAS + coste).
- M5: infra OCI (Ampere A1) + despliegue.