Conseil : Vous découvrez Failproof AI Observability ? Cette page est la référence complète des événements du SDK.
Installation
Le SDK est distribué aux clients sous forme de wheel privé plutôt que depuis un index de paquets public. Votre processus d’intégration explique comment l’obtenir, l’installer et le figer — contactez votre interlocuteur Failproof AI si vous avez besoin d’un accès. Une fois installé, vérifiez qu’il est bien présent :Démarrage rapide
Instrumenter un appel réel
En pratique, vous enveloppez votre code d’agent existant. Encadrez un appel de modèle avecmodel_request avant et model_response après, afin que les deux événements couvrent la requête réelle et que Failproof AI Observability puisse les associer :
tool_use et tool_result, en réutilisant le même tool_call_id pour les deux.
Voici à quoi ressemblent ces événements une fois qu’ils arrivent dans le tableau de bord, codés par couleur selon leur type et filtrables par environnement, agent et session :

configure()
event.*. Vous pouvez l’omettre en toute sécurité ; les valeurs par défaut fonctionnent directement. Tous les arguments sont uniquement nommés ; passez-les par nom comme indiqué ci-dessus.
Lorsque base_dir vaut None (valeur par défaut), le SDK lit $AGENTEYE_HOME s’il est défini,
sinon il utilise ~/.agenteye. Ce comportement correspond à la résolution propre du collecteur,
ainsi une seule variable d’environnement AGENTEYE_HOME configure le spool d’événements partagé pour le
SDK et le collecteur.
Environnement
Associez chaque événement à un environnement de déploiement (production, staging, qa, canary, etc.). Définissez-le une seule fois ; le SDK l’attache automatiquement à chaque événement.
Option 1 : via configure() :
configure(environment=...) prend le dessus sur la variable d’environnement. Si aucun des deux n’est défini, la valeur par défaut est "dev".
La valeur d’environnement apparaît comme filtre de premier niveau dans le tableau de bord et est stockée sur le serveur pour des requêtes rapides.
Avertissement : Les valeurs d’environnement ne doivent pas contenir de virgule,littérale. Les filtres du tableau de bord utilisent une sélection multiple séparée par des virgules sur le réseau (?environment=prod,staging), donc un environnement nomméprod,blueserait divisé en deux valeurs. Les événements dont l’environnement contient une virgule sont rejetés lors de l’ingestion.
Données et confidentialité
Le SDK n’enregistre que les champs que vous passez explicitement. Les prompts, messages, entrées et sorties d’outils ainsi que le contenu des modèles sont capturés uniquement parce que vous les transmettez à un appelevent.*. Rien n’est lu depuis votre processus ni capturé implicitement. Tout champ que vous ne définissez pas est omis de l’événement ; il n’est pas écrit sur le disque.
La suppression des données sensibles est donc votre choix et votre responsabilité. Si un prompt ou une charge utile d’outil contient des données personnelles ou des secrets que vous préférez ne pas stocker, masquez-les ou supprimez-les avant de les passer à la méthode d’événement.
Référence des événements
La plupart des événements viennent par paires début/fin partageant un identifiant de corrélation :tool_use et tool_result partagent un tool_call_id, hook_triggered et hook_completed partagent un hook_id, et human_wait et human_input partagent un input_id. Émettez l’événement de début, effectuez le travail, puis émettez l’événement de fin avec le même identifiant. Failproof AI Observability associe la paire et calcule duration_ms pour vous, vous n’avez donc jamais à passer duration_ms vous-même.

Toutes les méthodes acceptent également des
**kwargs arbitraires pour des métadonnées personnalisées (voir Champs personnalisés).
event.agent_start()
Émis lorsqu’un agent commence à travailler.
event.agent_end()
Émis lorsqu’un agent termine son travail.
event.tool_use()
Émis lorsqu’un agent invoque un outil. À associer avec tool_result ; le SDK calcule automatiquement duration_ms.
event.tool_result()
Émis lorsqu’un outil retourne un résultat. Corrélé avec tool_use via tool_call_id.
event.model_request()
Émis juste avant l’envoi d’un prompt à un LLM.
messages acceptent soit une content sous forme de chaîne simple, soit une content sous forme de liste de blocs de style Anthropic. Les paramètres d’échantillonnage (temperature, max_tokens, etc.) peuvent être passés en tant que kwargs supplémentaires.
event.model_response()
Émis lorsque le LLM retourne une réponse.
content accepte soit une chaîne simple (fournisseurs génériques) soit une liste de blocs de contenu de style Anthropic. Les appels d’outils se trouvent dans content sous forme de blocs {"type": "tool_use", ...}, sans champ tool_calls séparé.
event.hook_triggered()
Émis lorsqu’un hook se déclenche. À associer avec hook_completed ; le SDK calcule automatiquement duration_ms.
event.hook_completed()
Émis lorsqu’un hook se termine. Corrélé avec hook_triggered via hook_id.
event.error()
Émis lorsqu’une erreur non gérée survient.
Événements Human-in-the-Loop
Les événements human-in-the-loop vous donnent une visibilité sur les moments où une personne intervient dans l’exécution de l’agent (attente d’approbation, saisie d’informations, mise en pause ou arrêt de l’agent). Ils vous permettent de mesurer le temps que prennent les humains pour répondre (le SDK calcule automatiquementduration_ms sur les événements associés), d’auditer qui a mis en pause ou interrompu un agent, et de construire des workflows d’approbation et de supervision qui apparaissent dans le tableau de bord.
event.human_wait()
Émis lorsque l’agent suspend son exécution pour attendre qu’un humain fournisse une entrée. À associer avec human_input ; le SDK calcule automatiquement duration_ms (le temps que l’humain a mis pour répondre).
event.human_input()
Émis lorsqu’un humain fournit une entrée et que l’agent reprend. Corrélé avec human_wait via input_id. duration_ms est calculé automatiquement et ne doit pas être passé par l’appelant.
event.human_pause()
Émis lorsqu’un humain met activement l’agent en pause (par exemple via un contrôle du tableau de bord). L’agent est suspendu mais pas terminé.
event.human_interrupt()
Émis lorsqu’un humain arrête activement l’agent en cours d’exécution. Contrairement à human_pause, le travail de l’agent est terminé plutôt que suspendu.
Champs personnalisés
Tout argument nommé supplémentaire est ajouté à l’événement après les champs standard :timestamp, type et environment sont réservés et lèvent une ValueError (Reserved field names cannot be used as custom fields: [...]) s’ils sont passés comme champs personnalisés. session_id et agent_id sont des paramètres obligatoires sur chaque méthode d’événement et ne peuvent pas être fournis une seconde fois ; Python lève une TypeError si vous le faites. Définissez l’environnement avec configure(environment=...) (ou la variable AGENTEYE_ENVIRONMENT) à la place.
Conservez les charges utiles en JSON structuré lorsque vous souhaitez interroger leurs champs. Les valeurs que JSON ne prend pas nativement en charge — telles que les datetimes, UUIDs, décimales, ensembles, bytes ou objets de modèle — sont converties en chaînes afin que l’enregistrement se poursuive en toute sécurité.
Comment les événements sont écrits
Les événements sont mis en mémoire tampon dans le processus et vidés sur le disque toutes lesflush_interval secondes (par défaut 500 ms). Chaque vidage écrit un fichier JSONL :
Étapes suivantes
- Flux d’événements : regardez ces événements arriver en direct, codés par couleur et filtrables par environnement, agent et session.
- Sessions : découvrez comment les événements associés reconstituent chaque exécution d’agent sous forme de graphe d’exécution et de chronologie.

