Skip to content

feat(sources): soporte de API key de OpenAlex + cliente consciente de rate-limits (modelo de créditos 2026) #124

Description

@complexluise

Contexto — OpenAlex cambió su modelo (efectivo 13-feb-2026)

Verificado en uso real (2026-06-22): la ingesta online (seed --equation, resolve, chain, enrich) recibe 429 sostenido de OpenAlex. No es un bug nuestro — OpenAlex cambió su autenticación y rate-limiting:

  • API keys ahora obligatorias (desde 13-feb-2026).
  • Polite pool y parámetro mailto= ELIMINADOS ("No more polite pool! No more email parameter… it was never secure and couldn't scale"). bib2graph hoy manda mailtono-op.
  • Modelo de créditos: singleton = 1, list = 10, content/descarga = 100, vector search = 1000 créditos.
    • Gratis (sin key): 100 créditos/día (~10 llamadas list — inusable para seeding real).
    • Con API key: 100.000 créditos/día.
    • (OpenAlex dice que los números "aren't final, still calibrating".)

Causa del 429: pegamos sin key → tier gratis 100 créditos/día → se agota en una sesión y queda 429 hasta el reset diario.

Qué hacer

  1. api_key en OpenAlexSource (param + config de workspace y/o env, p. ej. OPENALEX_API_KEY), enviado como api_key=<key>. Deprecar/quitar el mailto polite-pool (muerto).
  2. Cliente consciente de límites: manejar 429 con backoff (+ Retry-After si viene), requests/s configurable, y un presupuesto/preview de créditos para no agotar el día por sorpresa (encaja con el preview del forrajeo, feat(cli): preview de crecimiento del chaining antes del fetch — historia B2 #89). Mensaje accionable cuando falta la key o se agotó el crédito.
  3. Generalizar a política de auth + rate-limit por proveedor. TODO proveedor (OpenAlex hoy; Semantic Scholar, Crossref, etc. después — ver feat(sources): poblar external_ids al ingestar (cruce cross-motor) — al sumar el 2º motor #120) tiene su propia key y sus propios límites. Que el contrato Source (ADR 0018) declare su autenticación y sus límites; el cliente los respeta. Esto es parte de la visión source-agnóstica (ADR 0036/0035).
  4. Documentar cómo el usuario obtiene y configura la API key de OpenAlex.

Prioridad

Alta: el flujo online (la mitad del producto) quedó degradado por el cambio externo. El flujo de archivo (--from-bib, offline) sigue sano; lo que pega a OpenAlex (search/resolve/chain/enrich) necesita la key.

Fuentes

Relacionado: ADR 0018 (Source agnóstico), ADR 0035 (resolución pega a OpenAlex), #120 (multi-motor), #89 (preview de crecimiento).

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions