{"schemaVersion":1,"id":"https://lucioduran.com/es/projects/reranker-budget-router","url":"https://lucioduran.com/es/projects/reranker-budget-router","title":"Reranker Budget Router","description":"Router de reranking con presupuestos estrictos de pares, políticas ajustadas en desarrollo y cross-encoder MiniLM local. Publica calidad, latencia, decisiones y errores.","language":"es","datePublished":"2026-10-21","dateModified":"2026-10-21","contentFormat":"text/markdown","content":"[Proyectos](<https://lucioduran.com/es/projects>) / Reranker Budget Router\n\n# Reranker Budget Router\n\nRouter de reranking con presupuestos estrictos de pares, políticas ajustadas en desarrollo y cross-encoder MiniLM local. Publica calidad, latencia, decisiones y errores.\n\nAutor: [Lucio Durán](<https://lucioduran.com/es>) · Python 3.11.13 · Licencia: [MIT](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/LICENSE>)\n\nFicha publicada: 2026-10-21 · Ficha actualizada: 2026-10-21\n\n[Repositorio](<https://github.com/lucioduran/reranker-budget-router>) · [Evidencia original](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/summary.json>) · [Release v0.1.0](<https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0>)\n\n## Problema y utilidad para agentes\n\nReordenar todos los candidatos consume cómputo incluso cuando BM25 ya resolvió la consulta. Saltarse el reranker también puede perder una mejora. La decisión necesita una comparación medida y casos de error visibles.\n\nEl proyecto permite inspeccionar cuánto cómputo asigna una política a cada consulta y qué calidad deja de obtener. Separa el presupuesto de pares de los dólares, la energía y una garantía de latencia.\n\n## Arquitectura\n\n1. **Recuperación y señales.** BM25 genera candidatos. La diferencia entre scores y la cobertura de términos alimentan un router que elige profundidad 0, 4 o 12 bajo un presupuesto duro.\n2. **Políticas congeladas.** Seis combinaciones de presupuesto y penalización ajustan umbrales únicamente sobre desarrollo. Un MiniLM cross-encoder fijado reordena el prefijo elegido y conserva el resto.\n3. **Decisiones auditables.** Trazas por consulta, scores contrafactuales, políticas y hashes permiten recalcular métricas, identificar cómputo evitable y localizar pérdidas de calidad.\n\n- [Diseño y metodología](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/design.md>)\n\n## Qué demuestra\n\n- Asignación explícita de presupuesto de inferencia y separación entre ajuste y evaluación.\n- Medición conjunta de calidad, latencia y pares procesados, con dos baselines.\n- Análisis de un resultado negativo: reconocer cuándo un router añade costo y no captura una mejora.\n\n## Resultados publicados\n\nCorpus de 24 documentos ficticios, 12 consultas de desarrollo y 26 de evaluación, incluidas dos sin respuesta. MiniLM se ejecutó en Intel Xeon W-3223 con dos hilos y tres repeticiones seriales por política.\n\nLa latencia caliente incluye recuperación, señales, routing, tokenización e inferencia. Las preguntas sin respuesta puntúan cero. Son 26 unidades de calidad por política; repetir los tiempos no crea 78 consultas independientes.\n\n### Calidad y costo en evaluación\n\n| Política | nDCG@3 | Pares medios | Media (ms) | p95 (ms) |\n| --- | --- | --- | --- | --- |\n| always-12 | 0.9089 | 12.00 | 101.321 | 126.578 |\n| never | 0.8947 | 0.00 | 0.108 | 0.152 |\n| router-b12-p0 | 0.8947 | 0.00 | 0.114 | 0.176 |\n| router-b12-p0.01 | 0.8947 | 0.00 | 0.112 | 0.154 |\n| router-b12-p0.04 | 0.8947 | 0.00 | 0.109 | 0.139 |\n| router-b4-p0 | 0.8947 | 0.00 | 0.160 | 0.201 |\n| router-b4-p0.01 | 0.8947 | 0.00 | 0.127 | 0.194 |\n| router-b4-p0.04 | 0.8947 | 0.00 | 0.116 | 0.152 |\n\nLas seis políticas aprendidas omitieron todo reranking. Obtuvieron la calidad de never y agregaron overhead. El baseline always-12 mejoró eval-iris-1 y alcanzó 0,9089 nDCG@3 frente a 0,8947. Esta evaluación no demuestra una ventaja del router.\n\nLos seis errores de pérdida de calidad son la misma consulta contada para seis políticas. La frontera observada contiene always-12 y never. Diferencias mínimas entre políticas con decisiones idénticas son ruido de temporización. [Resultados y análisis](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/results/report.md>).\n\n## Reproducir\n\nEl replay y el comando route usan Python 3.11 o posterior sin dependencias de modelos. route muestra señales y candidatos sin ejecutar inferencia. La reproducción completa descarga un cross-encoder público.\n\nLos comandos de entorno usan shell POSIX. reproduce.py adquiere un lock exclusivo, ejecuta ambas particiones y verifica la evidencia. La salida debe ser nueva; dev y eval permanecen como carpetas hermanas para comprobar el origen de las políticas.\n\n### Revisar la evidencia guardada\n\n```\ngit clone https://github.com/lucioduran/reranker-budget-router.git\ncd reranker-budget-router\ngit checkout b34802875068f89c8fb3550f53680d60afdae513\npython -m budget_router verify --output results/dev\npython -m budget_router verify --output results/eval\npython -m budget_router route \"Where can I restore a deleted notebook?\" --budget 4\n```\n\n### Repetir la medición local\n\n```\npython3.11 -m venv .venv\n. .venv/bin/activate\npython -m pip install -r requirements-models.txt -r requirements-dev.txt\npython -m budget_router download\npython scripts/reproduce.py --output build/reproduction\n```\n\n## Alcance y límites\n\n- Dataset pequeño, sintético y conocido por el autor. Los grupos de consultas son correlacionados y no tienen validación humana de relevancia.\n- El presupuesto limita pares, no tiempo máximo. El modelo no recupera documentos fuera del prefijo; usa truncación a 256 tokens.\n- Tres repeticiones calientes en una CPU no caracterizan concurrencia, energía, costo monetario ni percentiles estables en producción.\n\n- [Arquitectura RAG: reranking y evaluación de costo](<https://lucioduran.com/es/blog/rag-pipeline-architecture-chunking-reranking-evaluation>)\n\n## Fuentes y revisión\n\nLas cifras provienen del resumen, las trazas y el análisis incluidos en v0.1.0. Los metadatos identifican la revisión ejecutada y el entorno; no registran una hora de ejecución. La fecha de release se muestra por separado.\n\n- Revisión consultada: [` b34802875068f89c8fb3550f53680d60afdae513 `](<https://github.com/lucioduran/reranker-budget-router/commit/b34802875068f89c8fb3550f53680d60afdae513>)\n- Revisión registrada por el experimento: [` 09ac402ba70b1456e4e49dfa3d3fc30de18d56d3 `](<https://github.com/lucioduran/reranker-budget-router/commit/09ac402ba70b1456e4e49dfa3d3fc30de18d56d3>)\n- Release publicada: [v0.1.0](<https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0>) · 2026-10-21T22:16:27Z\n- SHA-256 del corpus: ` ecf0e3d23dbee38f61aad545e67d7ad3e81195e39659a4619b7035babb5938e6 `\n\n- [README y uso](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/README.md>)\n- [Evidencia original](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/summary.json>)\n- [Resultados y análisis](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/results/report.md>)\n- [Diseño y metodología](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/design.md>)\n- [Corpus y procedencia](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/data/README.md>)\n- [Entorno de ejecución](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/metadata.json>)\n- [Políticas congeladas](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/policies.json>)\n- [Errores de routing](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/errors.json>)\n- [Trazas de ejecución](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/trace.jsonl>)\n- [Evidencia de desarrollo](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/dev/summary.json>)\n- [Modelos, revisiones y licencias](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/model-notices.md>)\n- [Dependencias del entorno medido](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/requirements-local.lock>)\n- [Licencia MIT](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/LICENSE>)","headings":[{"level":1,"text":"Reranker Budget Router","url":"https://lucioduran.com/es/projects/reranker-budget-router#title"},{"level":2,"text":"Problema y utilidad para agentes","url":"https://lucioduran.com/es/projects/reranker-budget-router#problem"},{"level":2,"text":"Arquitectura","url":"https://lucioduran.com/es/projects/reranker-budget-router#architecture"},{"level":2,"text":"Qué demuestra","url":"https://lucioduran.com/es/projects/reranker-budget-router#demonstrates"},{"level":2,"text":"Resultados publicados","url":"https://lucioduran.com/es/projects/reranker-budget-router#results"},{"level":3,"text":"Calidad y costo en evaluación","url":"https://lucioduran.com/es/projects/reranker-budget-router#results-frontier"},{"level":2,"text":"Reproducir","url":"https://lucioduran.com/es/projects/reranker-budget-router#reproduce"},{"level":3,"text":"Revisar la evidencia guardada","url":"https://lucioduran.com/es/projects/reranker-budget-router#reproduce-replay"},{"level":3,"text":"Repetir la medición local","url":"https://lucioduran.com/es/projects/reranker-budget-router#reproduce-inference"},{"level":2,"text":"Alcance y límites","url":"https://lucioduran.com/es/projects/reranker-budget-router#scope"},{"level":2,"text":"Fuentes y revisión","url":"https://lucioduran.com/es/projects/reranker-budget-router#sources"}],"sections":[{"heading":"Reranker Budget Router","level":1,"url":"https://lucioduran.com/es/projects/reranker-budget-router","content":"[Proyectos](<https://lucioduran.com/es/projects>) / Reranker Budget Router"},{"heading":"Reranker Budget Router","level":1,"url":"https://lucioduran.com/es/projects/reranker-budget-router#title","content":"Router de reranking con presupuestos estrictos de pares, políticas ajustadas en desarrollo y cross-encoder MiniLM local. Publica calidad, latencia, decisiones y errores.\n\nAutor: [Lucio Durán](<https://lucioduran.com/es>) · Python 3.11.13 · Licencia: [MIT](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/LICENSE>)\n\nFicha publicada: 2026-10-21 · Ficha actualizada: 2026-10-21\n\n[Repositorio](<https://github.com/lucioduran/reranker-budget-router>) · [Evidencia original](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/summary.json>) · [Release v0.1.0](<https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0>)"},{"heading":"Problema y utilidad para agentes","level":2,"url":"https://lucioduran.com/es/projects/reranker-budget-router#problem","content":"Reordenar todos los candidatos consume cómputo incluso cuando BM25 ya resolvió la consulta. Saltarse el reranker también puede perder una mejora. La decisión necesita una comparación medida y casos de error visibles.\n\nEl proyecto permite inspeccionar cuánto cómputo asigna una política a cada consulta y qué calidad deja de obtener. Separa el presupuesto de pares de los dólares, la energía y una garantía de latencia."},{"heading":"Arquitectura","level":2,"url":"https://lucioduran.com/es/projects/reranker-budget-router#architecture","content":"1. **Recuperación y señales.** BM25 genera candidatos. La diferencia entre scores y la cobertura de términos alimentan un router que elige profundidad 0, 4 o 12 bajo un presupuesto duro.\n2. **Políticas congeladas.** Seis combinaciones de presupuesto y penalización ajustan umbrales únicamente sobre desarrollo. Un MiniLM cross-encoder fijado reordena el prefijo elegido y conserva el resto.\n3. **Decisiones auditables.** Trazas por consulta, scores contrafactuales, políticas y hashes permiten recalcular métricas, identificar cómputo evitable y localizar pérdidas de calidad.\n\n- [Diseño y metodología](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/design.md>)"},{"heading":"Qué demuestra","level":2,"url":"https://lucioduran.com/es/projects/reranker-budget-router#demonstrates","content":"- Asignación explícita de presupuesto de inferencia y separación entre ajuste y evaluación.\n- Medición conjunta de calidad, latencia y pares procesados, con dos baselines.\n- Análisis de un resultado negativo: reconocer cuándo un router añade costo y no captura una mejora."},{"heading":"Resultados publicados","level":2,"url":"https://lucioduran.com/es/projects/reranker-budget-router#results","content":"Corpus de 24 documentos ficticios, 12 consultas de desarrollo y 26 de evaluación, incluidas dos sin respuesta. MiniLM se ejecutó en Intel Xeon W-3223 con dos hilos y tres repeticiones seriales por política.\n\nLa latencia caliente incluye recuperación, señales, routing, tokenización e inferencia. Las preguntas sin respuesta puntúan cero. Son 26 unidades de calidad por política; repetir los tiempos no crea 78 consultas independientes."},{"heading":"Calidad y costo en evaluación","level":3,"url":"https://lucioduran.com/es/projects/reranker-budget-router#results-frontier","content":"| Política | nDCG@3 | Pares medios | Media (ms) | p95 (ms) |\n| --- | --- | --- | --- | --- |\n| always-12 | 0.9089 | 12.00 | 101.321 | 126.578 |\n| never | 0.8947 | 0.00 | 0.108 | 0.152 |\n| router-b12-p0 | 0.8947 | 0.00 | 0.114 | 0.176 |\n| router-b12-p0.01 | 0.8947 | 0.00 | 0.112 | 0.154 |\n| router-b12-p0.04 | 0.8947 | 0.00 | 0.109 | 0.139 |\n| router-b4-p0 | 0.8947 | 0.00 | 0.160 | 0.201 |\n| router-b4-p0.01 | 0.8947 | 0.00 | 0.127 | 0.194 |\n| router-b4-p0.04 | 0.8947 | 0.00 | 0.116 | 0.152 |\n\nLas seis políticas aprendidas omitieron todo reranking. Obtuvieron la calidad de never y agregaron overhead. El baseline always-12 mejoró eval-iris-1 y alcanzó 0,9089 nDCG@3 frente a 0,8947. Esta evaluación no demuestra una ventaja del router.\n\nLos seis errores de pérdida de calidad son la misma consulta contada para seis políticas. La frontera observada contiene always-12 y never. Diferencias mínimas entre políticas con decisiones idénticas son ruido de temporización. [Resultados y análisis](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/results/report.md>)."},{"heading":"Reproducir","level":2,"url":"https://lucioduran.com/es/projects/reranker-budget-router#reproduce","content":"El replay y el comando route usan Python 3.11 o posterior sin dependencias de modelos. route muestra señales y candidatos sin ejecutar inferencia. La reproducción completa descarga un cross-encoder público.\n\nLos comandos de entorno usan shell POSIX. reproduce.py adquiere un lock exclusivo, ejecuta ambas particiones y verifica la evidencia. La salida debe ser nueva; dev y eval permanecen como carpetas hermanas para comprobar el origen de las políticas."},{"heading":"Revisar la evidencia guardada","level":3,"url":"https://lucioduran.com/es/projects/reranker-budget-router#reproduce-replay","content":"```\ngit clone https://github.com/lucioduran/reranker-budget-router.git\ncd reranker-budget-router\ngit checkout b34802875068f89c8fb3550f53680d60afdae513\npython -m budget_router verify --output results/dev\npython -m budget_router verify --output results/eval\npython -m budget_router route \"Where can I restore a deleted notebook?\" --budget 4\n```"},{"heading":"Repetir la medición local","level":3,"url":"https://lucioduran.com/es/projects/reranker-budget-router#reproduce-inference","content":"```\npython3.11 -m venv .venv\n. .venv/bin/activate\npython -m pip install -r requirements-models.txt -r requirements-dev.txt\npython -m budget_router download\npython scripts/reproduce.py --output build/reproduction\n```"},{"heading":"Alcance y límites","level":2,"url":"https://lucioduran.com/es/projects/reranker-budget-router#scope","content":"- Dataset pequeño, sintético y conocido por el autor. Los grupos de consultas son correlacionados y no tienen validación humana de relevancia.\n- El presupuesto limita pares, no tiempo máximo. El modelo no recupera documentos fuera del prefijo; usa truncación a 256 tokens.\n- Tres repeticiones calientes en una CPU no caracterizan concurrencia, energía, costo monetario ni percentiles estables en producción.\n\n- [Arquitectura RAG: reranking y evaluación de costo](<https://lucioduran.com/es/blog/rag-pipeline-architecture-chunking-reranking-evaluation>)"},{"heading":"Fuentes y revisión","level":2,"url":"https://lucioduran.com/es/projects/reranker-budget-router#sources","content":"Las cifras provienen del resumen, las trazas y el análisis incluidos en v0.1.0. Los metadatos identifican la revisión ejecutada y el entorno; no registran una hora de ejecución. La fecha de release se muestra por separado.\n\n- Revisión consultada: [` b34802875068f89c8fb3550f53680d60afdae513 `](<https://github.com/lucioduran/reranker-budget-router/commit/b34802875068f89c8fb3550f53680d60afdae513>)\n- Revisión registrada por el experimento: [` 09ac402ba70b1456e4e49dfa3d3fc30de18d56d3 `](<https://github.com/lucioduran/reranker-budget-router/commit/09ac402ba70b1456e4e49dfa3d3fc30de18d56d3>)\n- Release publicada: [v0.1.0](<https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0>) · 2026-10-21T22:16:27Z\n- SHA-256 del corpus: ` ecf0e3d23dbee38f61aad545e67d7ad3e81195e39659a4619b7035babb5938e6 `\n\n- [README y uso](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/README.md>)\n- [Evidencia original](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/summary.json>)\n- [Resultados y análisis](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/results/report.md>)\n- [Diseño y metodología](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/design.md>)\n- [Corpus y procedencia](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/data/README.md>)\n- [Entorno de ejecución](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/metadata.json>)\n- [Políticas congeladas](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/policies.json>)\n- [Errores de routing](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/errors.json>)\n- [Trazas de ejecución](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/trace.jsonl>)\n- [Evidencia de desarrollo](<https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/dev/summary.json>)\n- [Modelos, revisiones y licencias](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/model-notices.md>)\n- [Dependencias del entorno medido](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/requirements-local.lock>)\n- [Licencia MIT](<https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/LICENSE>)"}],"links":[{"text":"Proyectos","url":"https://lucioduran.com/es/projects"},{"text":"Lucio Durán","url":"https://lucioduran.com/es"},{"text":"MIT","url":"https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/LICENSE"},{"text":"Repositorio","url":"https://github.com/lucioduran/reranker-budget-router"},{"text":"Evidencia original","url":"https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/summary.json"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0"},{"text":"Diseño y metodología","url":"https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/design.md"},{"text":"Resultados y análisis","url":"https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/results/report.md"},{"text":"Arquitectura RAG: reranking y evaluación de costo","url":"https://lucioduran.com/es/blog/rag-pipeline-architecture-chunking-reranking-evaluation"},{"text":"b34802875068f89c8fb3550f53680d60afdae513","url":"https://github.com/lucioduran/reranker-budget-router/commit/b34802875068f89c8fb3550f53680d60afdae513"},{"text":"09ac402ba70b1456e4e49dfa3d3fc30de18d56d3","url":"https://github.com/lucioduran/reranker-budget-router/commit/09ac402ba70b1456e4e49dfa3d3fc30de18d56d3"},{"text":"v0.1.0","url":"https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0"},{"text":"README y uso","url":"https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/README.md"},{"text":"Corpus y procedencia","url":"https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/data/README.md"},{"text":"Entorno de ejecución","url":"https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/metadata.json"},{"text":"Políticas congeladas","url":"https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/policies.json"},{"text":"Errores de routing","url":"https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/errors.json"},{"text":"Trazas de ejecución","url":"https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/trace.jsonl"},{"text":"Evidencia de desarrollo","url":"https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/dev/summary.json"},{"text":"Modelos, revisiones y licencias","url":"https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/model-notices.md"},{"text":"Dependencias del entorno medido","url":"https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/requirements-local.lock"},{"text":"Licencia MIT","url":"https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/LICENSE"}],"structuredData":[{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://lucioduran.com/es/projects/reranker-budget-router#page","url":"https://lucioduran.com/es/projects/reranker-budget-router","name":"Reranker Budget Router","description":"Router de reranking con presupuestos estrictos de pares, políticas ajustadas en desarrollo y cross-encoder MiniLM local. Publica calidad, latencia, decisiones y errores.","inLanguage":"es","datePublished":"2026-10-21","dateModified":"2026-10-21","author":{"@id":"https://lucioduran.com/#person"},"mainEntity":{"@id":"https://lucioduran.com/projects/reranker-budget-router#software"}},{"@type":"SoftwareSourceCode","@id":"https://lucioduran.com/projects/reranker-budget-router#software","name":"Reranker Budget Router","description":"Router de reranking con presupuestos estrictos de pares, políticas ajustadas en desarrollo y cross-encoder MiniLM local. Publica calidad, latencia, decisiones y errores.","url":"https://lucioduran.com/es/projects/reranker-budget-router","codeRepository":"https://github.com/lucioduran/reranker-budget-router","programmingLanguage":"Python","runtimePlatform":"Python 3.11.13","license":"https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/LICENSE","version":"v0.1.0","identifier":{"@type":"PropertyValue","propertyID":"git-commit","value":"b34802875068f89c8fb3550f53680d60afdae513"},"author":{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com"},"isAccessibleForFree":true,"citation":["https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/README.md","https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/summary.json","https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/results/report.md","https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/design.md","https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/data/README.md","https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/metadata.json","https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/policies.json","https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/errors.json","https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/eval/trace.jsonl","https://raw.githubusercontent.com/lucioduran/reranker-budget-router/b34802875068f89c8fb3550f53680d60afdae513/results/dev/summary.json","https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/docs/model-notices.md","https://github.com/lucioduran/reranker-budget-router/blob/b34802875068f89c8fb3550f53680d60afdae513/requirements-local.lock","https://github.com/lucioduran/reranker-budget-router/releases/tag/v0.1.0"]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Proyectos","item":"https://lucioduran.com/es/projects"},{"@type":"ListItem","position":2,"name":"Reranker Budget Router","item":"https://lucioduran.com/es/projects/reranker-budget-router"}]}]}],"contentHash":"f05921ca2862bdc56bffee37b2c09a2b3275500bd2c232d61dc9b2d8021b228a","provenance":{"method":"Deterministic serialization of the server-rendered main element","source":"https://lucioduran.com/es/projects/reranker-budget-router","hashAlgorithm":"sha256","hashScope":"JSON document fields before contentHash and provenance","sourceHTMLBytes":47723,"contentBytes":8538}}
