पाठ 23 / 31

Tasks, Messages, Parts और Artifacts

मुख्य ऑब्जेक्ट्स और task जीवनचक्र सीखें।

Task सौंपे गए काम की इकाई है

Client एक message भेजता है (user या agent की भूमिका और एक या अधिक parts: पाठ, files या संरचित डेटा)। Remote agent सीधा उत्तर दे सकता है, या id वाला task बना सकता है: stateful काम की इकाई जिसकी status submitted → working → (input-required) → completed, या failed, canceled या rejected जैसे जीवनचक्र से गुज़रती है (विनिर्देश auth-required जैसी कुछ और स्थितियाँ भी सूचीबद्ध करता है)। परिणाम artifacts (दस्तावेज़, files, संरचित आउटपुट) के रूप में लौटते हैं, जो parts से बने होते हैं, और बीच के status अद्यतन stream हो सकते हैं। Context id संबंधित tasks को एक बातचीत में समूहित करता है। Tasks ही कारण हैं कि A2A लंबे और संवादात्मक काम के लिए उपयुक्त है। अंतिम स्थितियाँ अंतिम हैं: पूरा हुआ task दोबारा नहीं खोला जा सकता, इसलिए अनुवर्ती काम उसी context में नया task शुरू करता है।

State machine के रूप में task जीवनचक्र, चलाकर

मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया। यह सीखने के लिए सरलीकृत मॉडल है, पूरी A2A state सूची नहीं। सामान्य task submitted, working, input-required (agent को और जानकारी चाहिए), फिर working और completed होता है। पूरे हुए task को वापस working करने की कोशिश अस्वीकृत है।

ALLOWED = {
    "submitted": {"working", "rejected"},
    "working": {"input-required", "completed", "failed", "canceled"},
    "input-required": {"working", "canceled"},
    "completed": set(), "failed": set(), "canceled": set(), "rejected": set(),
}

class Task:
    def __init__(self):
        self.state, self.history = "submitted", ["submitted"]
    def move(self, new):
        if new not in ALLOWED[self.state]:
            raise ValueError(f"illegal transition {self.state} -> {new}")
        self.state = new; self.history.append(new)

t = Task()
for step in ("working", "input-required", "working", "completed"):
    t.move(step)
print(" -> ".join(t.history))
try:
    t.move("working")
except ValueError as e:
    print("blocked:", e)

Output:

submitted -> working -> input-required -> working -> completed
blocked: illegal transition completed -> working

Message, task और artifact आकार (उदाहरण)

Field नाम सामान्य A2A संरचना का अनुसरण करते हैं; सटीक नामों के लिए मौजूदा विनिर्देश देखें। यहाँ चलाया नहीं गया।

{
  "message": { "role": "user",
              "parts": [ { "kind": "text", "text": "Please propose a refund for invoice INV-204" } ] },
  "task": { "id": "t-91", "contextId": "c-7",
            "status": { "state": "input-required",
                        "message": { "role": "agent", "parts": [ { "kind": "text", "text": "Which order line is damaged?" } ] } } }
}

त्वरित जाँच: input-required स्थिति का क्या अर्थ है?

  • Remote agent को client या user से और जानकारी चाहिए
  • Task स्थायी रूप से विफल हुआ
  • Task हटा दिया गया
  • Card अमान्य है
Answer

Remote agent को client या user से और जानकारी चाहिए — अनुरोधित इनपुट आने तक task रुका रहता है।