API Reference

/v1/rerank

Reranking de segunda etapa para pipelines de retrieval. Modelo: `Qwen/Qwen3-Reranker-4B` (4 B de parámetros, multilingüe, respuesta compatible con Cohere).

Resumen

Reordena una lista de documentos candidatos por relevancia respecto a una query. El patrón típico de RAG es de dos etapas: un modelo de embeddings recupera los top-K candidatos desde tu vector store (rápido, con pérdida), y luego un reranker puntúa cada par `(query, doc)` end-to-end sobre el texto crudo (más lento, mucho más preciso). El reranking es la mejora de precisión más grande que puedes añadir encima de un índice vectorial — especialmente si guardas los embeddings con dimensión reducida (p. ej. 1 536-dim en pgvector + HNSW), porque el reranker re-lee el texto completo y recupera la precisión que se perdió al truncar.

Endpoint y modelo

POST `https://api.tesseraai.cloud/v1/rerank`. El campo `model` en el request es el literal `Qwen/Qwen3-Reranker-4B`. La forma de la respuesta sigue el contrato de Cohere `/rerank`.

AtributoValor
Parámetros4 B
IdiomasMultilingüe (100+ idiomas, incluyendo ES, EN, PT, CA, IT, FR, DE)
Alineación de familiaEntrenado conjuntamente con `Qwen3-Embedding-8B` — mismo tokenizer, mismo template instructivo. Óptimo emparejado con nuestro modelo de embeddings.
Contexto máximo por par8 192 tokens (`query` + un `document`)
QuantizaciónQ8_0 GGUF (calidad casi idéntica a FP16)
LicenciaApache 2.0

Cuándo aporta valor el reranking

Vale la pena enchufar reranking cuando se cumple al menos uno de estos casos:

  • Recuperas de un vector store y el top-1 no es de forma fiable el documento correcto — la respuesta buena está en el top-K pero posicionada 5.ª, 12.ª, a veces 30.ª.
  • Truncaste los embeddings para encajar en un tier de almacenamiento (p. ej. `dimensions: 1536` para entrar en el techo HNSW de pgvector). El reranker re-lee el texto crudo y recupera la precisión que la truncación cedió.
  • Tu dominio tiene ruido de parafraseo cercano (legal, soporte, knowledge bases) donde dos documentos parecen semánticamente próximos pero solo uno responde la query.
  • Hoy pagas reranking a Cohere / Voyage / Jina y quieres la misma API compatible con Cohere sobre infraestructura EU/LATAM dentro de tu factura plana de Tessera.

Request

Envía la query y la lista de documentos candidatos devueltos por tu vector store. El reranker devuelve el índice de cada documento y un score de relevancia en `[0, 1]`. Pipeline típico: recuperar top 50–100 desde el vector store, hacer rerank, quedarse con los top 10 para la ventana de contexto del LLM.

POST /v1/rerank
curl https://api.tesseraai.cloud/v1/rerank \
  -H "Authorization: Bearer $TESSERA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen3-Reranker-4B",
    "query": "cómo restablezco mi contraseña",
    "documents": [
      "Para restablecer tu contraseña, pulsa en olvidé mi contraseña en la pantalla de login.",
      "Nuestro horario de oficina es de lunes a viernes, de 9 a 18.",
      "Requisitos de contraseña: 12+ caracteres, un número, un símbolo."
    ]
  }'

Response

Envelope canónico de Cohere. `results[].index` referencia el orden original del array `documents`; ordena `results` por `relevance_score` descendente y quédate con los top-N para uso aguas abajo.

Respuesta
{
  "id": "a1f2…",
  "results": [
    {"index": 0, "relevance_score": 0.9902},
    {"index": 2, "relevance_score": 0.4118},
    {"index": 1, "relevance_score": 0.00003}
  ],
  "meta": {
    "billed_units": {"total_tokens": 176},
    "tokens": {"input_tokens": 176, "output_tokens": 0}
  }
}

Emparejamiento con /v1/embeddings

Los modelos de embeddings y reranker de Tessera son de la misma familia Qwen3 y están entrenados conjuntamente. Usar ambos es el setup recomendado — mismo tokenizer, mismo template instructivo, sin penalty de calidad por mezclar familias de distintos vendors.

Snippet RAG end-to-end
from openai import OpenAI

client = OpenAI(
    base_url="https://api.tesseraai.cloud/v1",
    api_key=os.environ["TESSERA_API_KEY"],
)

# Etapa 1 — embed y retrieve de top-50 desde tu vector store.
query_vec = client.embeddings.create(
    model="Qwen/Qwen3-Embedding-8B",
    input=[user_query],
    dimensions=1536,           # encaja en HNSW de pgvector
).data[0].embedding
candidates = vector_store.query(query_vec, top_k=50)

# Etapa 2 — rerank de los 50 candidatos, quedarse con top 10.
import httpx
resp = httpx.post(
    "https://api.tesseraai.cloud/v1/rerank",
    headers={"Authorization": f"Bearer {os.environ['TESSERA_API_KEY']}"},
    json={
        "model": "Qwen/Qwen3-Reranker-4B",
        "query": user_query,
        "documents": [c.text for c in candidates],
    },
    timeout=30.0,
).json()
top10 = sorted(resp["results"], key=lambda r: -r["relevance_score"])[:10]
context = [candidates[r["index"]].text for r in top10]

Casos de uso típicos

  • Boost de calidad RAG: mantén tu índice de embeddings actual, mete el reranker entre el retrieval y el LLM — suele ser el cambio de una sola línea con más impacto en exactitud de respuesta.
  • Recuperación tras truncar embeddings: si indexaste a 768 / 1 024 / 1 536 dimensiones para encajar en un tier de almacenamiento, el rerank recupera la precisión que la reducción dimensional cedió.
  • Retrieval cross-language: query en español, documentos en inglés (o al revés) — el reranker maneja la relevancia translingüística de forma nativa.
  • Migración desde Cohere / Voyage / Jina: la forma de la respuesta coincide con la de Cohere, así que cambiar es modificar `base_url` + `model` en la mayoría de clientes.