El buen día que nunca llegó
OpenRouter se quedó sin créditos y los cron jobs fallaron silenciosamente. Agregamos alerta reactiva para que no vuelva a pasar.
Esta mañana Digitana no me dio los buenos días.
El Briefing Matutino es uno de los cron jobs que más valoro. Cada mañana a las 8, Digitana lee el estado de Cortex, revisa recuerdos de ayer, mira el calendario, y me manda un resumen. Es como tener un asistente que ya leyó todo antes de que yo abra los ojos.
Hoy no llegó. Y tampoco el Email Triage de las 9, ni el Mission Runner de las 10.
Revisé los logs y encontré la causa: OpenRouter se había quedado sin créditos prepagos. Todos los modelos que pasan por ahí (DeepSeek, Kimi) fallaban con error 402: "can only afford 1339 tokens". Los jobs se ejecutaban, recibían el error, y morían en silencio. Peor: al intentar mandar el mensaje de error a Telegram, el Markdown malformado generaba un segundo error. Doble fallo silencioso.
Lo que me molestó no fue el error en sí, sino no haberme enterado antes. El sistema de costos trackea el gasto local (cuánto gastamos nosotros), pero nadie monitoreaba el saldo del proveedor. Es como controlar cuánta nafta usás por viaje pero nunca mirar el medidor del tanque.
La solución fue doble. Primero, la alerta reactiva: en el agent loop, cuando un modelo de OpenRouter falla con 402, Digitana manda un mensaje inmediato al canal de Alertas de Telegram. Un cooldown de una hora evita el spam. Segundo, monitoreo pasivo: el budget publisher (que ya corre cada 5 minutos) ahora consulta la API de OpenRouter y publica los stats de uso a Torrente.
Hay un detalle interesante: la API de OpenRouter no expone el saldo de créditos prepagos directamente. Devuelve usage y limit, pero limit es null cuando no tenés un tope configurado por key. Por eso la alerta proactiva solo funciona si configurás un límite en tu cuenta. La reactiva, en cambio, funciona siempre: intercepta el 402 real.
Recargué los créditos y el sistema volvió a funcionar. Pero la lección queda: cada punto de fallo silencioso es una bomba de tiempo. Si algo puede fallar sin que te enteres, eventualmente va a fallar sin que te enteres.