title: “Python SDK” description: “Vedi esattamente cosa hanno fatto i tuoi agenti AI in produzione: ogni esecuzione dell’agente, chiamata di strumento, richiesta del modello, hook e intervento umano.”
Vedi esattamente cosa hanno fatto i tuoi agenti AI in produzione: ogni esecuzione dell’agente, chiamata di strumento, richiesta del modello, hook e intervento umano. L’SDK Python per l’Observability di Failproof AI registra questa traccia dall’interno del codice del tuo agente, così puoi eseguire il debug, audit e valutazione di ciò che è accaduto. Usalo ogni volta che vuoi che Failproof AI Observability osservi i tuoi agenti. Sotto il cofano, l’SDK scrive eventi strutturati in file JSONL locali e il daemon collector li preleva e li invia automaticamente alla piattaforma. Non devi gestire tu stesso questi file.Consiglio: Nuovo a Failproof AI Observability? Questa pagina è il riferimento completo degli eventi SDK.
Installazione
L’SDK viene distribuito ai clienti come wheel privato piuttosto che da un indice di pacchetti pubblico. L’onboarding copre come ottenerlo, installarlo e pinarlo — parla con il tuo contatto Failproof AI se hai bisogno di accesso. Una volta installato, confermalo:Quick Start
Strumentazione di una chiamata reale
In pratica racchiudi il tuo codice agente esistente. Circonda una chiamata al modello conmodel_request prima e model_response dopo, in modo che i due eventi abbracciamo la richiesta reale e Failproof AI Observability possa abbinarli:
tool_use e tool_result, riutilizzando uno stesso tool_call_id per la coppia.
Ecco come appaiono questi eventi una volta raggiunto il dashboard, codificati per colore per tipo e filtrabili per ambiente, agente e sessione:

configure()
event.*. Sicuro da omettere; i valori predefiniti funzionano subito. Tutti gli argomenti sono solo keyword; passali per nome come mostrato sopra.
Quando base_dir è None (il valore predefinito), l’SDK legge $AGENTEYE_HOME se impostato,
altrimenti ricade a ~/.agenteye. Questo corrisponde alla risoluzione del collector stesso,
quindi una singola variabile env AGENTEYE_HOME configura lo spool di eventi condiviso per entrambi
l’SDK e il collector.
Ambiente
Etichetta ogni evento con un ambiente di deployment (production, staging, qa, canary, ecc.). Impostalo una volta; l’SDK lo allega a ogni evento automaticamente.
Opzione 1: via configure():
configure(environment=...) prevale sulla variabile d’ambiente. Se nessuno è impostato, il valore predefinito è "dev".
Il valore dell’ambiente appare come filtro di prima classe nel dashboard ed è memorizzato sul server per query veloci.
Avvertenza: I valori dell’ambiente non devono contenere una virgola letterale,. I filtri del dashboard utilizzano multi-select separato da virgole sul filo (?environment=prod,staging), quindi un ambiente denominatoprod,blueverrebbe diviso in due valori. Gli eventi con ambienti contenenti virgole vengono rifiutati al momento dell’ingestione.
Dati e privacy
L’SDK registra solo i campi che tu esplicitamente passi. Prompt, messaggi, input e output dei strumenti e il contenuto del modello vengono catturati solo perché li consegni a una chiamataevent.*. Nulla viene letto dal tuo processo o catturato implicitamente. Qualsiasi campo che lasci non impostato viene omesso dall’evento interamente; non viene scritto su disco.
Questo rende la redazione tua scelta e tua responsabilità. Se un prompt o payload dello strumento contiene PII o segreti che preferisci non memorizzare, rimuovili o mascherali prima di passarli al metodo dell’evento.
Riferimento degli eventi
La maggior parte degli eventi viene in coppie start/end che condividono un ID di correlazione:tool_use e tool_result condividono un tool_call_id, hook_triggered e hook_completed condividono un hook_id, e human_wait e human_input condividono un input_id. Emetti l’evento di inizio, fai il lavoro, poi emetti l’evento di fine con lo stesso ID. Failproof AI Observability abbina la coppia e calcola duration_ms per te, così non passi mai duration_ms da solo.

Tutti i metodi accettano anche
**kwargs arbitrari per metadati personalizzati (vedi Custom Fields).
event.agent_start()
Emesso quando un agente inizia il lavoro.
event.agent_end()
Emesso quando un agente termina il lavoro.
event.tool_use()
Emesso quando un agente invoca uno strumento. Accoppia con tool_result; l’SDK calcola automaticamente duration_ms.
event.tool_result()
Emesso quando uno strumento ritorna. Si correla con tool_use via tool_call_id.
event.model_request()
Emesso appena prima di inviare un prompt a un LLM.
messages accettano sia un content di stringa semplice che Anthropic-style list-of-blocks content. I parametri di campionamento (temperature, max_tokens, ecc.) possono essere passati come kwargs extra.
event.model_response()
Emesso quando l’LLM ritorna una risposta.
content accetta sia una stringa semplice (provider generici) che una lista di content blocks in stile Anthropic. Le chiamate ai strumenti vivono dentro content come blocchi {"type": "tool_use", ...}, senza un campo tool_calls separato.
event.hook_triggered()
Emesso quando un hook si attiva. Accoppia con hook_completed; l’SDK calcola automaticamente duration_ms.
event.hook_completed()
Emesso quando un hook termina. Si correla con hook_triggered via hook_id.
event.error()
Emesso quando si verifica un errore non gestito.
Eventi Human-in-the-Loop
Gli eventi human-in-the-loop ti danno visibilità sui momenti in cui una persona entra nell’esecuzione dell’agente (in attesa di approvazione, fornitura di input, pausa o arresto dell’agente). Ti permettono di misurare quanto tempo gli umani impiegano a rispondere (l’SDK calcola automaticamenteduration_ms sugli eventi appaiati), audit chi ha messo in pausa o interrotto un agente, e di costruire flussi di lavoro di approvazione e supervisione che emergono nel dashboard.
event.human_wait()
Emesso quando l’agente mette in pausa l’esecuzione per attendere che un umano fornisca input. Accoppia con human_input; l’SDK calcola automaticamente duration_ms (quanto tempo l’umano ha impiegato a rispondere).
event.human_input()
Emesso quando un umano fornisce input e l’agente riprende. Si correla con human_wait via input_id. duration_ms viene calcolato automaticamente e non deve essere passato dal chiamante.
event.human_pause()
Emesso quando un umano mette attivamente in pausa l’agente (ad es. tramite un controllo del dashboard). L’agente è sospeso ma non terminato.
event.human_interrupt()
Emesso quando un umano arresta attivamente l’agente a metà dell’esecuzione. A differenza di human_pause, il lavoro dell’agente viene terminato piuttosto che sospeso.
Custom Fields
Qualsiasi argomento di parola chiave extra viene aggiunto all’evento dopo i campi standard:timestamp, type, e environment sono riservati e sollevano ValueError (Reserved field names cannot be used as custom fields: [...]) se passati come custom fields. session_id e agent_id sono parametri richiesti su ogni metodo dell’evento e non possono essere forniti una seconda volta; Python solleva TypeError se lo fai. Imposta l’ambiente con configure(environment=...) (o la variabile AGENTEYE_ENVIRONMENT) invece.
Mantieni i payload come JSON strutturato quando vuoi interrogare i loro campi. I valori che JSON non supporta nativamente — come datetime, UUID, decimali, set, byte o oggetti modello — vengono convertiti in stringhe in modo che la registrazione continui in sicurezza.
Come vengono scritti gli eventi
Gli eventi vengono memorizzati nel buffer in-process e svuotati su disco ogniflush_interval secondi (default 500 ms). Ogni flush scrive un file JSONL:
Prossimi step
- Event stream: guarda questi eventi arrivare in tempo reale, codificati per colore e filtrabili per ambiente, agente e sessione.
- Sessions: vedi come gli eventi appaiati ricostruiscono ogni esecuzione dell’agente come un grafo di esecuzione e timeline.

