aip-agents-binary 0.0.0__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.
- aip_agents/__init__.py +66 -0
- aip_agents/a2a/__init__.py +19 -0
- aip_agents/a2a/server/__init__.py +10 -0
- aip_agents/a2a/server/base_executor.py +1125 -0
- aip_agents/a2a/server/google_adk_executor.py +198 -0
- aip_agents/a2a/server/langflow_executor.py +180 -0
- aip_agents/a2a/server/langgraph_executor.py +270 -0
- aip_agents/a2a/types.py +232 -0
- aip_agents/a2ui/__init__.py +26 -0
- aip_agents/a2ui/catalog_provider.py +109 -0
- aip_agents/a2ui/examples/0.8/booking_form.json +1 -0
- aip_agents/a2ui/examples/0.8/confirmation.json +1 -0
- aip_agents/a2ui/examples/0.8/single_column_list.json +1 -0
- aip_agents/a2ui/examples/0.9/booking_form.json +1 -0
- aip_agents/a2ui/examples/0.9/confirmation.json +1 -0
- aip_agents/a2ui/examples/0.9/single_column_list.json +1 -0
- aip_agents/a2ui/middleware.py +754 -0
- aip_agents/a2ui/models.py +153 -0
- aip_agents/a2ui/public_url.py +138 -0
- aip_agents/a2ui/stream_filter.py +67 -0
- aip_agents/agent/__init__.py +72 -0
- aip_agents/agent/base_agent.py +1437 -0
- aip_agents/agent/base_langgraph_agent.py +4048 -0
- aip_agents/agent/google_adk_agent.py +932 -0
- aip_agents/agent/google_adk_constants.py +11 -0
- aip_agents/agent/graph_runtime.py +185 -0
- aip_agents/agent/hitl/__init__.py +24 -0
- aip_agents/agent/hitl/config.py +28 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
- aip_agents/agent/hitl/manager.py +532 -0
- aip_agents/agent/hitl/models.py +18 -0
- aip_agents/agent/hitl/prompt/__init__.py +9 -0
- aip_agents/agent/hitl/prompt/base.py +42 -0
- aip_agents/agent/hitl/prompt/deferred.py +73 -0
- aip_agents/agent/hitl/registry.py +149 -0
- aip_agents/agent/interface.py +138 -0
- aip_agents/agent/interfaces.py +65 -0
- aip_agents/agent/langflow_agent.py +464 -0
- aip_agents/agent/langgraph_react_agent.py +3741 -0
- aip_agents/agent/model_invocation_adapter.py +346 -0
- aip_agents/agent/system_instruction_context.py +34 -0
- aip_agents/agent/tool_execution_engine.py +587 -0
- aip_agents/audio_interface/__init__.py +30 -0
- aip_agents/audio_interface/audio_agent_adapter.py +254 -0
- aip_agents/audio_interface/config.py +146 -0
- aip_agents/audio_interface/errors.py +15 -0
- aip_agents/audio_interface/livekit_audio_session.py +504 -0
- aip_agents/audio_interface/livekit_realtime_audio_session.py +142 -0
- aip_agents/audio_interface/session_factory.py +40 -0
- aip_agents/clients/__init__.py +10 -0
- aip_agents/clients/langflow/__init__.py +10 -0
- aip_agents/clients/langflow/client.py +477 -0
- aip_agents/clients/langflow/types.py +18 -0
- aip_agents/common/__init__.py +5 -0
- aip_agents/common/callable_introspection.py +17 -0
- aip_agents/constants.py +23 -0
- aip_agents/context/__init__.py +5 -0
- aip_agents/context/budget.py +237 -0
- aip_agents/context/compaction.py +339 -0
- aip_agents/context/metadata.py +169 -0
- aip_agents/context/offload.py +449 -0
- aip_agents/context/preparation.py +196 -0
- aip_agents/context/prompt.py +61 -0
- aip_agents/context/runtime.py +149 -0
- aip_agents/context/session_recall.py +69 -0
- aip_agents/context/state.py +48 -0
- aip_agents/context/utils.py +44 -0
- aip_agents/credentials/manager.py +132 -0
- aip_agents/examples/__init__.py +5 -0
- aip_agents/examples/audio_livekit_session.py +116 -0
- aip_agents/examples/compare_streaming_client.py +783 -0
- aip_agents/examples/compare_streaming_server.py +141 -0
- aip_agents/examples/gl_connectors_smoke.py +148 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.py +78 -0
- aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.py +104 -0
- aip_agents/examples/hello_world_a2a_langchain_server.py +78 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +77 -0
- aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
- aip_agents/examples/hello_world_a2a_langflow_server.py +80 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +91 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.py +83 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +78 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +131 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -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_server.py +250 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +79 -0
- aip_agents/examples/hello_world_filesystem.py +162 -0
- aip_agents/examples/hello_world_google_adk.py +41 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_stream.py +44 -0
- aip_agents/examples/hello_world_langchain.py +28 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
- aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
- aip_agents/examples/hello_world_langchain_stream.py +36 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
- aip_agents/examples/hello_world_langflow_agent.py +163 -0
- aip_agents/examples/hello_world_langgraph.py +39 -0
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_skills.py +62 -0
- aip_agents/examples/hello_world_langgraph_stream.py +43 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_model_switch_cli.py +210 -0
- aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
- aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
- aip_agents/examples/hello_world_multi_agent_tool_output_client.py +57 -0
- aip_agents/examples/hello_world_multi_agent_tool_output_server.py +131 -0
- aip_agents/examples/hello_world_pii_logger.py +21 -0
- aip_agents/examples/hello_world_ptc.py +49 -0
- aip_agents/examples/hello_world_ptc_custom_tools.py +83 -0
- aip_agents/examples/hello_world_sentry.py +133 -0
- aip_agents/examples/hello_world_step_limits.py +273 -0
- aip_agents/examples/hello_world_stock_a2a_server.py +100 -0
- aip_agents/examples/hello_world_tool_output_client.py +55 -0
- aip_agents/examples/hello_world_tool_output_server.py +113 -0
- aip_agents/examples/hitl_demo.py +724 -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_server.py +125 -0
- aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
- aip_agents/examples/pii_demo_multi_agent_server.py +246 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.py +87 -0
- aip_agents/examples/tools/__init__.py +27 -0
- aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
- aip_agents/examples/tools/adk_weather_tool.py +60 -0
- aip_agents/examples/tools/data_generator_tool.py +103 -0
- aip_agents/examples/tools/data_visualization_tool.py +312 -0
- aip_agents/examples/tools/image_artifact_tool.py +136 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
- aip_agents/examples/tools/langchain_weather_tool.py +48 -0
- aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
- aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
- aip_agents/examples/tools/multiply_tool.py +43 -0
- aip_agents/examples/tools/pii_demo_tools.py +189 -0
- aip_agents/examples/tools/random_chart_tool.py +142 -0
- aip_agents/examples/tools/serper_tool.py +202 -0
- aip_agents/examples/tools/stock_tools.py +82 -0
- aip_agents/examples/tools/table_generator_tool.py +167 -0
- aip_agents/examples/tools/time_tool.py +82 -0
- aip_agents/examples/tools/weather_forecast_tool.py +38 -0
- aip_agents/guardrails/__init__.py +83 -0
- aip_agents/guardrails/engines/__init__.py +69 -0
- aip_agents/guardrails/engines/base.py +90 -0
- aip_agents/guardrails/engines/nemo.py +101 -0
- aip_agents/guardrails/engines/phrase_matcher.py +113 -0
- aip_agents/guardrails/exceptions.py +39 -0
- aip_agents/guardrails/manager.py +163 -0
- aip_agents/guardrails/middleware.py +199 -0
- aip_agents/guardrails/schemas.py +63 -0
- aip_agents/guardrails/utils.py +45 -0
- aip_agents/integration/__init__.py +43 -0
- aip_agents/integration/agent.py +58 -0
- aip_agents/integration/guardrails.py +52 -0
- aip_agents/integration/hitl.py +71 -0
- aip_agents/integration/ptc.py +95 -0
- aip_agents/integration/skills.py +37 -0
- aip_agents/integration/storage.py +81 -0
- aip_agents/integration/version.py +103 -0
- aip_agents/mcp/__init__.py +1 -0
- aip_agents/mcp/client/__init__.py +60 -0
- aip_agents/mcp/client/base_mcp_client.py +377 -0
- aip_agents/mcp/client/connection_manager.py +231 -0
- aip_agents/mcp/client/errors.py +119 -0
- aip_agents/mcp/client/google_adk/__init__.py +45 -0
- aip_agents/mcp/client/google_adk/client.py +383 -0
- aip_agents/mcp/client/langchain/__init__.py +11 -0
- aip_agents/mcp/client/langchain/client.py +265 -0
- aip_agents/mcp/client/persistent_session.py +704 -0
- aip_agents/mcp/client/session_pool.py +358 -0
- aip_agents/mcp/client/transports.py +288 -0
- aip_agents/mcp/utils/__init__.py +7 -0
- aip_agents/mcp/utils/config_validator.py +139 -0
- aip_agents/memory/__init__.py +14 -0
- aip_agents/memory/adapters/__init__.py +10 -0
- aip_agents/memory/adapters/base_adapter.py +815 -0
- aip_agents/memory/adapters/mem0.py +286 -0
- aip_agents/memory/base.py +84 -0
- aip_agents/memory/constants.py +49 -0
- aip_agents/memory/factory.py +86 -0
- aip_agents/memory/guidance.py +20 -0
- aip_agents/memory/simple_memory.py +47 -0
- aip_agents/middleware/__init__.py +65 -0
- aip_agents/middleware/backends/__init__.py +72 -0
- aip_agents/middleware/backends/in_memory.py +578 -0
- aip_agents/middleware/backends/local_disk.py +1203 -0
- aip_agents/middleware/backends/protocol.py +353 -0
- aip_agents/middleware/backends/sandbox.py +1431 -0
- aip_agents/middleware/backends/sandbox_files.py +113 -0
- aip_agents/middleware/backends/utils.py +293 -0
- aip_agents/middleware/base.py +239 -0
- aip_agents/middleware/filesystem.py +690 -0
- aip_agents/middleware/manager.py +291 -0
- aip_agents/middleware/memory.py +532 -0
- aip_agents/middleware/pii_middleware.py +192 -0
- aip_agents/middleware/schema.py +19 -0
- aip_agents/middleware/skills.py +872 -0
- aip_agents/middleware/task_delegation.py +1656 -0
- aip_agents/middleware/todolist.py +276 -0
- aip_agents/middleware/tools/__init__.py +23 -0
- aip_agents/middleware/tools/edit_file.py +70 -0
- aip_agents/middleware/tools/execute.py +428 -0
- aip_agents/middleware/tools/grep_file.py +79 -0
- aip_agents/middleware/tools/ls.py +71 -0
- aip_agents/middleware/tools/read_file.py +239 -0
- aip_agents/middleware/tools/skill_load.py +193 -0
- aip_agents/middleware/tools/skill_resource.py +338 -0
- aip_agents/middleware/tools/write_file.py +114 -0
- aip_agents/middleware/vision.py +322 -0
- aip_agents/ptc/__init__.py +87 -0
- aip_agents/ptc/custom_tools.py +511 -0
- aip_agents/ptc/custom_tools_payload.py +499 -0
- aip_agents/ptc/custom_tools_templates/__init__.py +1 -0
- aip_agents/ptc/custom_tools_templates/custom_build_function.py.template +24 -0
- aip_agents/ptc/custom_tools_templates/custom_init.py.template +26 -0
- aip_agents/ptc/custom_tools_templates/custom_invoke.py.template +149 -0
- aip_agents/ptc/custom_tools_templates/custom_registry.py.template +112 -0
- aip_agents/ptc/custom_tools_templates/custom_sources_init.py.template +7 -0
- aip_agents/ptc/custom_tools_templates/custom_wrapper.py.template +87 -0
- aip_agents/ptc/doc_gen.py +122 -0
- aip_agents/ptc/exceptions.py +57 -0
- aip_agents/ptc/executor.py +627 -0
- aip_agents/ptc/mcp/__init__.py +45 -0
- aip_agents/ptc/mcp/sandbox_bridge.py +679 -0
- aip_agents/ptc/mcp/templates/__init__.py +1 -0
- aip_agents/ptc/mcp/templates/mcp_client.py.template +240 -0
- aip_agents/ptc/naming.py +430 -0
- aip_agents/ptc/payload.py +26 -0
- aip_agents/ptc/prompt_builder.py +674 -0
- aip_agents/ptc/ptc_helper.py +16 -0
- aip_agents/ptc/sandbox_bridge.py +297 -0
- aip_agents/ptc/template_utils.py +33 -0
- aip_agents/ptc/templates/__init__.py +1 -0
- aip_agents/ptc/templates/ptc_helper.py.template +134 -0
- aip_agents/ptc/tool_def_helpers.py +101 -0
- aip_agents/ptc/tool_enrichment.py +163 -0
- aip_agents/resilience/__init__.py +10 -0
- aip_agents/resilience/base.py +46 -0
- aip_agents/resilience/tool.py +1661 -0
- aip_agents/sandbox/__init__.py +62 -0
- aip_agents/sandbox/defaults.py +220 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-1-datasaur.Dockerfile +120 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-1.Dockerfile +100 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-2-datasaur.Dockerfile +143 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-2.Dockerfile +119 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-3-datasaur.Dockerfile +173 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-3.Dockerfile +130 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.Dockerfile +164 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.patch_js_context.py +41 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.requirements.txt +29 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2.Dockerfile +87 -0
- aip_agents/sandbox/e2b_runtime.py +27 -0
- aip_agents/sandbox/image_registry.py +98 -0
- aip_agents/sandbox/providers/__init__.py +76 -0
- aip_agents/sandbox/providers/base.py +392 -0
- aip_agents/sandbox/providers/bedrock.py +28 -0
- aip_agents/sandbox/providers/e2b.py +230 -0
- aip_agents/sandbox/providers/opensandbox.py +163 -0
- aip_agents/sandbox/sandbox_runtime.py +967 -0
- aip_agents/sandbox/template_builder.py +240 -0
- aip_agents/sandbox/types.py +141 -0
- aip_agents/sandbox/validation.py +50 -0
- aip_agents/schema/__init__.py +106 -0
- aip_agents/schema/a2a.py +58 -0
- aip_agents/schema/agent.py +117 -0
- aip_agents/schema/artifacts.py +75 -0
- aip_agents/schema/attachments.py +425 -0
- aip_agents/schema/hitl.py +157 -0
- aip_agents/schema/langgraph.py +47 -0
- aip_agents/schema/model_id.py +103 -0
- aip_agents/schema/model_usage.py +50 -0
- aip_agents/schema/runtime_metadata.py +78 -0
- aip_agents/schema/step_limit.py +108 -0
- aip_agents/schema/storage.py +40 -0
- aip_agents/schema/tool_payloads.py +68 -0
- aip_agents/sentry/__init__.py +11 -0
- aip_agents/sentry/sentry.py +267 -0
- aip_agents/skills/__init__.py +30 -0
- aip_agents/skills/errors.py +110 -0
- aip_agents/skills/installer.py +479 -0
- aip_agents/skills/models.py +769 -0
- aip_agents/skills/stager.py +224 -0
- aip_agents/skills/validation.py +53 -0
- aip_agents/storage/__init__.py +41 -0
- aip_agents/storage/base.py +85 -0
- aip_agents/storage/clients/__init__.py +12 -0
- aip_agents/storage/clients/minio_client.py +318 -0
- aip_agents/storage/config.py +62 -0
- aip_agents/storage/providers/__init__.py +15 -0
- aip_agents/storage/providers/base.py +106 -0
- aip_agents/storage/providers/memory.py +114 -0
- aip_agents/storage/providers/object_storage.py +214 -0
- aip_agents/tools/__init__.py +65 -0
- aip_agents/tools/agent_schedule_tool.py +392 -0
- aip_agents/tools/browser_use/__init__.py +83 -0
- aip_agents/tools/browser_use/action_parser.py +104 -0
- aip_agents/tools/browser_use/browser_use_tool.py +1118 -0
- aip_agents/tools/browser_use/llm_config.py +120 -0
- aip_agents/tools/browser_use/minio_storage.py +203 -0
- aip_agents/tools/browser_use/schemas.py +121 -0
- aip_agents/tools/browser_use/session.py +13 -0
- aip_agents/tools/browser_use/session_errors.py +132 -0
- aip_agents/tools/browser_use/steel_session_recording.py +321 -0
- aip_agents/tools/browser_use/streaming.py +263 -0
- aip_agents/tools/browser_use/structured_data_parser.py +257 -0
- aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
- aip_agents/tools/browser_use/types.py +37 -0
- aip_agents/tools/code_sandbox/__init__.py +48 -0
- aip_agents/tools/code_sandbox/code_sandbox_tool.py +350 -0
- aip_agents/tools/code_sandbox/constant.py +13 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +346 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +65 -0
- aip_agents/tools/computer_use/__init__.py +75 -0
- aip_agents/tools/computer_use/computer_use_tool.py +910 -0
- aip_agents/tools/computer_use/schemas.py +78 -0
- aip_agents/tools/computer_use/streaming.py +198 -0
- aip_agents/tools/computer_use/types.py +32 -0
- aip_agents/tools/constants.py +177 -0
- aip_agents/tools/date_range_tool.py +554 -0
- aip_agents/tools/document_loader/__init__.py +44 -0
- aip_agents/tools/document_loader/base_reader.py +302 -0
- aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
- aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
- aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
- aip_agents/tools/document_loader/pdf_splitter.py +169 -0
- aip_agents/tools/execute_ptc_code.py +582 -0
- aip_agents/tools/gl_connector/__init__.py +5 -0
- aip_agents/tools/gl_connector/tool.py +518 -0
- aip_agents/tools/gl_connector_tools.py +170 -0
- aip_agents/tools/memory_search/__init__.py +29 -0
- aip_agents/tools/memory_search/base.py +213 -0
- aip_agents/tools/memory_search/mem0.py +424 -0
- aip_agents/tools/memory_search/schema.py +81 -0
- aip_agents/tools/memory_search_tool.py +34 -0
- aip_agents/tools/streaming_common.py +577 -0
- aip_agents/tools/time_tool.py +117 -0
- aip_agents/tools/tool_config_injector.py +300 -0
- aip_agents/tools/web_search/__init__.py +15 -0
- aip_agents/tools/web_search/serper_tool.py +187 -0
- aip_agents/types/__init__.py +73 -0
- aip_agents/types/a2a_events.py +13 -0
- aip_agents/utils/__init__.py +91 -0
- aip_agents/utils/a2a_connector.py +1758 -0
- aip_agents/utils/artifact_helpers.py +542 -0
- aip_agents/utils/artifacts/__init__.py +20 -0
- aip_agents/utils/artifacts/tracker.py +367 -0
- aip_agents/utils/attachment_helpers.py +178 -0
- aip_agents/utils/constants.py +22 -0
- aip_agents/utils/datetime/__init__.py +34 -0
- aip_agents/utils/datetime/normalization.py +231 -0
- aip_agents/utils/datetime/timezone.py +206 -0
- aip_agents/utils/env_loader.py +27 -0
- aip_agents/utils/event_handler_registry.py +58 -0
- aip_agents/utils/file_prompt_utils.py +276 -0
- aip_agents/utils/file_watchers/__init__.py +33 -0
- aip_agents/utils/file_watchers/base.py +46 -0
- aip_agents/utils/file_watchers/e2b.py +128 -0
- aip_agents/utils/file_watchers/factory.py +39 -0
- aip_agents/utils/file_watchers/ls_diff.py +88 -0
- aip_agents/utils/file_watchers/sandbox.py +66 -0
- aip_agents/utils/file_watchers/watchdog.py +97 -0
- aip_agents/utils/final_response_builder.py +211 -0
- aip_agents/utils/formatter_llm_client.py +258 -0
- aip_agents/utils/langgraph/__init__.py +19 -0
- aip_agents/utils/langgraph/converter.py +399 -0
- aip_agents/utils/langgraph/delegation_context.py +22 -0
- aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1329 -0
- aip_agents/utils/langgraph/tool_output_management.py +1047 -0
- aip_agents/utils/logger.py +195 -0
- aip_agents/utils/metadata/__init__.py +27 -0
- aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
- aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
- aip_agents/utils/metadata/activity_narrative/builder.py +822 -0
- aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
- aip_agents/utils/metadata/activity_narrative/context.py +49 -0
- aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
- aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
- aip_agents/utils/metadata/schemas/__init__.py +16 -0
- aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
- aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
- aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
- aip_agents/utils/metadata_helper.py +363 -0
- aip_agents/utils/name_preprocessor/__init__.py +17 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
- aip_agents/utils/pii/__init__.py +29 -0
- aip_agents/utils/pii/pii_handler.py +555 -0
- aip_agents/utils/pii/pii_helper.py +225 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
- aip_agents/utils/reference_helper.py +273 -0
- aip_agents/utils/sse_chunk_transformer.py +836 -0
- aip_agents/utils/step_limit_manager.py +265 -0
- aip_agents/utils/token_usage_helper.py +531 -0
- aip_agents_binary-0.0.0.dist-info/METADATA +825 -0
- aip_agents_binary-0.0.0.dist-info/RECORD +447 -0
- aip_agents_binary-0.0.0.dist-info/WHEEL +5 -0
- aip_agents_binary-0.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"""Middleware orchestration and lifecycle management.
|
|
2
|
+
|
|
3
|
+
This module provides MiddlewareManager, which coordinates multiple middleware
|
|
4
|
+
components and manages their lifecycle hooks.
|
|
5
|
+
|
|
6
|
+
Architecture Relationship
|
|
7
|
+
-------------------------
|
|
8
|
+
|
|
9
|
+
MiddlewareManager works with AgentMiddleware (defined in base.py):
|
|
10
|
+
|
|
11
|
+
- AgentMiddleware: Protocol that individual middleware classes implement
|
|
12
|
+
- MiddlewareManager: Orchestrates multiple middleware instances
|
|
13
|
+
|
|
14
|
+
The manager is used by agents to interact with the middleware stack:
|
|
15
|
+
|
|
16
|
+
agent -> MiddlewareManager -> [Middleware1, Middleware2, ...]
|
|
17
|
+
│
|
|
18
|
+
├── get_all_tools() → Collects tools from all middleware
|
|
19
|
+
├── build_system_prompt() → Builds combined system prompt
|
|
20
|
+
├── abefore_run() → Calls before_run on all middleware
|
|
21
|
+
├── abefore_model() → Calls before_model on all middleware
|
|
22
|
+
├── modify_model_request() → Chains request modifications
|
|
23
|
+
├── aafter_model() → Calls after_model on all middleware
|
|
24
|
+
└── aafter_run() → Calls after_run on all middleware
|
|
25
|
+
|
|
26
|
+
Hook Execution Order
|
|
27
|
+
--------------------
|
|
28
|
+
|
|
29
|
+
- Forward order (first → last): before_run, before_model, modify_model_request, after_run, on_final_response
|
|
30
|
+
- Reverse order (last → first): after_model
|
|
31
|
+
|
|
32
|
+
Error Handling
|
|
33
|
+
--------------
|
|
34
|
+
|
|
35
|
+
All hook execution is "best-effort":
|
|
36
|
+
- Exceptions are logged but don't stop execution
|
|
37
|
+
- Middleware failures don't block agent responses
|
|
38
|
+
- Each middleware hook failure is isolated
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
from typing import Any
|
|
42
|
+
|
|
43
|
+
from langchain_core.tools import BaseTool
|
|
44
|
+
|
|
45
|
+
from aip_agents.middleware.base import AgentMiddleware, ModelRequest
|
|
46
|
+
from aip_agents.utils.logger import get_logger
|
|
47
|
+
|
|
48
|
+
logger = get_logger(__name__)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class MiddlewareManager:
|
|
52
|
+
"""Orchestrates multiple middleware components and manages hook execution.
|
|
53
|
+
|
|
54
|
+
The manager collects tools from all middleware, builds enhanced system prompts,
|
|
55
|
+
and executes lifecycle hooks in the configured order:
|
|
56
|
+
forward for run-level hooks and before/modify model hooks, reverse for after_model.
|
|
57
|
+
|
|
58
|
+
Attributes:
|
|
59
|
+
middleware: List of middleware components in registration order.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
def __init__(self, middleware: list[AgentMiddleware]) -> None:
|
|
63
|
+
"""Initialize the middleware manager.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
middleware: List of middleware components to manage. Order matters:
|
|
67
|
+
hooks execute forward (first to last) for run-level hooks and
|
|
68
|
+
before/modify model hooks; after_model executes in reverse order.
|
|
69
|
+
"""
|
|
70
|
+
self.middleware = middleware
|
|
71
|
+
|
|
72
|
+
def __bool__(self) -> bool:
|
|
73
|
+
"""Return True when at least one middleware is configured."""
|
|
74
|
+
return bool(self.middleware)
|
|
75
|
+
|
|
76
|
+
def get_all_tools(self) -> list[BaseTool]:
|
|
77
|
+
"""Collect tools from all registered middleware.
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
Combined list of all tools contributed by all middleware components.
|
|
81
|
+
Empty list if no middleware or if middleware provide no tools.
|
|
82
|
+
"""
|
|
83
|
+
tools: list[BaseTool] = []
|
|
84
|
+
for mw in self.middleware:
|
|
85
|
+
tools.extend(mw.tools)
|
|
86
|
+
return tools
|
|
87
|
+
|
|
88
|
+
def build_system_prompt(self, base_instruction: str) -> str:
|
|
89
|
+
"""Build enhanced system prompt by concatenating base instruction with middleware additions.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
base_instruction: The base system prompt for the agent.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
Enhanced system prompt with all middleware additions appended.
|
|
96
|
+
If no middleware provide additions, returns base_instruction unchanged.
|
|
97
|
+
"""
|
|
98
|
+
parts = [base_instruction]
|
|
99
|
+
|
|
100
|
+
for mw in self.middleware:
|
|
101
|
+
if mw.system_prompt_additions:
|
|
102
|
+
parts.append(mw.system_prompt_additions)
|
|
103
|
+
|
|
104
|
+
return "\n\n".join(parts)
|
|
105
|
+
|
|
106
|
+
def modify_model_request(self, request: ModelRequest, state: dict[str, Any]) -> ModelRequest:
|
|
107
|
+
"""Execute modify_model_request hooks for all middleware in forward order.
|
|
108
|
+
|
|
109
|
+
Each middleware receives the request modified by previous middleware,
|
|
110
|
+
allowing them to build on each other's changes.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
request: The model request to be modified.
|
|
114
|
+
state: Current agent state for context.
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
Final modified request after all middleware have processed it.
|
|
118
|
+
"""
|
|
119
|
+
current_request = request
|
|
120
|
+
|
|
121
|
+
for mw in self.middleware:
|
|
122
|
+
current_request = mw.modify_model_request(current_request, state)
|
|
123
|
+
|
|
124
|
+
return current_request
|
|
125
|
+
|
|
126
|
+
def before_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
127
|
+
"""Execute before_model hooks for all middleware in forward order.
|
|
128
|
+
|
|
129
|
+
Hooks run first to last, allowing earlier middleware to prepare state
|
|
130
|
+
for later middleware.
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
state: Current agent state.
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
Merged dictionary of all state updates from all middleware.
|
|
137
|
+
Updates are accumulated in order of execution.
|
|
138
|
+
"""
|
|
139
|
+
state_updates: dict[str, Any] = {}
|
|
140
|
+
|
|
141
|
+
for mw in self.middleware:
|
|
142
|
+
mw_updates = mw.before_model(state)
|
|
143
|
+
if mw_updates:
|
|
144
|
+
state_updates.update(mw_updates)
|
|
145
|
+
|
|
146
|
+
return state_updates
|
|
147
|
+
|
|
148
|
+
async def abefore_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
149
|
+
"""Asynchronously execute before_model hooks for all middleware."""
|
|
150
|
+
state_updates: dict[str, Any] = {}
|
|
151
|
+
|
|
152
|
+
for mw in self.middleware:
|
|
153
|
+
mw_updates = await mw.abefore_model(state)
|
|
154
|
+
if mw_updates:
|
|
155
|
+
state_updates.update(mw_updates)
|
|
156
|
+
|
|
157
|
+
return state_updates
|
|
158
|
+
|
|
159
|
+
def after_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
160
|
+
"""Execute after_model hooks for all middleware in reverse order.
|
|
161
|
+
|
|
162
|
+
Hooks run last to first (reverse of registration order), allowing
|
|
163
|
+
proper cleanup and unwinding of middleware operations.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
state: Current agent state after model invocation.
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
Merged dictionary of all state updates from all middleware.
|
|
170
|
+
Updates are accumulated in reverse order of execution.
|
|
171
|
+
"""
|
|
172
|
+
updates: dict[str, Any] = {}
|
|
173
|
+
|
|
174
|
+
# Execute in reverse order
|
|
175
|
+
for mw in reversed(self.middleware):
|
|
176
|
+
mw_updates = mw.after_model(state)
|
|
177
|
+
if mw_updates:
|
|
178
|
+
updates.update(mw_updates)
|
|
179
|
+
|
|
180
|
+
return updates
|
|
181
|
+
|
|
182
|
+
async def aafter_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
183
|
+
"""Asynchronously execute after_model hooks for all middleware in reverse order."""
|
|
184
|
+
updates: dict[str, Any] = {}
|
|
185
|
+
|
|
186
|
+
for mw in reversed(self.middleware):
|
|
187
|
+
mw_updates = await mw.aafter_model(state)
|
|
188
|
+
if mw_updates:
|
|
189
|
+
updates.update(mw_updates)
|
|
190
|
+
|
|
191
|
+
return updates
|
|
192
|
+
|
|
193
|
+
# ------------------------------------------------------------------
|
|
194
|
+
# Run-level lifecycle hooks (Milestone 1: Middleware Run Lifecycle Hooks)
|
|
195
|
+
# ------------------------------------------------------------------
|
|
196
|
+
|
|
197
|
+
async def abefore_run(self, state: dict[str, Any], config: dict[str, Any] | None) -> dict[str, Any]:
|
|
198
|
+
"""Execute before_run hooks for all middleware in forward order.
|
|
199
|
+
|
|
200
|
+
Hooks are optional; only executed if middleware defines them.
|
|
201
|
+
Best-effort execution: exceptions are logged and execution continues.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
state: Current agent state.
|
|
205
|
+
config: Optional run configuration dict.
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
Merged dictionary of all state updates from all middleware.
|
|
209
|
+
"""
|
|
210
|
+
state_updates: dict[str, Any] = {}
|
|
211
|
+
|
|
212
|
+
for mw in self.middleware:
|
|
213
|
+
# Keep duck-typed compatibility for middleware that may not fully
|
|
214
|
+
# implement optional run hooks despite protocol defaults.
|
|
215
|
+
mw_any: Any = mw
|
|
216
|
+
hook = getattr(mw_any, "abefore_run", None)
|
|
217
|
+
if hook is not None:
|
|
218
|
+
try:
|
|
219
|
+
mw_updates_any = await hook(state, config)
|
|
220
|
+
if isinstance(mw_updates_any, dict) and mw_updates_any:
|
|
221
|
+
state_updates.update(mw_updates_any)
|
|
222
|
+
except Exception as exc:
|
|
223
|
+
logger.warning(
|
|
224
|
+
"Middleware %s.abefore_run failed: %s",
|
|
225
|
+
type(mw).__name__,
|
|
226
|
+
exc,
|
|
227
|
+
exc_info=True,
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
return state_updates
|
|
231
|
+
|
|
232
|
+
async def aafter_run(
|
|
233
|
+
self,
|
|
234
|
+
*,
|
|
235
|
+
final_state: dict[str, Any],
|
|
236
|
+
output: str | None,
|
|
237
|
+
config: dict[str, Any] | None,
|
|
238
|
+
error: Exception | None,
|
|
239
|
+
) -> None:
|
|
240
|
+
"""Execute after_run hooks for all middleware in forward order.
|
|
241
|
+
|
|
242
|
+
Hooks are optional; only executed if middleware defines them.
|
|
243
|
+
Best-effort execution: exceptions are logged and execution continues.
|
|
244
|
+
|
|
245
|
+
Args:
|
|
246
|
+
final_state: Final agent state after run completion.
|
|
247
|
+
output: The final output string from the agent, or None if failed.
|
|
248
|
+
config: Optional run configuration dict.
|
|
249
|
+
error: Exception if the run failed, None if successful.
|
|
250
|
+
"""
|
|
251
|
+
for mw in self.middleware:
|
|
252
|
+
mw_any: Any = mw
|
|
253
|
+
hook = getattr(mw_any, "aafter_run", None)
|
|
254
|
+
if hook is not None:
|
|
255
|
+
try:
|
|
256
|
+
await hook(final_state=final_state, output=output, config=config, error=error)
|
|
257
|
+
except Exception as exc:
|
|
258
|
+
logger.warning(
|
|
259
|
+
"Middleware %s.aafter_run failed: %s",
|
|
260
|
+
type(mw).__name__,
|
|
261
|
+
exc,
|
|
262
|
+
exc_info=True,
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
async def aon_final_response(self, content: str, context: dict[str, Any]) -> None:
|
|
266
|
+
"""Invoke streaming final-response hooks (best-effort).
|
|
267
|
+
|
|
268
|
+
Called when an A2A FINAL_RESPONSE event is captured during streaming.
|
|
269
|
+
|
|
270
|
+
Args:
|
|
271
|
+
content: The final response content.
|
|
272
|
+
context: Context dict (thread_id, original_query, memory_user_id, etc.).
|
|
273
|
+
"""
|
|
274
|
+
for mw in self.middleware:
|
|
275
|
+
mw_any: Any = mw
|
|
276
|
+
hook = getattr(mw_any, "aon_final_response", None)
|
|
277
|
+
if hook is None:
|
|
278
|
+
hook = getattr(mw_any, "on_final_response", None) # pragma: no cover
|
|
279
|
+
if hook is None:
|
|
280
|
+
continue # pragma: no cover
|
|
281
|
+
try:
|
|
282
|
+
result = hook(content, context)
|
|
283
|
+
if hasattr(result, "__await__"):
|
|
284
|
+
await result
|
|
285
|
+
except Exception as exc:
|
|
286
|
+
logger.warning(
|
|
287
|
+
"Middleware %s.on_final_response failed: %s",
|
|
288
|
+
type(mw).__name__,
|
|
289
|
+
exc,
|
|
290
|
+
exc_info=True,
|
|
291
|
+
)
|