कस्टम agents गाइड
इंस्टॉल, instrumentation, इवेंट मेथड, एक व्यावहारिक उदाहरण, और सामान्य समस्याएं।
कोई फ्रेमवर्क उपयोग कर रहे हैं?
LangChain, CrewAI, LlamaIndex और Pydantic AI एक कॉल के साथ खुद को instrument करते हैं।
इंस्टॉल करें
failproofai-sdk के रूप में इंस्टॉल किया जाता है और Python में failproofai_sdk के रूप में आयात किया जाता है। फ्रेमवर्क extras जैसे failproofai-sdk[langgraph] फ्रेमवर्क को ही इंस्टॉल करते हैं; adapters हमेशा base wheel में शिप होते हैं।
Failproof daemon को कनेक्ट करें
- डैशबोर्ड
- CLI
-
Admin → Keys पर जाएं और
events:addके साथ एक key बनाएं। - Failproof daemon को Cloud से कनेक्ट करें agent मशीन पर।
- एक instrumented सेशन चलाएं, फिर Observe → Events के तहत इसकी सटीक ID खोजें।
-
Observe → Sessions पर जाएं, एक ही environment चुनें, और पुनर्निर्मित trace खोलें।

कॉन्फ़िगरेशन
इसके बजाय environment variable द्वारा सेट करें:
Events को memory में queue किया जाता है और हर
flush_interval सेकंड में बैकग्राउंड में लिखा जाता है, interpreter exit पर एक final flush के साथ। एक प्रक्रिया जो सीधे kill की जाती है, वह कुछ खो देती है जो अभी तक लिखी नहीं गई थी।
Identity
हर event एक session और एक agent से संबंधित है। Scopes दोनों को भरते हैं, इसलिए आप शायद ही कभी उन्हें pass करते हैं:session_id या agent_id को explicitly pass करना अभी भी काम करता है और जीतता है। न bound और न ही passed के साथ, कॉल TypeError raise करता है, न कि एक event emit करता है जो Cloud quietly discard करेगा।
Identity context variables पर सवार होती है। यह
asyncio tasks को automatically follow करता है, लेकिन नहीं नए threads को — एक worker को failproofai_sdk.propagate() में wrap करें या इसके events unattached land करते हैं।Event कैटलॉग
पंद्रह मेथड। अधिकांश pairs में आते हैं — आप opener को कॉल करते हैं, फिर closer को, और SDK gap को time करता है।
तीन standalone हैं:
error, human_pause, human_interrupt।
हर फील्ड, प्रति मेथड
हर फील्ड, प्रति मेथड
हर मेथड
session_id और agent_id भी लेता है, जो scopes आपके लिए भरते हैं। कुछ भी None के रूप में छोड़ा गया JSON null के रूप में भेजे जाने की जगह dropped है, और हर मेथड None return करता है।Pairing और duration
एक नियम: closing event को अपने opener के समान id दें। वह क्या उन्हें pairs करता है, और क्या SDK को gap को time करने देता है।duration_ms को yourself pass न करें। SDK इसे measure करता है, और इसे pass करना ValueError raise करता है।
एक अपवाद model_response है, जहां केवल आप real provider latency को जानते हैं। milliseconds की एक पूरी संख्या pass करें — एक float raise करता है, क्योंकि column एक 32-bit integer है और अन्यथा empty land करेगी।
सीमांत स्थितियां
सीमांत स्थितियां
- Ids केवल kind per, per session के लिए unique होना चाहिए। एक tool call और एक hook एक share कर सकते हैं; दो sessions एक साथ चल सकते हैं एक ही ids को reuse कर सकते हैं बिना colliding के।
- वे agent को scoped नहीं हैं। एक pair एक agent के तहत open किया गया और दूसरे agent के तहत close किया गया अभी भी match करता है — जो multi-agent code में सामान्य case है।
request_idoptional है लेकिन अनुशंसित है। इसके बिना, model events उनके आने के क्रम में pair up करते हैं, इसलिए एक ही agent में दो concurrent calls mispair कर सकते हैं।- एक pair processes में split अभी भी Cloud में match करता है, लेकिन SDK इसे time नहीं कर सकता — दोनों processes में कुछ भी दोनों halves नहीं देखा।
- अधिकतम 10,000 openers एक बार में एक closer के लिए wait करते हैं। उसके बाद oldest को drop किया जाता है, इसलिए एक leak बिना bound के grow नहीं कर सकता।
अपने स्वयं के फील्ड
कोई भी extra keyword जो आप pass करते हैं event के साथ stored है:Decimal, एक set, bytes, एक model object — एक string के रूप में stored है।
ये पाँच names reserved हैं और सीधे rejected हैं: timestamp, session_id, agent_id, type, environment।
Deliver और verify करें
- डैशबोर्ड
- CLI
Observe → Events में, पहले verify करें
agent_start exists है और agent_end exists अंत में है। फिर Observe → Sessions खोलें और confirm करें model, tool, human, hook, और error events intended order में दिखाई देते हैं। Session ID को primary troubleshooting key के रूप में उपयोग करें।$FAILPROOFAI_HOME/custom-agents/events inspect करें, अन्यथा ~/.failproofai/custom-agents/events। JSONL files SDK emission को prove करती हैं; एक growing spool daemon configuration या delivery को point करता है, जबकि एक empty spool instrumentation या process lifetime को point करता है।
Spool को केवल तब inspect करें जब daemon बंद हो। जबकि यह चलता है, यह collects करता है और हर batch को milliseconds में delete करता है, इसलिए एक directory listing races करता है collector के साथ और emit किए गए events से far fewer दिखाता है।

