diff --git a/lib/crewai/tests/agents/test_agent_a2a_kickoff.py b/lib/crewai/tests/agents/test_agent_a2a_kickoff.py new file mode 100644 index 000000000..8b6775c19 --- /dev/null +++ b/lib/crewai/tests/agents/test_agent_a2a_kickoff.py @@ -0,0 +1,211 @@ +"""Tests for Agent.kickoff() with A2A delegation using VCR cassettes.""" + +from __future__ import annotations + +import os + +import pytest + +from crewai import Agent +from crewai.a2a.config import A2AClientConfig + + +A2A_TEST_ENDPOINT = os.getenv( + "A2A_TEST_ENDPOINT", "http://0.0.0.0:9999/.well-known/agent-card.json" +) + + +class TestAgentA2AKickoff: + """Tests for Agent.kickoff() with A2A delegation.""" + + @pytest.fixture + def researcher_agent(self) -> Agent: + """Create a research agent with A2A configuration.""" + return Agent( + role="Research Analyst", + goal="Find and analyze information about AI developments", + backstory="Expert researcher with access to remote specialized agents", + verbose=True, + a2a=[ + A2AClientConfig( + endpoint=A2A_TEST_ENDPOINT, + fail_fast=False, + max_turns=3, # Limit turns for testing + ) + ], + ) + + @pytest.mark.vcr() + def test_agent_kickoff_delegates_to_a2a(self, researcher_agent: Agent) -> None: + """Test that agent.kickoff() delegates to A2A server.""" + result = researcher_agent.kickoff( + "Use the remote A2A agent to find out what the current time is in New York." + ) + + assert result is not None + assert result.raw is not None + assert isinstance(result.raw, str) + assert len(result.raw) > 0 + + @pytest.mark.vcr() + def test_agent_kickoff_with_calculator_skill( + self, researcher_agent: Agent + ) -> None: + """Test that agent can delegate calculation to A2A server.""" + result = researcher_agent.kickoff( + "Ask the remote A2A agent to calculate 25 times 17." + ) + + assert result is not None + assert result.raw is not None + assert "425" in result.raw or "425.0" in result.raw + + @pytest.mark.vcr() + def test_agent_kickoff_with_conversation_skill( + self, researcher_agent: Agent + ) -> None: + """Test that agent can have a conversation with A2A server.""" + result = researcher_agent.kickoff( + "Delegate to the remote A2A agent to explain quantum computing in simple terms." + ) + + assert result is not None + assert result.raw is not None + assert isinstance(result.raw, str) + assert len(result.raw) > 50 # Should have a meaningful response + + @pytest.mark.vcr() + def test_agent_kickoff_returns_lite_agent_output( + self, researcher_agent: Agent + ) -> None: + """Test that kickoff returns LiteAgentOutput with correct structure.""" + from crewai.lite_agent_output import LiteAgentOutput + + result = researcher_agent.kickoff( + "Use the A2A agent to tell me what time it is." + ) + + assert isinstance(result, LiteAgentOutput) + assert result.raw is not None + assert result.agent_role == "Research Analyst" + assert isinstance(result.messages, list) + + @pytest.mark.vcr() + def test_agent_kickoff_handles_multi_turn_conversation( + self, researcher_agent: Agent + ) -> None: + """Test that agent handles multi-turn A2A conversations.""" + # This should trigger multiple turns of conversation + result = researcher_agent.kickoff( + "Ask the remote A2A agent about recent developments in AI agent communication protocols." + ) + + assert result is not None + assert result.raw is not None + # The response should contain information about A2A or agent protocols + assert isinstance(result.raw, str) + + @pytest.mark.vcr() + def test_agent_without_a2a_works_normally(self) -> None: + """Test that agent without A2A config works normally.""" + agent = Agent( + role="Simple Assistant", + goal="Help with basic tasks", + backstory="A helpful assistant", + verbose=False, + ) + + # This should work without A2A delegation + result = agent.kickoff("Say hello") + + assert result is not None + assert result.raw is not None + + @pytest.mark.vcr() + def test_agent_kickoff_with_failed_a2a_endpoint(self) -> None: + """Test that agent handles failed A2A connection gracefully.""" + agent = Agent( + role="Research Analyst", + goal="Find information", + backstory="Expert researcher", + verbose=False, + a2a=[ + A2AClientConfig( + endpoint="http://nonexistent:9999/.well-known/agent-card.json", + fail_fast=False, + ) + ], + ) + + # Should fallback to local LLM when A2A fails + result = agent.kickoff("What is 2 + 2?") + + assert result is not None + assert result.raw is not None + + @pytest.mark.vcr() + def test_agent_kickoff_with_list_messages( + self, researcher_agent: Agent + ) -> None: + """Test that agent.kickoff() works with list of messages.""" + messages = [ + { + "role": "user", + "content": "Delegate to the A2A agent to find the current time in Tokyo.", + }, + ] + + result = researcher_agent.kickoff(messages) + + assert result is not None + assert result.raw is not None + assert isinstance(result.raw, str) + + +class TestAgentA2AKickoffAsync: + """Tests for async Agent.kickoff_async() with A2A delegation.""" + + @pytest.fixture + def researcher_agent(self) -> Agent: + """Create a research agent with A2A configuration.""" + return Agent( + role="Research Analyst", + goal="Find and analyze information", + backstory="Expert researcher with access to remote agents", + verbose=True, + a2a=[ + A2AClientConfig( + endpoint=A2A_TEST_ENDPOINT, + fail_fast=False, + max_turns=3, + ) + ], + ) + + @pytest.mark.vcr() + @pytest.mark.asyncio + async def test_agent_kickoff_async_delegates_to_a2a( + self, researcher_agent: Agent + ) -> None: + """Test that agent.kickoff_async() delegates to A2A server.""" + result = await researcher_agent.kickoff_async( + "Use the remote A2A agent to calculate 10 plus 15." + ) + + assert result is not None + assert result.raw is not None + assert isinstance(result.raw, str) + + @pytest.mark.vcr() + @pytest.mark.asyncio + async def test_agent_kickoff_async_with_calculator( + self, researcher_agent: Agent + ) -> None: + """Test async delegation with calculator skill.""" + result = await researcher_agent.kickoff_async( + "Ask the A2A agent to calculate 100 divided by 4." + ) + + assert result is not None + assert result.raw is not None + assert "25" in result.raw or "25.0" in result.raw diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_delegates_to_a2a.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_delegates_to_a2a.yaml new file mode 100644 index 000000000..3958f353b --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_delegates_to_a2a.yaml @@ -0,0 +1,623 @@ +interactions: +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Use the remote A2A agent to find out what the current time is in New York.\n\nProvide + your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1383' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFBtWc84q3Fih1RnSJ50RUpSFl9\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781273,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time in New York?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 280,\n \"completion_tokens\": 46,\n \"total_tokens\": 326,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:34 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '923' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"eddd6b1f-08fe-49b0-a0ac-475a0affb219","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"9c0ca44b-2d30-448a-8b38-58f8db1f444f","parts":[{"kind":"text","text":"What + is the current time in New York?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '364' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"eddd6b1f-08fe-49b0-a0ac-475a0affb219\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"da60b9dc-45e0-4124-b6c7-591177a664a2\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"c77704e8-1c73-49b0-940e-1ca55c53bb3a\"}}\r\n\r\ndata: + {\"id\":\"eddd6b1f-08fe-49b0-a0ac-475a0affb219\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"da60b9dc-45e0-4124-b6c7-591177a664a2\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"c77704e8-1c73-49b0-940e-1ca55c53bb3a\"}}\r\n\r\ndata: + {\"id\":\"eddd6b1f-08fe-49b0-a0ac-475a0affb219\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"da60b9dc-45e0-4124-b6c7-591177a664a2\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"fbbb037b-d7fc-4e31-8bff-eccebf3c0053\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + get_time] 2026-01-30 08:54:35 EST (America/New_York)\\nThe current time in + New York is 08:54 AM on January 30, 2026.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"c77704e8-1c73-49b0-940e-1ca55c53bb3a\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:54:33 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Use the remote A2A agent to find out what the current time is in New York.\n\nProvide + your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1383' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFFtf0IQIJTlZw5YAHOgFjlzDdE\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781277,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time in New York?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 280,\n \"completion_tokens\": 46,\n \"total_tokens\": 326,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:39 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '1509' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"d5380fcb-ff90-4cf0-91bc-fbffa31da036","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"4d92d0a5-c872-4781-927d-a8679e676007","parts":[{"kind":"text","text":"What + is the current time in New York?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '364' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"d5380fcb-ff90-4cf0-91bc-fbffa31da036\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"fc104771-f241-4385-bc03-c4b880e97044\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"1b163710-6797-432d-ad93-322e90b6fe85\"}}\r\n\r\ndata: + {\"id\":\"d5380fcb-ff90-4cf0-91bc-fbffa31da036\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"fc104771-f241-4385-bc03-c4b880e97044\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"1b163710-6797-432d-ad93-322e90b6fe85\"}}\r\n\r\ndata: + {\"id\":\"d5380fcb-ff90-4cf0-91bc-fbffa31da036\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"fc104771-f241-4385-bc03-c4b880e97044\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"27ab0449-b0da-4250-a319-56554cbc26ad\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + get_time] 2026-01-30 08:54:40 EST (America/New_York)\\nThe current time in + New York is 08:54:40 AM EST on January 30, 2026.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"1b163710-6797-432d-ad93-322e90b6fe85\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:54:39 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Use the remote A2A agent to find out what the current time is in New York.\n\nProvide + your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1383' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFK8UEJgrLunZZZfiCavu4DMQ5r\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781282,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current local time in New York?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 280,\n \"completion_tokens\": 47,\n \"total_tokens\": 327,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:42 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '806' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"7c4e4330-88aa-4126-98ec-dbbf6dc58abc","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"780ddbd5-2125-4c8b-8076-4a82e097d6dd","parts":[{"kind":"text","text":"What + is the current local time in New York?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '370' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"7c4e4330-88aa-4126-98ec-dbbf6dc58abc\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"7c6ac7fd-9944-493b-b322-7b8130193030\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"44b7f1a5-7c43-491d-bdf5-55f97631bee9\"}}\r\n\r\ndata: + {\"id\":\"7c4e4330-88aa-4126-98ec-dbbf6dc58abc\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"7c6ac7fd-9944-493b-b322-7b8130193030\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"44b7f1a5-7c43-491d-bdf5-55f97631bee9\"}}\r\n\r\ndata: + {\"id\":\"7c4e4330-88aa-4126-98ec-dbbf6dc58abc\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"7c6ac7fd-9944-493b-b322-7b8130193030\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"b3b9f054-2a9b-4b22-bb10-cfcd568e60b2\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + get_time] 2026-01-30 08:54:43 EST (America/New_York)\\nThe current local time + in New York is 08:54 AM EST on January 30, 2026.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"44b7f1a5-7c43-491d-bdf5-55f97631bee9\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:54:42 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Use the remote A2A agent to find out what the current time is in New York.\n\nProvide + your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1383' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFNAH4ex0QrqP0sMQagCLguuncQ\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781285,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time in New York?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 280,\n \"completion_tokens\": 46,\n \"total_tokens\": 326,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:46 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '778' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_handles_multi_turn_conversation.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_handles_multi_turn_conversation.yaml new file mode 100644 index 000000000..d33223c8f --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_handles_multi_turn_conversation.yaml @@ -0,0 +1,717 @@ +interactions: +- request: + body: '' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*' + accept-encoding: + - ACCEPT-ENCODING-XXX + connection: + - keep-alive + host: + - 0.0.0.0:9999 + method: GET + uri: http://0.0.0.0:9999/.well-known/agent-card.json + response: + body: + string: '{"capabilities":{"pushNotifications":true,"streaming":true},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["text/plain","application/json"],"description":"An + AI assistant powered by OpenAI GPT with calculator and time tools. Ask questions, + perform calculations, or get the current time in any timezone.","name":"GPT + Assistant","preferredTransport":"JSONRPC","protocolVersion":"0.3.0","skills":[{"description":"Have + a general conversation with the AI assistant. Ask questions, get explanations, + or just chat.","examples":["Hello, how are you?","Explain quantum computing + in simple terms","What can you help me with?"],"id":"conversation","name":"General + Conversation","tags":["chat","conversation","general"]},{"description":"Perform + mathematical calculations including arithmetic, exponents, and more.","examples":["What + is 25 * 17?","Calculate 2^10","What''s (100 + 50) / 3?"],"id":"calculator","name":"Calculator","tags":["math","calculator","arithmetic"]},{"description":"Get + the current date and time in any timezone.","examples":["What time is it?","What''s + the current time in Tokyo?","What''s today''s date in New York?"],"id":"time","name":"Current + Time","tags":["time","date","timezone"]}],"url":"http://localhost:9999","version":"1.0.0"}' + headers: + content-length: + - '1272' + content-type: + - application/json + date: + - Fri, 30 Jan 2026 13:55:10 GMT + server: + - uvicorn + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Ask the remote A2A agent about recent developments in AI agent communication + protocols.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1396' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFn4QZwtfVYz3isJYJdfNrQPtlS\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781311,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Could + you please provide information on the most recent developments in AI agent + communication protocols? I am particularly interested in new standards, methods, + or technologies that enhance communication efficiency, security, and interoperability + among AI agents.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 277,\n \"completion_tokens\": + 77,\n \"total_tokens\": 354,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:12 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '1199' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"f4251ecb-77e9-4cbe-bb02-b861389184e9","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"f2405e0c-72c7-4e72-a774-f9fe88c2109a","parts":[{"kind":"text","text":"Could + you please provide information on the most recent developments in AI agent communication + protocols? I am particularly interested in new standards, methods, or technologies + that enhance communication efficiency, security, and interoperability among + AI agents."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '591' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"f4251ecb-77e9-4cbe-bb02-b861389184e9\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"41564a5b-4206-431d-80b6-56cfed244b1b\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"2f5afed5-949f-4d1d-897a-00d560699ec7\"}}\r\n\r\ndata: + {\"id\":\"f4251ecb-77e9-4cbe-bb02-b861389184e9\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"41564a5b-4206-431d-80b6-56cfed244b1b\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"2f5afed5-949f-4d1d-897a-00d560699ec7\"}}\r\n\r\ndata: + {\"id\":\"f4251ecb-77e9-4cbe-bb02-b861389184e9\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"41564a5b-4206-431d-80b6-56cfed244b1b\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"d754f676-bcc1-449f-9d9d-444b0f74a4a4\",\"parts\":[{\"kind\":\"text\",\"text\":\"Recent + developments in AI agent communication protocols have focused on several key + areas: \\n\\n1. **Standardization Initiatives**: Organizations such as the + IEEE and ISO have been working on developing standards to ensure interoperability + between different AI systems and agents, such as the IEEE P7011 standard for + algorithmic bias considerations.\\n\\n2. **Protocols for Inter-Agent Communication**: + New protocols like the Agent Communication Language (ACL) and implementations + of the FIPA specifications have gained traction for enabling efficient communication + between agents while ensuring a shared understanding of intentions and semantics.\\n\\n3. + **Enhanced Security Measures**: The integration of blockchain technology has + emerged as a promising method to securely log communications between AI agents, + ensuring authenticity and non-repudiation of messages.\\n\\n4. **Semantic + Understanding Improvements**: Methods using natural language processing (NLP) + continue to evolve, enabling agents to interpret and generate more human-like + responses, facilitating smoother interactions through protocols like ASR (Automatic + Speech Recognition) and NLU (Natural Language Understanding).\\n\\n5. **Context-Aware + Communication**: Recent advancements allow agents to utilize contextual data + for more efficient communication, where they can automatically adjust their + responses based on situational awareness and user preferences.\\n\\n6. **Cooperative + Learning Models**: New techniques in federated learning allow agents to learn + from shared data without compromising user privacy, enhancing collaborative + efforts among AI agents in real-time communication.\\n\\nThese developments + aim to create a more robust framework for AI agents, enhancing their operational + efficiency and effectiveness in various applications, from customer service + to collaborative robotics.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"2f5afed5-949f-4d1d-897a-00d560699ec7\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:55:12 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Ask the remote A2A agent about recent developments in AI agent communication + protocols.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1396' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jG1CL2z8aMHaZgM3KCwDXsNnTvD\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781325,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Can + you provide information about the latest developments in AI agent communication + protocols?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n \"annotations\": + []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n + \ }\n ],\n \"usage\": {\n \"prompt_tokens\": 277,\n \"completion_tokens\": + 51,\n \"total_tokens\": 328,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:26 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '918' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"25e7eefc-150e-4ba1-b169-dbbe3d07430a","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"e7a06872-de5c-4bd6-9c76-e27a1ce5ec48","parts":[{"kind":"text","text":"Can + you provide information about the latest developments in AI agent communication + protocols?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '421' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"25e7eefc-150e-4ba1-b169-dbbe3d07430a\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"91946807-6102-44c5-bc63-1852d397972b\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"57d00fbe-f3c3-4bae-8647-5de5e04a58f5\"}}\r\n\r\ndata: + {\"id\":\"25e7eefc-150e-4ba1-b169-dbbe3d07430a\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"91946807-6102-44c5-bc63-1852d397972b\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"57d00fbe-f3c3-4bae-8647-5de5e04a58f5\"}}\r\n\r\ndata: + {\"id\":\"25e7eefc-150e-4ba1-b169-dbbe3d07430a\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"91946807-6102-44c5-bc63-1852d397972b\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"f9b7bd1d-5721-4534-9111-41180c0eba24\",\"parts\":[{\"kind\":\"text\",\"text\":\"I + currently do not have access to real-time updates or current news. However, + I can provide a general overview of common AI agent communication protocols + such as the Object Management Group's Data Distribution Service (DDS), the + Robot Operating System (ROS) for robotic communication, and the use of WebSocket + for real-time web communication. For the latest developments, I recommend + checking recent academic papers or technology news sites.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"57d00fbe-f3c3-4bae-8647-5de5e04a58f5\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:55:26 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Ask the remote A2A agent about recent developments in AI agent communication + protocols.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1396' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jG6HmivomyX7R9JcTtOLOo4NHrF\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781330,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + are the recent developments in AI agent communication protocols?\\\",\\\"is_a2a\\\":true}\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 277,\n \"completion_tokens\": 48,\n \"total_tokens\": 325,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:31 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '817' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"eb2906ff-0370-4b05-90de-4b4cfe6a1400","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"7182ae50-0bb8-47b1-bf74-eb3519718ca7","parts":[{"kind":"text","text":"What + are the recent developments in AI agent communication protocols?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '396' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"eb2906ff-0370-4b05-90de-4b4cfe6a1400\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"b320db14-b2c7-498c-8e68-16709143ea4c\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"fc283837-7fa1-468c-87e8-f39fddb1a167\"}}\r\n\r\ndata: + {\"id\":\"eb2906ff-0370-4b05-90de-4b4cfe6a1400\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"b320db14-b2c7-498c-8e68-16709143ea4c\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"fc283837-7fa1-468c-87e8-f39fddb1a167\"}}\r\n\r\ndata: + {\"id\":\"eb2906ff-0370-4b05-90de-4b4cfe6a1400\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"b320db14-b2c7-498c-8e68-16709143ea4c\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"ff2dff60-b048-47a9-99a5-3af0e087a9ee\",\"parts\":[{\"kind\":\"text\",\"text\":\"Recent + developments in AI agent communication protocols focus on enhancing interoperability, + efficiency, and security between different AI systems. Key advancements include:\\n\\n1. + **Adoption of Standardized Protocols**: Standard protocols such as Robot Operating + System (ROS) and OpenAI's API are gaining traction, facilitating easier communication + between diverse AI technologies.\\n\\n2. **Multi-Agent Systems**: Research + into multi-agent systems has led to better methods for agents to coordinate + and communicate, emphasizing negotiation and collaboration techniques.\\n\\n3. + **Natural Language Understanding**: Improvements in NLP have enhanced how + agents interpret and respond to human language, allowing for more seamless + user interactions.\\n\\n4. **Decentralized Communication**: There's a shift + toward decentralized communication frameworks, improving privacy and reducing + single points of failure in data exchange.\\n\\n5. **Reinforcement Learning + in Communication**: Using reinforcement learning to improve communication + strategies among agents has shown promise in optimizing dialogue and cooperation.\\n\\n6. + **Security Protocols**: As AI becomes more integrated into critical systems, + security protocols are being developed to protect communication from adversarial + attacks.\\n\\nThese developments aim to create more robust, flexible, and + secure frameworks for AI agents to communicate effectively across various + domains.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"fc283837-7fa1-468c-87e8-f39fddb1a167\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:55:31 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Ask the remote A2A agent about recent developments in AI agent communication + protocols.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1396' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jGHBwSnZnxZ5D49brfxnLkpmXve\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781341,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Can + you provide information on recent developments in AI agent communication protocols, + including any new standards, technologies, or significant research findings?\\\",\\\"is_a2a\\\":true}\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 277,\n \"completion_tokens\": 62,\n \"total_tokens\": 339,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:42 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '1069' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_returns_lite_agent_output.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_returns_lite_agent_output.yaml new file mode 100644 index 000000000..0a1840962 --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_returns_lite_agent_output.yaml @@ -0,0 +1,623 @@ +interactions: +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Use the A2A agent to tell me what time it is.\n\nProvide your complete + response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1354' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFa8FqrqBRD2BDlcIBJL6QvuXlH\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781298,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 275,\n \"completion_tokens\": + 43,\n \"total_tokens\": 318,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:59 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '880' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"d97a8925-75f5-45f8-9572-e61373217004","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"fb58321f-d613-42c8-b202-2a7b50a7dd92","parts":[{"kind":"text","text":"What + is the current time?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '352' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"d97a8925-75f5-45f8-9572-e61373217004\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"a618753d-56df-458f-a8dc-a8bdfa226e73\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"307e8651-39c7-4220-8f37-d76319cc8dbf\"}}\r\n\r\ndata: + {\"id\":\"d97a8925-75f5-45f8-9572-e61373217004\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"a618753d-56df-458f-a8dc-a8bdfa226e73\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"307e8651-39c7-4220-8f37-d76319cc8dbf\"}}\r\n\r\ndata: + {\"id\":\"d97a8925-75f5-45f8-9572-e61373217004\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"a618753d-56df-458f-a8dc-a8bdfa226e73\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"7d7c6c95-867f-4525-9180-4ec3d2834d3c\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + get_time] 2026-01-30 13:55:00 UTC (UTC)\\nThe current time is 13:55 (1:55 + PM) UTC on January 30, 2026.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"307e8651-39c7-4220-8f37-d76319cc8dbf\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:54:59 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Use the A2A agent to tell me what time it is.\n\nProvide your complete + response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1354' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFe4nAbTUPDOE0verjfIon6eo17\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781302,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 275,\n \"completion_tokens\": + 43,\n \"total_tokens\": 318,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:03 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '875' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"34f447f3-6a8c-428a-ab62-e787a369b6e7","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"fc4a3581-9256-4975-acfe-0e6251644bd8","parts":[{"kind":"text","text":"What + is the current time?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '352' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"34f447f3-6a8c-428a-ab62-e787a369b6e7\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"5f7381c3-a90a-4ed4-9c6e-a2e19b8ddaa3\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"4c0162fb-94be-4338-b25f-fbe3b3f28463\"}}\r\n\r\ndata: + {\"id\":\"34f447f3-6a8c-428a-ab62-e787a369b6e7\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"5f7381c3-a90a-4ed4-9c6e-a2e19b8ddaa3\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"4c0162fb-94be-4338-b25f-fbe3b3f28463\"}}\r\n\r\ndata: + {\"id\":\"34f447f3-6a8c-428a-ab62-e787a369b6e7\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"5f7381c3-a90a-4ed4-9c6e-a2e19b8ddaa3\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"dd341884-4548-4e0d-992e-9fa7cd0b842c\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + get_time] 2026-01-30 13:55:03 UTC (UTC)\\nThe current time is 13:55:03 UTC + on January 30, 2026.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"4c0162fb-94be-4338-b25f-fbe3b3f28463\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:55:03 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Use the A2A agent to tell me what time it is.\n\nProvide your complete + response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1354' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFhRE3kx4KNk5YNp1ZjUyp80kUS\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781305,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 275,\n \"completion_tokens\": + 43,\n \"total_tokens\": 318,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:06 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '961' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"882d8605-40a5-4e8e-9573-ba56d80736f4","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"7f8f51d5-c817-4fab-ba5c-2cc70377a9ac","parts":[{"kind":"text","text":"What + is the current time?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '352' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"882d8605-40a5-4e8e-9573-ba56d80736f4\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"eb634fa5-28ef-4451-93d2-be62c640513f\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"962f69ce-e087-40ba-930a-012059ab5778\"}}\r\n\r\ndata: + {\"id\":\"882d8605-40a5-4e8e-9573-ba56d80736f4\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"eb634fa5-28ef-4451-93d2-be62c640513f\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"962f69ce-e087-40ba-930a-012059ab5778\"}}\r\n\r\ndata: + {\"id\":\"882d8605-40a5-4e8e-9573-ba56d80736f4\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"eb634fa5-28ef-4451-93d2-be62c640513f\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"7c4b3417-95fa-4b3d-96cd-1d0896cf56a1\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + get_time] 2026-01-30 13:55:07 UTC (UTC)\\nThe current time is 13:55 (1:55 + PM) UTC on January 30, 2026.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"962f69ce-e087-40ba-930a-012059ab5778\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:55:06 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Use the A2A agent to tell me what time it is.\n\nProvide your complete + response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1354' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFlnndBlZMpiwI6tmZFcsIcsKxQ\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781309,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 275,\n \"completion_tokens\": + 43,\n \"total_tokens\": 318,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:11 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '1254' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_calculator_skill.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_calculator_skill.yaml new file mode 100644 index 000000000..68088fd84 --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_calculator_skill.yaml @@ -0,0 +1,620 @@ +interactions: +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Ask the remote A2A agent to calculate 25 times 17.\n\nProvide your complete + response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1359' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jGIOXOwe0YLDVF1ujzfsgGppMVm\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781342,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Please + calculate 25 times 17.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 276,\n \"completion_tokens\": + 44,\n \"total_tokens\": 320,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:43 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '1142' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"0ca730ca-0343-41b0-9063-345d0a1846fe","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"8d390685-916d-4ebd-8448-521a51a40fa0","parts":[{"kind":"text","text":"Please + calculate 25 times 17."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '356' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"0ca730ca-0343-41b0-9063-345d0a1846fe\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"723b2a81-7686-46cd-a554-98dad63067df\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"d11de366-f945-4ffb-b87b-393f4236ae52\"}}\r\n\r\ndata: + {\"id\":\"0ca730ca-0343-41b0-9063-345d0a1846fe\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"723b2a81-7686-46cd-a554-98dad63067df\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"d11de366-f945-4ffb-b87b-393f4236ae52\"}}\r\n\r\ndata: + {\"id\":\"0ca730ca-0343-41b0-9063-345d0a1846fe\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"723b2a81-7686-46cd-a554-98dad63067df\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"7ec2e318-8619-46f9-805e-94b3b13cfb61\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + calculator] 25 * 17 = 425\\nThe result of 25 times 17 is 425.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"d11de366-f945-4ffb-b87b-393f4236ae52\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:55:43 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Ask the remote A2A agent to calculate 25 times 17.\n\nProvide your complete + response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1359' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jGM6WIUihSLf4KEk8GTvkBYTyNi\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781346,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Please + calculate 25 times 17.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 276,\n \"completion_tokens\": + 44,\n \"total_tokens\": 320,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:47 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '901' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"6487b213-08ae-452e-a434-a43c40ee166d","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"19911188-7988-48d8-b244-b887617a28f7","parts":[{"kind":"text","text":"Please + calculate 25 times 17."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '356' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"6487b213-08ae-452e-a434-a43c40ee166d\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"c26e5431-131e-4b38-a83e-1a20c82983bd\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"df624f31-2d82-4749-98a7-5b07916ecbb1\"}}\r\n\r\ndata: + {\"id\":\"6487b213-08ae-452e-a434-a43c40ee166d\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"c26e5431-131e-4b38-a83e-1a20c82983bd\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"df624f31-2d82-4749-98a7-5b07916ecbb1\"}}\r\n\r\ndata: + {\"id\":\"6487b213-08ae-452e-a434-a43c40ee166d\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"c26e5431-131e-4b38-a83e-1a20c82983bd\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"3a3d621c-0845-4f23-b8f5-cdf3ecb96ea9\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + calculator] 25 * 17 = 425\\nThe result of 25 times 17 is 425.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"df624f31-2d82-4749-98a7-5b07916ecbb1\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:55:46 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Ask the remote A2A agent to calculate 25 times 17.\n\nProvide your complete + response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1359' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jGPQ7X1NUeVqaU3zlnCrv7h6onm\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781349,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Calculate + 25 times 17.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n \"annotations\": + []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n + \ }\n ],\n \"usage\": {\n \"prompt_tokens\": 276,\n \"completion_tokens\": + 43,\n \"total_tokens\": 319,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:50 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '960' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"c77f17c6-08b0-48ff-92c3-4b8e8d9c5eb1","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"ce9f2cc8-2fcc-4753-b734-30ee821fc3a1","parts":[{"kind":"text","text":"Calculate + 25 times 17."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '349' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"c77f17c6-08b0-48ff-92c3-4b8e8d9c5eb1\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"b9e2d33e-a30f-49d8-a06e-764ba27935c6\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"7059af18-8bae-4ebd-8ffd-f8c25250e36c\"}}\r\n\r\ndata: + {\"id\":\"c77f17c6-08b0-48ff-92c3-4b8e8d9c5eb1\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"b9e2d33e-a30f-49d8-a06e-764ba27935c6\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"7059af18-8bae-4ebd-8ffd-f8c25250e36c\"}}\r\n\r\ndata: + {\"id\":\"c77f17c6-08b0-48ff-92c3-4b8e8d9c5eb1\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"b9e2d33e-a30f-49d8-a06e-764ba27935c6\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"354d61e4-d241-4e37-b3f8-7cfffd722807\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + calculator] 25 * 17 = 425\\nThe result of 25 times 17 is 425.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"7059af18-8bae-4ebd-8ffd-f8c25250e36c\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:55:50 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Ask the remote A2A agent to calculate 25 times 17.\n\nProvide your complete + response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1359' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jGTHg6KlCWi3Yoe2y0EspPpjxUP\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781353,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Calculate + 25 times 17.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n \"annotations\": + []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n + \ }\n ],\n \"usage\": {\n \"prompt_tokens\": 276,\n \"completion_tokens\": + 43,\n \"total_tokens\": 319,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:54 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '1269' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_conversation_skill.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_conversation_skill.yaml new file mode 100644 index 000000000..ff2f1b898 --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_conversation_skill.yaml @@ -0,0 +1,713 @@ +interactions: +- request: + body: '' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*' + accept-encoding: + - ACCEPT-ENCODING-XXX + connection: + - keep-alive + host: + - 0.0.0.0:9999 + method: GET + uri: http://0.0.0.0:9999/.well-known/agent-card.json + response: + body: + string: '{"capabilities":{"pushNotifications":true,"streaming":true},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["text/plain","application/json"],"description":"An + AI assistant powered by OpenAI GPT with calculator and time tools. Ask questions, + perform calculations, or get the current time in any timezone.","name":"GPT + Assistant","preferredTransport":"JSONRPC","protocolVersion":"0.3.0","skills":[{"description":"Have + a general conversation with the AI assistant. Ask questions, get explanations, + or just chat.","examples":["Hello, how are you?","Explain quantum computing + in simple terms","What can you help me with?"],"id":"conversation","name":"General + Conversation","tags":["chat","conversation","general"]},{"description":"Perform + mathematical calculations including arithmetic, exponents, and more.","examples":["What + is 25 * 17?","Calculate 2^10","What''s (100 + 50) / 3?"],"id":"calculator","name":"Calculator","tags":["math","calculator","arithmetic"]},{"description":"Get + the current date and time in any timezone.","examples":["What time is it?","What''s + the current time in Tokyo?","What''s today''s date in New York?"],"id":"time","name":"Current + Time","tags":["time","date","timezone"]}],"url":"http://localhost:9999","version":"1.0.0"}' + headers: + content-length: + - '1272' + content-type: + - application/json + date: + - Fri, 30 Jan 2026 13:53:54 GMT + server: + - uvicorn + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Delegate to the remote A2A agent to explain quantum computing in simple + terms.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1387' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jEZCk72BTnPd76lgJx3flraf53g\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781235,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Can + you please explain quantum computing in simple terms?\\\",\\\"is_a2a\\\":true}\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 277,\n \"completion_tokens\": 47,\n \"total_tokens\": 324,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:56 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '983' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"8e89c366-f0bb-4530-9733-c340afcf44a1","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"09d169ad-1c41-486f-a1f6-db36f774a08e","parts":[{"kind":"text","text":"Can + you please explain quantum computing in simple terms?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '384' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"8e89c366-f0bb-4530-9733-c340afcf44a1\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"aca5807e-55ea-4d81-9bb0-a621788e2f8b\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"219a3bad-5c8e-4903-9a4a-6bb8f6067f0d\"}}\r\n\r\ndata: + {\"id\":\"8e89c366-f0bb-4530-9733-c340afcf44a1\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"aca5807e-55ea-4d81-9bb0-a621788e2f8b\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"219a3bad-5c8e-4903-9a4a-6bb8f6067f0d\"}}\r\n\r\ndata: + {\"id\":\"8e89c366-f0bb-4530-9733-c340afcf44a1\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"aca5807e-55ea-4d81-9bb0-a621788e2f8b\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"4cf44be0-a3ce-4a86-a801-6224f81f6c6a\",\"parts\":[{\"kind\":\"text\",\"text\":\"Quantum + computing is a type of computing that uses the principles of quantum mechanics + to process information in a fundamentally different way than traditional computers. + \\n\\n1. **Bits vs. Qubits**: Traditional computers use bits as the smallest + unit of data, which can either be a 0 or a 1. Quantum computers use qubits, + which can be both 0 and 1 at the same time, thanks to a phenomenon called + superposition.\\n\\n2. **Superposition**: This ability to be in multiple states + simultaneously allows quantum computers to process a vast amount of possibilities + at once.\\n\\n3. **Entanglement**: Qubits can also be entangled, meaning the + state of one qubit can depend on the state of another, no matter how far apart + they are. This feature enables complex computations that are not possible + with classical computers.\\n\\n4. **Parallelism**: Because of superposition + and entanglement, quantum computers can perform many calculations at the same + time, making them potentially much faster for specific tasks compared to classical + computers.\\n\\nIn summary, quantum computing harnesses the strange and powerful + properties of quantum mechanics to process information in a way that could + solve complex problems much more efficiently than traditional computers.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"219a3bad-5c8e-4903-9a4a-6bb8f6067f0d\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:53:55 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Delegate to the remote A2A agent to explain quantum computing in simple + terms.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1387' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jEjMZDxvGCpJTZptzz1lAV5Ruhh\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781245,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Please + explain quantum computing in simple terms that are easy for anyone to understand.\\\",\\\"is_a2a\\\":true}\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 277,\n \"completion_tokens\": 51,\n \"total_tokens\": 328,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:06 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '932' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"3e61c6cc-3654-46ce-a15c-433fef9e1ff1","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"fee95c54-616c-45f4-b0b7-080a8535a4e2","parts":[{"kind":"text","text":"Please + explain quantum computing in simple terms that are easy for anyone to understand."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '415' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"3e61c6cc-3654-46ce-a15c-433fef9e1ff1\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"774a88f1-2738-41e4-b99e-87e8733a4597\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"a7f3c465-f5b1-4b69-a697-d422adf1e766\"}}\r\n\r\ndata: + {\"id\":\"3e61c6cc-3654-46ce-a15c-433fef9e1ff1\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"774a88f1-2738-41e4-b99e-87e8733a4597\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"a7f3c465-f5b1-4b69-a697-d422adf1e766\"}}\r\n\r\ndata: + {\"id\":\"3e61c6cc-3654-46ce-a15c-433fef9e1ff1\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"774a88f1-2738-41e4-b99e-87e8733a4597\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"89fa51b4-6e41-4590-ae1f-ffe19068ff75\",\"parts\":[{\"kind\":\"text\",\"text\":\"Quantum + computing is a type of computing that uses the principles of quantum mechanics, + a branch of physics that deals with very small particles like atoms and photons. + \\n\\nHere\u2019s a simple breakdown:\\n1. **Bits vs. Qubits**: Traditional + computers use bits as the smallest unit of data, which can be either a 0 or + a 1. Quantum computers use quantum bits, or qubits, which can be both 0 and + 1 at the same time thanks to a property called superposition.\\n\\n2. **Superposition**: + Imagine spinning a coin. While it\u2019s spinning, it\u2019s not just heads + or tails; it\u2019s in some way both until you stop it. Qubits can exist in + multiple states at once, allowing quantum computers to process a lot of information + simultaneously.\\n\\n3. **Entanglement**: This is another unique property + of quantum mechanics. When qubits become entangled, the state of one qubit + becomes linked to the state of another, no matter how far apart they are. + This means changing one qubit can instantly affect the other, enabling powerful + computations.\\n\\n4. **Quantum Speedup**: Because of superposition and entanglement, + quantum computers can solve certain problems much faster than classical computers. + This includes problems in cryptography, optimization, and simulations of molecular + structures.\\n\\nIn summary, quantum computing leverages the strange rules + of quantum physics to manipulate data in a way that classical computers can't, + potentially making them much more powerful for certain tasks.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"a7f3c465-f5b1-4b69-a697-d422adf1e766\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:54:06 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Delegate to the remote A2A agent to explain quantum computing in simple + terms.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1387' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jEwtEsNqmLAA86mD8iOEKiIxri4\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781258,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Please + explain quantum computing in simple terms suitable for someone with no technical + background.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n \"annotations\": + []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n + \ }\n ],\n \"usage\": {\n \"prompt_tokens\": 277,\n \"completion_tokens\": + 51,\n \"total_tokens\": 328,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:20 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '2125' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"b1067e98-e5fd-4948-ba91-3c88a101c632","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"bb50cbc5-0298-4550-8feb-b58e974a10ad","parts":[{"kind":"text","text":"Please + explain quantum computing in simple terms suitable for someone with no technical + background."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '426' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"b1067e98-e5fd-4948-ba91-3c88a101c632\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"5fc45f44-28ac-43eb-afb7-744d6b0f7efc\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"8a1920a4-9060-4443-8858-39d85c940298\"}}\r\n\r\ndata: + {\"id\":\"b1067e98-e5fd-4948-ba91-3c88a101c632\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"5fc45f44-28ac-43eb-afb7-744d6b0f7efc\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"8a1920a4-9060-4443-8858-39d85c940298\"}}\r\n\r\ndata: + {\"id\":\"b1067e98-e5fd-4948-ba91-3c88a101c632\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"5fc45f44-28ac-43eb-afb7-744d6b0f7efc\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"b35eb686-1bba-4f44-90ec-e17cbd04ac5b\",\"parts\":[{\"kind\":\"text\",\"text\":\"Quantum + computing is a new type of computing that uses the principles of quantum mechanics, + which is the science that explains how very small particles, like atoms and + photons, behave. \\n\\nIn classical computing, information is stored in bits, + which can either be a 0 or a 1. Think of it like a light switch that can either + be off (0) or on (1). In contrast, quantum computing uses quantum bits or + qubits. A qubit can be both 0 and 1 at the same time, thanks to a property + called superposition. \\n\\nMoreover, qubits can also be linked together through + a phenomenon known as entanglement, which allows them to work together in + ways that classical bits cannot. This means that quantum computers can process + a vast amount of information much more quickly than regular computers for + certain tasks. \\n\\nIn simple terms, while a regular computer is like a very + fast and precise librarian, a quantum computer is like a super librarian with + many hands, allowing it to explore numerous possibilities at once. This enables + quantum computers to solve complex problems much faster, such as factoring + large numbers, optimizing logistics, or simulating molecular structures in + drug discovery. However, they're still in the early stages of development + and are not yet widely used in everyday applications.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"8a1920a4-9060-4443-8858-39d85c940298\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:54:19 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Delegate to the remote A2A agent to explain quantum computing in simple + terms.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1387' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jF9KeiOZVzcBBNIQnjKnpJzAQ4z\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781271,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Could + you please explain quantum computing in simple terms suitable for a beginner?\\\",\\\"is_a2a\\\":true}\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 277,\n \"completion_tokens\": 51,\n \"total_tokens\": 328,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:33 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '1570' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_failed_a2a_endpoint.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_failed_a2a_endpoint.yaml new file mode 100644 index 000000000..9c7472b63 --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_failed_a2a_endpoint.yaml @@ -0,0 +1,108 @@ +interactions: +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher\nYour personal goal is: Find information"},{"role":"user","content":"\nCurrent + Task: What is 2 + 2?\n\nProvide your complete response:"}],"model":"gpt-4.1-mini"}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '246' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jGUmpP5usJjNny4N4AdOIZPhhFZ\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781354,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The sum of 2 + 2 is 4.\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 43,\n \"completion_tokens\": 12,\n \"total_tokens\": 55,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:55:55 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '438' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_list_messages.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_list_messages.yaml new file mode 100644 index 000000000..6dc655a00 --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_kickoff_with_list_messages.yaml @@ -0,0 +1,623 @@ +interactions: +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Delegate to the A2A agent to find the current time in Tokyo.\n\nProvide + your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1369' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFOA4Yj6PWEJGejSeUYVfvtrsda\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781286,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time in Tokyo?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 276,\n \"completion_tokens\": 45,\n \"total_tokens\": 321,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:47 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '730' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"a9a976c9-370b-46ad-bfe7-b6115bbf6dea","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"bea4ac3a-8757-4d50-bca0-6bdf5fd65aff","parts":[{"kind":"text","text":"What + is the current time in Tokyo?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '361' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"a9a976c9-370b-46ad-bfe7-b6115bbf6dea\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"ab9cb255-cbc4-42ae-85ec-51df9cdfcb33\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"5b176214-688d-49af-9de4-4013822a36ed\"}}\r\n\r\ndata: + {\"id\":\"a9a976c9-370b-46ad-bfe7-b6115bbf6dea\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"ab9cb255-cbc4-42ae-85ec-51df9cdfcb33\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"5b176214-688d-49af-9de4-4013822a36ed\"}}\r\n\r\ndata: + {\"id\":\"a9a976c9-370b-46ad-bfe7-b6115bbf6dea\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"ab9cb255-cbc4-42ae-85ec-51df9cdfcb33\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"38eb8783-d284-4c03-91a5-74dc5ad92502\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + get_time] 2026-01-30 22:54:47 JST (Asia/Tokyo)\\nThe current time in Tokyo + is 22:54 (10:54 PM) JST on January 30, 2026.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"5b176214-688d-49af-9de4-4013822a36ed\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:54:46 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Delegate to the A2A agent to find the current time in Tokyo.\n\nProvide + your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1369' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFRhymGpy4exif1473yrSiQetC8\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781289,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time in Tokyo?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 276,\n \"completion_tokens\": 45,\n \"total_tokens\": 321,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:50 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '918' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"d5adb317-9ccc-4a00-a3bc-76fd53318d6e","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"ae08e6e1-3e93-4c1a-b241-ccf14f47aecd","parts":[{"kind":"text","text":"What + is the current time in Tokyo?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '361' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"d5adb317-9ccc-4a00-a3bc-76fd53318d6e\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"76c7c23b-c088-48f9-a517-47037b08f4b4\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"26f6752d-a67c-4928-9981-ef00831caa20\"}}\r\n\r\ndata: + {\"id\":\"d5adb317-9ccc-4a00-a3bc-76fd53318d6e\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"76c7c23b-c088-48f9-a517-47037b08f4b4\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"26f6752d-a67c-4928-9981-ef00831caa20\"}}\r\n\r\ndata: + {\"id\":\"d5adb317-9ccc-4a00-a3bc-76fd53318d6e\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"76c7c23b-c088-48f9-a517-47037b08f4b4\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"f119e774-02bb-4c92-8684-c7c3f69867b7\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + get_time] 2026-01-30 22:54:51 JST (Asia/Tokyo)\\nThe current time in Tokyo + is 22:54 (10:54 PM) JST on January 30, 2026.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"26f6752d-a67c-4928-9981-ef00831caa20\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:54:50 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Delegate to the A2A agent to find the current time in Tokyo.\n\nProvide + your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1369' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFVLRII9zhvNapGsIev63MNMfvU\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781293,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time in Tokyo?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 276,\n \"completion_tokens\": 45,\n \"total_tokens\": 321,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_38699cb0fe\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:54 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '865' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"b28b963c-638b-4be3-a111-896f8e9164ef","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"60818427-7e73-4306-b639-f4b0733aedfe","parts":[{"kind":"text","text":"What + is the current time in Tokyo?"}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '361' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"b28b963c-638b-4be3-a111-896f8e9164ef\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"b3bca9d9-0e9d-4ae1-bc88-a510f56dd254\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"643deb57-f539-4c70-b228-7ae29f18b3d4\"}}\r\n\r\ndata: + {\"id\":\"b28b963c-638b-4be3-a111-896f8e9164ef\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"b3bca9d9-0e9d-4ae1-bc88-a510f56dd254\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"643deb57-f539-4c70-b228-7ae29f18b3d4\"}}\r\n\r\ndata: + {\"id\":\"b28b963c-638b-4be3-a111-896f8e9164ef\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"b3bca9d9-0e9d-4ae1-bc88-a510f56dd254\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"65847915-f2f0-4d4c-be3c-a2770f03dfe9\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + get_time] 2026-01-30 22:54:55 JST (Asia/Tokyo)\\nThe current time in Tokyo + is 22:54:55 JST on January 30, 2026.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"643deb57-f539-4c70-b228-7ae29f18b3d4\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:54:54 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote specialized agents\nYour personal goal is: + Find and analyze information about AI developments"},{"role":"user","content":"\nCurrent + Task: Delegate to the A2A agent to find the current time in Tokyo.\n\nProvide + your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1369' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jFZ7bub61EYyd7CnhKJXftnSMo1\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781297,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"What + is the current time in Tokyo?\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 276,\n \"completion_tokens\": 45,\n \"total_tokens\": 321,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:54:58 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '886' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_without_a2a_works_normally.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_without_a2a_works_normally.yaml new file mode 100644 index 000000000..a89b904f1 --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoff.test_agent_without_a2a_works_normally.yaml @@ -0,0 +1,108 @@ +interactions: +- request: + body: '{"messages":[{"role":"system","content":"You are Simple Assistant. A helpful + assistant\nYour personal goal is: Help with basic tasks"},{"role":"user","content":"\nCurrent + Task: Say hello\n\nProvide your complete response:"}],"model":"gpt-4.1-mini"}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '248' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jEYk4JMmw8yOeAGns6bKtAId8bH\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781234,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"Hello! How can I assist you today?\",\n + \ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 41,\n \"completion_tokens\": 9,\n \"total_tokens\": 50,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:54 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '412' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoffAsync.test_agent_kickoff_async_delegates_to_a2a.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoffAsync.test_agent_kickoff_async_delegates_to_a2a.yaml new file mode 100644 index 000000000..3d49031fe --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoffAsync.test_agent_kickoff_async_delegates_to_a2a.yaml @@ -0,0 +1,616 @@ +interactions: +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote agents\nYour personal goal is: Find and analyze + information"},{"role":"user","content":"\nCurrent Task: Use the remote A2A agent + to calculate 10 plus 15.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1324' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jEMeqhmMj6BONvp52OoHEswH8Qp\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781222,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Please + calculate 10 plus 15.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 272,\n \"completion_tokens\": + 44,\n \"total_tokens\": 316,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:43 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '1002' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"67a4ed9d-faa7-47c2-a7ff-0c14003b719b","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"afde435c-be5e-42cd-9bb3-51f8d029c513","parts":[{"kind":"text","text":"Please + calculate 10 plus 15."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '355' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"67a4ed9d-faa7-47c2-a7ff-0c14003b719b\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"27c6694d-4b88-46f7-8187-7517aba2d625\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"8a133424-4936-44ce-8b71-e014182442cc\"}}\r\n\r\ndata: + {\"id\":\"67a4ed9d-faa7-47c2-a7ff-0c14003b719b\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"27c6694d-4b88-46f7-8187-7517aba2d625\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"8a133424-4936-44ce-8b71-e014182442cc\"}}\r\n\r\ndata: + {\"id\":\"67a4ed9d-faa7-47c2-a7ff-0c14003b719b\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"27c6694d-4b88-46f7-8187-7517aba2d625\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"e93da13b-98a1-40d4-aa44-a3eb1b22a3fd\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + calculator] 10 + 15 = 25\\nThe result of 10 plus 15 is 25.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"8a133424-4936-44ce-8b71-e014182442cc\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:53:43 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote agents\nYour personal goal is: Find and analyze + information"},{"role":"user","content":"\nCurrent Task: Use the remote A2A agent + to calculate 10 plus 15.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1324' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jEQpmgfxkHfFd07HJRcngcqyLQf\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781226,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Please + calculate 10 plus 15.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 272,\n \"completion_tokens\": + 44,\n \"total_tokens\": 316,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:46 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '823' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"65d41f18-6af2-4025-b7b8-e671c071d282","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"0a136204-0f29-4b5e-aef1-a0886590b241","parts":[{"kind":"text","text":"Please + calculate 10 plus 15."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '355' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"65d41f18-6af2-4025-b7b8-e671c071d282\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"876faef7-7df5-42cf-9bda-cde027a56d0a\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"7ddd7cc5-2315-4aae-9cc8-52019642c23e\"}}\r\n\r\ndata: + {\"id\":\"65d41f18-6af2-4025-b7b8-e671c071d282\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"876faef7-7df5-42cf-9bda-cde027a56d0a\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"7ddd7cc5-2315-4aae-9cc8-52019642c23e\"}}\r\n\r\ndata: + {\"id\":\"65d41f18-6af2-4025-b7b8-e671c071d282\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"876faef7-7df5-42cf-9bda-cde027a56d0a\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"2060c3ad-07a4-4f09-afcb-bb6114128b46\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + calculator] 10 + 15 = 25\\nThe result of 10 plus 15 is 25.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"7ddd7cc5-2315-4aae-9cc8-52019642c23e\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:53:46 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote agents\nYour personal goal is: Find and analyze + information"},{"role":"user","content":"\nCurrent Task: Use the remote A2A agent + to calculate 10 plus 15.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1324' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jETAM2THPraxoRQnGmw7NVXLCbF\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781229,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Calculate + the sum of 10 and 15.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 272,\n \"completion_tokens\": + 46,\n \"total_tokens\": 318,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:50 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '964' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"4b77421f-a7ad-459c-89be-8fc0990659ca","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"8fcfce9a-0561-466f-8825-b761b1824e7c","parts":[{"kind":"text","text":"Calculate + the sum of 10 and 15."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '358' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"4b77421f-a7ad-459c-89be-8fc0990659ca\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"be79af13-4d13-4574-8d92-d92ab2713d49\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"12070e13-e15a-48d9-879a-748b21189a8d\"}}\r\n\r\ndata: + {\"id\":\"4b77421f-a7ad-459c-89be-8fc0990659ca\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"be79af13-4d13-4574-8d92-d92ab2713d49\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"12070e13-e15a-48d9-879a-748b21189a8d\"}}\r\n\r\ndata: + {\"id\":\"4b77421f-a7ad-459c-89be-8fc0990659ca\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"be79af13-4d13-4574-8d92-d92ab2713d49\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"36010d61-c4af-4b31-a7f0-15ae6b61de0a\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + calculator] 10 + 15 = 25\\nThe sum of 10 and 15 is 25.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"12070e13-e15a-48d9-879a-748b21189a8d\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:53:49 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote agents\nYour personal goal is: Find and analyze + information"},{"role":"user","content":"\nCurrent Task: Use the remote A2A agent + to calculate 10 plus 15.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1324' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jEXruhxxf838JOhcjuSrsw5cKNl\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781233,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Calculate + the sum of 10 plus 15.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 272,\n \"completion_tokens\": + 46,\n \"total_tokens\": 318,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:54 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '1054' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoffAsync.test_agent_kickoff_async_with_calculator.yaml b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoffAsync.test_agent_kickoff_async_with_calculator.yaml new file mode 100644 index 000000000..98142d19d --- /dev/null +++ b/lib/crewai/tests/cassettes/agents/TestAgentA2AKickoffAsync.test_agent_kickoff_async_with_calculator.yaml @@ -0,0 +1,700 @@ +interactions: +- request: + body: '' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*' + accept-encoding: + - ACCEPT-ENCODING-XXX + connection: + - keep-alive + host: + - 0.0.0.0:9999 + method: GET + uri: http://0.0.0.0:9999/.well-known/agent-card.json + response: + body: + string: '{"capabilities":{"pushNotifications":true,"streaming":true},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["text/plain","application/json"],"description":"An + AI assistant powered by OpenAI GPT with calculator and time tools. Ask questions, + perform calculations, or get the current time in any timezone.","name":"GPT + Assistant","preferredTransport":"JSONRPC","protocolVersion":"0.3.0","skills":[{"description":"Have + a general conversation with the AI assistant. Ask questions, get explanations, + or just chat.","examples":["Hello, how are you?","Explain quantum computing + in simple terms","What can you help me with?"],"id":"conversation","name":"General + Conversation","tags":["chat","conversation","general"]},{"description":"Perform + mathematical calculations including arithmetic, exponents, and more.","examples":["What + is 25 * 17?","Calculate 2^10","What''s (100 + 50) / 3?"],"id":"calculator","name":"Calculator","tags":["math","calculator","arithmetic"]},{"description":"Get + the current date and time in any timezone.","examples":["What time is it?","What''s + the current time in Tokyo?","What''s today''s date in New York?"],"id":"time","name":"Current + Time","tags":["time","date","timezone"]}],"url":"http://localhost:9999","version":"1.0.0"}' + headers: + content-length: + - '1272' + content-type: + - application/json + date: + - Fri, 30 Jan 2026 13:53:25 GMT + server: + - uvicorn + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote agents\nYour personal goal is: Find and analyze + information"},{"role":"user","content":"\nCurrent Task: Ask the A2A agent to + calculate 100 divided by 4.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1323' + content-type: + - application/json + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jE6wnR5kKEYmPD3DVfGlrZSNhR9\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781206,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Calculate + 100 divided by 4.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 272,\n \"completion_tokens\": + 44,\n \"total_tokens\": 316,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:27 GMT + Server: + - cloudflare + Set-Cookie: + - SET-COOKIE-XXX + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '707' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*' + accept-encoding: + - ACCEPT-ENCODING-XXX + connection: + - keep-alive + host: + - 0.0.0.0:9999 + method: GET + uri: http://0.0.0.0:9999/.well-known/agent-card.json + response: + body: + string: '{"capabilities":{"pushNotifications":true,"streaming":true},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["text/plain","application/json"],"description":"An + AI assistant powered by OpenAI GPT with calculator and time tools. Ask questions, + perform calculations, or get the current time in any timezone.","name":"GPT + Assistant","preferredTransport":"JSONRPC","protocolVersion":"0.3.0","skills":[{"description":"Have + a general conversation with the AI assistant. Ask questions, get explanations, + or just chat.","examples":["Hello, how are you?","Explain quantum computing + in simple terms","What can you help me with?"],"id":"conversation","name":"General + Conversation","tags":["chat","conversation","general"]},{"description":"Perform + mathematical calculations including arithmetic, exponents, and more.","examples":["What + is 25 * 17?","Calculate 2^10","What''s (100 + 50) / 3?"],"id":"calculator","name":"Calculator","tags":["math","calculator","arithmetic"]},{"description":"Get + the current date and time in any timezone.","examples":["What time is it?","What''s + the current time in Tokyo?","What''s today''s date in New York?"],"id":"time","name":"Current + Time","tags":["time","date","timezone"]}],"url":"http://localhost:9999","version":"1.0.0"}' + headers: + content-length: + - '1272' + content-type: + - application/json + date: + - Fri, 30 Jan 2026 13:53:27 GMT + server: + - uvicorn + status: + code: 200 + message: OK +- request: + body: '{"id":"e57a2dcb-f8ab-4cca-a9db-419c812895df","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"dc079756-dd5a-4c0d-82e4-ecd75b3ccf80","parts":[{"kind":"text","text":"Calculate + 100 divided by 4."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '354' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"e57a2dcb-f8ab-4cca-a9db-419c812895df\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"191d29a9-4b74-483e-aafc-56852d143c47\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"62bd40f6-cb9a-447b-9cb4-0e7dc55847ff\"}}\r\n\r\ndata: + {\"id\":\"e57a2dcb-f8ab-4cca-a9db-419c812895df\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"191d29a9-4b74-483e-aafc-56852d143c47\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"62bd40f6-cb9a-447b-9cb4-0e7dc55847ff\"}}\r\n\r\ndata: + {\"id\":\"e57a2dcb-f8ab-4cca-a9db-419c812895df\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"191d29a9-4b74-483e-aafc-56852d143c47\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"cfdd36ae-73d7-416f-aa84-447e59293839\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + calculator] 100 / 4 = 25.0\\n100 divided by 4 is 25.0.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"62bd40f6-cb9a-447b-9cb4-0e7dc55847ff\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:53:27 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote agents\nYour personal goal is: Find and analyze + information"},{"role":"user","content":"\nCurrent Task: Ask the A2A agent to + calculate 100 divided by 4.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1323' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jEBY3yIu050RsylIGHOW0FKUT5f\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781211,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Please + calculate 100 divided by 4.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": + null,\n \"annotations\": []\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 272,\n \"completion_tokens\": 45,\n \"total_tokens\": 317,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:32 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '847' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"9b0911f0-c3ad-4b84-bd6c-557de6d598e5","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"181218b4-0f76-48f0-a08c-feaf98bca6d5","parts":[{"kind":"text","text":"Please + calculate 100 divided by 4."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '361' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"9b0911f0-c3ad-4b84-bd6c-557de6d598e5\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"e178978b-82ad-4592-a46a-ceaabe7fa249\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"5e7ad040-e0ef-4371-9661-3d65b0263806\"}}\r\n\r\ndata: + {\"id\":\"9b0911f0-c3ad-4b84-bd6c-557de6d598e5\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"e178978b-82ad-4592-a46a-ceaabe7fa249\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"5e7ad040-e0ef-4371-9661-3d65b0263806\"}}\r\n\r\ndata: + {\"id\":\"9b0911f0-c3ad-4b84-bd6c-557de6d598e5\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"e178978b-82ad-4592-a46a-ceaabe7fa249\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"a36e19fd-eb78-45b9-bff0-93a9bcc6af28\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + calculator] 100 / 4 = 25.0\\n100 divided by 4 is 25.0.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"5e7ad040-e0ef-4371-9661-3d65b0263806\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:53:31 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote agents\nYour personal goal is: Find and analyze + information"},{"role":"user","content":"\nCurrent Task: Ask the A2A agent to + calculate 100 divided by 4.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1323' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jEGe4xGriXMhFwcKlE1yKn8hyn8\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781216,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Calculate + 100 divided by 4.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 272,\n \"completion_tokens\": + 44,\n \"total_tokens\": 316,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:37 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '911' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +- request: + body: '{"id":"a2e53785-6418-4040-a368-4501952de271","jsonrpc":"2.0","method":"message/stream","params":{"configuration":{"acceptedOutputModes":["application/json"],"blocking":true},"message":{"kind":"message","messageId":"98f4aca2-2543-4c02-a89f-a09693f7dc01","parts":[{"kind":"text","text":"Calculate + 100 divided by 4."}],"referenceTaskIds":[],"role":"user"}}}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - '*/*, text/event-stream' + accept-encoding: + - ACCEPT-ENCODING-XXX + cache-control: + - no-store + connection: + - keep-alive + content-length: + - '354' + content-type: + - application/json + host: + - localhost:9999 + method: POST + uri: http://localhost:9999 + response: + body: + string: "data: {\"id\":\"a2e53785-6418-4040-a368-4501952de271\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"0f946602-edc7-4f21-bbbb-ee6a2e49d9f8\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"submitted\"},\"taskId\":\"97aac2ac-ba0e-4784-bb20-f1b5c44ebb14\"}}\r\n\r\ndata: + {\"id\":\"a2e53785-6418-4040-a368-4501952de271\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"0f946602-edc7-4f21-bbbb-ee6a2e49d9f8\",\"final\":false,\"kind\":\"status-update\",\"status\":{\"state\":\"working\"},\"taskId\":\"97aac2ac-ba0e-4784-bb20-f1b5c44ebb14\"}}\r\n\r\ndata: + {\"id\":\"a2e53785-6418-4040-a368-4501952de271\",\"jsonrpc\":\"2.0\",\"result\":{\"contextId\":\"0f946602-edc7-4f21-bbbb-ee6a2e49d9f8\",\"final\":true,\"kind\":\"status-update\",\"status\":{\"message\":{\"kind\":\"message\",\"messageId\":\"cb58a105-b88d-49c7-bebd-7add42086b8e\",\"parts\":[{\"kind\":\"text\",\"text\":\"[Tool: + calculator] 100 / 4 = 25.0\\n100 divided by 4 is 25.\"}],\"role\":\"agent\"},\"state\":\"completed\"},\"taskId\":\"97aac2ac-ba0e-4784-bb20-f1b5c44ebb14\"}}\r\n\r\n" + headers: + cache-control: + - no-store + connection: + - keep-alive + content-type: + - text/event-stream; charset=utf-8 + date: + - Fri, 30 Jan 2026 13:53:37 GMT + server: + - uvicorn + transfer-encoding: + - chunked + x-accel-buffering: + - 'no' + status: + code: 200 + message: OK +- request: + body: '{"messages":[{"role":"system","content":"You are Research Analyst. Expert + researcher with access to remote agents\nYour personal goal is: Find and analyze + information"},{"role":"user","content":"\nCurrent Task: Ask the A2A agent to + calculate 100 divided by 4.\n\nProvide your complete response:"}],"model":"gpt-4.1-mini","response_format":{"type":"json_schema","json_schema":{"schema":{"properties":{"a2a_ids":{"description":"A2A + agent IDs to delegate to.","items":{"const":"http://0.0.0.0:9999/.well-known/agent-card.json","type":"string"},"maxItems":1,"title":"A2A + Ids","type":"array"},"message":{"description":"The message content. If is_a2a=true, + this is sent to the A2A agent. If is_a2a=false, this is your final answer ending + the conversation.","title":"Message","type":"string"},"is_a2a":{"description":"Set + to false when the remote agent has answered your question - extract their answer + and return it as your final message. Set to true ONLY if you need to ask a NEW, + DIFFERENT question. NEVER repeat the same request - if the conversation history + shows the agent already answered, set is_a2a=false immediately.","title":"Is + A2A","type":"boolean"}},"required":["a2a_ids","message","is_a2a"],"title":"AgentResponse","type":"object","additionalProperties":false},"name":"AgentResponse","strict":true}},"stream":false}' + headers: + User-Agent: + - X-USER-AGENT-XXX + accept: + - application/json + accept-encoding: + - ACCEPT-ENCODING-XXX + authorization: + - AUTHORIZATION-XXX + connection: + - keep-alive + content-length: + - '1323' + content-type: + - application/json + cookie: + - COOKIE-XXX + host: + - api.openai.com + x-stainless-arch: + - X-STAINLESS-ARCH-XXX + x-stainless-async: + - 'false' + x-stainless-helper-method: + - beta.chat.completions.parse + x-stainless-lang: + - python + x-stainless-os: + - X-STAINLESS-OS-XXX + x-stainless-package-version: + - 1.83.0 + x-stainless-read-timeout: + - X-STAINLESS-READ-TIMEOUT-XXX + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.10 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: "{\n \"id\": \"chatcmpl-D3jELCM5f5LgexzQ8gSreUb0jzxJP\",\n \"object\": + \"chat.completion\",\n \"created\": 1769781221,\n \"model\": \"gpt-4.1-mini-2025-04-14\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"{\\\"a2a_ids\\\":[\\\"http://0.0.0.0:9999/.well-known/agent-card.json\\\"],\\\"message\\\":\\\"Calculate + 100 divided by 4.\\\",\\\"is_a2a\\\":true}\",\n \"refusal\": null,\n + \ \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 272,\n \"completion_tokens\": + 44,\n \"total_tokens\": 316,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_e01c6f58e1\"\n}\n" + headers: + CF-RAY: + - CF-RAY-XXX + Connection: + - keep-alive + Content-Type: + - application/json + Date: + - Fri, 30 Jan 2026 13:53:42 GMT + Server: + - cloudflare + Strict-Transport-Security: + - STS-XXX + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - X-CONTENT-TYPE-XXX + access-control-expose-headers: + - ACCESS-CONTROL-XXX + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - OPENAI-ORG-XXX + openai-processing-ms: + - '826' + openai-project: + - OPENAI-PROJECT-XXX + openai-version: + - '2020-10-01' + x-openai-proxy-wasm: + - v0.1 + x-ratelimit-limit-requests: + - X-RATELIMIT-LIMIT-REQUESTS-XXX + x-ratelimit-limit-tokens: + - X-RATELIMIT-LIMIT-TOKENS-XXX + x-ratelimit-remaining-requests: + - X-RATELIMIT-REMAINING-REQUESTS-XXX + x-ratelimit-remaining-tokens: + - X-RATELIMIT-REMAINING-TOKENS-XXX + x-ratelimit-reset-requests: + - X-RATELIMIT-RESET-REQUESTS-XXX + x-ratelimit-reset-tokens: + - X-RATELIMIT-RESET-TOKENS-XXX + x-request-id: + - X-REQUEST-ID-XXX + status: + code: 200 + message: OK +version: 1