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,407 @@
|
|
|
1
|
+
"""Activity metadata helper utilities.
|
|
2
|
+
|
|
3
|
+
Provides helpers to build activity messages for tools and sub-agents.
|
|
4
|
+
|
|
5
|
+
Authors:
|
|
6
|
+
Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
|
|
7
|
+
Raymond Christopher (raymond.christopher@gdplabs.id)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
from aip_agents.schema.hitl import ApprovalDecisionType
|
|
14
|
+
from aip_agents.utils.logger import get_logger
|
|
15
|
+
from aip_agents.utils.metadata.activity_narrative import (
|
|
16
|
+
DELEGATE_PREFIX,
|
|
17
|
+
HITL_DECISION_MESSAGES,
|
|
18
|
+
HITL_PENDING_DESCRIPTION,
|
|
19
|
+
HITL_PENDING_TITLE,
|
|
20
|
+
ActivityNarrativeBuilder,
|
|
21
|
+
_format_tool_or_subagent_name,
|
|
22
|
+
)
|
|
23
|
+
from aip_agents.utils.metadata.schemas.activity_schema import Activity
|
|
24
|
+
|
|
25
|
+
logger = get_logger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _create_activity_info(
|
|
29
|
+
data_value: dict[str, Any] | str, top_level_id: str = "default_metadata_id"
|
|
30
|
+
) -> dict[str, str]:
|
|
31
|
+
"""Create activity info payload with a customizable ID and data_value.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
data_value: The data content for the activity info as a dict or JSON string.
|
|
35
|
+
top_level_id: The ID for the activity info. Defaults to "default_metadata_id".
|
|
36
|
+
|
|
37
|
+
Returns a dict with top-level id and data_value as JSON string:
|
|
38
|
+
{
|
|
39
|
+
"data_type": "activity",
|
|
40
|
+
"id": "<id>",
|
|
41
|
+
"data_value": "{...}"
|
|
42
|
+
}
|
|
43
|
+
"""
|
|
44
|
+
if isinstance(data_value, dict):
|
|
45
|
+
data_value_str = json.dumps(data_value)
|
|
46
|
+
elif isinstance(data_value, str):
|
|
47
|
+
try:
|
|
48
|
+
json.loads(data_value)
|
|
49
|
+
data_value_str = data_value
|
|
50
|
+
except json.JSONDecodeError as e:
|
|
51
|
+
raise ValueError(f"data_value string is not valid JSON: {e}") from e
|
|
52
|
+
else:
|
|
53
|
+
raise TypeError("data_value must be either a dict or a JSON string")
|
|
54
|
+
activity = Activity(id=top_level_id, data_value=data_value_str)
|
|
55
|
+
return activity.model_dump()
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
DEFAULT_ACTIVITY_MESSAGE = "**Performing agent tasks**\n\nProcessing the tasks."
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# Message templates
|
|
62
|
+
TOOL_EXECUTION_RUNNING_TEMPLATE = "**Processing Agent with Tools**\n\nRunning tool {tool_name}"
|
|
63
|
+
TOOL_EXECUTION_COMPLETE_TEMPLATE = "**Tool Execution Complete**\n\nOutput received from {tool_name}"
|
|
64
|
+
SUBAGENT_DELEGATION_TEMPLATE = (
|
|
65
|
+
"**Delegating to Subagent**\n\nHanding over the process to subagent {agent_name} for execution."
|
|
66
|
+
)
|
|
67
|
+
SUBAGENT_COMPLETE_TEMPLATE = "**Subagent Execution Complete**\n\nOutput received from subagent {agent_name}"
|
|
68
|
+
MIXED_EXECUTION_TEMPLATE = (
|
|
69
|
+
"**Processing with Tools and Subagents**\n\nRunning tools: {tool_names} and delegating to subagents: {agent_names}"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
# Exported default/terminal activity info
|
|
73
|
+
DEFAULT_ACTIVITY_INFO = _create_activity_info(
|
|
74
|
+
{"message": DEFAULT_ACTIVITY_MESSAGE},
|
|
75
|
+
"default_metadata_id",
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def create_tool_activity_info(
|
|
80
|
+
original_metadata: dict[str, Any] | None,
|
|
81
|
+
) -> dict[str, str]:
|
|
82
|
+
"""Create activity info payload with optional LLM narrative overrides.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
original_metadata: The original metadata dictionary containing tool_info and hitl data.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
A dict with data_type="activity" and data_value as a JSON string.
|
|
89
|
+
"""
|
|
90
|
+
if not original_metadata:
|
|
91
|
+
logger.info("activity info requested with empty metadata; returning default payload")
|
|
92
|
+
return DEFAULT_ACTIVITY_INFO
|
|
93
|
+
|
|
94
|
+
step_id = original_metadata.get("step_id") if isinstance(original_metadata.get("step_id"), str) else None
|
|
95
|
+
logger.info(
|
|
96
|
+
"activity info creation started step_id=%s metadata_keys=%s",
|
|
97
|
+
step_id,
|
|
98
|
+
_summarize_metadata_keys(original_metadata),
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
builder = ActivityNarrativeBuilder()
|
|
102
|
+
try:
|
|
103
|
+
payload = builder.build_payload(original_metadata)
|
|
104
|
+
except Exception as exc: # pragma: no cover - defensive logging
|
|
105
|
+
logger.exception("activity narrative builder failed for step_id=%s: %s", step_id, exc)
|
|
106
|
+
payload = None
|
|
107
|
+
|
|
108
|
+
if payload:
|
|
109
|
+
logger.info("activity narrative builder produced payload for step_id=%s", step_id)
|
|
110
|
+
return _create_activity_info(payload)
|
|
111
|
+
|
|
112
|
+
logger.info("activity narrative builder returned no payload; using legacy template (step_id=%s)", step_id)
|
|
113
|
+
return _build_legacy_activity_info(original_metadata)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _extract_metadata_value(metadata: dict[str, Any] | None, key: str) -> Any:
|
|
117
|
+
"""Retrieve a metadata value matching a key or StrEnum equivalent.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
metadata (dict[str, Any] | None): The metadata dictionary to search in.
|
|
121
|
+
key (str): The key to search for.
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
Any: The value associated with the key, or None if not found.
|
|
125
|
+
"""
|
|
126
|
+
if not isinstance(metadata, dict):
|
|
127
|
+
return None
|
|
128
|
+
|
|
129
|
+
if key in metadata:
|
|
130
|
+
return metadata[key]
|
|
131
|
+
|
|
132
|
+
for meta_key, value in metadata.items():
|
|
133
|
+
if getattr(meta_key, "value", None) == key:
|
|
134
|
+
return value
|
|
135
|
+
return None
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _summarize_metadata_keys(metadata: dict[str, Any]) -> str:
|
|
139
|
+
"""Return a deterministic summary of metadata keys for logging.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
metadata: Metadata dictionary emitted by the runner.
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
str: Comma-separated list of sorted keys or a fallback token.
|
|
146
|
+
"""
|
|
147
|
+
if not isinstance(metadata, dict):
|
|
148
|
+
return "<invalid>"
|
|
149
|
+
try:
|
|
150
|
+
return ",".join(sorted(str(key) for key in metadata.keys()))
|
|
151
|
+
except Exception: # pragma: no cover - best-effort logging
|
|
152
|
+
return "<unavailable>"
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def _get_hitl_decision(metadata: dict[str, Any] | None) -> ApprovalDecisionType | None:
|
|
156
|
+
"""Extract the HITL decision from metadata if available.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
metadata (dict[str, Any] | None): The metadata dictionary containing the decision.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
ApprovalDecisionType | None: The HITL decision if found, or None if not available.
|
|
163
|
+
"""
|
|
164
|
+
if not isinstance(metadata, dict):
|
|
165
|
+
return None
|
|
166
|
+
|
|
167
|
+
decision = metadata.get("decision")
|
|
168
|
+
if isinstance(decision, ApprovalDecisionType):
|
|
169
|
+
return decision
|
|
170
|
+
if isinstance(decision, str):
|
|
171
|
+
try:
|
|
172
|
+
return ApprovalDecisionType(decision.lower())
|
|
173
|
+
except ValueError:
|
|
174
|
+
return None
|
|
175
|
+
return None
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def _generate_hitl_pending_message(request_id: str | None = None) -> dict[str, str]:
|
|
179
|
+
"""Generate activity info for pending HITL approvals.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
request_id (str | None, optional): The request ID for the HITL approval. Defaults to None.
|
|
183
|
+
|
|
184
|
+
Returns:
|
|
185
|
+
dict[str, str]: The activity info dictionary for the pending HITL approval.
|
|
186
|
+
"""
|
|
187
|
+
message = f"{HITL_PENDING_TITLE}\n\n{HITL_PENDING_DESCRIPTION}"
|
|
188
|
+
top_level_id = request_id if isinstance(request_id, str) and request_id else "default_metadata_id"
|
|
189
|
+
return _create_activity_info({"message": message}, top_level_id)
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def _append_hitl_decision_message(
|
|
193
|
+
activity_info: dict[str, str],
|
|
194
|
+
decision: ApprovalDecisionType,
|
|
195
|
+
*,
|
|
196
|
+
request_id: str | None = None,
|
|
197
|
+
) -> dict[str, str]:
|
|
198
|
+
"""Append HITL decision context to an existing activity info payload.
|
|
199
|
+
|
|
200
|
+
This function takes an existing activity info dictionary and appends
|
|
201
|
+
human-in-the-loop (HITL) decision information to it. The decision
|
|
202
|
+
information includes a title and description based on the approval
|
|
203
|
+
decision type.
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
activity_info: The existing activity info dictionary containing
|
|
207
|
+
data_type, id, and data_value fields.
|
|
208
|
+
decision: The HITL approval decision type (approved, rejected,
|
|
209
|
+
skipped, or timeout_skip).
|
|
210
|
+
request_id: Optional request ID to use as the activity ID.
|
|
211
|
+
If provided and non-empty, replaces the existing ID.
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
A new activity info dictionary with the HITL decision message
|
|
215
|
+
appended to the existing message. If the decision type is not
|
|
216
|
+
recognized or the input data is malformed, returns the original
|
|
217
|
+
activity_info unchanged.
|
|
218
|
+
|
|
219
|
+
"""
|
|
220
|
+
decision_entry = HITL_DECISION_MESSAGES.get(decision)
|
|
221
|
+
if not decision_entry:
|
|
222
|
+
return activity_info
|
|
223
|
+
|
|
224
|
+
title, description = decision_entry
|
|
225
|
+
try:
|
|
226
|
+
payload = json.loads(activity_info["data_value"])
|
|
227
|
+
base_message = payload.get("message", "")
|
|
228
|
+
except (KeyError, json.JSONDecodeError):
|
|
229
|
+
return activity_info
|
|
230
|
+
|
|
231
|
+
combined_message = f"{title}\n\n{description}".strip()
|
|
232
|
+
if base_message:
|
|
233
|
+
combined_message = f"{combined_message}\n\n{base_message}"
|
|
234
|
+
updated_payload = dict(payload)
|
|
235
|
+
updated_payload["message"] = combined_message
|
|
236
|
+
|
|
237
|
+
updated_activity = dict(activity_info)
|
|
238
|
+
updated_activity["data_value"] = json.dumps(updated_payload)
|
|
239
|
+
if isinstance(request_id, str) and request_id:
|
|
240
|
+
updated_activity["id"] = request_id
|
|
241
|
+
|
|
242
|
+
return updated_activity
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def _extract_tool_names(tool_info: dict[str, Any] | None) -> list[str]:
|
|
246
|
+
"""Extract tool names from tool_info structure.
|
|
247
|
+
|
|
248
|
+
Args:
|
|
249
|
+
tool_info: A dict that may contain name or tool_calls, or None/invalid type.
|
|
250
|
+
|
|
251
|
+
Returns:
|
|
252
|
+
A list of tool names.
|
|
253
|
+
"""
|
|
254
|
+
tool_names: list[str] = []
|
|
255
|
+
|
|
256
|
+
if not isinstance(tool_info, dict):
|
|
257
|
+
return tool_names
|
|
258
|
+
|
|
259
|
+
if "name" in tool_info:
|
|
260
|
+
tool_names = [tool_info["name"]]
|
|
261
|
+
elif "tool_calls" in tool_info and isinstance(tool_info["tool_calls"], list):
|
|
262
|
+
tool_names = [call["name"] for call in tool_info["tool_calls"] if isinstance(call, dict) and "name" in call]
|
|
263
|
+
|
|
264
|
+
return tool_names
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
def _generate_tool_message(tool_names: list[str], has_output: bool) -> dict[str, str]:
|
|
268
|
+
"""Generate activity info for regular tools.
|
|
269
|
+
|
|
270
|
+
Args:
|
|
271
|
+
tool_names: A list of tool names.
|
|
272
|
+
has_output: Whether the tool has output.
|
|
273
|
+
|
|
274
|
+
Returns:
|
|
275
|
+
A dict with data_type="activity" and data_value as a JSON string
|
|
276
|
+
including a randomized UUID and the generated message.
|
|
277
|
+
"""
|
|
278
|
+
formatted_tools = [_format_tool_or_subagent_name(tool) for tool in tool_names]
|
|
279
|
+
tool_name = formatted_tools[0] if len(formatted_tools) == 1 else ", ".join(formatted_tools)
|
|
280
|
+
|
|
281
|
+
if has_output:
|
|
282
|
+
message = TOOL_EXECUTION_COMPLETE_TEMPLATE.format(tool_name=tool_name)
|
|
283
|
+
else:
|
|
284
|
+
message = TOOL_EXECUTION_RUNNING_TEMPLATE.format(tool_name=tool_name)
|
|
285
|
+
|
|
286
|
+
return _create_activity_info({"message": message})
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def _generate_subagent_message(subagent_names: list[str], has_output: bool) -> dict[str, str]:
|
|
290
|
+
"""Generate activity info for sub-agents.
|
|
291
|
+
|
|
292
|
+
Args:
|
|
293
|
+
subagent_names: A list of sub-agent names.
|
|
294
|
+
has_output: Whether the sub-agent has output.
|
|
295
|
+
|
|
296
|
+
Returns:
|
|
297
|
+
A dict with data_type="activity" and data_value as a JSON string
|
|
298
|
+
including a randomized UUID and the generated message.
|
|
299
|
+
"""
|
|
300
|
+
formatted_agents = [_format_tool_or_subagent_name(agent, remove_delegate_prefix=True) for agent in subagent_names]
|
|
301
|
+
agent_name = formatted_agents[0] if len(formatted_agents) == 1 else ", ".join(formatted_agents)
|
|
302
|
+
|
|
303
|
+
if has_output:
|
|
304
|
+
message = SUBAGENT_COMPLETE_TEMPLATE.format(agent_name=agent_name)
|
|
305
|
+
else:
|
|
306
|
+
message = SUBAGENT_DELEGATION_TEMPLATE.format(agent_name=agent_name)
|
|
307
|
+
|
|
308
|
+
return _create_activity_info({"message": message})
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def _generate_mixed_message(tool_names: list[str], subagent_names: list[str]) -> dict[str, str]:
|
|
312
|
+
"""Generate activity info for mixed tools and sub-agents execution.
|
|
313
|
+
|
|
314
|
+
Args:
|
|
315
|
+
tool_names: A list of tool names.
|
|
316
|
+
subagent_names: A list of sub-agent names.
|
|
317
|
+
|
|
318
|
+
Returns:
|
|
319
|
+
A dict with data_type="activity" and data_value as a JSON string
|
|
320
|
+
including a randomized UUID and the generated message.
|
|
321
|
+
"""
|
|
322
|
+
formatted_tools = [_format_tool_or_subagent_name(tool) for tool in tool_names]
|
|
323
|
+
formatted_agents = [_format_tool_or_subagent_name(agent, remove_delegate_prefix=True) for agent in subagent_names]
|
|
324
|
+
|
|
325
|
+
tool_names_str = ", ".join(formatted_tools)
|
|
326
|
+
agent_names_str = ", ".join(formatted_agents)
|
|
327
|
+
|
|
328
|
+
message = MIXED_EXECUTION_TEMPLATE.format(tool_names=tool_names_str, agent_names=agent_names_str)
|
|
329
|
+
return _create_activity_info({"message": message})
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def _extract_hitl_request_id(hitl_metadata: dict[str, Any] | None) -> str | None:
|
|
333
|
+
"""Extract HITL request ID from metadata.
|
|
334
|
+
|
|
335
|
+
Args:
|
|
336
|
+
hitl_metadata: HITL metadata dictionary.
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
Request ID string if found, None otherwise.
|
|
340
|
+
"""
|
|
341
|
+
if not isinstance(hitl_metadata, dict):
|
|
342
|
+
return None
|
|
343
|
+
request_id = hitl_metadata.get("request_id")
|
|
344
|
+
return request_id if isinstance(request_id, str) and request_id else None
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def _build_tool_message_result(tool_names: list[str], has_output: bool) -> dict[str, str]:
|
|
348
|
+
"""Build activity message result based on tool types.
|
|
349
|
+
|
|
350
|
+
Args:
|
|
351
|
+
tool_names: List of tool names.
|
|
352
|
+
has_output: Whether tool has output.
|
|
353
|
+
|
|
354
|
+
Returns:
|
|
355
|
+
Activity info dictionary.
|
|
356
|
+
"""
|
|
357
|
+
subagent_tools = [name for name in tool_names if name.startswith(DELEGATE_PREFIX)]
|
|
358
|
+
regular_tools = [name for name in tool_names if not name.startswith(DELEGATE_PREFIX)]
|
|
359
|
+
|
|
360
|
+
# Mixed case: both tools and subagents (only when being called, not when output received)
|
|
361
|
+
if subagent_tools and regular_tools and not has_output:
|
|
362
|
+
return _generate_mixed_message(regular_tools, subagent_tools)
|
|
363
|
+
|
|
364
|
+
# Pure tool case (including when mixed case has output)
|
|
365
|
+
base_result = _generate_tool_message(tool_names, has_output)
|
|
366
|
+
|
|
367
|
+
# Pure subagent case
|
|
368
|
+
if subagent_tools and not regular_tools:
|
|
369
|
+
base_result = _generate_subagent_message(subagent_tools, has_output)
|
|
370
|
+
|
|
371
|
+
return base_result
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
def _build_legacy_activity_info(original_metadata: dict[str, Any] | None) -> dict[str, str]:
|
|
375
|
+
"""Create activity info based on tool information using legacy templates.
|
|
376
|
+
|
|
377
|
+
Args:
|
|
378
|
+
original_metadata: The original metadata dictionary containing tool_info and hitl data.
|
|
379
|
+
|
|
380
|
+
Returns:
|
|
381
|
+
A dict with data_type="activity" and data_value as a JSON string.
|
|
382
|
+
"""
|
|
383
|
+
if not original_metadata:
|
|
384
|
+
return DEFAULT_ACTIVITY_INFO
|
|
385
|
+
|
|
386
|
+
tool_info = _extract_metadata_value(original_metadata, "tool_info")
|
|
387
|
+
if not isinstance(tool_info, dict):
|
|
388
|
+
tool_info = {}
|
|
389
|
+
|
|
390
|
+
hitl_metadata = _extract_metadata_value(original_metadata, "hitl")
|
|
391
|
+
hitl_decision = _get_hitl_decision(hitl_metadata)
|
|
392
|
+
hitl_request_id = _extract_hitl_request_id(hitl_metadata)
|
|
393
|
+
|
|
394
|
+
if hitl_decision == ApprovalDecisionType.PENDING:
|
|
395
|
+
return _generate_hitl_pending_message(hitl_request_id)
|
|
396
|
+
|
|
397
|
+
tool_names = _extract_tool_names(tool_info)
|
|
398
|
+
if not tool_names:
|
|
399
|
+
base_result = DEFAULT_ACTIVITY_INFO
|
|
400
|
+
else:
|
|
401
|
+
has_output = "output" in tool_info
|
|
402
|
+
base_result = _build_tool_message_result(tool_names, has_output)
|
|
403
|
+
|
|
404
|
+
if hitl_decision in HITL_DECISION_MESSAGES and hitl_decision is not None:
|
|
405
|
+
return _append_hitl_decision_message(base_result, hitl_decision, request_id=hitl_request_id)
|
|
406
|
+
|
|
407
|
+
return base_result
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.schema.hitl import ApprovalDecisionType as ApprovalDecisionType
|
|
3
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
4
|
+
from aip_agents.utils.metadata.activity_narrative import ActivityNarrativeBuilder as ActivityNarrativeBuilder, DELEGATE_PREFIX as DELEGATE_PREFIX, HITL_DECISION_MESSAGES as HITL_DECISION_MESSAGES, HITL_PENDING_DESCRIPTION as HITL_PENDING_DESCRIPTION, HITL_PENDING_TITLE as HITL_PENDING_TITLE
|
|
5
|
+
from aip_agents.utils.metadata.schemas.activity_schema import Activity as Activity
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
logger: Incomplete
|
|
9
|
+
DEFAULT_ACTIVITY_MESSAGE: str
|
|
10
|
+
TOOL_EXECUTION_RUNNING_TEMPLATE: str
|
|
11
|
+
TOOL_EXECUTION_COMPLETE_TEMPLATE: str
|
|
12
|
+
SUBAGENT_DELEGATION_TEMPLATE: str
|
|
13
|
+
SUBAGENT_COMPLETE_TEMPLATE: str
|
|
14
|
+
MIXED_EXECUTION_TEMPLATE: str
|
|
15
|
+
DEFAULT_ACTIVITY_INFO: Incomplete
|
|
16
|
+
|
|
17
|
+
def create_tool_activity_info(original_metadata: dict[str, Any] | None) -> dict[str, str]:
|
|
18
|
+
'''Create activity info payload with optional LLM narrative overrides.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
original_metadata: The original metadata dictionary containing tool_info and hitl data.
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
A dict with data_type="activity" and data_value as a JSON string.
|
|
25
|
+
'''
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""Activity narrative package.
|
|
2
|
+
|
|
3
|
+
Authors:
|
|
4
|
+
Raymond Christopher (raymond.christopher@gdplabs.id)
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from aip_agents.utils.metadata.activity_narrative.builder import ActivityNarrativeBuilder, _formatter_llm_client
|
|
8
|
+
from aip_agents.utils.metadata.activity_narrative.constants import (
|
|
9
|
+
DELEGATE_PREFIX,
|
|
10
|
+
HITL_DECISION_MESSAGES,
|
|
11
|
+
HITL_PENDING_DESCRIPTION,
|
|
12
|
+
HITL_PENDING_TITLE,
|
|
13
|
+
OUTPUT_EXCERPT_MAX_CHARS,
|
|
14
|
+
SYSTEM_PROMPT,
|
|
15
|
+
)
|
|
16
|
+
from aip_agents.utils.metadata.activity_narrative.context import ActivityContext, ActivityPhase
|
|
17
|
+
from aip_agents.utils.metadata.activity_narrative.formatters import ArgsFormatter, OutputFormatter, SensitiveInfoFilter
|
|
18
|
+
from aip_agents.utils.metadata.activity_narrative.utils import _format_tool_or_subagent_name
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"ActivityNarrativeBuilder",
|
|
22
|
+
"ActivityContext",
|
|
23
|
+
"ActivityPhase",
|
|
24
|
+
"ArgsFormatter",
|
|
25
|
+
"OutputFormatter",
|
|
26
|
+
"SensitiveInfoFilter",
|
|
27
|
+
"DELEGATE_PREFIX",
|
|
28
|
+
"HITL_DECISION_MESSAGES",
|
|
29
|
+
"HITL_PENDING_DESCRIPTION",
|
|
30
|
+
"HITL_PENDING_TITLE",
|
|
31
|
+
"OUTPUT_EXCERPT_MAX_CHARS",
|
|
32
|
+
"SYSTEM_PROMPT",
|
|
33
|
+
"_format_tool_or_subagent_name",
|
|
34
|
+
"_formatter_llm_client",
|
|
35
|
+
]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from aip_agents.utils.metadata.activity_narrative.builder import ActivityNarrativeBuilder as ActivityNarrativeBuilder, _formatter_llm_client as _formatter_llm_client
|
|
2
|
+
from aip_agents.utils.metadata.activity_narrative.constants import DELEGATE_PREFIX as DELEGATE_PREFIX, HITL_DECISION_MESSAGES as HITL_DECISION_MESSAGES, HITL_PENDING_DESCRIPTION as HITL_PENDING_DESCRIPTION, HITL_PENDING_TITLE as HITL_PENDING_TITLE, OUTPUT_EXCERPT_MAX_CHARS as OUTPUT_EXCERPT_MAX_CHARS, SYSTEM_PROMPT as SYSTEM_PROMPT
|
|
3
|
+
from aip_agents.utils.metadata.activity_narrative.context import ActivityContext as ActivityContext, ActivityPhase as ActivityPhase
|
|
4
|
+
from aip_agents.utils.metadata.activity_narrative.formatters import ArgsFormatter as ArgsFormatter, OutputFormatter as OutputFormatter, SensitiveInfoFilter as SensitiveInfoFilter
|
|
5
|
+
from aip_agents.utils.metadata.activity_narrative.utils import _format_tool_or_subagent_name as _format_tool_or_subagent_name
|
|
6
|
+
|
|
7
|
+
__all__ = ['ActivityNarrativeBuilder', 'ActivityContext', 'ActivityPhase', 'ArgsFormatter', 'OutputFormatter', 'SensitiveInfoFilter', 'DELEGATE_PREFIX', 'HITL_DECISION_MESSAGES', 'HITL_PENDING_DESCRIPTION', 'HITL_PENDING_TITLE', 'OUTPUT_EXCERPT_MAX_CHARS', 'SYSTEM_PROMPT', '_format_tool_or_subagent_name', '_formatter_llm_client']
|