Tip: Failproof AI Observability में नए हैं? यह पृष्ठ संपूर्ण SDK इवेंट संदर्भ है।
इंस्टॉलेशन
SDK को ग्राहकों को एक निजी व्हील के रूप में वितरित किया जाता है न कि एक सार्वजनिक पैकेज इंडेक्स से। आपके ऑनबोर्डिंग में बताया गया है कि इसे कैसे प्राप्त करें, इंस्टॉल करें, और पिन करें — यदि आपको एक्सेस की आवश्यकता है तो अपने Failproof AI संपर्क से बात करें। एक बार यह इंस्टॉल हो जाने पर, पुष्टि करें कि आपके पास यह है:त्वरित शुरुआत
एक वास्तविक कॉल को इंस्ट्रूमेंट करना
व्यावहारिक रूप से आप अपने मौजूदा एजेंट कोड को लपेटते हैं। एक मॉडल कॉल कोmodel_request से पहले और model_response के बाद ब्रैकेट करें, ताकि दोनों इवेंट्स वास्तविक रिक्वेस्ट को स्पैन करें और Failproof AI Observability उन्हें जोड़ी सके:
tool_use और tool_result से समान तरीके से लपेटें, जोड़ी के बीच एक ही tool_call_id का पुनः उपयोग करें।
एक बार जब वे इवेंट्स डैशबोर्ड पर पहुंचते हैं तो वे कैसे दिखते हैं, टाइप के अनुसार रंग-कोडित और पर्यावरण, एजेंट, और सेशन द्वारा फ़िल्टर करने योग्य:

configure()
event.* कॉल से पहले एक बार कॉल करें। छोड़ना सुरक्षित है; डिफॉल्ट्स बॉक्स से बाहर काम करते हैं। सभी आर्गुमेंट्स केवल कीवर्ड हैं; उन्हें ऊपर दिखाए गए अनुसार नाम से पास करें।
जब base_dir None है (डिफॉल्ट), SDK $AGENTEYE_HOME को पढ़ता है यदि सेट है,
अन्यथा ~/.agenteye पर वापस जाता है। यह कलेक्टर के अपने रेजोल्यूशन से मेल खाता है,
इसलिए एक एकल AGENTEYE_HOME env var SDK और कलेक्टर दोनों के लिए साझी इवेंट स्पूल को कॉन्फ़िगर करता है।
पर्यावरण
हर इवेंट को एक डिप्लॉयमेंट पर्यावरण (production, staging, qa, canary, आदि) के साथ लेबल करें। इसे एक बार सेट करें; SDK इसे हर इवेंट से स्वचालित रूप से जोड़ता है।
विकल्प 1: configure() के माध्यम से:
configure(environment=...) पर्यावरण चर को हराता है। यदि कोई भी सेट नहीं है, तो डिफॉल्ट "dev" है।
पर्यावरण मान डैशबोर्ड में फर्स्ट-क्लास फ़िल्टर के रूप में दिखाई देता है और तेजी से क्वेरी के लिए सर्वर पर संग्रहीत है।
Warning: पर्यावरण मानों में शाब्दिक,कोमा नहीं होना चाहिए। डैशबोर्ड फ़िल्टर्स वायर पर कॉमा-सेपरेटेड मल्टी-सिलेक्ट का उपयोग करते हैं (?environment=prod,staging), इसलिएprod,blueनाम का एक पर्यावरण दो मानों में विभाजित हो जाएगा। कोमा-युक्त पर्यावरण वाले इवेंट्स इनजेस्ट समय पर अस्वीकार किए जाते हैं।
डेटा और गोपनीयता
SDK केवल उन फील्ड्स को रिकॉर्ड करता है जो आप स्पष्ट रूप से पास करते हैं। प्रॉम्प्ट्स, संदेश, टूल इनपुट्स और आउटपुट्स, और मॉडल कंटेंट केवल इसलिए कैप्चर किए जाते हैं क्योंकि आप उन्हेंevent.* कॉल में हाथ देते हैं। आपकी प्रक्रिया से कुछ भी नहीं पढ़ी जाती है या निहित रूप से कैप्चर नहीं किया जाता है। कोई भी फील्ड जिसे आप सेट नहीं करते हैं वह पूरी तरह से इवेंट से छोड़ दी जाती है; इसे डिस्क पर नहीं लिखा जाता है।
यह रिडैक्शन को आपकी पसंद और आपकी जिम्मेदारी बनाता है। यदि कोई प्रॉम्प्ट या टूल पेलोड में PII या सीक्रेट्स हैं जिन्हें आप स्टोर नहीं करना चाहते हैं, तो इसे इवेंट मेथड में पास करने से पहले स्ट्रिप या मास्क करें।
इवेंट संदर्भ
अधिकांश इवेंट्स स्टार्ट/एंड पेयर्स में आते हैं जो एक कोरिलेशन ID शेयर करते हैं:tool_use और tool_result एक tool_call_id शेयर करते हैं, hook_triggered और hook_completed एक hook_id शेयर करते हैं, और human_wait और human_input एक input_id शेयर करते हैं। स्टार्ट इवेंट एमिट करें, काम करें, फिर एंड इवेंट को समान ID के साथ एमिट करें। Failproof AI Observability पेयर को मेल करता है और आपके लिए duration_ms की गणना करता है, इसलिए आप कभी duration_ms को स्वयं पास नहीं करते हैं।

सभी मेथड्स कस्टम मेटाडेटा के लिए मनमाने
**kwargs भी स्वीकार करते हैं (कस्टम फील्ड्स देखें)।
event.agent_start()
जब कोई एजेंट काम शुरू करता है तो एमिट किया जाता है।
event.agent_end()
जब कोई एजेंट काम समाप्त करता है तो एमिट किया जाता है।
event.tool_use()
जब कोई एजेंट टूल को आमंत्रित करता है तो एमिट किया जाता है। tool_result के साथ पेयर करें; SDK स्वचालित रूप से duration_ms की गणना करता है।
event.tool_result()
जब कोई टूल रिटर्न करता है तो एमिट किया जाता है। tool_call_id के माध्यम से tool_use से संबंधित।
event.model_request()
LLM को प्रॉम्प्ट भेजने से ठीक पहले एमिट किया जाता है।
messages एंट्रीज़ या तो सादा स्ट्रिंग content या Anthropic-स्टाइल list-of-blocks content स्वीकार करते हैं। सैंपलिंग पैरामीटर्स (temperature, max_tokens, आदि) को अतिरिक्त kwargs के रूप में पास किया जा सकता है।
event.model_response()
जब LLM एक response रिटर्न करता है तो एमिट किया जाता है।
content या तो सादा स्ट्रिंग (generic providers) या Anthropic-स्टाइल content blocks की एक list स्वीकार करता है। टूल कॉल्स content के अंदर {"type": "tool_use", ...} ब्लॉक्स के रूप में रहते हैं, अलग tool_calls फील्ड के साथ नहीं।
event.hook_triggered()
जब कोई हुक फायर होता है तो एमिट किया जाता है। hook_completed के साथ पेयर करें; SDK स्वचालित रूप से duration_ms की गणना करता है।
event.hook_completed()
जब कोई हुक समाप्त होता है तो एमिट किया जाता है। hook_id के माध्यम से hook_triggered से संबंधित।
event.error()
जब कोई अनहैंडल्ड error होता है तो एमिट किया जाता है।
मानव-इन-द-लूप इवेंट्स
मानव-इन-द-लूप इवेंट्स आपको उन क्षणों पर नज़र देते हैं जहाँ कोई व्यक्ति एजेंट के एक्सीक्यूशन में कदम रखता है (अनुमोदन की प्रतीक्षा करना, इनपुट प्रदान करना, रोकना, या एजेंट को रोकना)। वे आपको यह मापने देते हैं कि मानव को प्रतिक्रिया देने में कितना समय लगता है (SDK स्वचालित रूप से पेयर्ड इवेंट्स परduration_ms की गणना करता है), ऑडिट करते हैं कि किसने एजेंट को रोका या बाधित किया, और अनुमोदन और निरीक्षण वर्कफ्लो बनाते हैं जो डैशबोर्ड में सतह पर आते हैं।
event.human_wait()
जब एजेंट एक्सीक्यूशन को एक मानव के लिए इनपुट प्रदान करने की प्रतीक्षा करने के लिए रोकता है तो एमिट किया जाता है। human_input के साथ पेयर करें; SDK स्वचालित रूप से duration_ms की गणना करता है (मानव को प्रतिक्रिया देने में कितना समय लगा)।
event.human_input()
जब कोई मानव इनपुट प्रदान करता है और एजेंट फिर से शुरू होता है तो एमिट किया जाता है। input_id के माध्यम से human_wait से संबंधित। duration_ms स्वचालित रूप से गणना की जाती है और कॉलर द्वारा पास नहीं की जानी चाहिए।
event.human_pause()
जब कोई मानव सक्रिय रूप से एजेंट को रोकता है तो एमिट किया जाता है (उदा. डैशबोर्ड कंट्रोल के माध्यम से)। एजेंट निलंबित है लेकिन समाप्त नहीं।
event.human_interrupt()
जब कोई मानव एजेंट को mid-execution में सक्रिय रूप से रोकता है तो एमिट किया जाता है। human_pause के विपरीत, एजेंट का काम निलंबित होने के बजाय समाप्त हो जाता है।
कस्टम फील्ड्स
कोई भी अतिरिक्त कीवर्ड आर्गुमेंट्स स्टैंडर्ड फील्ड्स के बाद इवेंट में जोड़े जाते हैं:timestamp, type, और environment आरक्षित हैं और ValueError को बढ़ाते हैं (Reserved field names cannot be used as custom fields: [...]) यदि कस्टम फील्ड्स के रूप में पास किए जाते हैं। session_id और agent_id हर इवेंट मेथड पर आवश्यक पैरामीटर्स हैं और दूसरी बार आपूर्ति नहीं किए जा सकते हैं; यदि आप ऐसा करते हैं तो Python TypeError बढ़ाता है। इसके बजाय configure(environment=...) (या AGENTEYE_ENVIRONMENT वेरिएबल) के साथ पर्यावरण सेट करें।
जब आप उनकी फील्ड्स को क्वेरी करना चाहते हैं तो पेलोड्स को स्ट्रक्चर्ड JSON के रूप में रखें। जो मान JSON मूल रूप से समर्थन नहीं करता है - जैसे datetimes, UUIDs, decimals, sets, bytes, या model objects - को स्ट्रिंग्स में कन्वर्ट किया जाता है ताकि रिकॉर्डिंग सुरक्षित रूप से जारी रहे।
इवेंट्स कैसे लिखी जाती हैं
इवेंट्स को प्रोसेस में बफर किया जाता है और हरflush_interval सेकंड (डिफॉल्ट 500 ms) में डिस्क पर फ्लश किया जाता है। प्रत्येक फ्लश एक JSONL फाइल लिखता है:
अगले कदम
- इवेंट स्ट्रीम: इन इवेंट्स को लाइव आते हुए देखें, रंग-कोडित और पर्यावरण, एजेंट, और सेशन द्वारा फ़िल्टर करने योग्य।
- सेशन्स: देखें कि कैसे पेयर्ड इवेंट्स प्रत्येक एजेंट रन को एक्सीक्यूशन ग्राफ और टाइमलाइन के रूप में पुनर्निर्माण करते हैं।

