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,673 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: aip-agents-binary
|
|
3
|
+
Version: 0.6.4
|
|
4
|
+
Summary: A library for managing agents in Gen AI applications.
|
|
5
|
+
Author-email: Raymond Christopher <raymond.christopher@gdplabs.id>
|
|
6
|
+
Requires-Python: <3.13,>=3.11
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: a2a-sdk<0.3.0,>=0.2.4
|
|
9
|
+
Requires-Dist: aiostream<0.7.0,>=0.6.0
|
|
10
|
+
Requires-Dist: authlib<2.0.0,>=1.6.4
|
|
11
|
+
Requires-Dist: bosa-connectors-binary<0.4.0,>=0.3.1
|
|
12
|
+
Requires-Dist: bosa-core-binary[logger,telemetry]<0.10.0,>=0.9.6
|
|
13
|
+
Requires-Dist: colorama<0.5.0,>=0.4.6
|
|
14
|
+
Requires-Dist: deprecated<2.0.0,>=1.2.18
|
|
15
|
+
Requires-Dist: fastapi<0.121.0,>=0.120.0
|
|
16
|
+
Requires-Dist: gllm-core-binary<0.4.0,>=0.3.18
|
|
17
|
+
Requires-Dist: gllm-inference-binary[anthropic,bedrock,google-genai,google-vertexai,openai]<0.6.0,>=0.5.90
|
|
18
|
+
Requires-Dist: gllm-tools-binary<0.2.0,>=0.1.5
|
|
19
|
+
Requires-Dist: google-adk<0.6.0,>=0.5.0
|
|
20
|
+
Requires-Dist: langchain<0.4.0,>=0.3.0
|
|
21
|
+
Requires-Dist: langchain-openai<0.4.0,>=0.3.17
|
|
22
|
+
Requires-Dist: langchain-mcp-adapters<0.1.0,>=0.0.10
|
|
23
|
+
Requires-Dist: langchain-experimental<0.4.0,>=0.3.4
|
|
24
|
+
Requires-Dist: langgraph<0.7.0,>=0.6.0
|
|
25
|
+
Requires-Dist: minio<8.0.0,>=7.2.20
|
|
26
|
+
Requires-Dist: pydantic<3.0.0,>=2.11.7
|
|
27
|
+
Requires-Dist: python-dateutil<3.0.0,>=2.9.0
|
|
28
|
+
Requires-Dist: python-dotenv<2.0.0,>=1.1.0
|
|
29
|
+
Requires-Dist: requests<3.0.0,>=2.32.4
|
|
30
|
+
Requires-Dist: uvicorn<0.35.0,>=0.34.3
|
|
31
|
+
Provides-Extra: memory
|
|
32
|
+
Requires-Dist: gllm-memory-binary[mem0ai]<0.2.0,>=0.1.1; extra == "memory"
|
|
33
|
+
Provides-Extra: privacy
|
|
34
|
+
Requires-Dist: gllm-privacy-binary<0.5.0,>=0.4.12; extra == "privacy"
|
|
35
|
+
Provides-Extra: guardrails
|
|
36
|
+
Requires-Dist: gllm-guardrail-binary<0.1.0,>=0.0.1; extra == "guardrails"
|
|
37
|
+
Provides-Extra: gl-connector
|
|
38
|
+
Requires-Dist: bosa-connectors-binary<0.4.0,>=0.3.1; extra == "gl-connector"
|
|
39
|
+
Provides-Extra: local
|
|
40
|
+
Requires-Dist: e2b<3.0.0,>=2.3.0; extra == "local"
|
|
41
|
+
Requires-Dist: browser-use==0.5.9; extra == "local"
|
|
42
|
+
Requires-Dist: steel-sdk>=0.7.0; extra == "local"
|
|
43
|
+
Requires-Dist: json-repair>=0.52.3; extra == "local"
|
|
44
|
+
Requires-Dist: PyPDF2<4.0.0,>=3.0.0; extra == "local"
|
|
45
|
+
Requires-Dist: unidecode<2.0.0,>=1.3.0; extra == "local"
|
|
46
|
+
Requires-Dist: gllm-docproc-binary[docx,pdf,xlsx]<0.8.0,>=0.7.21; extra == "local"
|
|
47
|
+
Requires-Dist: gllm-multimodal-binary==0.2.0.post1; extra == "local"
|
|
48
|
+
Requires-Dist: bosa-connectors-binary<0.4.0,>=0.3.1; extra == "local"
|
|
49
|
+
Provides-Extra: dev
|
|
50
|
+
Requires-Dist: coverage<8.0.0,>=7.4.4; extra == "dev"
|
|
51
|
+
Requires-Dist: mypy<2.0.0,>=1.15.0; extra == "dev"
|
|
52
|
+
Requires-Dist: nest-asyncio<2.0.0,>=1.6.0; extra == "dev"
|
|
53
|
+
Requires-Dist: pre-commit<4.0.0,>=3.7.0; extra == "dev"
|
|
54
|
+
Requires-Dist: pytest<9.0.0,>=8.1.1; extra == "dev"
|
|
55
|
+
Requires-Dist: pytest-asyncio<0.24.0,>=0.23.6; extra == "dev"
|
|
56
|
+
Requires-Dist: pytest-cov<6.0.0,>=5.0.0; extra == "dev"
|
|
57
|
+
Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
|
|
58
|
+
Requires-Dist: ruff<0.7.0,>=0.6.7; extra == "dev"
|
|
59
|
+
Requires-Dist: pillow<12.0.0,>=11.3.0; extra == "dev"
|
|
60
|
+
|
|
61
|
+
# AIP Agents
|
|
62
|
+
|
|
63
|
+
## Description
|
|
64
|
+
|
|
65
|
+
The core agent library for **local execution** in GL AIP (GDP Labs AI Agents Package). `aip-agents` is part of the GL AIP ecosystem:
|
|
66
|
+
|
|
67
|
+
- **`aip-agents`** (this library) — The underlying agent library for local execution
|
|
68
|
+
- **[`ai-agent-platform`](https://github.com/GDP-ADMIN/ai-agent-platform)** — The platform that provides remote server/run capabilities (uses `aip-agents` internally)
|
|
69
|
+
- **[`glaip-sdk`](https://github.com/GDP-ADMIN/glaip-sdk/tree/main/python/glaip-sdk)** — The SDK that end users use to run agents either locally (directly via `aip-agents`) or on the remote server (via `ai-agent-platform`)
|
|
70
|
+
|
|
71
|
+
You can use `aip-agents` directly for local execution, or let `glaip-sdk` manage local vs remote mode for you. See the [GL AIP overview](../glaip-sdk/docs/overview.md) for the full architecture.
|
|
72
|
+
|
|
73
|
+
## Installation
|
|
74
|
+
|
|
75
|
+
### Prerequisites
|
|
76
|
+
- Python 3.11 - 3.12 - [Install here](https://www.python.org/downloads/)
|
|
77
|
+
- Pip (if using Pip) - [Install here](https://pip.pypa.io/en/stable/installation/)
|
|
78
|
+
- Poetry 1.8.1+ (if using Poetry) - [Install here](https://python-poetry.org/docs/#installation)
|
|
79
|
+
- Git (if using Git) - [Install here](https://git-scm.com/downloads)
|
|
80
|
+
- For git installation:
|
|
81
|
+
- Access to the [GDP Labs SDK repository](https://github.com/GDP-ADMIN/glaip-sdk)
|
|
82
|
+
|
|
83
|
+
### 1. Installation from the GDP Labs registry
|
|
84
|
+
This package is published to the internal GDP Labs registry. Ensure your pip/Poetry config includes the registry:
|
|
85
|
+
`https://glsdk.gdplabs.id/gen-ai-internal/simple/`.
|
|
86
|
+
|
|
87
|
+
#### Using pip
|
|
88
|
+
```bash
|
|
89
|
+
pip install aip-agents
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### Using Poetry
|
|
93
|
+
```bash
|
|
94
|
+
poetry add aip-agents
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 2. Development Installation (Git)
|
|
98
|
+
For development purposes, you can install directly from the Git repository:
|
|
99
|
+
```bash
|
|
100
|
+
poetry add "git+ssh://git@github.com/GDP-ADMIN/glaip-sdk.git#subdirectory=python/aip-agents"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 3. Recommended: install via glaip-sdk for local mode
|
|
104
|
+
If you want local + remote compatibility, install the SDK's local extra instead:
|
|
105
|
+
```bash
|
|
106
|
+
pip install "glaip-sdk[local]"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Optional Extras
|
|
110
|
+
```bash
|
|
111
|
+
pip install "aip-agents[memory]"
|
|
112
|
+
pip install "aip-agents[privacy]"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Managing Dependencies
|
|
116
|
+
1. Go to the `aip-agents` module root, e.g. `cd python/aip-agents`.
|
|
117
|
+
2. Run `poetry shell` to create a virtual environment.
|
|
118
|
+
3. Run `poetry install` to install the `aip-agents` requirements (Poetry will generate a local lock file for you if needed; the repository ignores it).
|
|
119
|
+
4. Run `poetry update` if you change any dependency versions in `pyproject.toml`.
|
|
120
|
+
|
|
121
|
+
## Contributing
|
|
122
|
+
Please refer to this [Python Style Guide](https://docs.google.com/document/d/1uRggCrHnVfDPBnG641FyQBwUwLoFw0kTzNqRm92vUwM/edit?usp=sharing)
|
|
123
|
+
to get information about code style, documentation standard, and SCA that you need to use when contributing to this project
|
|
124
|
+
|
|
125
|
+
1. Activate `pre-commit` hooks using `pre-commit install`
|
|
126
|
+
2. Run `poetry shell` to create a virtual environment.
|
|
127
|
+
3. Run `poetry install` to install the `aip-agents` requirements (this will also create a local lock file that stays local).
|
|
128
|
+
4. Run `which python` to get the path to be referenced at Visual Studio Code interpreter path (`Ctrl`+`Shift`+`P` or `Cmd`+`Shift`+`P`)
|
|
129
|
+
5. Try running the unit test to see if it's working:
|
|
130
|
+
```bash
|
|
131
|
+
poetry run pytest -s tests/unit_tests/
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Hello World Examples
|
|
135
|
+
|
|
136
|
+
### Prerequisites
|
|
137
|
+
- Python 3.11 - 3.12
|
|
138
|
+
- Install the package:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
pip install aip-agents
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
- For OpenAI: Set your API key in the environment:
|
|
145
|
+
```bash
|
|
146
|
+
export OPENAI_API_KEY=your-openai-key
|
|
147
|
+
```
|
|
148
|
+
- For Google ADK: Set your API key in the environment:
|
|
149
|
+
```bash
|
|
150
|
+
export GOOGLE_API_KEY=your-google-api-key
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Run the Hello World Examples
|
|
154
|
+
|
|
155
|
+
The example scripts are located in `aip_agents/examples` in the source repo. You can run them individually or use the `run_all_examples.py` script.
|
|
156
|
+
|
|
157
|
+
**1. Running Individual Examples:**
|
|
158
|
+
|
|
159
|
+
Navigate to the library's root directory (e.g., `python/aip-agents` if you cloned the repository).
|
|
160
|
+
|
|
161
|
+
**LangGraph (OpenAI):**
|
|
162
|
+
```bash
|
|
163
|
+
python aip_agents/examples/hello_world_langgraph.py
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**LangGraph with GL Connectors (OpenAI):**
|
|
167
|
+
```bash
|
|
168
|
+
python aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**LangGraph Streaming (OpenAI):**
|
|
172
|
+
```bash
|
|
173
|
+
python aip_agents/examples/hello_world_langgraph_stream.py
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**LangGraph Multi-Agent Coordinator (OpenAI):**
|
|
177
|
+
```bash
|
|
178
|
+
python aip_agents/examples/hello_world_a2a_multi_agent_coordinator_server.py
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Google ADK:**
|
|
182
|
+
```bash
|
|
183
|
+
python aip_agents/examples/hello_world_google_adk.py
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Google ADK Streaming:**
|
|
187
|
+
```bash
|
|
188
|
+
python aip_agents/examples/hello_world_google_adk_stream.py
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**LangChain (OpenAI):**
|
|
192
|
+
```bash
|
|
193
|
+
python aip_agents/examples/hello_world_langchain.py
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**LangChain Streaming (OpenAI):**
|
|
197
|
+
```bash
|
|
198
|
+
python aip_agents/examples/hello_world_langchain_stream.py
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**HITL (Human-in-the-Loop) Approval Demo:**
|
|
202
|
+
```bash
|
|
203
|
+
python aip_agents/examples/hitl_demo.py
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**2. Running MCP Examples**
|
|
207
|
+
|
|
208
|
+
### Prerequisites
|
|
209
|
+
|
|
210
|
+
Ensure you have set the environment variables for API keys:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
export OPENAI_API_KEY="your-openai-key"
|
|
214
|
+
export GOOGLE_API_KEY="your-google-api-key"
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
For examples that use stateful MCP tools like browser automation, start the Playwright MCP server in a separate terminal:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
npx @playwright/mcp@latest --headless --port 8931
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Note:** Use the `--headless` flag to run the server without a visible browser window, which is recommended if the browser is not installed yet to avoid failures. For using an actual (non-headless) browser, refer to the [Playwright MCP documentation](https://github.com/microsoft/playwright-mcp).
|
|
224
|
+
|
|
225
|
+
### Local MCP Servers
|
|
226
|
+
|
|
227
|
+
For STDIO, SSE, and HTTP transports using local servers, open a terminal in the library root (`python/aip-agents`) and run:
|
|
228
|
+
|
|
229
|
+
- For STDIO:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
poetry run python aip_agents/examples/mcp_servers/mcp_server_stdio.py
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
- For SSE:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
poetry run python aip_agents/examples/mcp_servers/mcp_server_sse.py
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
- For HTTP:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
poetry run python aip_agents/examples/mcp_servers/mcp_server_http.py
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Note: Start the appropriate server before running the client examples for that transport.
|
|
248
|
+
|
|
249
|
+
### Running Examples
|
|
250
|
+
|
|
251
|
+
All examples are run from the library root using `poetry run python aip_agents/examples/<file>.py`. Examples support OpenAI for LangGraph/LangChain and Google ADK where specified.
|
|
252
|
+
|
|
253
|
+
#### LangChain Examples
|
|
254
|
+
|
|
255
|
+
##### STDIO Transport
|
|
256
|
+
- Non-Streaming:
|
|
257
|
+
```bash
|
|
258
|
+
poetry run python aip_agents/examples/hello_world_langchain_mcp_stdio.py
|
|
259
|
+
```
|
|
260
|
+
- Streaming:
|
|
261
|
+
```bash
|
|
262
|
+
poetry run python aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
##### SSE Transport
|
|
266
|
+
- Non-Streaming:
|
|
267
|
+
```bash
|
|
268
|
+
poetry run python aip_agents/examples/hello_world_langchain_mcp_sse.py
|
|
269
|
+
```
|
|
270
|
+
- Streaming:
|
|
271
|
+
```bash
|
|
272
|
+
poetry run python aip_agents/examples/hello_world_langchain_mcp_sse_stream.py
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
##### HTTP Transport
|
|
276
|
+
- Non-Streaming:
|
|
277
|
+
```bash
|
|
278
|
+
poetry run python aip_agents/examples/hello_world_langchain_mcp_http.py
|
|
279
|
+
```
|
|
280
|
+
- Streaming:
|
|
281
|
+
```bash
|
|
282
|
+
poetry run python aip_agents/examples/hello_world_langchain_mcp_http_stream.py
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
#### Google ADK Examples
|
|
286
|
+
|
|
287
|
+
##### STDIO Transport
|
|
288
|
+
- Non-Streaming:
|
|
289
|
+
```bash
|
|
290
|
+
poetry run python aip_agents/examples/hello_world_google_adk_mcp_stdio.py
|
|
291
|
+
```
|
|
292
|
+
- Streaming:
|
|
293
|
+
```bash
|
|
294
|
+
poetry run python aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
##### SSE Transport
|
|
298
|
+
- Non-Streaming:
|
|
299
|
+
```bash
|
|
300
|
+
poetry run python aip_agents/examples/hello_world_google_adk_mcp_sse.py
|
|
301
|
+
```
|
|
302
|
+
- Streaming:
|
|
303
|
+
```bash
|
|
304
|
+
poetry run python aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
##### HTTP Transport
|
|
308
|
+
- Non-Streaming:
|
|
309
|
+
```bash
|
|
310
|
+
poetry run python aip_agents/examples/hello_world_google_adk_mcp_http.py
|
|
311
|
+
```
|
|
312
|
+
- Streaming:
|
|
313
|
+
```bash
|
|
314
|
+
poetry run python aip_agents/examples/hello_world_google_adk_mcp_http_stream.py
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
#### LangGraph Examples (OpenAI)
|
|
318
|
+
|
|
319
|
+
##### STDIO Transport
|
|
320
|
+
- Non-Streaming:
|
|
321
|
+
```bash
|
|
322
|
+
poetry run python aip_agents/examples/hello_world_langgraph_mcp_stdio.py
|
|
323
|
+
```
|
|
324
|
+
- Streaming:
|
|
325
|
+
```bash
|
|
326
|
+
poetry run python aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
##### SSE Transport
|
|
330
|
+
- Non-Streaming:
|
|
331
|
+
```bash
|
|
332
|
+
poetry run python aip_agents/examples/hello_world_langgraph_mcp_sse.py
|
|
333
|
+
```
|
|
334
|
+
- Streaming:
|
|
335
|
+
```bash
|
|
336
|
+
poetry run python aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
##### HTTP Transport
|
|
340
|
+
- Non-Streaming:
|
|
341
|
+
```bash
|
|
342
|
+
poetry run python aip_agents/examples/hello_world_langgraph_mcp_http.py
|
|
343
|
+
```
|
|
344
|
+
- Streaming:
|
|
345
|
+
```bash
|
|
346
|
+
poetry run python aip_agents/examples/hello_world_langgraph_mcp_http_stream.py
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Multi-Server Example
|
|
350
|
+
|
|
351
|
+
This LangChain example uses multiple MCP servers: Playwright (for browser actions) and a random name generator (SSE transport) with persistent sessions across multiple `arun` calls.
|
|
352
|
+
|
|
353
|
+
1. Start the Playwright server:
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
npx @playwright/mcp@latest --headless --port 8931
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
2. In another terminal, start the Name Generator SSE server:
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
poetry run python aip_agents/examples/mcp_servers/mcp_name.py
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
3. Run the multi-server client example:
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
poetry run python aip_agents/examples/hello_world_langchain_mcp_multi_server.py
|
|
369
|
+
```
|
|
370
|
+
**3. Running Individual A2A Examples:**
|
|
371
|
+
|
|
372
|
+
* Navigate to the library's root directory (e.g., `libs/aip-agents` if you cloned the repository).
|
|
373
|
+
* Open a new terminal and navigate to the `aip_agents/examples` directory to run the A2A server.
|
|
374
|
+
|
|
375
|
+
**LangChain Server:**
|
|
376
|
+
```bash
|
|
377
|
+
python hello_world_a2a_langchain_server.py
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
* Open a new terminal and navigate to the `aip_agents/examples` directory to run the A2A client.
|
|
381
|
+
|
|
382
|
+
**LangChain Client:**
|
|
383
|
+
```bash
|
|
384
|
+
python hello_world_a2a_langchain_client.py
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**LangChain Client Integrated with Agent Workflow:**
|
|
388
|
+
```bash
|
|
389
|
+
python hello_world_a2a_langchain_client_agent.py
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
**LangChain Client Streaming:**
|
|
393
|
+
```bash
|
|
394
|
+
python hello_world_a2a_langchain_client_stream.py
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
## Human-in-the-Loop (HITL) Approval
|
|
399
|
+
|
|
400
|
+
AIP Agents supports Human-in-the-Loop approval for tool execution, allowing human operators to review and approve high-risk tool calls before they execute.
|
|
401
|
+
|
|
402
|
+
### Features
|
|
403
|
+
|
|
404
|
+
- **Configurable Approval Policies**: Set approval requirements per tool with customizable timeouts and behaviors
|
|
405
|
+
- **Interactive CLI Prompts**: Clear, structured prompts showing tool details and context
|
|
406
|
+
- **Structured Logging**: All approval decisions are logged with full metadata
|
|
407
|
+
- **Timeout Handling**: Configurable behavior when approval requests time out
|
|
408
|
+
- **Non-blocking**: Tools without HITL configuration execute normally
|
|
409
|
+
|
|
410
|
+
### Quick Start
|
|
411
|
+
|
|
412
|
+
Configure HITL for specific tools in your agent:
|
|
413
|
+
|
|
414
|
+
```python
|
|
415
|
+
from aip_agents.agent import LangGraphReactAgent
|
|
416
|
+
from aip_agents.agent.hitl.config import ToolApprovalConfig
|
|
417
|
+
|
|
418
|
+
# Create agent with tools
|
|
419
|
+
agent = LangGraphReactAgent(
|
|
420
|
+
name="My Agent",
|
|
421
|
+
tools=[send_email_tool, search_tool],
|
|
422
|
+
)
|
|
423
|
+
|
|
424
|
+
# Configure HITL via tool_configs
|
|
425
|
+
agent.tool_configs = {
|
|
426
|
+
"tool_configs": {
|
|
427
|
+
"send_email": {"hitl": {"timeout_seconds": 300}}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
When the agent attempts to use the `send_email` tool, it will:
|
|
433
|
+
|
|
434
|
+
1. Emit a pending approval event via `DeferredPromptHandler`
|
|
435
|
+
2. Wait for `ApprovalManager.resolve_pending_request()` to be called
|
|
436
|
+
3. Execute the tool only if approved
|
|
437
|
+
4. Log the decision for audit purposes
|
|
438
|
+
|
|
439
|
+
### Configuration Options
|
|
440
|
+
|
|
441
|
+
| Option | Type | Default | Description |
|
|
442
|
+
|--------|------|---------|-------------|
|
|
443
|
+
| `timeout_seconds` | int | 300 | Seconds to wait for operator input |
|
|
444
|
+
|
|
445
|
+
### Logging
|
|
446
|
+
|
|
447
|
+
All HITL decisions are logged with structured data:
|
|
448
|
+
|
|
449
|
+
```json
|
|
450
|
+
{
|
|
451
|
+
"event": "hitl_decision",
|
|
452
|
+
"tool": "send_email",
|
|
453
|
+
"decision": "approved",
|
|
454
|
+
"operator_input": "A",
|
|
455
|
+
"latency_ms": 2500,
|
|
456
|
+
"timestamp": "2025-09-25T10:15:00Z"
|
|
457
|
+
}
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### Demo
|
|
461
|
+
|
|
462
|
+
Run the interactive demo to see HITL in action:
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
python aip_agents/examples/hitl_demo.py
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
## Architectural Notes
|
|
469
|
+
|
|
470
|
+
### Memory Features
|
|
471
|
+
|
|
472
|
+
The library supports Mem0 as a memory backend for long-term conversation recall. Key features:
|
|
473
|
+
- Automatic persistence of user-agent interactions via `memory_backend="mem0"`.
|
|
474
|
+
- Semantic search for relevant past conversations.
|
|
475
|
+
- New `built_in_mem0_search` tool for explicit recall by time period (e.g., "yesterday", "last week", "July 2025").
|
|
476
|
+
- Date range parsing for natural language time filters using `dateparser`.
|
|
477
|
+
- Conditional auto-augmentation (disabled by default to reduce noise; enable with `memory_auto_augment=True`).
|
|
478
|
+
|
|
479
|
+
#### Mem0 Integration Tests
|
|
480
|
+
|
|
481
|
+
Use the Mem0 integration tests to validate memory persistence, recall, and deletion:
|
|
482
|
+
|
|
483
|
+
```bash
|
|
484
|
+
cd python/aip-agents && poetry run pytest tests/integration_tests/test_mem0_coordinator.py -q
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
## Deep Agents Middleware
|
|
488
|
+
|
|
489
|
+
The Deep Agents Middleware system provides composable components for enhancing agent capabilities with planning, context management, and custom lifecycle hooks.
|
|
490
|
+
|
|
491
|
+
### Quick Start
|
|
492
|
+
|
|
493
|
+
Enable deep agent capabilities with a single parameter:
|
|
494
|
+
|
|
495
|
+
```python
|
|
496
|
+
from aip_agents.agent.langgraph_react_agent import LangGraphReactAgent
|
|
497
|
+
|
|
498
|
+
# Enable planning + filesystem for complex multi-step tasks
|
|
499
|
+
agent = LangGraphReactAgent(
|
|
500
|
+
name="research_agent",
|
|
501
|
+
model="gpt-4",
|
|
502
|
+
planning=True, # Enables TodoListMiddleware for task decomposition
|
|
503
|
+
tools=[search_tool, calculator_tool],
|
|
504
|
+
)
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
### Understanding Planning vs Filesystem
|
|
508
|
+
|
|
509
|
+
**Important**: `planning` and `filesystem` are **completely independent** features:
|
|
510
|
+
|
|
511
|
+
- **`planning=True`**
|
|
512
|
+
- Adds `write_todos` tool for task decomposition
|
|
513
|
+
- Stores todos in **in-memory dictionary** (per thread_id)
|
|
514
|
+
- Does NOT use or require filesystem
|
|
515
|
+
- Perfect for breaking down complex tasks into steps
|
|
516
|
+
- Example: "Research quantum computing" → agent creates 5 subtasks
|
|
517
|
+
|
|
518
|
+
- **`filesystem=True`**
|
|
519
|
+
- Adds file operation tools: `ls`, `read_file`, `write_file`, `edit_file`, `grep`
|
|
520
|
+
- Stores data in **pluggable backend** (default: InMemoryBackend)
|
|
521
|
+
- Does NOT interact with planning/todos
|
|
522
|
+
- Perfect for offloading large tool results to prevent context overflow
|
|
523
|
+
- Example: Web search returns 50KB → agent writes to `/research/results.txt`
|
|
524
|
+
|
|
525
|
+
- **Both together** (`planning=True, filesystem=True`)
|
|
526
|
+
- Agent can plan tasks AND manage large data
|
|
527
|
+
- Todos stored separately in memory, files in backend
|
|
528
|
+
- Most powerful combination for complex research/analysis tasks
|
|
529
|
+
|
|
530
|
+
### Planning Only
|
|
531
|
+
|
|
532
|
+
For task decomposition without filesystem:
|
|
533
|
+
|
|
534
|
+
```python
|
|
535
|
+
agent = LangGraphReactAgent(
|
|
536
|
+
name="planner_agent",
|
|
537
|
+
model="gpt-4",
|
|
538
|
+
planning=True,
|
|
539
|
+
tools=[...],
|
|
540
|
+
)
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
### Filesystem Only
|
|
544
|
+
|
|
545
|
+
For context offloading without planning:
|
|
546
|
+
|
|
547
|
+
```python
|
|
548
|
+
agent = LangGraphReactAgent(
|
|
549
|
+
name="data_processor",
|
|
550
|
+
model="gpt-4",
|
|
551
|
+
filesystem=True, # Enables FilesystemMiddleware
|
|
552
|
+
tools=[...],
|
|
553
|
+
)
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
### Custom Middleware
|
|
557
|
+
|
|
558
|
+
Create domain-specific middleware by implementing the `AgentMiddleware` protocol:
|
|
559
|
+
|
|
560
|
+
```python
|
|
561
|
+
from aip_agents.middleware.base import AgentMiddleware, ModelRequest
|
|
562
|
+
|
|
563
|
+
class CustomMiddleware:
|
|
564
|
+
def __init__(self):
|
|
565
|
+
self.tools = [] # Add custom tools here
|
|
566
|
+
self.system_prompt_additions = "Custom instructions..."
|
|
567
|
+
|
|
568
|
+
def before_model(self, state: dict) -> dict:
|
|
569
|
+
# Hook executed before model invocation
|
|
570
|
+
return {}
|
|
571
|
+
|
|
572
|
+
def modify_model_request(self, request: ModelRequest, state: dict) -> ModelRequest:
|
|
573
|
+
# Modify the model request (add tools, adjust params, etc.)
|
|
574
|
+
return request
|
|
575
|
+
|
|
576
|
+
def after_model(self, state: dict) -> dict:
|
|
577
|
+
# Hook executed after model invocation
|
|
578
|
+
return {}
|
|
579
|
+
|
|
580
|
+
# COMPOSITION (not override): Custom middlewares EXTEND built-in middleware
|
|
581
|
+
agent = LangGraphReactAgent(
|
|
582
|
+
name="custom_agent",
|
|
583
|
+
model="gpt-4",
|
|
584
|
+
planning=True, # Adds TodoListMiddleware
|
|
585
|
+
filesystem=True, # Adds FilesystemMiddleware
|
|
586
|
+
middlewares=[CustomMiddleware()], # EXTENDS (doesn't replace) the above
|
|
587
|
+
tools=[...],
|
|
588
|
+
)
|
|
589
|
+
# Result: Agent has ALL THREE middleware active:
|
|
590
|
+
# 1. TodoListMiddleware (from planning=True)
|
|
591
|
+
# 2. FilesystemMiddleware (from filesystem=True)
|
|
592
|
+
# 3. CustomMiddleware (from middlewares parameter)
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
**Key Points:**
|
|
596
|
+
- ✅ `middlewares` parameter **extends** (never replaces) auto-configured middleware
|
|
597
|
+
- ✅ `planning` and `filesystem` are **independent** - use either, both, or neither
|
|
598
|
+
- ✅ `planning=True` stores todos in **memory** (does NOT require filesystem)
|
|
599
|
+
- ✅ Execution order: built-in middleware (planning, filesystem) → custom middlewares
|
|
600
|
+
- ✅ All hooks from all middleware execute in sequence
|
|
601
|
+
|
|
602
|
+
**Common Combinations:**
|
|
603
|
+
```python
|
|
604
|
+
# Planning only (no filesystem)
|
|
605
|
+
# → Todos stored in memory, no file operations available
|
|
606
|
+
agent = LangGraphReactAgent(planning=True)
|
|
607
|
+
# → [TodoListMiddleware]
|
|
608
|
+
|
|
609
|
+
# Filesystem only (no planning)
|
|
610
|
+
# → File operations available, no todo planning
|
|
611
|
+
agent = LangGraphReactAgent(filesystem=True)
|
|
612
|
+
# → [FilesystemMiddleware]
|
|
613
|
+
|
|
614
|
+
# Both planning and filesystem
|
|
615
|
+
# → Todos in memory + file operations (most powerful combination)
|
|
616
|
+
agent = LangGraphReactAgent(planning=True, filesystem=True)
|
|
617
|
+
# → [TodoListMiddleware, FilesystemMiddleware]
|
|
618
|
+
|
|
619
|
+
# Custom only (no auto-configuration)
|
|
620
|
+
agent = LangGraphReactAgent(middlewares=[CustomMiddleware()])
|
|
621
|
+
# → [CustomMiddleware]
|
|
622
|
+
|
|
623
|
+
# All together (composition)
|
|
624
|
+
agent = LangGraphReactAgent(
|
|
625
|
+
planning=True,
|
|
626
|
+
filesystem=True,
|
|
627
|
+
middlewares=[CustomMiddleware()]
|
|
628
|
+
)
|
|
629
|
+
# → [TodoListMiddleware, FilesystemMiddleware, CustomMiddleware]
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
### Advanced: Custom Storage Backend
|
|
633
|
+
|
|
634
|
+
Provide your own storage backend for filesystem operations:
|
|
635
|
+
|
|
636
|
+
```python
|
|
637
|
+
from aip_agents.middleware.backends.protocol import BackendProtocol
|
|
638
|
+
from aip_agents.middleware.backends.memory import InMemoryBackend
|
|
639
|
+
|
|
640
|
+
# Use custom backend (e.g., PostgreSQL, S3, Redis)
|
|
641
|
+
custom_backend = MyCustomBackend()
|
|
642
|
+
|
|
643
|
+
agent = LangGraphReactAgent(
|
|
644
|
+
name="agent",
|
|
645
|
+
model="gpt-4",
|
|
646
|
+
filesystem=custom_backend, # Pass BackendProtocol instance
|
|
647
|
+
tools=[...],
|
|
648
|
+
)
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
### Benefits
|
|
652
|
+
|
|
653
|
+
- **Context Window Management**: Automatically offload large tool results to files
|
|
654
|
+
- **Task Decomposition**: Break down complex multi-step tasks into trackable todos
|
|
655
|
+
- **Incremental Development**: Add capabilities gradually (filesystem first, then planning)
|
|
656
|
+
- **Zero Breaking Changes**: Existing agents work unchanged (backward compatible)
|
|
657
|
+
- **Extensible**: Compose custom middleware with built-in components
|
|
658
|
+
|
|
659
|
+
For detailed documentation, see `docs/deep_agents_guide.md` (coming soon).
|
|
660
|
+
|
|
661
|
+
### Agent Interface (`AgentInterface`)
|
|
662
|
+
|
|
663
|
+
The `aip_agents.agent.interface.AgentInterface` class defines a standardized contract for all agent implementations within the AIP Agents ecosystem. It ensures that different agent types (e.g., LangGraph-based, Google ADK-based) expose a consistent set of methods for core operations.
|
|
664
|
+
|
|
665
|
+
Key methods defined by `AgentInterface` typically include:
|
|
666
|
+
- `arun()`: For asynchronous execution of the agent that returns a final consolidated response.
|
|
667
|
+
- `arun_stream()`: For asynchronous execution that streams back partial responses or events from the agent.
|
|
668
|
+
|
|
669
|
+
By adhering to this interface, users can interact with various agents in a uniform way, making it easier to switch between or combine different agent technologies.
|
|
670
|
+
|
|
671
|
+
### Inversion of Control (IoC) / Dependency Injection (DI)
|
|
672
|
+
|
|
673
|
+
The agent implementations (e.g., `LangGraphAgent`, `GoogleADKAgent`) utilize Dependency Injection. For instance, `LangGraphAgent` accepts an `agent_executor` (like one created by LangGraph's `create_react_agent`) in its constructor. Similarly, `GoogleADKAgent` accepts a native `adk_native_agent`. This allows the core execution logic to be provided externally, promoting flexibility and decoupling the agent wrapper from the specific instantiation details of its underlying engine.
|