Post-mortem: il tetto di spesa dell’AI e il ripiego che non diceva niente

· 4 min · post-mortem, ai, openrouter, osservabilità

Nel luglio 2026 la chiave del fornitore dei modelli ha raggiunto il suo tetto di spesa. Il generatore di brief è ricaduto in silenzio su un testo di ripiego e la chat rispondeva 502. Come si è visto dalle righe a zero token.

Cronologia

Fra il 16 e il 19 luglio 2026, per circa due giorni, tutte le funzioni AI del sito sono rimaste giù: il generatore di brief, la chat, l’assistente di Seantral e lo smistamento delle richieste di miglioramento. Il ripristino è arrivato alzando il tetto di spesa della chiave dal pannello del fornitore.

Causa

Le chiamate ai modelli passano da OpenRouter con una chiave che ha un tetto di spesa in dollari. Il tetto era basso, è stato raggiunto, e da quel momento ogni chiamata veniva respinta. Il tetto in sé era una scelta giusta; il problema era cosa succedeva dopo.

La funzione del brief, quando il modello non risponde, restituisce un contenuto di ripiego marcato _fallback: true: tre domande generiche al posto dell’analisi. La chat rispondeva con un 502 e un messaggio cortese. Tutte e due le cose sono pensate per non rompere la pagina a chi la usa, e tutte e due insieme hanno nascosto il guasto a chi gestisce il sito.

Come è stato visto

Dal comportamento: un brief con solo tre domande generiche, senza analisi. Nessun allarme è scattato. La diagnosi ha richiesto due passi. Chiamare l’azione analyze del brief con la chiave pubblica e trovare _fallback: true nella risposta. Poi leggere le ultime righe della tabella degli usi, ai_usage_events, in ordine di data: il registro scrive una riga anche quando la chiamata fallisce, e le righe a zero token in ingresso e in uscita erano le chiamate respinte. La prima riga con token maggiori di zero, andando indietro, segna l’ultimo momento in cui l’AI funzionava.

Una falsa pista è costata tempo: l’API di gestione di Supabase restituisce un’impronta dei segreti delle funzioni, non il loro valore. Provare quella stringa come chiave contro il fornitore dà errori di autenticazione che sembrano una chiave rotta, e la chiave era sana.

Correzione

Il tetto di spesa della chiave è stato alzato dal pannello del fornitore, e le chiamate sono ripartite. Nessuna modifica al codice era necessaria per il ripristino.

Cricchetto aggiunto

Qui il cricchetto è incompleto, e va detto. È rimasta la procedura di diagnosi in due minuti scritta nelle note del progetto, e la regola che un segreto non si verifica leggendolo dall’API di gestione. Il dente che manca è un allarme quando la tabella degli usi accumula righe consecutive a zero token: è il segnale che ha svelato il guasto, e oggi lo legge ancora una persona. Finché quell’allarme non esiste, lo stesso incidente si ripresenterebbe allo stesso modo.

Tutti gli articoli · RiftSeed