aip-agents-binary 0.5.25b1__py3-none-macosx_13_0_arm64.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.
- 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 +2948 -0
- aip_agents/agent/base_langgraph_agent.pyi +232 -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 +433 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
- aip_agents/agent/langgraph_react_agent.py +2596 -0
- aip_agents/agent/langgraph_react_agent.pyi +131 -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/demo_memory_recall.py +401 -0
- aip_agents/examples/demo_memory_recall.pyi +58 -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_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 +46 -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 +193 -0
- aip_agents/mcp/client/connection_manager.pyi +48 -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 +362 -0
- aip_agents/mcp/client/persistent_session.pyi +113 -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 +228 -0
- aip_agents/mcp/client/transports.pyi +123 -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 +717 -0
- aip_agents/memory/adapters/base_adapter.pyi +150 -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/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 +53 -0
- aip_agents/tools/__init__.pyi +9 -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 +1112 -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 +813 -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/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/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 +22 -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 +258 -0
- aip_agents/tools/memory_search/mem0.pyi +19 -0
- aip_agents/tools/memory_search/schema.py +48 -0
- aip_agents/tools/memory_search/schema.pyi +15 -0
- aip_agents/tools/memory_search_tool.py +26 -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 +1071 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
- aip_agents/utils/langgraph/tool_output_management.py +967 -0
- aip_agents/utils/langgraph/tool_output_management.pyi +292 -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.5.25b1.dist-info/METADATA +681 -0
- aip_agents_binary-0.5.25b1.dist-info/RECORD +566 -0
- aip_agents_binary-0.5.25b1.dist-info/WHEEL +5 -0
- aip_agents_binary-0.5.25b1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from a2a.types import AgentCard
|
|
3
|
+
from enum import StrEnum
|
|
4
|
+
from gllm_core.utils.retry import RetryConfig
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
__all__ = ['CredentialType', 'StreamMode', 'HttpxClientOptions', 'A2AClientConfig', 'BaseAgentConfig', 'AgentConfig', 'LangflowAgentConfig']
|
|
9
|
+
|
|
10
|
+
class CredentialType(StrEnum):
|
|
11
|
+
"""Credential type enumeration for type safety and better developer experience."""
|
|
12
|
+
API_KEY: str
|
|
13
|
+
FILE: str
|
|
14
|
+
DICT: str
|
|
15
|
+
|
|
16
|
+
class StreamMode(StrEnum):
|
|
17
|
+
"""LangGraph stream modes for astream operations."""
|
|
18
|
+
VALUES: str
|
|
19
|
+
CUSTOM: str
|
|
20
|
+
MESSAGES: str
|
|
21
|
+
|
|
22
|
+
class HttpxClientOptions(BaseModel):
|
|
23
|
+
"""Options for the HTTP client."""
|
|
24
|
+
timeout: float
|
|
25
|
+
trust_env: bool
|
|
26
|
+
follow_redirects: bool
|
|
27
|
+
model_config: Incomplete
|
|
28
|
+
class Config:
|
|
29
|
+
"""Pydantic v1 fallback config for HttpxClientOptions."""
|
|
30
|
+
extra: str
|
|
31
|
+
|
|
32
|
+
class A2AClientConfig(BaseModel):
|
|
33
|
+
"""Configuration for A2A client."""
|
|
34
|
+
discovery_urls: list[str] | None
|
|
35
|
+
known_agents: dict[str, AgentCard]
|
|
36
|
+
httpx_client_options: HttpxClientOptions | None
|
|
37
|
+
|
|
38
|
+
class BaseAgentConfig(BaseModel):
|
|
39
|
+
"""Base configuration for agent implementations."""
|
|
40
|
+
tools: list[Any] | None
|
|
41
|
+
default_hyperparameters: dict[str, Any] | None
|
|
42
|
+
model_config: Incomplete
|
|
43
|
+
class Config:
|
|
44
|
+
"""Pydantic v1 fallback config for BaseAgentConfig."""
|
|
45
|
+
extra: str
|
|
46
|
+
|
|
47
|
+
class AgentConfig(BaseAgentConfig):
|
|
48
|
+
"""Configuration for agent implementations with language model settings."""
|
|
49
|
+
lm_name: str | None
|
|
50
|
+
lm_hyperparameters: dict[str, Any] | None
|
|
51
|
+
lm_provider: str | None
|
|
52
|
+
lm_base_url: str | None
|
|
53
|
+
lm_api_key: str | None
|
|
54
|
+
lm_credentials: str | dict[str, Any] | None
|
|
55
|
+
lm_retry_config: RetryConfig | None
|
|
56
|
+
|
|
57
|
+
class LangflowAgentConfig(BaseAgentConfig):
|
|
58
|
+
"""Configuration for Langflow agent implementations."""
|
|
59
|
+
flow_id: str
|
|
60
|
+
base_url: str | None
|
|
61
|
+
api_key: str | None
|
|
62
|
+
model_config: Incomplete
|
|
63
|
+
class Config:
|
|
64
|
+
"""Pydantic v1 fallback config for LangflowAgentConfig."""
|
|
65
|
+
extra: str
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"""Schema definitions for Human-in-the-Loop approval workflows."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
from enum import StrEnum
|
|
6
|
+
from typing import Any
|
|
7
|
+
from uuid import uuid4
|
|
8
|
+
|
|
9
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"ApprovalDecisionType",
|
|
13
|
+
"ApprovalRequest",
|
|
14
|
+
"ApprovalDecision",
|
|
15
|
+
"ApprovalLogEntry",
|
|
16
|
+
"HitlMetadata",
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ApprovalDecisionType(StrEnum):
|
|
21
|
+
"""Enumeration of possible approval decision types."""
|
|
22
|
+
|
|
23
|
+
APPROVED = "approved"
|
|
24
|
+
REJECTED = "rejected"
|
|
25
|
+
SKIPPED = "skipped"
|
|
26
|
+
TIMEOUT_SKIP = "timeout_skip"
|
|
27
|
+
PENDING = "pending"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class ApprovalRequest:
|
|
32
|
+
"""Represents an in-flight prompt shown to the operator."""
|
|
33
|
+
|
|
34
|
+
request_id: str
|
|
35
|
+
tool_name: str
|
|
36
|
+
arguments_preview: str
|
|
37
|
+
context: dict[str, str] | None = None
|
|
38
|
+
created_at: datetime | None = None
|
|
39
|
+
timeout_at: datetime | None = None
|
|
40
|
+
|
|
41
|
+
def __post_init__(self) -> None:
|
|
42
|
+
"""Initialize timestamps if not provided."""
|
|
43
|
+
if self.created_at is None:
|
|
44
|
+
self.created_at = datetime.now()
|
|
45
|
+
if self.timeout_at is None and self.created_at is not None:
|
|
46
|
+
# Timeout is set externally when configuration is available
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def create(
|
|
51
|
+
cls,
|
|
52
|
+
tool_name: str,
|
|
53
|
+
arguments_preview: str,
|
|
54
|
+
context: dict[str, str] | None = None,
|
|
55
|
+
) -> "ApprovalRequest":
|
|
56
|
+
"""Create a new approval request with generated request_id.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
tool_name (str): The name of the tool requiring approval.
|
|
60
|
+
arguments_preview (str): A preview of the arguments for display.
|
|
61
|
+
context (dict[str, str] | None, optional): Additional context information.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
ApprovalRequest: A new approval request instance.
|
|
65
|
+
"""
|
|
66
|
+
return cls(
|
|
67
|
+
request_id=str(uuid4()),
|
|
68
|
+
tool_name=tool_name,
|
|
69
|
+
arguments_preview=arguments_preview,
|
|
70
|
+
context=context,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@dataclass
|
|
75
|
+
class ApprovalDecision:
|
|
76
|
+
"""Captures the operator outcome."""
|
|
77
|
+
|
|
78
|
+
request_id: str
|
|
79
|
+
decision: ApprovalDecisionType
|
|
80
|
+
operator_input: str
|
|
81
|
+
decided_at: datetime | None = None
|
|
82
|
+
latency_ms: int | None = None
|
|
83
|
+
|
|
84
|
+
def __post_init__(self) -> None:
|
|
85
|
+
"""Initialize timestamp if not provided."""
|
|
86
|
+
if self.decided_at is None:
|
|
87
|
+
self.decided_at = datetime.now()
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
@dataclass
|
|
91
|
+
class ApprovalLogEntry:
|
|
92
|
+
"""Structured log entry for HITL decisions."""
|
|
93
|
+
|
|
94
|
+
request_id: str
|
|
95
|
+
tool_name: str
|
|
96
|
+
decision: str
|
|
97
|
+
event: str = "hitl_decision"
|
|
98
|
+
agent_id: str | None = None
|
|
99
|
+
thread_id: str | None = None
|
|
100
|
+
additional_context: dict[str, Any] | None = None
|
|
101
|
+
timestamp: datetime | None = None
|
|
102
|
+
|
|
103
|
+
def __post_init__(self) -> None:
|
|
104
|
+
"""Initialize timestamp if not provided."""
|
|
105
|
+
if self.timestamp is None:
|
|
106
|
+
self.timestamp = datetime.now()
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class HitlMetadata(BaseModel):
|
|
110
|
+
"""Structured metadata payload included in agent streaming events."""
|
|
111
|
+
|
|
112
|
+
required: bool = Field(default=True)
|
|
113
|
+
decision: ApprovalDecisionType
|
|
114
|
+
request_id: str
|
|
115
|
+
timeout_seconds: int | None = Field(default=None, ge=0)
|
|
116
|
+
timeout_at: datetime | None = None
|
|
117
|
+
|
|
118
|
+
model_config = ConfigDict(extra="forbid", use_enum_values=True)
|
|
119
|
+
|
|
120
|
+
def as_payload(self) -> dict[str, Any]:
|
|
121
|
+
"""Return a JSON-ready metadata payload."""
|
|
122
|
+
payload = self.model_dump(mode="json", exclude_none=True)
|
|
123
|
+
|
|
124
|
+
# Pydantic emits UTC datetimes as Zulu strings when dumping to JSON.
|
|
125
|
+
# Preserve the canonical ``+00:00`` suffix expected by downstream tests.
|
|
126
|
+
if "timeout_at" in payload and isinstance(self.timeout_at, datetime):
|
|
127
|
+
payload["timeout_at"] = self.timeout_at.isoformat()
|
|
128
|
+
|
|
129
|
+
return payload
|
|
130
|
+
|
|
131
|
+
@classmethod
|
|
132
|
+
def from_decision(
|
|
133
|
+
cls,
|
|
134
|
+
decision: ApprovalDecision,
|
|
135
|
+
*,
|
|
136
|
+
required: bool = True,
|
|
137
|
+
timeout_seconds: int | None = None,
|
|
138
|
+
timeout_at: datetime | None = None,
|
|
139
|
+
) -> "HitlMetadata":
|
|
140
|
+
"""Build metadata from an ``ApprovalDecision``.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
decision (ApprovalDecision): The approval decision to build metadata from.
|
|
144
|
+
required (bool, optional): Whether approval is required. Defaults to True.
|
|
145
|
+
timeout_seconds (int | None, optional): Timeout in seconds for the decision.
|
|
146
|
+
timeout_at (datetime | None, optional): Specific timeout datetime.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
HitlMetadata: The constructed metadata instance.
|
|
150
|
+
"""
|
|
151
|
+
return cls(
|
|
152
|
+
required=required,
|
|
153
|
+
decision=decision.decision,
|
|
154
|
+
request_id=decision.request_id,
|
|
155
|
+
timeout_seconds=timeout_seconds,
|
|
156
|
+
timeout_at=timeout_at,
|
|
157
|
+
)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from enum import StrEnum
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
__all__ = ['ApprovalDecisionType', 'ApprovalRequest', 'ApprovalDecision', 'ApprovalLogEntry', 'HitlMetadata']
|
|
9
|
+
|
|
10
|
+
class ApprovalDecisionType(StrEnum):
|
|
11
|
+
"""Enumeration of possible approval decision types."""
|
|
12
|
+
APPROVED: str
|
|
13
|
+
REJECTED: str
|
|
14
|
+
SKIPPED: str
|
|
15
|
+
TIMEOUT_SKIP: str
|
|
16
|
+
PENDING: str
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class ApprovalRequest:
|
|
20
|
+
"""Represents an in-flight prompt shown to the operator."""
|
|
21
|
+
request_id: str
|
|
22
|
+
tool_name: str
|
|
23
|
+
arguments_preview: str
|
|
24
|
+
context: dict[str, str] | None = ...
|
|
25
|
+
created_at: datetime | None = ...
|
|
26
|
+
timeout_at: datetime | None = ...
|
|
27
|
+
def __post_init__(self) -> None:
|
|
28
|
+
"""Initialize timestamps if not provided."""
|
|
29
|
+
@classmethod
|
|
30
|
+
def create(cls, tool_name: str, arguments_preview: str, context: dict[str, str] | None = None) -> ApprovalRequest:
|
|
31
|
+
"""Create a new approval request with generated request_id.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
tool_name (str): The name of the tool requiring approval.
|
|
35
|
+
arguments_preview (str): A preview of the arguments for display.
|
|
36
|
+
context (dict[str, str] | None, optional): Additional context information.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
ApprovalRequest: A new approval request instance.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
@dataclass
|
|
43
|
+
class ApprovalDecision:
|
|
44
|
+
"""Captures the operator outcome."""
|
|
45
|
+
request_id: str
|
|
46
|
+
decision: ApprovalDecisionType
|
|
47
|
+
operator_input: str
|
|
48
|
+
decided_at: datetime | None = ...
|
|
49
|
+
latency_ms: int | None = ...
|
|
50
|
+
def __post_init__(self) -> None:
|
|
51
|
+
"""Initialize timestamp if not provided."""
|
|
52
|
+
|
|
53
|
+
@dataclass
|
|
54
|
+
class ApprovalLogEntry:
|
|
55
|
+
"""Structured log entry for HITL decisions."""
|
|
56
|
+
request_id: str
|
|
57
|
+
tool_name: str
|
|
58
|
+
decision: str
|
|
59
|
+
event: str = ...
|
|
60
|
+
agent_id: str | None = ...
|
|
61
|
+
thread_id: str | None = ...
|
|
62
|
+
additional_context: dict[str, Any] | None = ...
|
|
63
|
+
timestamp: datetime | None = ...
|
|
64
|
+
def __post_init__(self) -> None:
|
|
65
|
+
"""Initialize timestamp if not provided."""
|
|
66
|
+
|
|
67
|
+
class HitlMetadata(BaseModel):
|
|
68
|
+
"""Structured metadata payload included in agent streaming events."""
|
|
69
|
+
required: bool
|
|
70
|
+
decision: ApprovalDecisionType
|
|
71
|
+
request_id: str
|
|
72
|
+
timeout_seconds: int | None
|
|
73
|
+
timeout_at: datetime | None
|
|
74
|
+
model_config: Incomplete
|
|
75
|
+
def as_payload(self) -> dict[str, Any]:
|
|
76
|
+
"""Return a JSON-ready metadata payload."""
|
|
77
|
+
@classmethod
|
|
78
|
+
def from_decision(cls, decision: ApprovalDecision, *, required: bool = True, timeout_seconds: int | None = None, timeout_at: datetime | None = None) -> HitlMetadata:
|
|
79
|
+
"""Build metadata from an ``ApprovalDecision``.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
decision (ApprovalDecision): The approval decision to build metadata from.
|
|
83
|
+
required (bool, optional): Whether approval is required. Defaults to True.
|
|
84
|
+
timeout_seconds (int | None, optional): Timeout in seconds for the decision.
|
|
85
|
+
timeout_at (datetime | None, optional): Specific timeout datetime.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
HitlMetadata: The constructed metadata instance.
|
|
89
|
+
"""
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""LangGraph-related schema definitions for agent tool interactions."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from gllm_core.schema import Chunk
|
|
9
|
+
from langchain_core.messages import ToolMessage
|
|
10
|
+
from langchain_core.messages.ai import UsageMetadata
|
|
11
|
+
from langchain_core.tools import BaseTool
|
|
12
|
+
|
|
13
|
+
__all__ = ["ToolCallResult", "ToolStorageParams"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class ToolCallResult:
|
|
18
|
+
"""Container for the results of a single tool call execution."""
|
|
19
|
+
|
|
20
|
+
messages: list[ToolMessage]
|
|
21
|
+
artifacts: list[dict[str, Any]]
|
|
22
|
+
metadata_delta: dict[str, Any]
|
|
23
|
+
references: list[Chunk]
|
|
24
|
+
step_usage: UsageMetadata | None
|
|
25
|
+
pii_mapping: dict[str, str] | None = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass
|
|
29
|
+
class ToolStorageParams:
|
|
30
|
+
"""Parameters required for automatically storing tool outputs."""
|
|
31
|
+
|
|
32
|
+
tool: BaseTool
|
|
33
|
+
tool_output: Any
|
|
34
|
+
tool_call: dict[str, Any]
|
|
35
|
+
tool_call_id: str
|
|
36
|
+
resolved_args: dict[str, Any]
|
|
37
|
+
state: dict[str, Any]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from gllm_core.schema import Chunk
|
|
3
|
+
from langchain_core.messages import ToolMessage
|
|
4
|
+
from langchain_core.messages.ai import UsageMetadata
|
|
5
|
+
from langchain_core.tools import BaseTool
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
__all__ = ['ToolCallResult', 'ToolStorageParams']
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class ToolCallResult:
|
|
12
|
+
"""Container for the results of a single tool call execution."""
|
|
13
|
+
messages: list[ToolMessage]
|
|
14
|
+
artifacts: list[dict[str, Any]]
|
|
15
|
+
metadata_delta: dict[str, Any]
|
|
16
|
+
references: list[Chunk]
|
|
17
|
+
step_usage: UsageMetadata | None
|
|
18
|
+
pii_mapping: dict[str, str] | None = ...
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class ToolStorageParams:
|
|
22
|
+
"""Parameters required for automatically storing tool outputs."""
|
|
23
|
+
tool: BaseTool
|
|
24
|
+
tool_output: Any
|
|
25
|
+
tool_call: dict[str, Any]
|
|
26
|
+
tool_call_id: str
|
|
27
|
+
resolved_args: dict[str, Any]
|
|
28
|
+
state: dict[str, Any]
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Model identifiers and provider definitions for the AI agent platform."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from enum import StrEnum
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ModelProvider(StrEnum):
|
|
9
|
+
"""Enumeration of supported model providers for the AI agent platform."""
|
|
10
|
+
|
|
11
|
+
OPENAI = "openai"
|
|
12
|
+
ANTHROPIC = "anthropic"
|
|
13
|
+
AZURE_OPENAI = "azure-openai"
|
|
14
|
+
GOOGLE_GENAI = "google"
|
|
15
|
+
GROQ = "groq"
|
|
16
|
+
TOGETHER_AI = "together"
|
|
17
|
+
DEEPINFRA = "deepinfra"
|
|
18
|
+
DEEPSEEK = "deepseek"
|
|
19
|
+
OPENAI_COMPATIBLE = "openai-compatible"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ModelId:
|
|
23
|
+
"""Model identifier class for representing language models."""
|
|
24
|
+
|
|
25
|
+
def __init__(self, provider: str, name: str, path: str | None = None):
|
|
26
|
+
"""Initialize a ModelId.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
provider: The model provider (e.g., 'openai', 'anthropic')
|
|
30
|
+
name: The specific model name
|
|
31
|
+
path: Optional path component for some providers
|
|
32
|
+
"""
|
|
33
|
+
self.provider = provider
|
|
34
|
+
self.name = name
|
|
35
|
+
self.path = path
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
def from_string(cls, model_string: str) -> ModelId:
|
|
39
|
+
"""Create a ModelId from a string representation.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
model_string: String in format 'provider:name' or 'provider/path:name'
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
ModelId instance
|
|
46
|
+
|
|
47
|
+
Raises:
|
|
48
|
+
ValueError: If the string format is invalid
|
|
49
|
+
"""
|
|
50
|
+
if ":" not in model_string:
|
|
51
|
+
raise ValueError(
|
|
52
|
+
f"Invalid model string format: {model_string}. Expected 'provider:name' or 'provider/path:name'"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
# Find the last colon to separate provider+path from name
|
|
56
|
+
last_colon_idx = model_string.rindex(":")
|
|
57
|
+
provider_part = model_string[:last_colon_idx]
|
|
58
|
+
name = model_string[last_colon_idx + 1 :]
|
|
59
|
+
|
|
60
|
+
# Split provider_part on "/" to separate provider from path
|
|
61
|
+
if "/" in provider_part:
|
|
62
|
+
provider, path = provider_part.split("/", 1)
|
|
63
|
+
else:
|
|
64
|
+
provider = provider_part
|
|
65
|
+
path = None
|
|
66
|
+
|
|
67
|
+
return cls(provider, name, path)
|
|
68
|
+
|
|
69
|
+
def __str__(self) -> str:
|
|
70
|
+
"""String representation of the ModelId."""
|
|
71
|
+
if self.path:
|
|
72
|
+
return f"{self.provider}/{self.path}:{self.name}"
|
|
73
|
+
return f"{self.provider}:{self.name}"
|
|
74
|
+
|
|
75
|
+
def __repr__(self) -> str:
|
|
76
|
+
"""String representation of the ModelId for debugging."""
|
|
77
|
+
return f"ModelId(provider='{self.provider}', name='{self.name}', path='{self.path}')"
|
|
78
|
+
|
|
79
|
+
def __eq__(self, other: object) -> bool:
|
|
80
|
+
"""Check equality with another ModelId object.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
other (object): The object to compare with.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
bool: True if the objects are equal, False otherwise.
|
|
87
|
+
"""
|
|
88
|
+
if not isinstance(other, ModelId):
|
|
89
|
+
return NotImplemented
|
|
90
|
+
return self.provider == other.provider and self.name == other.name and self.path == other.path
|
|
91
|
+
|
|
92
|
+
def __hash__(self) -> int:
|
|
93
|
+
"""Return hash of the ModelId."""
|
|
94
|
+
return hash((self.provider, self.name, self.path))
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
__all__ = ["ModelId", "ModelProvider"]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from enum import StrEnum
|
|
3
|
+
|
|
4
|
+
__all__ = ['ModelId', 'ModelProvider']
|
|
5
|
+
|
|
6
|
+
class ModelProvider(StrEnum):
|
|
7
|
+
"""Enumeration of supported model providers for the AI agent platform."""
|
|
8
|
+
OPENAI: str
|
|
9
|
+
ANTHROPIC: str
|
|
10
|
+
AZURE_OPENAI: str
|
|
11
|
+
GOOGLE_GENAI: str
|
|
12
|
+
GROQ: str
|
|
13
|
+
TOGETHER_AI: str
|
|
14
|
+
DEEPINFRA: str
|
|
15
|
+
DEEPSEEK: str
|
|
16
|
+
OPENAI_COMPATIBLE: str
|
|
17
|
+
|
|
18
|
+
class ModelId:
|
|
19
|
+
"""Model identifier class for representing language models."""
|
|
20
|
+
provider: Incomplete
|
|
21
|
+
name: Incomplete
|
|
22
|
+
path: Incomplete
|
|
23
|
+
def __init__(self, provider: str, name: str, path: str | None = None) -> None:
|
|
24
|
+
"""Initialize a ModelId.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
provider: The model provider (e.g., 'openai', 'anthropic')
|
|
28
|
+
name: The specific model name
|
|
29
|
+
path: Optional path component for some providers
|
|
30
|
+
"""
|
|
31
|
+
@classmethod
|
|
32
|
+
def from_string(cls, model_string: str) -> ModelId:
|
|
33
|
+
"""Create a ModelId from a string representation.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
model_string: String in format 'provider:name' or 'provider/path:name'
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
ModelId instance
|
|
40
|
+
|
|
41
|
+
Raises:
|
|
42
|
+
ValueError: If the string format is invalid
|
|
43
|
+
"""
|
|
44
|
+
def __eq__(self, other: object) -> bool:
|
|
45
|
+
"""Check equality with another ModelId object.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
other (object): The object to compare with.
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
bool: True if the objects are equal, False otherwise.
|
|
52
|
+
"""
|
|
53
|
+
def __hash__(self) -> int:
|
|
54
|
+
"""Return hash of the ModelId."""
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""Step limit configuration and error classes for agent execution limits."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from enum import StrEnum
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class StepLimitErrorType(StrEnum):
|
|
9
|
+
"""Types of step-related limit violations."""
|
|
10
|
+
|
|
11
|
+
STEP_LIMIT_EXCEEDED = "STEP_LIMIT_EXCEEDED"
|
|
12
|
+
DELEGATION_DEPTH_EXCEEDED = "DELEGATION_DEPTH_EXCEEDED"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class StepLimitConfig:
|
|
17
|
+
"""Configuration for agent step and delegation limits.
|
|
18
|
+
|
|
19
|
+
Attributes:
|
|
20
|
+
max_steps: Maximum number of execution steps allowed per invocation.
|
|
21
|
+
Includes agent node (LLM call) and every tool call (parallel batches count per call).
|
|
22
|
+
max_delegation_depth: Maximum depth of delegation chain allowed.
|
|
23
|
+
Depth 0 means no delegation allowed.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
max_steps: int = field(
|
|
27
|
+
default_factory=lambda: int(os.getenv("STEP_LIMIT_MAX_STEPS_DEFAULT", "100")),
|
|
28
|
+
)
|
|
29
|
+
max_delegation_depth: int = field(
|
|
30
|
+
default_factory=lambda: int(os.getenv("STEP_LIMIT_MAX_DELEGATION_DEPTH_DEFAULT", "5")),
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
def __post_init__(self):
|
|
34
|
+
"""Validate configuration values and normalize range."""
|
|
35
|
+
from aip_agents.utils.logger import get_logger
|
|
36
|
+
|
|
37
|
+
logger = get_logger(__name__)
|
|
38
|
+
|
|
39
|
+
# Validate and clamp max_steps
|
|
40
|
+
if self.max_steps < 1:
|
|
41
|
+
logger.warning(f"Invalid max_steps={self.max_steps}, resetting to default (25). max_steps must be >= 1.")
|
|
42
|
+
self.max_steps = 25
|
|
43
|
+
elif self.max_steps > 1000:
|
|
44
|
+
logger.warning(f"Invalid max_steps={self.max_steps}, capping at 1000.")
|
|
45
|
+
self.max_steps = 1000
|
|
46
|
+
|
|
47
|
+
# Validate and clamp max_delegation_depth
|
|
48
|
+
if self.max_delegation_depth < 0:
|
|
49
|
+
logger.warning(
|
|
50
|
+
f"Invalid max_delegation_depth={self.max_delegation_depth}, resetting to default (5). "
|
|
51
|
+
"max_delegation_depth must be >= 0."
|
|
52
|
+
)
|
|
53
|
+
self.max_delegation_depth = 5
|
|
54
|
+
elif self.max_delegation_depth > 10:
|
|
55
|
+
logger.warning(f"Invalid max_delegation_depth={self.max_delegation_depth}, capping at 10.")
|
|
56
|
+
self.max_delegation_depth = 10
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@dataclass
|
|
60
|
+
class StepLimitErrorResponse:
|
|
61
|
+
"""Structured error response for step limit violations.
|
|
62
|
+
|
|
63
|
+
Attributes:
|
|
64
|
+
error_type: The type of limit that was exceeded.
|
|
65
|
+
agent_name: Name of the agent that hit the limit.
|
|
66
|
+
current_value: Current step count or delegation depth.
|
|
67
|
+
configured_limit: The configured limit that was exceeded.
|
|
68
|
+
message: Human-readable error message.
|
|
69
|
+
delegation_chain: Full chain for delegation errors.
|
|
70
|
+
partial_result: Any output generated before hitting the limit.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
error_type: StepLimitErrorType
|
|
74
|
+
agent_name: str
|
|
75
|
+
current_value: int
|
|
76
|
+
configured_limit: int
|
|
77
|
+
message: str
|
|
78
|
+
delegation_chain: list[str] | None = None
|
|
79
|
+
partial_result: str | None = None
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class StepLimitError(Exception):
|
|
83
|
+
"""Base exception for step and delegation limit violations.
|
|
84
|
+
|
|
85
|
+
Attributes:
|
|
86
|
+
error_response: Structured error response with details.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
def __init__(self, error_response: StepLimitErrorResponse):
|
|
90
|
+
"""Initialize with error response.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
error_response: Structured error details.
|
|
94
|
+
"""
|
|
95
|
+
self.error_response = error_response
|
|
96
|
+
super().__init__(error_response.message)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class MaxStepsExceededError(StepLimitError):
|
|
100
|
+
"""Raised when agent exceeds configured max_steps limit."""
|
|
101
|
+
|
|
102
|
+
pass
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class MaxDelegationDepthExceededError(StepLimitError):
|
|
106
|
+
"""Raised when delegation would exceed max_delegation_depth limit."""
|
|
107
|
+
|
|
108
|
+
pass
|