aip-agents-binary 0.6.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of aip-agents-binary might be problematic. Click here for more details.
- aip_agents/__init__.py +65 -0
- aip_agents/__init__.pyi +19 -0
- aip_agents/a2a/__init__.py +19 -0
- aip_agents/a2a/__init__.pyi +3 -0
- aip_agents/a2a/server/__init__.py +10 -0
- aip_agents/a2a/server/__init__.pyi +4 -0
- aip_agents/a2a/server/base_executor.py +1086 -0
- aip_agents/a2a/server/base_executor.pyi +73 -0
- aip_agents/a2a/server/google_adk_executor.py +198 -0
- aip_agents/a2a/server/google_adk_executor.pyi +51 -0
- aip_agents/a2a/server/langflow_executor.py +180 -0
- aip_agents/a2a/server/langflow_executor.pyi +43 -0
- aip_agents/a2a/server/langgraph_executor.py +270 -0
- aip_agents/a2a/server/langgraph_executor.pyi +47 -0
- aip_agents/a2a/types.py +232 -0
- aip_agents/a2a/types.pyi +132 -0
- aip_agents/agent/__init__.py +27 -0
- aip_agents/agent/__init__.pyi +9 -0
- aip_agents/agent/base_agent.py +970 -0
- aip_agents/agent/base_agent.pyi +221 -0
- aip_agents/agent/base_langgraph_agent.py +3037 -0
- aip_agents/agent/base_langgraph_agent.pyi +233 -0
- aip_agents/agent/google_adk_agent.py +926 -0
- aip_agents/agent/google_adk_agent.pyi +141 -0
- aip_agents/agent/google_adk_constants.py +6 -0
- aip_agents/agent/google_adk_constants.pyi +3 -0
- aip_agents/agent/hitl/__init__.py +24 -0
- aip_agents/agent/hitl/__init__.pyi +6 -0
- aip_agents/agent/hitl/config.py +28 -0
- aip_agents/agent/hitl/config.pyi +15 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
- aip_agents/agent/hitl/manager.py +532 -0
- aip_agents/agent/hitl/manager.pyi +200 -0
- aip_agents/agent/hitl/models.py +18 -0
- aip_agents/agent/hitl/models.pyi +3 -0
- aip_agents/agent/hitl/prompt/__init__.py +9 -0
- aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
- aip_agents/agent/hitl/prompt/base.py +42 -0
- aip_agents/agent/hitl/prompt/base.pyi +24 -0
- aip_agents/agent/hitl/prompt/deferred.py +73 -0
- aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
- aip_agents/agent/hitl/registry.py +149 -0
- aip_agents/agent/hitl/registry.pyi +101 -0
- aip_agents/agent/interface.py +138 -0
- aip_agents/agent/interface.pyi +81 -0
- aip_agents/agent/interfaces.py +65 -0
- aip_agents/agent/interfaces.pyi +44 -0
- aip_agents/agent/langflow_agent.py +464 -0
- aip_agents/agent/langflow_agent.pyi +133 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.py +767 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.pyi +50 -0
- aip_agents/agent/langgraph_react_agent.py +2856 -0
- aip_agents/agent/langgraph_react_agent.pyi +170 -0
- aip_agents/agent/system_instruction_context.py +34 -0
- aip_agents/agent/system_instruction_context.pyi +13 -0
- aip_agents/clients/__init__.py +10 -0
- aip_agents/clients/__init__.pyi +4 -0
- aip_agents/clients/langflow/__init__.py +10 -0
- aip_agents/clients/langflow/__init__.pyi +4 -0
- aip_agents/clients/langflow/client.py +477 -0
- aip_agents/clients/langflow/client.pyi +140 -0
- aip_agents/clients/langflow/types.py +18 -0
- aip_agents/clients/langflow/types.pyi +7 -0
- aip_agents/constants.py +23 -0
- aip_agents/constants.pyi +7 -0
- aip_agents/credentials/manager.py +132 -0
- aip_agents/examples/__init__.py +5 -0
- aip_agents/examples/__init__.pyi +0 -0
- aip_agents/examples/compare_streaming_client.py +783 -0
- aip_agents/examples/compare_streaming_client.pyi +48 -0
- aip_agents/examples/compare_streaming_server.py +142 -0
- aip_agents/examples/compare_streaming_server.pyi +18 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
- aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
- aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
- aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_google_adk.py +41 -0
- aip_agents/examples/hello_world_google_adk.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_stream.py +44 -0
- aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain.py +28 -0
- aip_agents/examples/hello_world_langchain.pyi +5 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream.py +36 -0
- aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_langflow_agent.py +163 -0
- aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
- aip_agents/examples/hello_world_langgraph.py +39 -0
- aip_agents/examples/hello_world_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream.py +43 -0
- aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_model_switch_cli.py +210 -0
- aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
- aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
- aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
- aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
- aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_pii_logger.py +21 -0
- aip_agents/examples/hello_world_pii_logger.pyi +5 -0
- aip_agents/examples/hello_world_ptc.py +49 -0
- aip_agents/examples/hello_world_ptc.pyi +5 -0
- aip_agents/examples/hello_world_sentry.py +133 -0
- aip_agents/examples/hello_world_sentry.pyi +21 -0
- aip_agents/examples/hello_world_step_limits.py +273 -0
- aip_agents/examples/hello_world_step_limits.pyi +17 -0
- aip_agents/examples/hello_world_stock_a2a_server.py +103 -0
- aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
- aip_agents/examples/hello_world_tool_output_client.py +55 -0
- aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
- aip_agents/examples/hello_world_tool_output_server.py +114 -0
- aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
- aip_agents/examples/hitl_demo.py +724 -0
- aip_agents/examples/hitl_demo.pyi +67 -0
- aip_agents/examples/mcp_configs/configs.py +63 -0
- aip_agents/examples/mcp_servers/common.py +76 -0
- aip_agents/examples/mcp_servers/mcp_name.py +29 -0
- aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
- aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
- aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
- aip_agents/examples/mcp_servers/mcp_time.py +10 -0
- aip_agents/examples/pii_demo_langgraph_client.py +69 -0
- aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
- aip_agents/examples/pii_demo_langgraph_server.py +126 -0
- aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
- aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
- aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
- aip_agents/examples/pii_demo_multi_agent_server.py +247 -0
- aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.py +88 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
- aip_agents/examples/tools/__init__.py +27 -0
- aip_agents/examples/tools/__init__.pyi +9 -0
- aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
- aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
- aip_agents/examples/tools/adk_weather_tool.py +60 -0
- aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
- aip_agents/examples/tools/data_generator_tool.py +103 -0
- aip_agents/examples/tools/data_generator_tool.pyi +15 -0
- aip_agents/examples/tools/data_visualization_tool.py +312 -0
- aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
- aip_agents/examples/tools/image_artifact_tool.py +136 -0
- aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
- aip_agents/examples/tools/langchain_weather_tool.py +48 -0
- aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
- aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
- aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
- aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
- aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
- aip_agents/examples/tools/pii_demo_tools.py +189 -0
- aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
- aip_agents/examples/tools/random_chart_tool.py +142 -0
- aip_agents/examples/tools/random_chart_tool.pyi +20 -0
- aip_agents/examples/tools/serper_tool.py +202 -0
- aip_agents/examples/tools/serper_tool.pyi +16 -0
- aip_agents/examples/tools/stock_tools.py +82 -0
- aip_agents/examples/tools/stock_tools.pyi +36 -0
- aip_agents/examples/tools/table_generator_tool.py +167 -0
- aip_agents/examples/tools/table_generator_tool.pyi +22 -0
- aip_agents/examples/tools/time_tool.py +82 -0
- aip_agents/examples/tools/time_tool.pyi +15 -0
- aip_agents/examples/tools/weather_forecast_tool.py +38 -0
- aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
- aip_agents/executor/agent_executor.py +473 -0
- aip_agents/executor/base.py +48 -0
- aip_agents/guardrails/__init__.py +83 -0
- aip_agents/guardrails/__init__.pyi +6 -0
- aip_agents/guardrails/engines/__init__.py +69 -0
- aip_agents/guardrails/engines/__init__.pyi +4 -0
- aip_agents/guardrails/engines/base.py +90 -0
- aip_agents/guardrails/engines/base.pyi +61 -0
- aip_agents/guardrails/engines/nemo.py +101 -0
- aip_agents/guardrails/engines/nemo.pyi +46 -0
- aip_agents/guardrails/engines/phrase_matcher.py +113 -0
- aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
- aip_agents/guardrails/exceptions.py +39 -0
- aip_agents/guardrails/exceptions.pyi +23 -0
- aip_agents/guardrails/manager.py +163 -0
- aip_agents/guardrails/manager.pyi +42 -0
- aip_agents/guardrails/middleware.py +199 -0
- aip_agents/guardrails/middleware.pyi +87 -0
- aip_agents/guardrails/schemas.py +63 -0
- aip_agents/guardrails/schemas.pyi +43 -0
- aip_agents/guardrails/utils.py +45 -0
- aip_agents/guardrails/utils.pyi +19 -0
- aip_agents/mcp/__init__.py +1 -0
- aip_agents/mcp/__init__.pyi +0 -0
- aip_agents/mcp/client/__init__.py +14 -0
- aip_agents/mcp/client/__init__.pyi +5 -0
- aip_agents/mcp/client/base_mcp_client.py +369 -0
- aip_agents/mcp/client/base_mcp_client.pyi +148 -0
- aip_agents/mcp/client/connection_manager.py +228 -0
- aip_agents/mcp/client/connection_manager.pyi +51 -0
- aip_agents/mcp/client/google_adk/__init__.py +11 -0
- aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
- aip_agents/mcp/client/google_adk/client.py +381 -0
- aip_agents/mcp/client/google_adk/client.pyi +75 -0
- aip_agents/mcp/client/langchain/__init__.py +11 -0
- aip_agents/mcp/client/langchain/__init__.pyi +3 -0
- aip_agents/mcp/client/langchain/client.py +265 -0
- aip_agents/mcp/client/langchain/client.pyi +48 -0
- aip_agents/mcp/client/persistent_session.py +612 -0
- aip_agents/mcp/client/persistent_session.pyi +122 -0
- aip_agents/mcp/client/session_pool.py +351 -0
- aip_agents/mcp/client/session_pool.pyi +101 -0
- aip_agents/mcp/client/transports.py +263 -0
- aip_agents/mcp/client/transports.pyi +132 -0
- aip_agents/mcp/utils/__init__.py +7 -0
- aip_agents/mcp/utils/__init__.pyi +0 -0
- aip_agents/mcp/utils/config_validator.py +139 -0
- aip_agents/mcp/utils/config_validator.pyi +82 -0
- aip_agents/memory/__init__.py +14 -0
- aip_agents/memory/__init__.pyi +5 -0
- aip_agents/memory/adapters/__init__.py +10 -0
- aip_agents/memory/adapters/__init__.pyi +4 -0
- aip_agents/memory/adapters/base_adapter.py +811 -0
- aip_agents/memory/adapters/base_adapter.pyi +176 -0
- aip_agents/memory/adapters/mem0.py +84 -0
- aip_agents/memory/adapters/mem0.pyi +22 -0
- aip_agents/memory/base.py +84 -0
- aip_agents/memory/base.pyi +60 -0
- aip_agents/memory/constants.py +49 -0
- aip_agents/memory/constants.pyi +25 -0
- aip_agents/memory/factory.py +86 -0
- aip_agents/memory/factory.pyi +24 -0
- aip_agents/memory/guidance.py +20 -0
- aip_agents/memory/guidance.pyi +3 -0
- aip_agents/memory/simple_memory.py +47 -0
- aip_agents/memory/simple_memory.pyi +23 -0
- aip_agents/middleware/__init__.py +17 -0
- aip_agents/middleware/__init__.pyi +5 -0
- aip_agents/middleware/base.py +96 -0
- aip_agents/middleware/base.pyi +75 -0
- aip_agents/middleware/manager.py +150 -0
- aip_agents/middleware/manager.pyi +84 -0
- aip_agents/middleware/todolist.py +274 -0
- aip_agents/middleware/todolist.pyi +125 -0
- aip_agents/ptc/__init__.py +48 -0
- aip_agents/ptc/__init__.pyi +10 -0
- aip_agents/ptc/doc_gen.py +122 -0
- aip_agents/ptc/doc_gen.pyi +40 -0
- aip_agents/ptc/exceptions.py +39 -0
- aip_agents/ptc/exceptions.pyi +22 -0
- aip_agents/ptc/executor.py +143 -0
- aip_agents/ptc/executor.pyi +73 -0
- aip_agents/ptc/mcp/__init__.py +45 -0
- aip_agents/ptc/mcp/__init__.pyi +7 -0
- aip_agents/ptc/mcp/sandbox_bridge.py +668 -0
- aip_agents/ptc/mcp/sandbox_bridge.pyi +47 -0
- aip_agents/ptc/mcp/templates/__init__.py +1 -0
- aip_agents/ptc/mcp/templates/__init__.pyi +0 -0
- aip_agents/ptc/mcp/templates/mcp_client.py.template +239 -0
- aip_agents/ptc/naming.py +184 -0
- aip_agents/ptc/naming.pyi +76 -0
- aip_agents/ptc/payload.py +26 -0
- aip_agents/ptc/payload.pyi +15 -0
- aip_agents/ptc/prompt_builder.py +571 -0
- aip_agents/ptc/prompt_builder.pyi +55 -0
- aip_agents/ptc/ptc_helper.py +16 -0
- aip_agents/ptc/ptc_helper.pyi +1 -0
- aip_agents/ptc/sandbox_bridge.py +58 -0
- aip_agents/ptc/sandbox_bridge.pyi +25 -0
- aip_agents/ptc/template_utils.py +33 -0
- aip_agents/ptc/template_utils.pyi +13 -0
- aip_agents/ptc/templates/__init__.py +1 -0
- aip_agents/ptc/templates/__init__.pyi +0 -0
- aip_agents/ptc/templates/ptc_helper.py.template +134 -0
- aip_agents/sandbox/__init__.py +43 -0
- aip_agents/sandbox/__init__.pyi +5 -0
- aip_agents/sandbox/defaults.py +9 -0
- aip_agents/sandbox/defaults.pyi +2 -0
- aip_agents/sandbox/e2b_runtime.py +267 -0
- aip_agents/sandbox/e2b_runtime.pyi +51 -0
- aip_agents/sandbox/template_builder.py +131 -0
- aip_agents/sandbox/template_builder.pyi +36 -0
- aip_agents/sandbox/types.py +24 -0
- aip_agents/sandbox/types.pyi +14 -0
- aip_agents/sandbox/validation.py +50 -0
- aip_agents/sandbox/validation.pyi +20 -0
- aip_agents/schema/__init__.py +69 -0
- aip_agents/schema/__init__.pyi +9 -0
- aip_agents/schema/a2a.py +56 -0
- aip_agents/schema/a2a.pyi +40 -0
- aip_agents/schema/agent.py +111 -0
- aip_agents/schema/agent.pyi +65 -0
- aip_agents/schema/hitl.py +157 -0
- aip_agents/schema/hitl.pyi +89 -0
- aip_agents/schema/langgraph.py +37 -0
- aip_agents/schema/langgraph.pyi +28 -0
- aip_agents/schema/model_id.py +97 -0
- aip_agents/schema/model_id.pyi +54 -0
- aip_agents/schema/step_limit.py +108 -0
- aip_agents/schema/step_limit.pyi +63 -0
- aip_agents/schema/storage.py +40 -0
- aip_agents/schema/storage.pyi +21 -0
- aip_agents/sentry/__init__.py +11 -0
- aip_agents/sentry/__init__.pyi +3 -0
- aip_agents/sentry/sentry.py +151 -0
- aip_agents/sentry/sentry.pyi +48 -0
- aip_agents/storage/__init__.py +41 -0
- aip_agents/storage/__init__.pyi +8 -0
- aip_agents/storage/base.py +85 -0
- aip_agents/storage/base.pyi +58 -0
- aip_agents/storage/clients/__init__.py +12 -0
- aip_agents/storage/clients/__init__.pyi +3 -0
- aip_agents/storage/clients/minio_client.py +318 -0
- aip_agents/storage/clients/minio_client.pyi +137 -0
- aip_agents/storage/config.py +62 -0
- aip_agents/storage/config.pyi +29 -0
- aip_agents/storage/providers/__init__.py +15 -0
- aip_agents/storage/providers/__init__.pyi +5 -0
- aip_agents/storage/providers/base.py +106 -0
- aip_agents/storage/providers/base.pyi +88 -0
- aip_agents/storage/providers/memory.py +114 -0
- aip_agents/storage/providers/memory.pyi +79 -0
- aip_agents/storage/providers/object_storage.py +214 -0
- aip_agents/storage/providers/object_storage.pyi +98 -0
- aip_agents/tools/__init__.py +64 -0
- aip_agents/tools/__init__.pyi +11 -0
- aip_agents/tools/browser_use/__init__.py +82 -0
- aip_agents/tools/browser_use/__init__.pyi +14 -0
- aip_agents/tools/browser_use/action_parser.py +103 -0
- aip_agents/tools/browser_use/action_parser.pyi +18 -0
- aip_agents/tools/browser_use/browser_use_tool.py +1120 -0
- aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
- aip_agents/tools/browser_use/llm_config.py +120 -0
- aip_agents/tools/browser_use/llm_config.pyi +52 -0
- aip_agents/tools/browser_use/minio_storage.py +198 -0
- aip_agents/tools/browser_use/minio_storage.pyi +109 -0
- aip_agents/tools/browser_use/schemas.py +119 -0
- aip_agents/tools/browser_use/schemas.pyi +32 -0
- aip_agents/tools/browser_use/session.py +76 -0
- aip_agents/tools/browser_use/session.pyi +4 -0
- aip_agents/tools/browser_use/session_errors.py +132 -0
- aip_agents/tools/browser_use/session_errors.pyi +53 -0
- aip_agents/tools/browser_use/steel_session_recording.py +317 -0
- aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
- aip_agents/tools/browser_use/streaming.py +815 -0
- aip_agents/tools/browser_use/streaming.pyi +81 -0
- aip_agents/tools/browser_use/structured_data_parser.py +257 -0
- aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
- aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
- aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
- aip_agents/tools/browser_use/types.py +78 -0
- aip_agents/tools/browser_use/types.pyi +45 -0
- aip_agents/tools/code_sandbox/__init__.py +26 -0
- aip_agents/tools/code_sandbox/__init__.pyi +3 -0
- aip_agents/tools/code_sandbox/constant.py +13 -0
- aip_agents/tools/code_sandbox/constant.pyi +4 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +306 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
- aip_agents/tools/constants.py +177 -0
- aip_agents/tools/constants.pyi +138 -0
- aip_agents/tools/date_range_tool.py +554 -0
- aip_agents/tools/date_range_tool.pyi +21 -0
- aip_agents/tools/document_loader/__init__.py +44 -0
- aip_agents/tools/document_loader/__init__.pyi +7 -0
- aip_agents/tools/document_loader/base_reader.py +302 -0
- aip_agents/tools/document_loader/base_reader.pyi +75 -0
- aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
- aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
- aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
- aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
- aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
- aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
- aip_agents/tools/document_loader/pdf_splitter.py +169 -0
- aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
- aip_agents/tools/execute_ptc_code.py +308 -0
- aip_agents/tools/execute_ptc_code.pyi +90 -0
- aip_agents/tools/gl_connector/__init__.py +5 -0
- aip_agents/tools/gl_connector/__init__.pyi +3 -0
- aip_agents/tools/gl_connector/tool.py +383 -0
- aip_agents/tools/gl_connector/tool.pyi +74 -0
- aip_agents/tools/gl_connector_tools.py +119 -0
- aip_agents/tools/gl_connector_tools.pyi +39 -0
- aip_agents/tools/memory_search/__init__.py +29 -0
- aip_agents/tools/memory_search/__init__.pyi +5 -0
- aip_agents/tools/memory_search/base.py +200 -0
- aip_agents/tools/memory_search/base.pyi +69 -0
- aip_agents/tools/memory_search/mem0.py +365 -0
- aip_agents/tools/memory_search/mem0.pyi +29 -0
- aip_agents/tools/memory_search/schema.py +81 -0
- aip_agents/tools/memory_search/schema.pyi +25 -0
- aip_agents/tools/memory_search_tool.py +34 -0
- aip_agents/tools/memory_search_tool.pyi +3 -0
- aip_agents/tools/time_tool.py +117 -0
- aip_agents/tools/time_tool.pyi +16 -0
- aip_agents/tools/tool_config_injector.py +300 -0
- aip_agents/tools/tool_config_injector.pyi +26 -0
- aip_agents/tools/web_search/__init__.py +15 -0
- aip_agents/tools/web_search/__init__.pyi +3 -0
- aip_agents/tools/web_search/serper_tool.py +187 -0
- aip_agents/tools/web_search/serper_tool.pyi +19 -0
- aip_agents/types/__init__.py +70 -0
- aip_agents/types/__init__.pyi +36 -0
- aip_agents/types/a2a_events.py +13 -0
- aip_agents/types/a2a_events.pyi +3 -0
- aip_agents/utils/__init__.py +79 -0
- aip_agents/utils/__init__.pyi +11 -0
- aip_agents/utils/a2a_connector.py +1757 -0
- aip_agents/utils/a2a_connector.pyi +146 -0
- aip_agents/utils/artifact_helpers.py +502 -0
- aip_agents/utils/artifact_helpers.pyi +203 -0
- aip_agents/utils/constants.py +22 -0
- aip_agents/utils/constants.pyi +10 -0
- aip_agents/utils/datetime/__init__.py +34 -0
- aip_agents/utils/datetime/__init__.pyi +4 -0
- aip_agents/utils/datetime/normalization.py +231 -0
- aip_agents/utils/datetime/normalization.pyi +95 -0
- aip_agents/utils/datetime/timezone.py +206 -0
- aip_agents/utils/datetime/timezone.pyi +48 -0
- aip_agents/utils/env_loader.py +27 -0
- aip_agents/utils/env_loader.pyi +10 -0
- aip_agents/utils/event_handler_registry.py +58 -0
- aip_agents/utils/event_handler_registry.pyi +23 -0
- aip_agents/utils/file_prompt_utils.py +176 -0
- aip_agents/utils/file_prompt_utils.pyi +21 -0
- aip_agents/utils/final_response_builder.py +211 -0
- aip_agents/utils/final_response_builder.pyi +34 -0
- aip_agents/utils/formatter_llm_client.py +231 -0
- aip_agents/utils/formatter_llm_client.pyi +71 -0
- aip_agents/utils/langgraph/__init__.py +19 -0
- aip_agents/utils/langgraph/__init__.pyi +3 -0
- aip_agents/utils/langgraph/converter.py +128 -0
- aip_agents/utils/langgraph/converter.pyi +49 -0
- aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
- aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1096 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
- aip_agents/utils/langgraph/tool_output_management.py +1047 -0
- aip_agents/utils/langgraph/tool_output_management.pyi +329 -0
- aip_agents/utils/logger.py +195 -0
- aip_agents/utils/logger.pyi +60 -0
- aip_agents/utils/metadata/__init__.py +27 -0
- aip_agents/utils/metadata/__init__.pyi +5 -0
- aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
- aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
- aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
- aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
- aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
- aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
- aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
- aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
- aip_agents/utils/metadata/activity_narrative/context.py +49 -0
- aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
- aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
- aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
- aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
- aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
- aip_agents/utils/metadata/schemas/__init__.py +16 -0
- aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
- aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
- aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
- aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
- aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
- aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
- aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
- aip_agents/utils/metadata_helper.py +358 -0
- aip_agents/utils/metadata_helper.pyi +117 -0
- aip_agents/utils/name_preprocessor/__init__.py +17 -0
- aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
- aip_agents/utils/pii/__init__.py +25 -0
- aip_agents/utils/pii/__init__.pyi +5 -0
- aip_agents/utils/pii/pii_handler.py +397 -0
- aip_agents/utils/pii/pii_handler.pyi +96 -0
- aip_agents/utils/pii/pii_helper.py +207 -0
- aip_agents/utils/pii/pii_helper.pyi +78 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
- aip_agents/utils/reference_helper.py +273 -0
- aip_agents/utils/reference_helper.pyi +81 -0
- aip_agents/utils/sse_chunk_transformer.py +831 -0
- aip_agents/utils/sse_chunk_transformer.pyi +166 -0
- aip_agents/utils/step_limit_manager.py +265 -0
- aip_agents/utils/step_limit_manager.pyi +112 -0
- aip_agents/utils/token_usage_helper.py +156 -0
- aip_agents/utils/token_usage_helper.pyi +60 -0
- aip_agents_binary-0.6.4.dist-info/METADATA +673 -0
- aip_agents_binary-0.6.4.dist-info/RECORD +612 -0
- aip_agents_binary-0.6.4.dist-info/WHEEL +5 -0
- aip_agents_binary-0.6.4.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""Example A2A server for a LangGraphAgent Weather Service.
|
|
2
|
+
|
|
3
|
+
This server instantiates a LangGraphAgent with weather lookup capabilities and serves it
|
|
4
|
+
via the A2A protocol using the proper A2A server setup with LangGraphA2AExecutor.
|
|
5
|
+
|
|
6
|
+
To run this server:
|
|
7
|
+
python examples/hello_world_a2a_langgraph_server.py
|
|
8
|
+
|
|
9
|
+
It will listen on http://localhost:8001 by default.
|
|
10
|
+
|
|
11
|
+
Authors:
|
|
12
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
13
|
+
Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import click
|
|
17
|
+
import uvicorn
|
|
18
|
+
from a2a.types import AgentCapabilities, AgentCard, AgentSkill
|
|
19
|
+
from langchain_openai import ChatOpenAI
|
|
20
|
+
|
|
21
|
+
from aip_agents.agent import LangGraphAgent
|
|
22
|
+
from aip_agents.examples.tools import weather_tool_langchain as weather_tool
|
|
23
|
+
from aip_agents.utils.logger import get_logger
|
|
24
|
+
|
|
25
|
+
logger = get_logger(__name__)
|
|
26
|
+
|
|
27
|
+
SERVER_AGENT_NAME = "WeatherAgent"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@click.command()
|
|
31
|
+
@click.option("--host", "host", default="localhost", help="Host to bind the server to.")
|
|
32
|
+
@click.option("--port", "port", default=8001, help="Port to bind the server to.")
|
|
33
|
+
def main(host: str, port: int):
|
|
34
|
+
"""Runs the LangGraph Weather A2A server.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
host (str): Host to bind the server to.
|
|
38
|
+
port (int): Port to bind the server to.
|
|
39
|
+
"""
|
|
40
|
+
logger.info(f"Starting {SERVER_AGENT_NAME} on http://{host}:{port}")
|
|
41
|
+
|
|
42
|
+
agent_card = AgentCard(
|
|
43
|
+
name=SERVER_AGENT_NAME,
|
|
44
|
+
description="A weather agent that provides weather information for cities.",
|
|
45
|
+
url=f"http://{host}:{port}",
|
|
46
|
+
version="1.0.0",
|
|
47
|
+
defaultInputModes=["text"],
|
|
48
|
+
defaultOutputModes=["text"],
|
|
49
|
+
capabilities=AgentCapabilities(streaming=True),
|
|
50
|
+
skills=[
|
|
51
|
+
AgentSkill(
|
|
52
|
+
id="weather",
|
|
53
|
+
name="Weather Lookup",
|
|
54
|
+
description="Provides current weather information for cities.",
|
|
55
|
+
examples=["What's the weather in Tokyo?", "Get weather for London"],
|
|
56
|
+
tags=["weather"],
|
|
57
|
+
)
|
|
58
|
+
],
|
|
59
|
+
tags=["weather"],
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
llm = ChatOpenAI(model="gpt-4.1", temperature=0, streaming=True)
|
|
63
|
+
tools = [weather_tool]
|
|
64
|
+
|
|
65
|
+
langgraph_agent = LangGraphAgent(
|
|
66
|
+
name=SERVER_AGENT_NAME,
|
|
67
|
+
instruction=(
|
|
68
|
+
"You are a weather agent that provides weather information for cities. "
|
|
69
|
+
"Always use the weather_tool for looking up weather data. "
|
|
70
|
+
"Format your responses clearly and professionally."
|
|
71
|
+
),
|
|
72
|
+
model=llm,
|
|
73
|
+
tools=tools,
|
|
74
|
+
enable_a2a_token_streaming=True,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
app = langgraph_agent.to_a2a(agent_card=agent_card)
|
|
78
|
+
|
|
79
|
+
logger.info("A2A application configured. Starting Uvicorn server...")
|
|
80
|
+
uvicorn.run(app, host=host, port=port)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
if __name__ == "__main__":
|
|
84
|
+
main()
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.agent import LangGraphAgent as LangGraphAgent
|
|
3
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
4
|
+
|
|
5
|
+
logger: Incomplete
|
|
6
|
+
SERVER_AGENT_NAME: str
|
|
7
|
+
|
|
8
|
+
def main(host: str, port: int):
|
|
9
|
+
"""Runs the LangGraph Weather A2A server.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
host (str): Host to bind the server to.
|
|
13
|
+
port (int): Port to bind the server to.
|
|
14
|
+
"""
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""Example A2A server for a LangChainAgent Weather Service.
|
|
2
|
+
|
|
3
|
+
This server instantiates a LangChainAgent with weather lookup capabilities and serves it
|
|
4
|
+
via the A2A protocol using the to_a2a convenience method.
|
|
5
|
+
|
|
6
|
+
To run this server:
|
|
7
|
+
python examples/a2a/langchain_server_example.py
|
|
8
|
+
|
|
9
|
+
It will listen on http://localhost:8001 by default.
|
|
10
|
+
|
|
11
|
+
Authors:
|
|
12
|
+
Putu Ravindra Wiguna (putu.r.wiguna@gdplabs.id)
|
|
13
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import click
|
|
17
|
+
import uvicorn
|
|
18
|
+
from a2a.types import AgentCapabilities, AgentCard, AgentSkill
|
|
19
|
+
|
|
20
|
+
from aip_agents.agent import LangChainAgent
|
|
21
|
+
from aip_agents.examples.tools.langchain_weather_tool import weather_tool
|
|
22
|
+
from aip_agents.utils.logger import get_logger
|
|
23
|
+
|
|
24
|
+
logger = get_logger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
SERVER_AGENT_NAME = "WeatherAgentLangChain"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@click.command()
|
|
31
|
+
@click.option("--host", "host", default="localhost", help="Host to bind the server to.")
|
|
32
|
+
@click.option("--port", "port", default=8001, help="Port to bind the server to.")
|
|
33
|
+
def main(host: str, port: int):
|
|
34
|
+
"""Runs the LangChain Weather A2A server.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
host (str): Host to bind the server to.
|
|
38
|
+
port (int): Port to bind the server to.
|
|
39
|
+
"""
|
|
40
|
+
logger.info(f"Starting {SERVER_AGENT_NAME} on http://{host}:{port}")
|
|
41
|
+
|
|
42
|
+
agent_card = AgentCard(
|
|
43
|
+
name=SERVER_AGENT_NAME,
|
|
44
|
+
description="A weather agent that provides weather information for cities",
|
|
45
|
+
url=f"http://{host}:{port}",
|
|
46
|
+
version="1.0.0",
|
|
47
|
+
defaultInputModes=["text"],
|
|
48
|
+
defaultOutputModes=["text"],
|
|
49
|
+
capabilities=AgentCapabilities(streaming=True),
|
|
50
|
+
skills=[
|
|
51
|
+
AgentSkill(
|
|
52
|
+
id="weather",
|
|
53
|
+
name="Weather Lookup",
|
|
54
|
+
description="Provides current weather information for cities.",
|
|
55
|
+
examples=["What's the weather in Tokyo?", "Get weather for London"],
|
|
56
|
+
tags=["weather"],
|
|
57
|
+
)
|
|
58
|
+
],
|
|
59
|
+
tags=["weather"],
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
langchain_agent = LangChainAgent(
|
|
63
|
+
name=SERVER_AGENT_NAME,
|
|
64
|
+
instruction="""You are a weather agent that provides weather information for cities.
|
|
65
|
+
Always use the weather_tool for looking up weather data. Format your responses clearly and professionally.""",
|
|
66
|
+
model="openai/gpt-4o",
|
|
67
|
+
tools=[weather_tool],
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
app = langchain_agent.to_a2a(
|
|
71
|
+
agent_card=agent_card,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
uvicorn.run(app, host=host, port=port)
|
|
75
|
+
logger.info("A2A application configured. Starting Uvicorn server...")
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
if __name__ == "__main__":
|
|
79
|
+
main()
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.agent import LangChainAgent as LangChainAgent
|
|
3
|
+
from aip_agents.examples.tools.langchain_weather_tool import weather_tool as weather_tool
|
|
4
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
5
|
+
|
|
6
|
+
logger: Incomplete
|
|
7
|
+
SERVER_AGENT_NAME: str
|
|
8
|
+
|
|
9
|
+
def main(host: str, port: int):
|
|
10
|
+
"""Runs the LangChain Weather A2A server.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
host (str): Host to bind the server to.
|
|
14
|
+
port (int): Port to bind the server to.
|
|
15
|
+
"""
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"""Example A2A server for a LangGraph Agent Wrapper Service.
|
|
2
|
+
|
|
3
|
+
This server instantiates a LangChainAgent with the LangGraph agent wrapper tool that provides
|
|
4
|
+
time and weather forecast capabilities, and serves it via the A2A protocol with streaming support.
|
|
5
|
+
|
|
6
|
+
The agent can handle time queries and weather forecast requests for any day of the week.
|
|
7
|
+
|
|
8
|
+
To run this server:
|
|
9
|
+
python examples/hello_world_a2a_langgraph_server_tool_streaming.py
|
|
10
|
+
|
|
11
|
+
It will listen on http://localhost:8003 by default.
|
|
12
|
+
|
|
13
|
+
Environment Variables Required:
|
|
14
|
+
OPENAI_API_KEY: OpenAI API key for the LLM
|
|
15
|
+
|
|
16
|
+
Authors:
|
|
17
|
+
Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import click
|
|
21
|
+
import uvicorn
|
|
22
|
+
from a2a.types import AgentCapabilities, AgentCard, AgentSkill
|
|
23
|
+
from dotenv import load_dotenv
|
|
24
|
+
|
|
25
|
+
from aip_agents.agent import LangChainAgent
|
|
26
|
+
from aip_agents.examples.tools.langgraph_streaming_tool import LangGraphStreamingTool
|
|
27
|
+
from aip_agents.utils.logger import get_logger
|
|
28
|
+
|
|
29
|
+
load_dotenv()
|
|
30
|
+
|
|
31
|
+
logger = get_logger(__name__)
|
|
32
|
+
|
|
33
|
+
SERVER_AGENT_NAME = "TimeWeatherAgentLangGraph"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@click.command()
|
|
37
|
+
@click.option("--host", "host", default="localhost", help="Host to bind the server to.")
|
|
38
|
+
@click.option("--port", "port", default=8003, help="Port to bind the server to.")
|
|
39
|
+
def main(host: str, port: int):
|
|
40
|
+
"""Runs the LangGraph Agent Wrapper A2A server.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
host (str): Host to bind the server to.
|
|
44
|
+
port (int): Port to bind the server to.
|
|
45
|
+
"""
|
|
46
|
+
logger.info(f"Starting {SERVER_AGENT_NAME} on http://{host}:{port}")
|
|
47
|
+
|
|
48
|
+
# ruff: noqa: E501
|
|
49
|
+
agent_card = AgentCard(
|
|
50
|
+
name=SERVER_AGENT_NAME,
|
|
51
|
+
description="A time and weather agent that can provide current time information and weather data for specific cities",
|
|
52
|
+
url=f"http://{host}:{port}",
|
|
53
|
+
version="1.0.0",
|
|
54
|
+
defaultInputModes=["text"],
|
|
55
|
+
defaultOutputModes=["text"],
|
|
56
|
+
capabilities=AgentCapabilities(streaming=True),
|
|
57
|
+
skills=[
|
|
58
|
+
AgentSkill(
|
|
59
|
+
id="time_queries",
|
|
60
|
+
name="Time Information",
|
|
61
|
+
description="Provides current time and date information in various formats.",
|
|
62
|
+
examples=[
|
|
63
|
+
"What time is it now?",
|
|
64
|
+
"Get the current date and time",
|
|
65
|
+
"Show me the time in ISO format",
|
|
66
|
+
"What's the current timestamp?",
|
|
67
|
+
],
|
|
68
|
+
tags=["time", "date", "timestamp"],
|
|
69
|
+
),
|
|
70
|
+
AgentSkill(
|
|
71
|
+
id="weather_info",
|
|
72
|
+
name="Weather Information",
|
|
73
|
+
description="Provides weather information for specific cities.",
|
|
74
|
+
examples=[
|
|
75
|
+
"What's the weather in Jakarta?",
|
|
76
|
+
"Weather in Tokyo and Singapore",
|
|
77
|
+
"Check weather for New York",
|
|
78
|
+
"Get weather for London",
|
|
79
|
+
],
|
|
80
|
+
tags=["weather", "city", "location"],
|
|
81
|
+
),
|
|
82
|
+
AgentSkill(
|
|
83
|
+
id="combined_queries",
|
|
84
|
+
name="Time and Weather Combined",
|
|
85
|
+
description="Handles queries that combine both time and weather information.",
|
|
86
|
+
examples=[
|
|
87
|
+
"What time is it and what's the weather in Jakarta?",
|
|
88
|
+
"Current time and weather in Tokyo",
|
|
89
|
+
"Tell me the time and weather for Singapore",
|
|
90
|
+
],
|
|
91
|
+
tags=["time", "weather", "combined"],
|
|
92
|
+
),
|
|
93
|
+
],
|
|
94
|
+
tags=["time", "weather", "assistant"],
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Create the LangGraph streaming tool instance
|
|
98
|
+
streaming_tool = LangGraphStreamingTool()
|
|
99
|
+
|
|
100
|
+
langchain_agent = LangChainAgent(
|
|
101
|
+
name=SERVER_AGENT_NAME,
|
|
102
|
+
instruction="""You are a helpful time and weather assistant.
|
|
103
|
+
|
|
104
|
+
You can provide current time information and weather forecasts.
|
|
105
|
+
|
|
106
|
+
You have access to a specialized LangGraph agent that can:
|
|
107
|
+
- Get the current time and date in various formats
|
|
108
|
+
- Provide weather information for specific cities (Jakarta, Singapore, Tokyo, London, New York)
|
|
109
|
+
- Handle combined time and weather queries
|
|
110
|
+
|
|
111
|
+
When given a task:
|
|
112
|
+
1. Use the langgraph_streaming_tool to execute time and weather queries
|
|
113
|
+
2. Be specific about what information is requested
|
|
114
|
+
3. Provide clear, formatted responses about the time or weather information
|
|
115
|
+
4. For weather queries, specify the city name clearly
|
|
116
|
+
|
|
117
|
+
Always use the agent wrapper tool for time and weather requests. Format your responses clearly and professionally.""",
|
|
118
|
+
model="openai/gpt-4.1",
|
|
119
|
+
tools=[streaming_tool],
|
|
120
|
+
tool_configs={"langgraph_streaming_tool": {"time_format": "%d-%m-%Y %H:%M:%S"}},
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
app = langchain_agent.to_a2a(
|
|
124
|
+
agent_card=agent_card,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
uvicorn.run(app, host=host, port=port)
|
|
128
|
+
logger.info("A2A application configured. Starting Uvicorn server...")
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
if __name__ == "__main__":
|
|
132
|
+
main()
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.agent import LangChainAgent as LangChainAgent
|
|
3
|
+
from aip_agents.examples.tools.langgraph_streaming_tool import LangGraphStreamingTool as LangGraphStreamingTool
|
|
4
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
5
|
+
|
|
6
|
+
logger: Incomplete
|
|
7
|
+
SERVER_AGENT_NAME: str
|
|
8
|
+
|
|
9
|
+
def main(host: str, port: int):
|
|
10
|
+
"""Runs the LangGraph Agent Wrapper A2A server.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
host (str): Host to bind the server to.
|
|
14
|
+
port (int): Port to bind the server to.
|
|
15
|
+
"""
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"""Example demonstrating integration of A2A and MCP servers with LangGraphAgent.
|
|
2
|
+
|
|
3
|
+
This script shows how to create a LangGraphAgent that connects to:
|
|
4
|
+
1. An MCP server with weather forecast tool (must be running on port 8000)
|
|
5
|
+
2. An A2A server with weather capabilities (must be running on port 8001)
|
|
6
|
+
|
|
7
|
+
To run this example:
|
|
8
|
+
1. Start the MCP server: python aip_agents/examples/mcp_servers/mcp_server_sse.py
|
|
9
|
+
2. Start the A2A server: python aip_agents/examples/hello_world_a2a_langgraph_server.py
|
|
10
|
+
3. Set your OPENAI_API_KEY environment variable
|
|
11
|
+
4. Run this script: python examples/hello_world_a2a_mcp_langgraph.py
|
|
12
|
+
|
|
13
|
+
Authors:
|
|
14
|
+
Raymond Christopher (raymond.christopher@gdplabs.id)
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import asyncio
|
|
18
|
+
import os
|
|
19
|
+
import sys
|
|
20
|
+
import traceback
|
|
21
|
+
|
|
22
|
+
from langchain_openai import ChatOpenAI
|
|
23
|
+
|
|
24
|
+
from aip_agents.agent import LangGraphAgent
|
|
25
|
+
from aip_agents.schema.agent import A2AClientConfig
|
|
26
|
+
|
|
27
|
+
# Configuration
|
|
28
|
+
A2A_SERVER_PORT = 8002 # Port for StockAgent A2A server
|
|
29
|
+
A2A_AGENT_NAME = "StockAgent" # Must match the agent name in A2A server
|
|
30
|
+
MCP_SERVER_PORT = 8000 # Port for MCP server (weather tools)
|
|
31
|
+
MCP_AGENT_NAME = "weather_tools" # Must match the agent name in MCP server
|
|
32
|
+
MODEL_NAME = "gpt-4.1"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async def create_agent() -> tuple[LangGraphAgent, dict[str, bool]]:
|
|
36
|
+
"""Create and configure the LangGraphAgent with MCP and A2A connections.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
tuple: (agent, connected_servers) where connected_servers is a dict
|
|
40
|
+
showing which servers were successfully connected.
|
|
41
|
+
"""
|
|
42
|
+
if not os.getenv("OPENAI_API_KEY"):
|
|
43
|
+
raise ValueError("OPENAI_API_KEY environment variable not set")
|
|
44
|
+
|
|
45
|
+
print("\nCreating LangGraphAgent...")
|
|
46
|
+
llm = ChatOpenAI(model=MODEL_NAME, temperature=0, openai_api_key=os.getenv("OPENAI_API_KEY"))
|
|
47
|
+
|
|
48
|
+
agent = LangGraphAgent(
|
|
49
|
+
name="IntegrationAgent",
|
|
50
|
+
instruction="""You are a helpful assistant that can use various tools.
|
|
51
|
+
For stock-related queries (price, news, etc.), use the StockAgent tool.
|
|
52
|
+
For weather-related queries, use the get_weather_forecast tool.
|
|
53
|
+
Choose the appropriate tool based on the user's request.""",
|
|
54
|
+
model=llm,
|
|
55
|
+
tools=[], # We'll add tools dynamically
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
return agent, {"mcp": False, "a2a": False}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
async def connect_to_mcp_server(agent: LangGraphAgent) -> bool:
|
|
62
|
+
"""Connect to the MCP server and register tools.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
agent: The LangGraphAgent instance to configure.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
bool: True if connection was successful, False otherwise.
|
|
69
|
+
"""
|
|
70
|
+
try:
|
|
71
|
+
print(f"\nConnecting to MCP server on port {MCP_SERVER_PORT}...")
|
|
72
|
+
agent.add_mcp_server(
|
|
73
|
+
{
|
|
74
|
+
MCP_AGENT_NAME: {
|
|
75
|
+
"url": f"http://localhost:{MCP_SERVER_PORT}/sse",
|
|
76
|
+
"transport": "sse",
|
|
77
|
+
"api_key": "", # No auth for test server
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
)
|
|
81
|
+
print(f"✅ Successfully connected to MCP server: {MCP_AGENT_NAME}")
|
|
82
|
+
return True
|
|
83
|
+
except Exception as e:
|
|
84
|
+
print(f"⚠️ Failed to connect to MCP server: {e}")
|
|
85
|
+
print("Continuing without MCP tools...")
|
|
86
|
+
return False
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
async def connect_to_a2a_server(agent: LangGraphAgent) -> bool:
|
|
90
|
+
"""Connect to the A2A server and register agents.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
agent: The LangGraphAgent instance to configure.
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
bool: True if connection was successful, False otherwise.
|
|
97
|
+
"""
|
|
98
|
+
try:
|
|
99
|
+
print(f"\nConnecting to A2A server on port {A2A_SERVER_PORT}...")
|
|
100
|
+
client_a2a_config = A2AClientConfig(
|
|
101
|
+
discovery_urls=[f"http://localhost:{A2A_SERVER_PORT}"],
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
print("Discovering A2A agents...")
|
|
105
|
+
agent_cards = agent.discover_agents(client_a2a_config)
|
|
106
|
+
print(f"Discovered {len(agent_cards)} A2A agents")
|
|
107
|
+
|
|
108
|
+
if not agent_cards:
|
|
109
|
+
print("⚠️ No A2A agents discovered")
|
|
110
|
+
return False
|
|
111
|
+
|
|
112
|
+
print(f"Registering A2A agent: {agent_cards[0].name}")
|
|
113
|
+
agent.register_a2a_agents(agent_cards)
|
|
114
|
+
print("✅ Successfully registered A2A agent")
|
|
115
|
+
return True
|
|
116
|
+
|
|
117
|
+
except Exception as e:
|
|
118
|
+
print(f"⚠️ Failed to connect to A2A server: {e}")
|
|
119
|
+
print("Continuing without A2A tools...")
|
|
120
|
+
return False
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
async def test_mcp_weather_tool(agent: LangGraphAgent) -> None:
|
|
124
|
+
"""Test the MCP weather tool if available.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
agent: The configured LangGraphAgent instance.
|
|
128
|
+
"""
|
|
129
|
+
print("\n=== Testing MCP Weather Tool ===")
|
|
130
|
+
weather_query = "What's the weather forecast for tomorrow in London?"
|
|
131
|
+
print(f"\nQuery: {weather_query}")
|
|
132
|
+
try:
|
|
133
|
+
response = await agent.arun(weather_query)
|
|
134
|
+
print(f"✅ Response: {response.get('output', 'No output')}")
|
|
135
|
+
except Exception as e:
|
|
136
|
+
print(f"❌ Error testing MCP weather tool: {e}")
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
async def test_stock_agent(agent: LangGraphAgent) -> None:
|
|
140
|
+
"""Test the A2A Stock Agent if available.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
agent: The configured LangGraphAgent instance.
|
|
144
|
+
"""
|
|
145
|
+
print("\n=== Testing Stock Agent ===")
|
|
146
|
+
stock_agent_tool = next((t for t in agent._tools if t.name == "StockAgent"), None)
|
|
147
|
+
|
|
148
|
+
if not stock_agent_tool:
|
|
149
|
+
print("⚠️ StockAgent tool not found in agent's tools")
|
|
150
|
+
return
|
|
151
|
+
|
|
152
|
+
stock_query = "What is the current stock price of AAPL?"
|
|
153
|
+
print(f"\nQuery: {stock_query}")
|
|
154
|
+
|
|
155
|
+
try:
|
|
156
|
+
tool_input = {"query": "Get current stock price for AAPL"}
|
|
157
|
+
response = await stock_agent_tool.arun(tool_input)
|
|
158
|
+
print(f"✅ Response: {response}")
|
|
159
|
+
except Exception as e:
|
|
160
|
+
print(f"❌ Error testing Stock Agent: {e}")
|
|
161
|
+
traceback.print_exc()
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
async def main():
|
|
165
|
+
"""Main function to run the A2A and MCP integration example."""
|
|
166
|
+
try:
|
|
167
|
+
# Create and configure agent
|
|
168
|
+
agent, connected_servers = await create_agent()
|
|
169
|
+
|
|
170
|
+
# Connect to servers
|
|
171
|
+
connected_servers["mcp"] = await connect_to_mcp_server(agent)
|
|
172
|
+
connected_servers["a2a"] = await connect_to_a2a_server(agent)
|
|
173
|
+
|
|
174
|
+
# Verify at least one server is connected
|
|
175
|
+
if not any(connected_servers.values()):
|
|
176
|
+
print("❌ Error: Could not connect to any servers. Exiting...")
|
|
177
|
+
sys.exit(1)
|
|
178
|
+
|
|
179
|
+
# Run tests for connected services
|
|
180
|
+
if connected_servers["mcp"]:
|
|
181
|
+
await test_mcp_weather_tool(agent)
|
|
182
|
+
else:
|
|
183
|
+
print("\nSkipping MCP weather tool tests - MCP server not connected")
|
|
184
|
+
|
|
185
|
+
if connected_servers["a2a"]:
|
|
186
|
+
await test_stock_agent(agent)
|
|
187
|
+
else:
|
|
188
|
+
print("\nSkipping Stock Agent tests - A2A server not connected")
|
|
189
|
+
|
|
190
|
+
except Exception as e:
|
|
191
|
+
print(f"\nError: {str(e)}")
|
|
192
|
+
raise
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
if __name__ == "__main__":
|
|
196
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from aip_agents.agent import LangGraphAgent as LangGraphAgent
|
|
2
|
+
from aip_agents.schema.agent import A2AClientConfig as A2AClientConfig
|
|
3
|
+
|
|
4
|
+
A2A_SERVER_PORT: int
|
|
5
|
+
A2A_AGENT_NAME: str
|
|
6
|
+
MCP_SERVER_PORT: int
|
|
7
|
+
MCP_AGENT_NAME: str
|
|
8
|
+
MODEL_NAME: str
|
|
9
|
+
|
|
10
|
+
async def create_agent() -> tuple[LangGraphAgent, dict[str, bool]]:
|
|
11
|
+
"""Create and configure the LangGraphAgent with MCP and A2A connections.
|
|
12
|
+
|
|
13
|
+
Returns:
|
|
14
|
+
tuple: (agent, connected_servers) where connected_servers is a dict
|
|
15
|
+
showing which servers were successfully connected.
|
|
16
|
+
"""
|
|
17
|
+
async def connect_to_mcp_server(agent: LangGraphAgent) -> bool:
|
|
18
|
+
"""Connect to the MCP server and register tools.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
agent: The LangGraphAgent instance to configure.
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
bool: True if connection was successful, False otherwise.
|
|
25
|
+
"""
|
|
26
|
+
async def connect_to_a2a_server(agent: LangGraphAgent) -> bool:
|
|
27
|
+
"""Connect to the A2A server and register agents.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
agent: The LangGraphAgent instance to configure.
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
bool: True if connection was successful, False otherwise.
|
|
34
|
+
"""
|
|
35
|
+
async def test_mcp_weather_tool(agent: LangGraphAgent) -> None:
|
|
36
|
+
"""Test the MCP weather tool if available.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
agent: The configured LangGraphAgent instance.
|
|
40
|
+
"""
|
|
41
|
+
async def test_stock_agent(agent: LangGraphAgent) -> None:
|
|
42
|
+
"""Test the A2A Stock Agent if available.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
agent: The configured LangGraphAgent instance.
|
|
46
|
+
"""
|
|
47
|
+
async def main() -> None:
|
|
48
|
+
"""Main function to run the A2A and MCP integration example."""
|