Skip to main content
देखें कि आपके AI एजेंट्स प्रोडक्शन में क्या करते हैं: हर एजेंट रन, टूल कॉल, मॉडल रिक्वेस्ट, हुक, और मानव हस्तक्षेप। Failproof AI Observability Python SDK आपके एजेंट कोड के अंदर से उस ट्रेल को रिकॉर्ड करता है ताकि आप डीबग, ऑडिट, और मूल्यांकन कर सकें कि क्या हुआ। जब भी आप चाहते हैं कि Failproof AI Observability आपके एजेंट्स को देखे, इसका उपयोग करें। हुड के तहत, SDK स्ट्रक्चर्ड इवेंट्स को लोकल JSONL फाइलों में लिखता है, और कलेक्टर डेमन उन्हें स्वचालित रूप से प्लेटफॉर्म पर भेजता है। आप इन फाइलों को स्वयं प्रबंधित नहीं करते हैं।
Tip: Failproof AI Observability में नए हैं? यह पृष्ठ संपूर्ण SDK इवेंट संदर्भ है।

इंस्टॉलेशन

SDK को ग्राहकों को एक निजी व्हील के रूप में वितरित किया जाता है न कि एक सार्वजनिक पैकेज इंडेक्स से। आपके ऑनबोर्डिंग में बताया गया है कि इसे कैसे प्राप्त करें, इंस्टॉल करें, और पिन करें — यदि आपको एक्सेस की आवश्यकता है तो अपने Failproof AI संपर्क से बात करें। एक बार यह इंस्टॉल हो जाने पर, पुष्टि करें कि आपके पास यह है:
क्या आप एक कोडिंग एजेंट को संपूर्ण एकीकरण करने देना पसंद करते हैं? Python SDK Agent Skill इंस्टॉल पाथ को जानता है, इंस्ट्रूमेंटेशन पॉइंट्स की योजना बनाता है, उन्हें लिखता है, और इवेंट्स के आने की पुष्टि करता है।

त्वरित शुरुआत

एक वास्तविक कॉल को इंस्ट्रूमेंट करना

व्यावहारिक रूप से आप अपने मौजूदा एजेंट कोड को लपेटते हैं। एक मॉडल कॉल को 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() के माध्यम से:
विकल्प 2: पर्यावरण चर के माध्यम से:
प्राथमिकता: 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 को स्वयं पास नहीं करते हैं। एक सेशन का git-स्टाइल एक्सीक्यूशन ग्राफ इसकी इवेंट टाइमलाइन के बगल में, पेयर्ड इवेंट्स से पुनर्निर्मित, टूल/मॉडल/हुक ब्रेकडाउन पैनल के साथ सभी इवेंट मेथड्स को ये दो फील्ड्स की आवश्यकता है: सभी मेथड्स कस्टम मेटाडेटा के लिए मनमाने **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 फाइल लिखता है:
कलेक्टर इस डिरेक्टरी को देखता है और फाइलों को स्वचालित रूप से अपलोड करता है। आपको इन फाइलों को सीधे प्रबंधित करने की आवश्यकता नहीं है। प्रत्येक फाइल एटमिकली लिखी जाती है: SDK एक अस्थायी फाइल में लिखता है और फिर इसे जगह पर रीनेम करता है, इसलिए कलेक्टर कभी आधी-लिखी गई फाइल नहीं देखता है। जब आपकी प्रक्रिया बाहर निकलती है तो एक अंतिम फ्लश भी चलता है, इसलिए अंतिम अंतराल में बफर किए गए इवेंट्स खोए नहीं जाते हैं। यदि कलेक्टर ऑफलाइन है, तो इवेंट्स डिस्क पर फाइलों के रूप में जमा हो जाते हैं और एक बार जब यह वापस आता है तो भेजते हैं।

अगले कदम

  • इवेंट स्ट्रीम: इन इवेंट्स को लाइव आते हुए देखें, रंग-कोडित और पर्यावरण, एजेंट, और सेशन द्वारा फ़िल्टर करने योग्य।
  • सेशन्स: देखें कि कैसे पेयर्ड इवेंट्स प्रत्येक एजेंट रन को एक्सीक्यूशन ग्राफ और टाइमलाइन के रूप में पुनर्निर्माण करते हैं।