Skip to content
Back to skills

Reranker

ASecurity

Usar cuando se recibe un top-K ruidoso de búsqueda en memoria y se necesita reordenar por relevancia.

  • 50 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
ai-agentspythongobashvuebackend

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned October 4, 2026

npx -y skills add gonzalezpazmonica/savia --skill reranker --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Reranker?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Reranker
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gonzalezpazmonica-reranker/badge)](https://www.skillsdirectory.com/skills/gonzalezpazmonica-reranker)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
layer: peripheral
name: reranker
description: Usar cuando se recibe un top-K ruidoso de búsqueda en memoria y se necesita reordenar por relevancia.
allowed-tools: [Read, Bash]
metadata:
  # --- metadata.savia.* (SE-333) ---
  savia.agent: architect
  savia.maturity: beta
  savia.category: memory
  savia.context: fork
  savia.disable-model-invocation: false
  savia.priority: medium
  savia.summary: Capa de reranking cross-encoder sobre top-K de retrieval (cosine). Filtra ruido antes de que el agente gaste tokens leyendo falsos positivos. Fallback automatico si sentence-transformers ausente.
  savia.tags: "reranking, retrieval, memory, cross-encoder, tokens"
  savia.user-invocable: True
---

# Skill: Reranker

> Filtra ruido entre embedding retrieval y agent consumption.
> Ref: SE-032, docs/propuestas/SE-032-reranker-layer.md.

## Cuando usar

- Sobre un top-K grande de cualquier busqueda, convertido al JSON de entrada (ver Integracion)
- Cuando el agente ha reportado leer multiples resultados antes de encontrar el relevante
- Para evaluar calidad de retrieval actual (los `relevance` del cross-encoder exponen el ruido)

## Cuando NO usar

- Hot-path sensible a latencia (<500ms) — el cross-encoder CPU tarda 1.5-2.5s para 50 pairs
- Retrieval de <5 candidatos (no hay ruido que filtrar)
- Sin sentence-transformers instalado y sin cosine scores en input (fallback identity: no reordena nada)

## Invocacion

```bash
# Pipe JSON con query + candidates
echo '{"query":"Q","candidates":[{"id":"a","text":"...","cosine":0.85}]}' \
  | python3 scripts/rerank.py --top-k 5 --json
```

## Input

```json
{
  "query": "natural language question",
  "candidates": [
    {"id": "str", "text": "str", "cosine": 0.85}
  ]
}
```

## Output

```json
{
  "query": "...",
  "reranked": [
    {"id":"a", "text":"...", "cosine":0.85, "relevance":0.92, "rank":1}
  ],
  "backend": "cross-encoder|fallback-cosine|fallback-identity|empty-input",
  "model": "BAAI/bge-reranker-base|null",
  "latency_ms": 1800
}
```

`relevance` solo tiene valor con `backend: cross-encoder`. En los fallbacks es
`null`: no hay score de relevancia y los umbrales de abajo no aplican. Mira
siempre `backend` antes de fiarte del orden.

## Exit codes y errores

| Codigo | Causa |
|---|---|
| 0 | OK, incluido cualquier fallback (lista vacia -> `empty-input`) |
| 1 | JSON invalido, stdin no UTF-8, raiz no objeto, `query` vacia o no string, candidato sin `id`/`text`, `text` no string, `cosine` no numerico finito |
| 2 | Uso: `--top-k` < 1 o no entero, flag desconocido |

Los errores salen por stderr con prefijo `ERROR:`, sin traceback.

## Backends

| Backend | Activo cuando | Latencia |
|---|---|---|
| `cross-encoder` | `sentence-transformers` instalado y el modelo carga | ~30-50 ms/par (no medido en la calibracion) |
| `fallback-cosine` | Sin cross-encoder y `cosine` en TODOS los candidatos | <10 ms |
| `fallback-identity` | Sin cross-encoder y algun candidato sin `cosine` | <5 ms |

Si el cross-encoder esta instalado pero falla (modelo no descargable, torch
ausente, error de prediccion), el script avisa por stderr
(`rerank: cross-encoder failed (...)`) y cae al fallback; `backend` lo refleja.
Los empates conservan el orden de entrada. `--top-k` mayor que n devuelve n.

## Instalacion (opt-in)

```bash
pip install sentence-transformers
# Primera invocacion descarga ~560MB (BAAI/bge-reranker-base)
```

Zero-install default: script funciona con fallback sin instalar nada.
Con el cross-encoder instalado, la primera ejecucion descarga el modelo del HF
Hub (egress). `HF_HUB_OFFLINE=1` lo impide y fuerza el fallback.

## Integracion con skills de memoria

Ningun script de memoria emite hoy el esquema de entrada: no existen
`memory-recall.sh` ni `savia-recall.sh` con `--json` compatible. El consumidor
construye el JSON y lo pasa por stdin:

```bash
jq -n --arg q "como funciona hook X" --slurpfile c resultados.json \
  '{query:$q, candidates:$c[0]}' | python3 scripts/rerank.py --top-k 5
```

La integracion automatica con memory-recall es el Slice 4 de SE-032 (pendiente).

## Threshold interpretation

Solo con `backend: cross-encoder` (escala de bge-reranker-base con sigmoide;
no verificada en la calibracion, que usa un modelo stub):

- `relevance >= 0.7`: alta confianza, el agente deberia leerlo
- `0.4-0.7`: relevancia media, util como contexto
- `< 0.4`: posible ruido, preferible descartar

## Costes

- Model download (una vez): ~560MB (BAAI/bge-reranker-base)
- RAM en uso: ~800MB
- Inference: CPU only, ~30-50ms/par

## Referencias

- Spec: `docs/propuestas/SE-032-reranker-layer.md`
- Script: `scripts/rerank.py`
- Probe: `scripts/reranker-probe.sh`
- Tests: `tests/test-rerank.bats`, `tests/test-reranker.bats`, `tests/test-reranker-probe.bats`

Files in this skill

  • DOMAIN.md2.5 KB
  • SKILL.md3.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…