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,224 @@
|
|
|
1
|
+
"""Skill staging utilities.
|
|
2
|
+
|
|
3
|
+
This module stages local skill directories into a filesystem backend so skills can be
|
|
4
|
+
discovered and read from backend storage (DeepAgents-compatible flow).
|
|
5
|
+
|
|
6
|
+
Author:
|
|
7
|
+
Saul Sayers (saul.sayers@gdplabs.id)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
import posixpath
|
|
14
|
+
from collections.abc import Iterable, Sequence
|
|
15
|
+
from copy import deepcopy
|
|
16
|
+
from dataclasses import dataclass
|
|
17
|
+
from pathlib import Path, PurePosixPath
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
from aip_agents.middleware.backends.protocol import BackendProtocol
|
|
21
|
+
from aip_agents.skills.errors import SkillValidationError
|
|
22
|
+
from aip_agents.skills.models import ResourceEntry, ResourceManifest, ResourceType, Skill
|
|
23
|
+
|
|
24
|
+
_DEFAULT_SKILLS_BACKEND_ROOT = "/skills"
|
|
25
|
+
_DEFAULT_SKILL_SKIP_DIRS = {
|
|
26
|
+
".git",
|
|
27
|
+
".hg",
|
|
28
|
+
".svn",
|
|
29
|
+
"__pycache__",
|
|
30
|
+
".venv",
|
|
31
|
+
"node_modules",
|
|
32
|
+
}
|
|
33
|
+
_RESOURCE_INDEX_FILENAME = ".aip-skill-index.json"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _iter_skill_files(skill_root: Path) -> Iterable[Path]:
|
|
37
|
+
for path in sorted(skill_root.rglob("*")):
|
|
38
|
+
if path.is_dir():
|
|
39
|
+
continue
|
|
40
|
+
|
|
41
|
+
relative = path.relative_to(skill_root)
|
|
42
|
+
|
|
43
|
+
if any(part in _DEFAULT_SKILL_SKIP_DIRS for part in relative.parts):
|
|
44
|
+
continue
|
|
45
|
+
if path.name == _RESOURCE_INDEX_FILENAME:
|
|
46
|
+
continue # pragma: no cover
|
|
47
|
+
|
|
48
|
+
yield path
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _is_utf8_text(data: bytes) -> bool:
|
|
52
|
+
"""Return True if data is valid UTF-8."""
|
|
53
|
+
try:
|
|
54
|
+
data.decode("utf-8")
|
|
55
|
+
return True
|
|
56
|
+
except UnicodeDecodeError:
|
|
57
|
+
return False
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _ensure_posix_root(path: str) -> str:
|
|
61
|
+
normalized = path.strip()
|
|
62
|
+
if not normalized:
|
|
63
|
+
return "/"
|
|
64
|
+
normalized = "/" + normalized.lstrip("/")
|
|
65
|
+
return normalized.rstrip("/") or "/"
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def _classify_resource_type(relative_path: str) -> ResourceType:
|
|
69
|
+
p = PurePosixPath(relative_path)
|
|
70
|
+
parts = p.parts
|
|
71
|
+
if len(parts) <= 1:
|
|
72
|
+
if p.name.upper() in {"SKILL.MD", "INSTRUCTION.MD", "GUIDE.MD"}:
|
|
73
|
+
return ResourceType.INSTRUCTION
|
|
74
|
+
return ResourceType.ASSET
|
|
75
|
+
parent = parts[0].lower()
|
|
76
|
+
if parent == "instructions":
|
|
77
|
+
return ResourceType.INSTRUCTION
|
|
78
|
+
if parent == "references":
|
|
79
|
+
return ResourceType.REFERENCE
|
|
80
|
+
if parent == "examples":
|
|
81
|
+
return ResourceType.EXAMPLE
|
|
82
|
+
if parent == "scripts":
|
|
83
|
+
return ResourceType.SCRIPT
|
|
84
|
+
return ResourceType.ASSET
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
_MAX_SUMMARY_LENGTH = 200
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _extract_summary(content: str) -> str | None:
|
|
91
|
+
for line in content.splitlines():
|
|
92
|
+
stripped = line.strip()
|
|
93
|
+
if stripped:
|
|
94
|
+
return stripped[:_MAX_SUMMARY_LENGTH]
|
|
95
|
+
return None
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@dataclass(frozen=True, slots=True)
|
|
99
|
+
class SkippedSkillFile:
|
|
100
|
+
"""A file that was skipped during staging (e.g., binary or unsupported type)."""
|
|
101
|
+
|
|
102
|
+
relative_path: str
|
|
103
|
+
backend_path: str
|
|
104
|
+
size_bytes: int
|
|
105
|
+
reason: str
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
@dataclass(frozen=True, slots=True)
|
|
109
|
+
class StagedSkill:
|
|
110
|
+
"""Result of staging a single skill into the backend filesystem.
|
|
111
|
+
|
|
112
|
+
Attributes:
|
|
113
|
+
name (str): Skill name.
|
|
114
|
+
backend_root (str): Backend root directory for the staged skill.
|
|
115
|
+
staged_files (tuple[str, ...]): Backend file paths written.
|
|
116
|
+
metadata (dict[str, Any]): Raw parsed skill frontmatter.
|
|
117
|
+
provenance (dict[str, Any]): Source and trust context.
|
|
118
|
+
"""
|
|
119
|
+
|
|
120
|
+
name: str
|
|
121
|
+
backend_root: str
|
|
122
|
+
staged_files: tuple[str, ...]
|
|
123
|
+
metadata: dict[str, Any]
|
|
124
|
+
provenance: dict[str, Any]
|
|
125
|
+
skipped_files: tuple[SkippedSkillFile, ...] = ()
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class SkillStager:
|
|
129
|
+
"""Stages local skill directories into a remote filesystem backend."""
|
|
130
|
+
|
|
131
|
+
def __init__(self, *, backend: BackendProtocol, destination_root: str = _DEFAULT_SKILLS_BACKEND_ROOT) -> None:
|
|
132
|
+
"""Initialize the stager with a backend protocol and destination root."""
|
|
133
|
+
self._backend = backend
|
|
134
|
+
self._destination_root = _ensure_posix_root(destination_root)
|
|
135
|
+
|
|
136
|
+
def stage(self, skills: Sequence[Skill]) -> list[StagedSkill]:
|
|
137
|
+
"""Stage multiple skills and return the staged results."""
|
|
138
|
+
results: list[StagedSkill] = []
|
|
139
|
+
for skill in skills:
|
|
140
|
+
results.append(self.stage_one(skill))
|
|
141
|
+
return results
|
|
142
|
+
|
|
143
|
+
def stage_one(self, skill: Skill) -> StagedSkill:
|
|
144
|
+
"""Stage a single skill into the backend and return the result."""
|
|
145
|
+
if not skill.skill_md_path.is_file():
|
|
146
|
+
raise SkillValidationError(f"Missing required SKILL.md at: {skill.skill_md_path}.")
|
|
147
|
+
|
|
148
|
+
staged_files: list[str] = []
|
|
149
|
+
resource_entries: list[ResourceEntry] = []
|
|
150
|
+
backend_root = posixpath.join(self._destination_root, skill.name)
|
|
151
|
+
|
|
152
|
+
for local_path in _iter_skill_files(skill.local_root_path):
|
|
153
|
+
rel = local_path.relative_to(skill.local_root_path).as_posix()
|
|
154
|
+
backend_path = posixpath.join(backend_root, rel)
|
|
155
|
+
|
|
156
|
+
data = local_path.read_bytes()
|
|
157
|
+
is_binary = not _is_utf8_text(data)
|
|
158
|
+
resource_type = _classify_resource_type(rel)
|
|
159
|
+
size_bytes = len(data)
|
|
160
|
+
|
|
161
|
+
if is_binary:
|
|
162
|
+
self._backend.write_bytes(backend_path, data)
|
|
163
|
+
entry = ResourceEntry(
|
|
164
|
+
backend_path=backend_path,
|
|
165
|
+
relative_path=rel,
|
|
166
|
+
resource_type=resource_type,
|
|
167
|
+
size_bytes=size_bytes,
|
|
168
|
+
is_binary=True,
|
|
169
|
+
summary=None,
|
|
170
|
+
)
|
|
171
|
+
resource_entries.append(entry)
|
|
172
|
+
staged_files.append(backend_path)
|
|
173
|
+
else:
|
|
174
|
+
content = data.decode("utf-8")
|
|
175
|
+
summary = _extract_summary(content)
|
|
176
|
+
self._backend.write(backend_path, content)
|
|
177
|
+
entry = ResourceEntry(
|
|
178
|
+
backend_path=backend_path,
|
|
179
|
+
relative_path=rel,
|
|
180
|
+
resource_type=resource_type,
|
|
181
|
+
size_bytes=size_bytes,
|
|
182
|
+
is_binary=False,
|
|
183
|
+
summary=summary,
|
|
184
|
+
)
|
|
185
|
+
resource_entries.append(entry)
|
|
186
|
+
staged_files.append(backend_path)
|
|
187
|
+
|
|
188
|
+
resource_entries.sort(key=lambda e: e.relative_path)
|
|
189
|
+
|
|
190
|
+
manifest = ResourceManifest(
|
|
191
|
+
skill_name=skill.name,
|
|
192
|
+
resources=resource_entries,
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
manifest_path = posixpath.join(backend_root, _RESOURCE_INDEX_FILENAME)
|
|
196
|
+
manifest_json = json.dumps(
|
|
197
|
+
{
|
|
198
|
+
"skill_name": manifest.skill_name,
|
|
199
|
+
"resources": [
|
|
200
|
+
{
|
|
201
|
+
"backend_path": e.backend_path,
|
|
202
|
+
"relative_path": e.relative_path,
|
|
203
|
+
"resource_type": e.resource_type.value,
|
|
204
|
+
"size_bytes": e.size_bytes,
|
|
205
|
+
"is_binary": e.is_binary,
|
|
206
|
+
"summary": e.summary,
|
|
207
|
+
}
|
|
208
|
+
for e in manifest.resources
|
|
209
|
+
],
|
|
210
|
+
},
|
|
211
|
+
sort_keys=True,
|
|
212
|
+
indent=2,
|
|
213
|
+
ensure_ascii=False,
|
|
214
|
+
)
|
|
215
|
+
self._backend.write(manifest_path, manifest_json)
|
|
216
|
+
staged_files.append(manifest_path)
|
|
217
|
+
|
|
218
|
+
return StagedSkill(
|
|
219
|
+
name=skill.name,
|
|
220
|
+
backend_root=backend_root,
|
|
221
|
+
staged_files=tuple(staged_files),
|
|
222
|
+
metadata=deepcopy(skill.metadata),
|
|
223
|
+
provenance=deepcopy(skill.provenance),
|
|
224
|
+
)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""Skill validation helpers.
|
|
2
|
+
|
|
3
|
+
Author:
|
|
4
|
+
Saul Sayers (saul.sayers@gdplabs.id)
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import re
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Final
|
|
12
|
+
|
|
13
|
+
from aip_agents.skills.errors import SkillValidationError
|
|
14
|
+
|
|
15
|
+
_SKILL_NAME_RE: Final[re.Pattern[str]] = re.compile(r"^[a-z0-9]+(-[a-z0-9]+)*$")
|
|
16
|
+
_SKILL_NAME_MAX_LEN: Final[int] = 64
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def validate_skill_name(name: str) -> None:
|
|
20
|
+
"""Validate a skill name against DeepAgents naming rules.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
name (str): Skill directory name.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
None: This function returns None.
|
|
27
|
+
"""
|
|
28
|
+
if not name or len(name) > _SKILL_NAME_MAX_LEN or _SKILL_NAME_RE.fullmatch(name) is None:
|
|
29
|
+
raise SkillValidationError(
|
|
30
|
+
"Invalid skill name. Expected lowercase alphanumerics with single hyphens "
|
|
31
|
+
f"(max {_SKILL_NAME_MAX_LEN} chars): {name!r}."
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def validate_skill_root(skill_root: Path) -> None:
|
|
36
|
+
"""Validate a local skill root directory.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
skill_root (Path): Local path to the skill directory.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
None: This function returns None.
|
|
43
|
+
"""
|
|
44
|
+
if not skill_root.exists():
|
|
45
|
+
raise SkillValidationError(f"Skill path does not exist: {skill_root}.")
|
|
46
|
+
if not skill_root.is_dir():
|
|
47
|
+
raise SkillValidationError(f"Skill path is not a directory: {skill_root}.")
|
|
48
|
+
|
|
49
|
+
validate_skill_name(skill_root.name)
|
|
50
|
+
|
|
51
|
+
skill_md_path = skill_root / "SKILL.md"
|
|
52
|
+
if not skill_md_path.is_file():
|
|
53
|
+
raise SkillValidationError(f"Missing required SKILL.md at: {skill_md_path}.")
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""Storage module for aip_agents.
|
|
2
|
+
|
|
3
|
+
This module provides comprehensive storage functionality including object storage
|
|
4
|
+
clients, storage providers for tool outputs, and configuration management.
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
|
|
8
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# Object storage clients
|
|
12
|
+
from aip_agents.storage.base import BaseObjectStorageClient
|
|
13
|
+
from aip_agents.storage.clients.minio_client import MinioConfig, MinioObjectStorage
|
|
14
|
+
|
|
15
|
+
# Configuration and factory
|
|
16
|
+
from aip_agents.storage.config import (
|
|
17
|
+
StorageConfig,
|
|
18
|
+
StorageProviderFactory,
|
|
19
|
+
StorageType,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Storage providers
|
|
23
|
+
from aip_agents.storage.providers.base import BaseStorageProvider, StorageError
|
|
24
|
+
from aip_agents.storage.providers.memory import InMemoryStorageProvider
|
|
25
|
+
from aip_agents.storage.providers.object_storage import ObjectStorageProvider
|
|
26
|
+
|
|
27
|
+
__all__ = [
|
|
28
|
+
# Object storage
|
|
29
|
+
"BaseObjectStorageClient",
|
|
30
|
+
"MinioConfig",
|
|
31
|
+
"MinioObjectStorage",
|
|
32
|
+
# Storage providers
|
|
33
|
+
"BaseStorageProvider",
|
|
34
|
+
"StorageError",
|
|
35
|
+
"InMemoryStorageProvider",
|
|
36
|
+
"ObjectStorageProvider",
|
|
37
|
+
# Configuration
|
|
38
|
+
"StorageConfig",
|
|
39
|
+
"StorageType",
|
|
40
|
+
"StorageProviderFactory",
|
|
41
|
+
]
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""Base class for object storage clients.
|
|
2
|
+
|
|
3
|
+
Authors:
|
|
4
|
+
Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
|
|
5
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from abc import ABC, abstractmethod
|
|
9
|
+
from typing import BinaryIO
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class BaseObjectStorageClient(ABC):
|
|
13
|
+
"""Abstract base class for object storage clients."""
|
|
14
|
+
|
|
15
|
+
@abstractmethod
|
|
16
|
+
def object_exists(self, object_key: str) -> bool:
|
|
17
|
+
"""Check if an object exists in the storage.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
object_key: The key of the object to check.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
True if the object exists, False otherwise.
|
|
24
|
+
"""
|
|
25
|
+
raise NotImplementedError
|
|
26
|
+
|
|
27
|
+
@abstractmethod
|
|
28
|
+
def upload(
|
|
29
|
+
self,
|
|
30
|
+
object_key: str,
|
|
31
|
+
file_stream: bytes | BinaryIO,
|
|
32
|
+
filename: str | None = None,
|
|
33
|
+
content_type: str | None = None,
|
|
34
|
+
metadata: dict[str, str] | None = None,
|
|
35
|
+
) -> str:
|
|
36
|
+
"""Upload data to object storage.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
object_key: The key of the object in the storage
|
|
40
|
+
file_stream: The binary data to upload
|
|
41
|
+
filename: The name of the file
|
|
42
|
+
content_type: The content type of the file
|
|
43
|
+
metadata: Additional metadata to store with the object
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
The key of the uploaded object
|
|
47
|
+
"""
|
|
48
|
+
raise NotImplementedError
|
|
49
|
+
|
|
50
|
+
@abstractmethod
|
|
51
|
+
def get(self, object_key: str) -> bytes:
|
|
52
|
+
"""Get data from object storage.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
object_key: The key of the object in the storage
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
The binary data of the object
|
|
59
|
+
"""
|
|
60
|
+
raise NotImplementedError
|
|
61
|
+
|
|
62
|
+
@abstractmethod
|
|
63
|
+
def delete(self, object_key: str) -> None:
|
|
64
|
+
"""Delete data from object storage.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
object_key: The key of the object in the storage
|
|
68
|
+
"""
|
|
69
|
+
raise NotImplementedError
|
|
70
|
+
|
|
71
|
+
@abstractmethod
|
|
72
|
+
def generate_presigned_url(
|
|
73
|
+
self, object_key: str, expires: int = 24, response_headers: dict[str, str] | None = None
|
|
74
|
+
) -> str:
|
|
75
|
+
"""Generate a presigned URL for accessing the object.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
object_key: The key of the object in the storage
|
|
79
|
+
expires: The number of hours the URL is valid for
|
|
80
|
+
response_headers: Additional headers to include in the response
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
The presigned URL
|
|
84
|
+
"""
|
|
85
|
+
raise NotImplementedError
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Storage client implementations.
|
|
2
|
+
|
|
3
|
+
This module contains concrete implementations of object storage clients
|
|
4
|
+
for various backends like MinIO, AWS S3, etc.
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from aip_agents.storage.clients.minio_client import MinioConfig, MinioObjectStorage
|
|
11
|
+
|
|
12
|
+
__all__ = ["MinioConfig", "MinioObjectStorage"]
|