Download docs/PROGRESS.md from CamiloS1111/ragsolver: direct link, hf CLI and curl.
- Browser
- Download file 26.5 kB
-
https://huggingface.co/CamiloS1111/ragsolver/resolve/main/docs/PROGRESS.md
- Command line
-
hf download hf://CamiloS1111/ragsolver/docs/PROGRESS.md
-
curl -L -o PROGRESS.md https://huggingface.co/CamiloS1111/ragsolver/resolve/main/docs/PROGRESS.md
Progreso de implementación — RagSolver
Se actualiza mientras el agente trabaja. Última actualización: 2026-09-24.
Estado actual
Núcleo del proyecto (Fases 0-6 de docs/PLAN_RAG.md): completo y ejecutado. Índice de Mathlib completo (278 160 declaraciones) con ANN IVF_SQ; agentes LangGraph + verificador Lean vía REPL; experimento principal eval_v1 terminado (300/300 pares): full 9/60 (15 %), no_rag 9/60, no_critic 4/60, línea base A 5/60, línea base B se autoevalúa correcta en 55/60 (11 confirmadas por el kernel); ninguna diferencia significativa tras Bonferroni. Detalle en docs/eval_report.md y docs/final_report.md (§6-§7). eval-v1-full (índice completo, ≈ US$0.30) preparado en scripts/run_chain.sh, sin correr — requiere tu aprobación.
Auditoría técnica (2026-09-23) y su corrección, en curso. docs/AUDIT_2026-09-23.md (diagnóstico completo) y docs/PLAN_CORRECCIONES.md (plan por fases). Avance:
- Fase 1 — verificador seguro (SEC-1, VER-1, BUG-2): ✅ completa.
lean/verify.pyvalida las tácticas del LLM antes de tocar Lean (rechaza comandos, metaprogramación, declaraciones nuevas,sorry/native_decide/decide +native) y audita#print axiomstras un veredicto limpio (sólopropext/Classical.choice/Quot.sound). Confirmado con Lean real: el exploit de inyección de la auditoría ya no se ejecuta;decide +nativeya no pasa como "verificado". Re-verificación offline deeval_v1(0 llamadas LLM): 27/27 pruebas antes aceptadas siguen aceptadas, 0 regresiones — los resultados reportados no cambian. DECISIONS #69-74. - Fase 2 — licencias y datos (SEC-2): ✅ completa.
.gitignoreampliado (PDF de ejemplo,blobs/,data/eval/runs/, artefactos de Lean); se encontró y corrigió una fuga no detectada por la auditoría (docs/qa_ingest_edd3436ca148.mdembebía fórmulas/descripciones del PDF — ahora redactado cuando el documento no es redistribuible);scripts/publish_hf.pysube las corridas desde una copia saneada y aborta si encuentra texto del corpus informal en lo que va a subir. Comprobación reutilizable:scripts/check_no_leaked_content.py(0 coincidencias sobre el repo). DECISIONS #75-77. - Fase 3 — dependencias y documentación de estado: ✅ completa.
httpx/tenacitydeclarados,gradioen el extrademo,ranxmovido adev;pandas/acceleratequitados de las dependencias core (confirmado sin ellos:test_retriever_integration.pycarga el embedder Y el reranker reales en verde). Documentación al día: README,install.md(+ tabla de variables de entorno),interfaces.md,architecture.md,evaluate.py,versions.yaml,final_report.md(limitaciones MET-1/DATA-1/BUG-1 añadidas, "release" atenuado a "prepared for release"). DECISIONS #78-79. - Fase 4 — citas, trazas y contabilidad (BUG-1, TRZ-1, LLM-1, ACC-1, BUG-5, BUG-6): ✅ completa. Los
citation_idya no se renumeran en cada búsqueda (se reutilizan porchunk_id, sin duplicados tras un replan o una re-recuperación); las trazas del retriever de un par (config, problema) van al mismo archivo que las de sus agentes (antes, un archivo aleatorio por búsqueda); el pin de versiones registra qué tabla sirvemathlib; el cliente LLM ya no reintenta un timeout de lectura (podría haberse cobrado igual), baja de 20 a 4 intentos y cuenta cuántos hizo; cualquier excepción dentro de un nodo del grafo (no sólo salida JSON inválida) conserva lo acumulado en vez de perderlo; se corrigieron dos bugs de contabilidad menores (self-consistency, caché de embeddings de consulta sin lock). DECISIONS #80-88. 138 tests en verde (incluidos los de Lean real). El smoke con LLM real (D6, ≈ US$0.001) queda pendiente de tu aprobación. - Fases 5-10: sin empezar. Ver
docs/PLAN_CORRECCIONES.md §7para el orden y qué necesita una decisión tuya (D1-D8: licencia, commit,blobs/, alcance de la ingesta, replan, gasto, token de HF, sandbox).
Mejora del RAG (2026-10-14): implementada (Fases 0-4 y 2b de docs/PLAN_MEJORA_RAG.md), medida sin LLM; falta la re-evaluación pagada (Fase 6, decisión R4).
- El retrieval de Mathlib consulta con el goal de Lean. El Autoformalizador escribe un esqueleto
have … := by sorryy el REPL devuelve un goal porsorry. - Canal principal: prior de competición (778 lemas de Lean Workbook validados contra Lean, núcleo incluido). Recall@16 por goal 0.327, frente a 0.028 del índice denso, que queda apagado.
- Las premisas se consumen con una batería de tácticas (CLOSE, 0 LLM). Sobre el goal raíz de
eval_v1: 11/60 sin premisas, 12/60 con premisas, y 4 problemas que no resolvió ninguna configuración anterior. FILL (1 llamada) sólo ve los goals abiertos. - Los goals probados se conservan entre intentos y replans. El replan recibe el feedback del Crítico (DES-1 cerrado).
- Nuevas configuraciones:
rag_nl(flujo de eval-v1),baseline_auto(0 LLM);no_ragusa la misma batería sin premisas. - Smoke con LLM real (8 problemas, US$0.0145 en total): 5/8 con el prompt 2, que reveló que el modelo no escribe
sorry. Con la partición mecánica de la prueba en goals (skeletonize, prompt 3): 8/8. Medido sobre el término aceptado, ninguna premisa recuperada se usó en esas 8 pruebas: la mejora viene de la partición y de la automatización. OpenRouter: con el tope de precio actual sólo califica DeepInfra, que da 429 intermitentes (#103). - Tests: 146 rápidos y 11 con Lean real, en verde.
DECISIONS.md#89-#108. - eval-v2 (2026-10-15), parcial —
docs/eval_report_v2.md. Ronda 1 de 4:full6/15,no_rag7/15,baseline_auto5/15 (eval-v1 en los mismos 15: 3 y 4).baseline_autoen los 60: 11/60 sin LLM, más que eval-v1full(9/60). El RAG por goal todavía no muestra efecto medible. El guardia de costo detuvo la cadena: la proyección para las rondas 2-4 (~US$0.34) supera el saldo (US$0.289). Decisión del usuario: opción B (rondas 2-3); ronda 2: 2/15 en las tres configuraciones; ronda 3 detenida para rediseñar. - Rediseño (2026-10-15), en evaluación —
docs/PLAN_REDISENO_PROVER.md. Demostrador especializado local (Goedel-Prover-V2-8B Q6_K en la GPU, 0 API) como etapa 0 y para los goals abiertos. El RAG corrige nombres de lemas renombrados entre versiones de Mathlib. Salidas ilegibles del Crítico y de FILL ya no matan el problema. Smoke real: 2/2 sin API.DECISIONS.md#110-#115. - eval-v3 (2026-10-15) —
docs/eval_report_v3.md: el rediseño resuelve 21/30, frente a 8/30 del sistema anterior en los mismos problemas (McNemar 13 a 0, p = 0.0002). Dificultad 2-3: de 0/14 a 8/14, con 2 problemas de IMO. Todo lo resuelve el demostrador local sin API; los agentes y el RAG no añaden problemas en su forma actual (full=baseline_prover). Costo de API: US$0.061; saldo de la key: US$0.059. Limitación: posible contaminación de miniF2F. Próximos pasos propuestos en el §5 del reporte.
Pendiente del usuario: LICENSE (sugerido Apache-2.0), commit en git (nada commiteado todavía), si versionar Propuesta_Proyecto_Final_IA_UPTC.pdf, token de HF, y si correr eval-v1-full (≈ US$0.30; saldo de la key ≈ US$0.42).
Historial
Lo que sigue es el registro de cómo se llegó al estado de arriba, por fase, escrito mientras se ejecutaba cada una. Se conserva como referencia; para el estado real del proyecto usar la sección anterior.
Restricciones reales de este sandbox (no son del proyecto, son de este entorno de ejecución)
- RAM ajustada: 7.3 GB totales. Con un solo proceso de embeddings/evaluación corriendo ya se usa ~75-90% + algo de swap. Por eso el agente evita correr dos cargas pesadas (embeddings, reranking, MinerU) al mismo tiempo.
- Filesystem
/mnt/c/(montaje 9p de WSL2) es lento para imports de paquetes grandes (torch tardó ~150s en importar la primera vez). - Con estas limitaciones, el trabajo de esta sesión prioriza corridas acotadas pero reales (nunca resultados inventados) sobre corridas completas a escala de producción. (Nota posterior: al momento de escribir esto la GPU AMD todavía no se había probado desde esta sesión — ver más abajo "GPU AMD: ✅ utilizable" — la limitación real nunca fue la falta de GPU, sino RAM/CPU del sandbox.)
Fase 0 — Cimientos: ✅ completa
- Repo,
pyproject.toml(Python 3.12 víauv),.gitignore. configs/versions.yaml— pin único de versiones (Lean, Mathlib, modelos).src/ragsolver/rag/schema.py— contratos Pydantic de §7/§8 del plan + JSON Schema exportado adocs/interfaces/.- Escritor de traza JSONL + tests.
- Lean 4 (
v4.28.0-rc1) + Mathlib (v4.28.0-rc1, caché precompilado 7873 archivos) instalados y verificados:lake build→ "Build completed successfully" — el kernel de Lean aceptóexample : 1 + 1 = 2 := rfl. docs/DECISIONS.mdcon 13 decisiones registradas y su evidencia.- 19/19 tests pasando en ese momento (ver conteo actualizado más abajo si se agregaron más).
Fase 1 — Índice de Mathlib: código completo, corrida real en curso
Hecho:
- Descarga del corpus real de LeanSearch v2 (310 579 declaraciones) y normalización → 278 560 chunks válidos (32 019 excluidos por filtro).
embed.py,index.py,retrieve.py(con CLI),evaluate.pyescritos, con tests de integración reales contra LanceDB (que de hecho encontraron y corrigieron 2 incompatibilidades de API con la versión instalada).- Hallazgo importante documentado en
DECISIONS.md: sólo 117/540 nombres "gold" de los benchmarks propios de LeanSearch v2 (MathlibQR+MathlibMPR) existen en el corpus JSONL que ellos mismos publicaron para esa tag. El recall contra esos benchmarks está acotado por esa cobertura, no sólo por la calidad del retriever. - Por las limitaciones de cómputo del sandbox, se embebió una muestra acotada real (no simulada): 116 declaraciones gold + 3000 distractores aleatorios = 13 736 registros, con Qwen3-Embedding-0.6B en CPU (~5.5 textos/seg, ~42 min de corrida real).
- Índice LanceDB real construido sobre esa muestra (13 736 filas, vector + FTS).
evaluate.py(Recall@10/nDCG@10/MRR, denso vs BM25 vs híbrido vs híbrido+rerank sobre MathlibQR) corrido sobre esa muestra acotada de 13 736 filas.
Estos primeros números (recall condicionado 0.947 con fusión híbrida) quedaron invalidados por un bug de ingesta encontrado en la Fase 3 (name[0] en vez del nombre completo, DECISIONS.md #31): con el corpus renormalizado, la cobertura real y las métricas correctas son las que aparecen en la entrada de Fase 3 más abajo (recall condicionado real ≈ 0.78-0.79, no 0.947), y más tarde las del índice completo (Fase 5/#56/#68: recall@10 híbrido+rerank 0.45). Se deja esta nota en vez del número original para no repetir el error.
Fase 1 se da por completa. Pendiente sólo si el usuario pide explícitamente escalar a las 278 560 declaraciones completas (ver "Bloqueado" más abajo — no es un bloqueo real, es una corrida de ~14h que no se lanzó sin avisar).
Fase 2 — Ingesta de PDFs: ✅ completa (2026-09-19, segunda sesión)
Resultado sobre problemas resueltos olimpiadas.pdf (detalle en docs/qa_ingest_edd3436ca148.md y docs/DECISIONS.md #15-#22):
- 100/100 problem cards emparejadas (era 92/100). 98 por vía determinista (numerales absorbidos en ecuaciones recuperados por regex; solución 1 por regla "lo que precede al ítem 2"), la 55 por split con LLM, y la 77 recuperada de un hueco que MinerU se había saltado por completo (pág. 64: cero bloques en media página). Ese hueco se detecta cruzando la capa de texto del PDF palabra por palabra contra los bboxes de MinerU; 7 regiones así se transcribieron con el VLM (Plan B acotado, no página completa).
- 53 figuras recortadas (con padding para las etiquetas) y descritas con contexto del enunciado. Red de seguridad vectorial: 0 figuras perdidas por MinerU (los 36 clusters "sin cubrir" son radicales del Equation Editor, tablas bien clasificadas o clusters fusionados). QA gate del plan: 7/7 problemas con figura; rúbrica manual 15/15 aprobadas (umbral 13/15).
- QA de fórmulas con VLM: 209 propuestas, 76 aplicadas / 133 rechazadas por guardas calibradas con casos reales (el VLM mete ruido de puntuación, absorbe texto vecino y a veces recorta contenido real o devuelve LaTeX destrozado). Todo cambio queda registrado para revisión.
- 100 resúmenes contextuales (Contextual Retrieval) +
math_area,techniques,theorems_used,difficulty,keywordspor card. - Corpus:
data/corpus/informal.jsonl(153 chunks: 100problem_card+ 53figure),figures.jsonl; embebido con Qwen3-Embedding-0.6B (CPU, 215 s) e indexado en LanceDB (data/index/lancedb/informal, FTS incluido). - Búsqueda real verificada (
python -m ragsolver.rag.retrieve "..." --corpus informal --mode exemplar): 3 consultas en inglés → problema correcto en el puesto 1 (8, 86, 77); la geométrica trae además los chunks de figura. - Proveedor: Gemini (tier gratis). Hallazgo importante: la cuota gratis es 20 solicitudes/día por modelo en
gemini-3.5-flash→ cadena de fallback por modelo (configs/versions.yaml: fallback_models); en la práctica todo el enriquecimiento lo hizogemini-3.5-flash-lite(su cuota diaria aguantó ~250 llamadas). Cada figura/card registra el modelo que la produjo. Caché JSONL por llamada: re-ejecutar la ingesta no repite llamadas. - Código nuevo:
rag/mineru_blocks.py(lector/render de bloques MinerU + cross-check capa de texto),rag/figures.py,rag/enrich.py(cliente Gemini REST con caché, reintentos y cadena de modelos),rag/ingest_informal.py(pipeline completo,--skip-llmpara correr sin API),scripts/qa_ingest_report.py. 43 tests pasando (nuevos:test_mineru_blocks.py,test_figures.py,test_enrich.py).
Pendiente de Fase 2 (no bloqueante):
- Gold de OCR de 10 páginas transcritas a mano (tarea 10 del plan): requiere trabajo humano; no se fabricó.
- Chunking en
solution_step: no hace falta para este PDF (card más larga ≈ 2 900 caracteres, muy por debajo de ~1 500 tokens).
Fase 3 — Servicio de recuperación y citación: ✅ completa (2026-09-20)
Retriever.search(RetrievalRequest) -> RetrievalResultcubre §6.3/§8: plantillas de consulta pormode(configs/retrieval.yaml), denso + FTS con prefiltro SQL (doc_ids,unit_types,kinds,math_area), RRF multi-consulta, rerank contrarerank_against, dedupe (figura ↔ su card;max_per_moduleopcional), figuras adjuntas desde la tablafigures, citas consnippet, traza JSONL, caché de embeddings de consulta, flags de ablación (enabled=false→ vacío con traza).- Modo
error: identificadores Lean del mensaje → búsqueda exacta fijada al top-1 (verificado con reranker adverso y sobre el índice real). evaluate.pypasa porRetriever.search(misma función que los agentes). CLIragsolver search/ragsolver ingest.- Tests: 10 unitarios con LanceDB temporal + embedder/reranker falsos, 2 de integración sobre el índice real. Suite: 62 tests.
- Bug grave de Fase 1 detectado y corregido (
DECISIONS.md#31-32):ingest_mathlib.pyusabaname[0]cuandonamees la lista de componentes del nombre → 90 % de las declaraciones con nombre/docs_url/chunk_idincorrectos y repetidos. Con el corpus renormalizado: 503/540 nombres gold existen (antes "117"); métricas corregidas (946 consultas, cobertura 83.8 %): recall@10 denso 0.665 / BM25 0.594 / híbrido 0.656; nDCG@10 0.565 / 0.472 / 0.538. En 40 consultas al azar con rerank: híbrido+rerank 0.775 > denso 0.75 > híbrido 0.675 > BM25 0.525. La conclusión de Fase 1 ("recall condicionado 0.947") estaba inflada por el bug.
Fase 4 — Grafo de agentes: ✅ completa y ejecutada (2026-09-20)
Aceptación cumplida: los 5 teoremas triviales de referencia se resuelven con el pipeline completo (f4-trivial-full: 5/5, 3 llamadas LLM cada uno, citas used_in_proof en triv_add_zero y triv_add_comm), ≤ 20 llamadas por problema en todas las corridas (máx. 11), llm_calls=0 en todos los eventos del retriever.
ragsolver/llm.py: cliente único Gemini / OpenAI-compatible (OpenRouter preparado por config, sin key), cadena de modelos por cuota diaria, contadores de tokens. El Enricher de Fase 2 lo usa.- Agentes (
agents/agents.py, contratos enagents/schemas.py, prompts enconfigs/agents.yaml): Planificador (con ejemplares del corpus informal), Generador (used_citations), Autoformalizador (sólo tácticas: el enunciado se empalma desde el problema, el LLM no puede debilitarlo), Crítico (taxonomía +missing_identifiers→ re-recuperación en modoerror), líneas base A/B de la propuesta §8.2. - Orquestador LangGraph (
orchestrator/graph.py): PLAN → RETRIEVE → GENERATE → FORMALIZE → VERIFY → CRITIQUE con presupuesto RNF-3 (≤ 20 llamadas) dentro del grafo;SolutionReportcon citas verificadas / usadas en boceto / consultadas. - Verificador (
lean/verify.py): REPL persistente conlean-interact(import Mathlibuna vez,0.3 s por teorema) usando la caché de Mathlib en ext4 (`/ragsolver_cache/lean_project,DECISIONS.md#35); respaldo por procesolake env lean`. - Runner de ablaciones (
orchestrator/run.py):full,no_rag,no_critic,baseline_a,baseline_b→data/eval/runs/<run_id>/results.jsonl+summary.json(pass@1 con Wilson, llamadas, tokens, precisión de uso de lemas, re-recuperación, taxonomía). - 8 tests con LLM/verificador/retriever simulados.
- Problemas:
data/eval/problems/dev_trivial.jsonl(5 teoremas de referencia) ydev_minif2f.jsonl(8 de miniF2F-v2s valid, con cabeceraopen ...).
Fase 5 — Evaluación: ✅ ejecutada (2026-09-20) — docs/eval_report.md
Resultados clave (tabla de muestra de Mathlib con 3 903 filas; 13 problemas dev = 5 triviales + 8 miniF2F-v2s):
MathlibQR (946 consultas): recall@10 denso 0.662 / BM25 0.595 / híbrido 0.655; en 100 al azar con rerank: denso 0.76 (nDCG@10 0.631), híbrido+rerank 0.71 (0.617), híbrido 0.66, BM25 0.56 — el rerank recupera lo que pierde la fusión con BM25, pero el denso solo sigue siendo el mejor en esta muestra (
DECISIONS.md#32). Premisas gold de miniF2F (352 problemas): recall@20 0.15 (informal) / 0.18 (formal) — cota inferior, la consulta real es por subobjetivo.Gold informal: 30/30 en el top-5, MRR 1.0; cobertura de entidades en figuras 0.91. Contaminación: 0 pares > 0.9 (máx. 0.818).
Ablaciones (pass@1):
full9/13,no_rag10/13,no_critic6/13, línea base A 8/13, línea base B 0 (se autoevalúa correcta 13/13 → 5 falsos positivos evitados). El Crítico aporta +0.23; el RAG no aporta en este dev set (−0.08, p=1.0) y triplica los tokens: los problemas se resuelven con automatización de tácticas y casi no se citan lemas por nombre (precisión de uso de lemas 0.011). Es el resultado honesto del §8.3 con n=13; hace falta el conjunto de 30-60 problemas más difíciles del plan para medir el aporte del RAG donde importa.Hallazgo operativo:
ranxdevolvió métricas absurdas en dos corridas largas → métricas propias (rag/metrics.py) verificadas contraranx(DECISIONS.md#43).Premisas gold:
scripts/build_premise_gold.py→ 352 problemas / 402 lemas desde las pruebas verificadas de DeepSeek-Prover-V2 (DECISIONS.md#38);scripts/eval_premises.py(Recall@8/@20, nDCG@10, consulta informal y formal).Gold informal:
data/eval/informal_gold.jsonl(30 consultas, 15 con figura; anotado por el asistente,DECISIONS.md#39);scripts/eval_informal_gold.py.Contaminación:
scripts/contamination.py(coseno card ↔ miniF2F-v2s).Informe:
scripts/eval_report.py→docs/eval_report.md(ablaciones, IC de Wilson, taxonomía).
Fase 6 — Empaquetado y documentación: preparada (2026-09-20)
- Documentación:
docs/architecture.md(arquitectura implementada, flujo por problema, citación),docs/install.md,docs/interfaces.md(+ JSON Schema de los 8 contratos de agentes endocs/interfaces/),docs/reproduce.md(comandos y tiempos medidos). - Demo Gradio
demo/app.py: pestaña "Buscar" (hits con citas, firma Lean,docs_url, recortes y descripciones de figura) y "Resolver" (pipeline completo o líneas base, con presupuesto). Gradio ya estaba instalado (vía MinerU); no se lanzó en esta sesión por memoria. - Publicación en HF Hub:
scripts/publish_hf.py(dataset card, índice Mathlib, corpus normalizado, evaluación; excluye el PDF, sus recortes y su texto porredistributable=false). ✅ Publicado el 2026-10-22 (DECISIONS #129). - Notebook
notebooks/01_results.ipynb: tablas de todas las evaluaciones + McNemar exacto entre configuraciones.
Cumplimiento de la propuesta (mapeo 2026-09-20, tarde)
| Requisito | Estado |
|---|---|
| Obj. 5 — conjunto de evaluación 30-60 estratificado con partición dev/test | ✅ data/eval/problems/eval_v1.jsonl (60: 24 dev / 36 test; 3 áreas × 3 niveles) + ficha README.md. Parcial: 42/60 pares full válidos (10 resueltos) con DeepSeek V4 Flash vía OpenRouter, 6 hilos; detenida a las 03:15 del 21-09 por el tope de US$0.50 de la key (DECISIONS #47, #50-#54). Se reanuda con nohup bash scripts/run_eval_v1.sh > data/eval/results/eval_v1.log 2>&1 & en cuanto se suba el límite (≈ US$0.85 más para todo, incluido el índice completo) |
| RF-7 — decisión por agente e intento en la traza | ✅ request.decision en cada TraceEvent + evento del verificador |
| RNF-2 — semilla fijada | ✅ seed: 13 en versions.yaml, pasado a Gemini/OpenAI; verificado con llamada real |
| §8.3 — llamadas de recuperación, pass por intento | ✅ retrieval_calls, pass_by_attempt en summary.json |
| §8.4 — bootstrap para costo/latencia | ✅ *_ci95_bootstrap en summary.json |
| §10.2 — CITATION.cff, CI, LICENSE | ✅ CITATION.cff (autores: Camilo Andres Niño Amaya, Jose L. Salamanca), .github/workflows/ci.yml, LICENSE Apache-2.0 (2026-10-21) |
| §10.3 — guía de usuario, diagrama de secuencia | ✅ docs/user_guide.md, docs/architecture.md §3 |
| §10.1 — informe final en inglés (IMRaD) | ✅ borrador docs/final_report.md con resultados actuales y 24 referencias; §6.3 se completa con eval_v1 |
| Obj. 7 — HF Hub + Space | ✅ publicado (2026-10-22): código en huggingface.co/CamiloS1111/ragsolver (repositorio de modelo: el Space de Gradio pide PRO, DECISIONS #129), datos en huggingface.co/datasets/CamiloS1111/ragsolver-index; demo en local |
| RF-1 — subobjetivos verificables independientemente | parcial: se verifican dentro de una sola prueba (have), no como lemas aislados |
| §6.3 — self-consistency del Generador | ✅ generator_samples (apagado por defecto; cuenta en el presupuesto) |
| Corrida principal reanudable | ✅ scripts/run_eval_v1.sh (salta lo hecho; corta limpio si se agota la cuota) |
GPU AMD: ✅ utilizable vía Windows + Vulkan (llama.cpp) para embeddings (2026-09-20)
llama-server.exe del lado de Windows con el GGUF de Qwen3-Embedding y RAGSOLVER_EMBED_BACKEND=llama en WSL: vectores idénticos (cos ≥ 0.9996), 48 textos/s (10× la CPU). El corpus completo de Mathlib (278k) se está embebiendo (96 min) → tabla mathlib_full (DECISIONS.md #48). ROCm en WSL2 sigue sin funcionar (abajo), pero ya no hace falta para el retriever.
GPU AMD (ROCm en WSL2): ❌ no viable hoy
La tarjeta real es una RX 9060 XT (gfx1200), no la 9070 XT asumida. rocminfo falla con HSA_STATUS_ERROR_OUT_OF_RESOURCES incluso con librocdxg v1.2.2 y tras reiniciar WSL; es el bug abierto ROCm/ROCm#6323 (mismo hardware, cerrado por AMD como "not planned"). Todo corre en CPU + API; re-evaluar cuando AMD publique un fix (docs/DECISIONS.md #8-#12).
Bloqueado / decisiones pendientes del usuario (2026-09-23)
LICENSE✅ Apache-2.0 (2026-10-21).Commit en git✅ ramarag.- ✅ (2026-10-22, DECISIONS #129) Publicación en Hugging Face (entregable 2 de la propuesta):
HF_TOKENcon permiso de escritura y nombres de repo; los scriptspublish_hf.py(dataset: índice muestra + completo con ANN, evaluación, corridas) ypublish_space.py(demo de búsqueda) ya funcionan en--dry-run. eval-v1-full(repetición defull/no_criticcon el índice completo): ≈ US$0.30; la key tiene US$0.42 libres de su tope de US$2.00. Se lanza consetsid nohup bash scripts/run_chain.sh > data/eval/results/chain.log 2>&1 < /dev/null &(saltaeval_v1, que ya está completo).- Opcionales: gold manual de OCR (10 páginas) para la métrica de exactitud de fórmulas; experimento adicional con un modelo local en la GPU (US$0, ~5 h; ver conversación del 22-09); PDF del informe final si el curso lo pide en ese formato.
Noche del 22→23-09: qué quedó hecho
eval_v1completo y válido (300/300 pares, todos consistentes con el código final):full9/60 (15 %),no_rag9/60,no_critic4/60, línea base A 5/60; la B se autoevalúa correcta en 55/60 y el kernel confirma 11. Ninguna diferencia significativa tras Bonferroni; la variación entre corridas es del tamaño de los efectos (mismo primer intento: 7 vs 4 problemas, 2 en común). Tablas endocs/eval_report.mdydocs/final_report.md§6.3.- Informe final v0.3 (
docs/final_report.md): resumen, discusión, limitaciones y conclusión escritos con los resultados reales; Apéndice E con los 7 defectos encontrados durante el experimento; 71 decisiones registradas. - Índice ANN del Mathlib completo validado con consultas reales: mismas métricas que la búsqueda exacta, 60× más rápido. La demo responde en ~0.5 s sobre las 278 160 declaraciones.
- Defectos corregidos esta noche (con test): contabilidad perdida con salidas inválidas (#61), enrutamiento caro de OpenRouter (#62, #64), sesgo por reintentos ocultos en 15 pares (#63), esquema de las líneas base (#65, que invalidaba la A: 58/60 pruebas vacías).
- Gasto: la key usó US$1.58 de US$2.00 (≈ US$0.9 perdidos por defectos de los días anteriores, ya corregidos). No se gastó en
eval-v1-full. - Notebook de resultados ejecutado, docs de instalación/uso/arquitectura/interfaces al día, scripts de publicación en HF listos (dataset y Space, en
--dry-run), 77 tests en verde.