waiting_for_human स्टेटस और जारी रखने के लिए ज़रूरी हर चीज़ के साथ लौटता है। पूरा नतीजा सहेजें, अपने ऐप्लिकेशन में फ़ैसला इकट्ठा करें, फिर सहेजा हुआ नतीजा और फ़ैसला एजेंट के continue method को दें।
Phaseo Agent SDK रन संग्रहीत नहीं करता। जब फिर से शुरू की जा सकने वाली स्टेट को किसी अनुरोध या प्रोसेस के restart के बाद भी बचे रहना हो, तो उसे अपने ऐप्लिकेशन में सहेजें।
टूल कॉल को अनुमोदित या अस्वीकार करें
अनुमोदन से नियंत्रित, मैन्युअल और human-in-the-loop टूल चलने से पहले रन को रोक देते हैं। हर लंबित कॉल में मॉडल कीcall (उसके id के साथ) और एक kind होता है: approval, manual या hitl। हर कॉल का जवाब उसके सटीक कॉल ID से दें, टूल के नाम से नहीं, ताकि एक ही टूल की दो कॉल अलग-अलग रहें।
अनुमोदित कॉल अपना टूल चलाती है। अस्वीकृत कॉल मॉडल को टूल नतीजे के रूप में {"error": "<reason>"} भेजती है, जिसका डिफ़ॉल्ट कारण Tool call rejected है।
Pause का भी अपना
kind होता है। Go और C# हर टूल pause के लिए इसे tool_approval सेट करते हैं। PHP, Ruby और Java तब tool_approval सेट करते हैं जब किसी लंबित कॉल को अनुमोदन चाहिए, वरना पहली कॉल का kind। Rust अनुमोदन कॉल के लिए tool_approval, तब external_output जब हर लंबित कॉल को बाहरी नतीजा चाहिए, और दोनों के मिश्रण के लिए tool_input का उपयोग करता है।
हर टूल के बजाय हर टूल कॉल के लिए अनुमोदन ज़रूरी करने के लिए, एजेंट definition पर requireApproval सेट करें (Python और Ruby में require_approval, Go और C# में RequireApproval)। TypeScript में यह एक function requireApproval(call, context) है। Rust सिर्फ़ प्रति-टूल अनुमोदन का समर्थन करता है, Tool::require_approval() के साथ। टूल दिखाता है कि हर तरह का टूल कैसे परिभाषित किया जाता है।
मैन्युअल और human-in-the-loop टूल के लिए नतीजे दें
manual और hitl कॉल के लिए, आपके ऐप्लिकेशन ने जो नतीजा बनाया उसे कॉल ID के साथ दें। Rust में, ये Tool::external(...) से बनाए गए टूल हैं।
Missing output for tool call <id> के साथ विफल होता है (Go में lowercase missing, Python में ValueError, Rust में AgentError)। मानवीय इनपुट मैसेज टूल आउटपुट की जगह नहीं ले सकता।
मानवीय समीक्षा के लिए रोकें
रन आगे बढ़ने से पहले हर मॉडल प्रतिक्रिया जाँचने के लिए एजेंट definition पर एक मानवीय समीक्षा callback सेट करें। रोकने के लिएreason (और वैकल्पिक रूप से payload) के साथ एक समीक्षा अनुरोध लौटाएँ, या आगे बढ़ने के लिए कुछ न लौटाएँ। Pause का kind human_review होता है। Callback को रन ID, स्टेप इंडेक्स, मैसेज, मॉडल प्रतिक्रिया और पार्स किया गया आउटपुट मिलता है (Rust: रन और एजेंट ID, स्टेप इंडेक्स, मैसेज, प्रतिक्रिया और ऐप्लिकेशन संदर्भ)।
Run <id> is waiting for human input के साथ विफलता होती है (Go: run <id> is waiting for human input; Java: Run is waiting for human input)। Rust में ख़ाली न होने वाला human_input ज़रूरी है। TypeScript संरचित humanMessages भी स्वीकार करता है।
अनुरोधों के बीच रन स्टेट सहेजें
रन नतीजा सादा डेटा है: इसे अपने डेटाबेस, object store या जॉब रिकॉर्ड में संग्रहीत करें, और ऐप्लिकेशनcontext को serializable रखें। किसी रन को सिर्फ़ उसी ID वाला एजेंट जारी रख सकता है। टिकाऊ एजेंट लूप कुकबुक सहेजने और फिर से शुरू करने का पूरा फ़्लो दिखाती है।
SDK से रन सहेजवाने और लोड करवाने के लिए, load(runId) और save(result) वाला एक state accessor दें। तब SDK हर रन और continuation के बाद सहेजता है, और आप रिकॉर्ड को हर लेयर से गुज़ारने के बजाय रन ID से जारी रख सकते हैं।
AgentDefinition serialize किए गए रन का हिस्सा नहीं हैं। प्रभावी मॉडल और स्टेप सीमा RunRecord में संग्रहीत होते हैं, इसलिए प्रति-रन overrides continuation के बाद भी सक्रिय रहते हैं।
आप जो भी संग्रहीत करें, सहेजे गए रन का एन्क्रिप्शन और रिटेंशन, अनुमोदन और मानवीय इनपुट के लिए authorization, और फिर से शुरू करने के बाद दोबारा चलने वाले साइड इफ़ेक्ट के आसपास idempotency आपके ऐप्लिकेशन के ज़िम्मे है।