aip-agents-binary 0.6.2__py3-none-any.whl → 0.6.3__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__.pyi +19 -0
- aip_agents/a2a/__init__.pyi +3 -0
- aip_agents/a2a/server/__init__.pyi +4 -0
- aip_agents/a2a/server/base_executor.pyi +73 -0
- aip_agents/a2a/server/google_adk_executor.pyi +51 -0
- aip_agents/a2a/server/langflow_executor.pyi +43 -0
- aip_agents/a2a/server/langgraph_executor.pyi +47 -0
- aip_agents/a2a/types.pyi +132 -0
- aip_agents/agent/__init__.pyi +9 -0
- aip_agents/agent/base_agent.pyi +221 -0
- aip_agents/agent/base_langgraph_agent.pyi +233 -0
- aip_agents/agent/google_adk_agent.pyi +141 -0
- aip_agents/agent/google_adk_constants.pyi +3 -0
- aip_agents/agent/hitl/__init__.pyi +6 -0
- aip_agents/agent/hitl/config.pyi +15 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
- aip_agents/agent/hitl/manager.pyi +200 -0
- aip_agents/agent/hitl/models.pyi +3 -0
- aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
- aip_agents/agent/hitl/prompt/base.pyi +24 -0
- aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
- aip_agents/agent/hitl/registry.pyi +101 -0
- aip_agents/agent/interface.pyi +81 -0
- aip_agents/agent/interfaces.pyi +44 -0
- aip_agents/agent/langflow_agent.pyi +133 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
- aip_agents/agent/langgraph_react_agent.pyi +170 -0
- aip_agents/agent/system_instruction_context.pyi +13 -0
- aip_agents/clients/__init__.pyi +4 -0
- aip_agents/clients/langflow/__init__.pyi +4 -0
- aip_agents/clients/langflow/client.pyi +140 -0
- aip_agents/clients/langflow/types.pyi +7 -0
- aip_agents/constants.pyi +7 -0
- aip_agents/examples/__init__.pyi +0 -0
- aip_agents/examples/compare_streaming_client.pyi +48 -0
- aip_agents/examples/compare_streaming_server.pyi +18 -0
- aip_agents/examples/demo_memory_recall.pyi +58 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -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.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -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.pyi +45 -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.pyi +15 -0
- aip_agents/examples/hello_world_google_adk.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain.pyi +5 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
- aip_agents/examples/hello_world_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
- aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
- aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_pii_logger.pyi +5 -0
- aip_agents/examples/hello_world_ptc.pyi +5 -0
- aip_agents/examples/hello_world_sentry.pyi +21 -0
- aip_agents/examples/hello_world_step_limits.pyi +17 -0
- aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
- aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
- aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
- aip_agents/examples/hitl_demo.pyi +67 -0
- aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
- aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
- aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
- aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
- aip_agents/examples/tools/__init__.pyi +9 -0
- aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
- aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
- aip_agents/examples/tools/data_generator_tool.pyi +15 -0
- aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
- aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
- aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
- aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
- aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
- aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
- aip_agents/examples/tools/random_chart_tool.pyi +20 -0
- aip_agents/examples/tools/serper_tool.pyi +16 -0
- aip_agents/examples/tools/stock_tools.pyi +36 -0
- aip_agents/examples/tools/table_generator_tool.pyi +22 -0
- aip_agents/examples/tools/time_tool.pyi +15 -0
- aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
- aip_agents/guardrails/__init__.pyi +6 -0
- aip_agents/guardrails/engines/__init__.pyi +4 -0
- aip_agents/guardrails/engines/base.pyi +61 -0
- aip_agents/guardrails/engines/nemo.pyi +46 -0
- aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
- aip_agents/guardrails/exceptions.pyi +23 -0
- aip_agents/guardrails/manager.pyi +42 -0
- aip_agents/guardrails/middleware.pyi +87 -0
- aip_agents/guardrails/schemas.pyi +43 -0
- aip_agents/guardrails/utils.pyi +19 -0
- aip_agents/mcp/__init__.pyi +0 -0
- aip_agents/mcp/client/__init__.pyi +5 -0
- aip_agents/mcp/client/base_mcp_client.pyi +148 -0
- aip_agents/mcp/client/connection_manager.pyi +51 -0
- aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
- aip_agents/mcp/client/google_adk/client.pyi +75 -0
- aip_agents/mcp/client/langchain/__init__.pyi +3 -0
- aip_agents/mcp/client/langchain/client.pyi +48 -0
- aip_agents/mcp/client/persistent_session.pyi +122 -0
- aip_agents/mcp/client/session_pool.pyi +101 -0
- aip_agents/mcp/client/transports.pyi +132 -0
- aip_agents/mcp/utils/__init__.pyi +0 -0
- aip_agents/mcp/utils/config_validator.pyi +82 -0
- aip_agents/memory/__init__.pyi +5 -0
- aip_agents/memory/adapters/__init__.pyi +4 -0
- aip_agents/memory/adapters/base_adapter.pyi +150 -0
- aip_agents/memory/adapters/mem0.pyi +22 -0
- aip_agents/memory/base.pyi +60 -0
- aip_agents/memory/constants.pyi +25 -0
- aip_agents/memory/factory.pyi +24 -0
- aip_agents/memory/guidance.pyi +3 -0
- aip_agents/memory/simple_memory.pyi +23 -0
- aip_agents/middleware/__init__.pyi +5 -0
- aip_agents/middleware/base.pyi +75 -0
- aip_agents/middleware/manager.pyi +84 -0
- aip_agents/middleware/todolist.pyi +125 -0
- aip_agents/ptc/__init__.pyi +10 -0
- aip_agents/ptc/doc_gen.pyi +40 -0
- aip_agents/ptc/exceptions.pyi +22 -0
- aip_agents/ptc/executor.pyi +73 -0
- aip_agents/ptc/mcp/__init__.pyi +7 -0
- aip_agents/ptc/mcp/sandbox_bridge.pyi +47 -0
- aip_agents/ptc/mcp/templates/__init__.pyi +0 -0
- aip_agents/ptc/naming.pyi +76 -0
- aip_agents/ptc/payload.pyi +15 -0
- aip_agents/ptc/prompt_builder.pyi +55 -0
- aip_agents/ptc/ptc_helper.pyi +1 -0
- aip_agents/ptc/sandbox_bridge.pyi +25 -0
- aip_agents/ptc/template_utils.pyi +13 -0
- aip_agents/ptc/templates/__init__.pyi +0 -0
- aip_agents/sandbox/__init__.pyi +5 -0
- aip_agents/sandbox/defaults.pyi +2 -0
- aip_agents/sandbox/e2b_runtime.pyi +51 -0
- aip_agents/sandbox/template_builder.pyi +36 -0
- aip_agents/sandbox/types.pyi +14 -0
- aip_agents/sandbox/validation.pyi +20 -0
- aip_agents/schema/__init__.pyi +9 -0
- aip_agents/schema/a2a.pyi +40 -0
- aip_agents/schema/agent.pyi +65 -0
- aip_agents/schema/hitl.pyi +89 -0
- aip_agents/schema/langgraph.pyi +28 -0
- aip_agents/schema/model_id.pyi +54 -0
- aip_agents/schema/step_limit.pyi +63 -0
- aip_agents/schema/storage.pyi +21 -0
- aip_agents/sentry/__init__.pyi +3 -0
- aip_agents/sentry/sentry.pyi +48 -0
- aip_agents/storage/__init__.pyi +8 -0
- aip_agents/storage/base.pyi +58 -0
- aip_agents/storage/clients/__init__.pyi +3 -0
- aip_agents/storage/clients/minio_client.pyi +137 -0
- aip_agents/storage/config.pyi +29 -0
- aip_agents/storage/providers/__init__.pyi +5 -0
- aip_agents/storage/providers/base.pyi +88 -0
- aip_agents/storage/providers/memory.pyi +79 -0
- aip_agents/storage/providers/object_storage.pyi +98 -0
- aip_agents/tools/__init__.py +11 -2
- aip_agents/tools/__init__.pyi +11 -0
- aip_agents/tools/browser_use/__init__.pyi +14 -0
- aip_agents/tools/browser_use/action_parser.pyi +18 -0
- aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
- aip_agents/tools/browser_use/llm_config.pyi +52 -0
- aip_agents/tools/browser_use/minio_storage.pyi +109 -0
- aip_agents/tools/browser_use/schemas.pyi +32 -0
- aip_agents/tools/browser_use/session.pyi +4 -0
- aip_agents/tools/browser_use/session_errors.pyi +53 -0
- aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
- aip_agents/tools/browser_use/streaming.pyi +81 -0
- aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
- aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
- aip_agents/tools/browser_use/types.pyi +45 -0
- aip_agents/tools/code_sandbox/__init__.pyi +3 -0
- aip_agents/tools/code_sandbox/constant.pyi +4 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
- aip_agents/tools/constants.pyi +138 -0
- aip_agents/tools/date_range_tool.py +554 -0
- aip_agents/tools/date_range_tool.pyi +21 -0
- aip_agents/tools/document_loader/__init__.pyi +7 -0
- aip_agents/tools/document_loader/base_reader.pyi +75 -0
- aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
- aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
- aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
- aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
- aip_agents/tools/execute_ptc_code.pyi +90 -0
- aip_agents/tools/gl_connector/__init__.pyi +3 -0
- aip_agents/tools/gl_connector/tool.pyi +74 -0
- aip_agents/tools/gl_connector_tools.pyi +39 -0
- aip_agents/tools/memory_search/__init__.pyi +5 -0
- aip_agents/tools/memory_search/base.pyi +69 -0
- aip_agents/tools/memory_search/mem0.pyi +19 -0
- aip_agents/tools/memory_search/schema.pyi +15 -0
- aip_agents/tools/memory_search_tool.pyi +3 -0
- aip_agents/tools/time_tool.pyi +16 -0
- aip_agents/tools/tool_config_injector.pyi +26 -0
- aip_agents/tools/web_search/__init__.pyi +3 -0
- aip_agents/tools/web_search/serper_tool.pyi +19 -0
- aip_agents/types/__init__.pyi +36 -0
- aip_agents/types/a2a_events.pyi +3 -0
- aip_agents/utils/__init__.pyi +11 -0
- aip_agents/utils/a2a_connector.pyi +146 -0
- aip_agents/utils/artifact_helpers.pyi +203 -0
- aip_agents/utils/constants.pyi +10 -0
- aip_agents/utils/datetime/__init__.pyi +4 -0
- aip_agents/utils/datetime/normalization.pyi +95 -0
- aip_agents/utils/datetime/timezone.pyi +48 -0
- aip_agents/utils/env_loader.pyi +10 -0
- aip_agents/utils/event_handler_registry.pyi +23 -0
- aip_agents/utils/file_prompt_utils.pyi +21 -0
- aip_agents/utils/final_response_builder.pyi +34 -0
- aip_agents/utils/formatter_llm_client.pyi +71 -0
- aip_agents/utils/langgraph/__init__.pyi +3 -0
- aip_agents/utils/langgraph/converter.pyi +49 -0
- aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
- aip_agents/utils/langgraph/tool_output_management.pyi +329 -0
- aip_agents/utils/logger.pyi +60 -0
- aip_agents/utils/metadata/__init__.pyi +5 -0
- aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
- aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
- aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
- aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
- aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
- aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
- aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
- aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
- aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
- aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
- aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
- aip_agents/utils/metadata_helper.pyi +117 -0
- aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
- aip_agents/utils/pii/__init__.pyi +5 -0
- aip_agents/utils/pii/pii_handler.pyi +96 -0
- aip_agents/utils/pii/pii_helper.pyi +78 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
- aip_agents/utils/reference_helper.pyi +81 -0
- aip_agents/utils/sse_chunk_transformer.pyi +166 -0
- aip_agents/utils/step_limit_manager.pyi +112 -0
- aip_agents/utils/token_usage_helper.pyi +60 -0
- {aip_agents_binary-0.6.2.dist-info → aip_agents_binary-0.6.3.dist-info}/METADATA +2 -1
- {aip_agents_binary-0.6.2.dist-info → aip_agents_binary-0.6.3.dist-info}/RECORD +305 -5
- {aip_agents_binary-0.6.2.dist-info → aip_agents_binary-0.6.3.dist-info}/WHEEL +0 -0
- {aip_agents_binary-0.6.2.dist-info → aip_agents_binary-0.6.3.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from aip_agents.storage.base import BaseObjectStorageClient as BaseObjectStorageClient
|
|
2
|
+
from aip_agents.storage.clients.minio_client import MinioConfig as MinioConfig, MinioObjectStorage as MinioObjectStorage
|
|
3
|
+
from aip_agents.storage.config import StorageConfig as StorageConfig, StorageProviderFactory as StorageProviderFactory, StorageType as StorageType
|
|
4
|
+
from aip_agents.storage.providers.base import BaseStorageProvider as BaseStorageProvider, StorageError as StorageError
|
|
5
|
+
from aip_agents.storage.providers.memory import InMemoryStorageProvider as InMemoryStorageProvider
|
|
6
|
+
from aip_agents.storage.providers.object_storage import ObjectStorageProvider as ObjectStorageProvider
|
|
7
|
+
|
|
8
|
+
__all__ = ['BaseObjectStorageClient', 'MinioConfig', 'MinioObjectStorage', 'BaseStorageProvider', 'StorageError', 'InMemoryStorageProvider', 'ObjectStorageProvider', 'StorageConfig', 'StorageType', 'StorageProviderFactory']
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from typing import BinaryIO
|
|
3
|
+
|
|
4
|
+
class BaseObjectStorageClient(ABC):
|
|
5
|
+
"""Abstract base class for object storage clients."""
|
|
6
|
+
@abstractmethod
|
|
7
|
+
def object_exists(self, object_key: str) -> bool:
|
|
8
|
+
"""Check if an object exists in the storage.
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
object_key: The key of the object to check.
|
|
12
|
+
|
|
13
|
+
Returns:
|
|
14
|
+
True if the object exists, False otherwise.
|
|
15
|
+
"""
|
|
16
|
+
@abstractmethod
|
|
17
|
+
def upload(self, object_key: str, file_stream: bytes | BinaryIO, filename: str | None = None, content_type: str | None = None, metadata: dict[str, str] | None = None) -> str:
|
|
18
|
+
"""Upload data to object storage.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
object_key: The key of the object in the storage
|
|
22
|
+
file_stream: The binary data to upload
|
|
23
|
+
filename: The name of the file
|
|
24
|
+
content_type: The content type of the file
|
|
25
|
+
metadata: Additional metadata to store with the object
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
The key of the uploaded object
|
|
29
|
+
"""
|
|
30
|
+
@abstractmethod
|
|
31
|
+
def get(self, object_key: str) -> bytes:
|
|
32
|
+
"""Get data from object storage.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
object_key: The key of the object in the storage
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
The binary data of the object
|
|
39
|
+
"""
|
|
40
|
+
@abstractmethod
|
|
41
|
+
def delete(self, object_key: str) -> None:
|
|
42
|
+
"""Delete data from object storage.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
object_key: The key of the object in the storage
|
|
46
|
+
"""
|
|
47
|
+
@abstractmethod
|
|
48
|
+
def generate_presigned_url(self, object_key: str, expires: int = 24, response_headers: dict[str, str] | None = None) -> str:
|
|
49
|
+
"""Generate a presigned URL for accessing the object.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
object_key: The key of the object in the storage
|
|
53
|
+
expires: The number of hours the URL is valid for
|
|
54
|
+
response_headers: Additional headers to include in the response
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
The presigned URL
|
|
58
|
+
"""
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.storage.base import BaseObjectStorageClient as BaseObjectStorageClient
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import BinaryIO
|
|
5
|
+
|
|
6
|
+
S3_ERR_NO_SUCH_KEY: str
|
|
7
|
+
S3_ERR_NO_SUCH_BUCKET: str
|
|
8
|
+
S3_ERR_ACCESS_DENIED: str
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class MinioConfig:
|
|
12
|
+
"""Configuration for MinIO object storage client.
|
|
13
|
+
|
|
14
|
+
Attributes:
|
|
15
|
+
endpoint: MinIO server endpoint URL
|
|
16
|
+
access_key: Access key for authentication
|
|
17
|
+
secret_key: Secret key for authentication
|
|
18
|
+
bucket: Bucket name to use for storage
|
|
19
|
+
secure: Whether to use HTTPS (defaults to True)
|
|
20
|
+
"""
|
|
21
|
+
endpoint: str
|
|
22
|
+
access_key: str
|
|
23
|
+
secret_key: str
|
|
24
|
+
bucket: str
|
|
25
|
+
secure: bool = ...
|
|
26
|
+
@classmethod
|
|
27
|
+
def from_env(cls) -> MinioConfig:
|
|
28
|
+
"""Create MinioConfig from environment variables.
|
|
29
|
+
|
|
30
|
+
Expected environment variables:
|
|
31
|
+
- OBJECT_STORAGE_URL
|
|
32
|
+
- OBJECT_STORAGE_USER
|
|
33
|
+
- OBJECT_STORAGE_PASSWORD
|
|
34
|
+
- OBJECT_STORAGE_BUCKET
|
|
35
|
+
- OBJECT_STORAGE_SECURE (optional, defaults to True)
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
MinioConfig instance
|
|
39
|
+
|
|
40
|
+
Raises:
|
|
41
|
+
ValueError: If required environment variables are not set
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
class MinioObjectStorage(BaseObjectStorageClient):
|
|
45
|
+
"""Implementation of ObjectStorageInterface using Minio."""
|
|
46
|
+
config: Incomplete
|
|
47
|
+
client: Incomplete
|
|
48
|
+
bucket: Incomplete
|
|
49
|
+
def __init__(self, config: MinioConfig | None = None, ensure_bucket: bool = True) -> None:
|
|
50
|
+
"""Initialize MinioObjectStorage with configuration.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
config: MinioConfig instance. If None, will attempt to load from environment variables.
|
|
54
|
+
ensure_bucket: Whether to ensure bucket exists during initialization (optional). Defaults to True.
|
|
55
|
+
|
|
56
|
+
Raises:
|
|
57
|
+
ValueError: If configuration is invalid or incomplete
|
|
58
|
+
"""
|
|
59
|
+
def upload(self, object_key: str, file_stream: bytes | BinaryIO, filename: str | None = None, content_type: str | None = None, metadata: dict[str, str] | None = None) -> str:
|
|
60
|
+
"""Upload data to Minio object storage.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
object_key: The key to store the object under
|
|
64
|
+
file_stream: The data to upload (bytes or file-like object)
|
|
65
|
+
filename: The filename of the data (optional)
|
|
66
|
+
content_type: The content type of the data (optional)
|
|
67
|
+
metadata: Additional metadata to store with the object (optional)
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
The object key of the uploaded data
|
|
71
|
+
|
|
72
|
+
Raises:
|
|
73
|
+
ValueError: If the file stream is empty or invalid
|
|
74
|
+
ConnectionError: If there's an issue connecting to Minio
|
|
75
|
+
Exception: For other unexpected errors during upload
|
|
76
|
+
"""
|
|
77
|
+
def get(self, object_key: str) -> bytes:
|
|
78
|
+
"""Get data from Minio object storage.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
object_key: The key of the object to retrieve
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
The object data as bytes
|
|
85
|
+
|
|
86
|
+
Raises:
|
|
87
|
+
KeyError: If the object is not found
|
|
88
|
+
ConnectionError: If there's a network or connection issue
|
|
89
|
+
"""
|
|
90
|
+
def delete(self, object_key: str) -> None:
|
|
91
|
+
"""Delete data from Minio object storage.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
object_key: The key of the object to delete
|
|
95
|
+
|
|
96
|
+
Raises:
|
|
97
|
+
ConnectionError: If there's a network or connection issue
|
|
98
|
+
"""
|
|
99
|
+
def object_exists(self, object_key: str) -> bool:
|
|
100
|
+
"""Check if an object exists in the MinIO bucket.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
object_key: The key of the object to check.
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
True if the object exists, False otherwise.
|
|
107
|
+
|
|
108
|
+
Raises:
|
|
109
|
+
ConnectionError: If there's a network or connection issue (excluding not found errors)
|
|
110
|
+
"""
|
|
111
|
+
def list_objects(self, prefix: str = '') -> list[str]:
|
|
112
|
+
"""List objects in the bucket with optional prefix filter.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
prefix: Optional prefix to filter objects
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
List of object keys
|
|
119
|
+
|
|
120
|
+
Raises:
|
|
121
|
+
ConnectionError: If there's an issue listing objects
|
|
122
|
+
"""
|
|
123
|
+
def generate_presigned_url(self, object_key: str, expires: int = 24, response_headers: dict[str, str] | None = None) -> str:
|
|
124
|
+
"""Generate a presigned URL for accessing the object.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
object_key: The key of the object
|
|
128
|
+
expires: Expiration time in hours (defaults to 24)
|
|
129
|
+
response_headers: Additional response headers (optional)
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
A presigned URL
|
|
133
|
+
|
|
134
|
+
Raises:
|
|
135
|
+
ValueError: If expiration time is not positive
|
|
136
|
+
ConnectionError: If there's an issue generating the URL
|
|
137
|
+
"""
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from aip_agents.schema.storage import OBJECT_STORAGE_PREFIX as OBJECT_STORAGE_PREFIX, StorageConfig as StorageConfig, StorageType as StorageType
|
|
2
|
+
from aip_agents.storage.base import BaseObjectStorageClient
|
|
3
|
+
from aip_agents.storage.providers.base import BaseStorageProvider
|
|
4
|
+
|
|
5
|
+
__all__ = ['OBJECT_STORAGE_PREFIX', 'StorageConfig', 'StorageType', 'StorageProviderFactory']
|
|
6
|
+
|
|
7
|
+
class StorageProviderFactory:
|
|
8
|
+
"""Factory for creating storage providers based on configuration."""
|
|
9
|
+
@staticmethod
|
|
10
|
+
def create(config: StorageConfig, object_storage_client: BaseObjectStorageClient | None = None) -> BaseStorageProvider:
|
|
11
|
+
"""Create storage provider based on configuration.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
config (StorageConfig): Storage configuration object.
|
|
15
|
+
object_storage_client (BaseObjectStorageClient | None, optional): Optional object storage client for object storage type.
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
BaseStorageProvider: The created storage provider instance.
|
|
19
|
+
"""
|
|
20
|
+
@staticmethod
|
|
21
|
+
def create_from_env(object_storage_client: BaseObjectStorageClient | None = None) -> BaseStorageProvider:
|
|
22
|
+
"""Create storage provider from environment variables.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
object_storage_client (BaseObjectStorageClient | None, optional): Optional object storage client for object storage type.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
BaseStorageProvider: The created storage provider instance.
|
|
29
|
+
"""
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
from aip_agents.storage.providers.base import BaseStorageProvider as BaseStorageProvider, StorageError as StorageError
|
|
2
|
+
from aip_agents.storage.providers.memory import InMemoryStorageProvider as InMemoryStorageProvider
|
|
3
|
+
from aip_agents.storage.providers.object_storage import ObjectStorageProvider as ObjectStorageProvider
|
|
4
|
+
|
|
5
|
+
__all__ = ['BaseStorageProvider', 'StorageError', 'InMemoryStorageProvider', 'ObjectStorageProvider']
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from abc import ABC, abstractmethod
|
|
3
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
logger: Incomplete
|
|
7
|
+
|
|
8
|
+
class StorageError(Exception):
|
|
9
|
+
"""Base exception for storage operations."""
|
|
10
|
+
|
|
11
|
+
class BaseStorageProvider(ABC):
|
|
12
|
+
"""Base interface for storage providers.
|
|
13
|
+
|
|
14
|
+
This abstract class defines the contract that all storage providers
|
|
15
|
+
must implement to store and retrieve tool outputs.
|
|
16
|
+
"""
|
|
17
|
+
@abstractmethod
|
|
18
|
+
def store(self, key: str, data: Any) -> None:
|
|
19
|
+
"""Store data with the given key.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
key: Unique identifier for the data
|
|
23
|
+
data: Data to store (must be serializable)
|
|
24
|
+
|
|
25
|
+
Raises:
|
|
26
|
+
StorageError: If storage operation fails
|
|
27
|
+
"""
|
|
28
|
+
@abstractmethod
|
|
29
|
+
def retrieve(self, key: str) -> Any:
|
|
30
|
+
"""Retrieve data by key.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
key: Unique identifier for the data
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
The stored data
|
|
37
|
+
|
|
38
|
+
Raises:
|
|
39
|
+
KeyError: If key not found
|
|
40
|
+
StorageError: If retrieval operation fails
|
|
41
|
+
"""
|
|
42
|
+
@abstractmethod
|
|
43
|
+
def exists(self, key: str) -> bool:
|
|
44
|
+
"""Check if key exists.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
key: Unique identifier to check
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
True if key exists, False otherwise
|
|
51
|
+
"""
|
|
52
|
+
@abstractmethod
|
|
53
|
+
def delete(self, key: str) -> None:
|
|
54
|
+
"""Delete data by key.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
key: Unique identifier for the data
|
|
58
|
+
|
|
59
|
+
Note:
|
|
60
|
+
Should not raise error if key doesn't exist
|
|
61
|
+
"""
|
|
62
|
+
@abstractmethod
|
|
63
|
+
def list_keys(self, prefix: str = '') -> list[str]:
|
|
64
|
+
"""List all keys with optional prefix filter.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
prefix: Optional prefix to filter keys
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
List of matching keys
|
|
71
|
+
"""
|
|
72
|
+
@abstractmethod
|
|
73
|
+
def clear(self) -> None:
|
|
74
|
+
"""Clear all stored data.
|
|
75
|
+
|
|
76
|
+
Warning:
|
|
77
|
+
This operation is irreversible
|
|
78
|
+
"""
|
|
79
|
+
def get_presigned_url(self, key: str, expires_hours: int = 24) -> str | None:
|
|
80
|
+
"""Generate presigned URL for direct access (optional).
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
key: Storage key
|
|
84
|
+
expires_hours: URL expiration in hours
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Presigned URL if supported, None otherwise
|
|
88
|
+
"""
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
from aip_agents.storage.providers.base import BaseStorageProvider as BaseStorageProvider, StorageError as StorageError
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
class InMemoryStorageProvider(BaseStorageProvider):
|
|
5
|
+
"""In-memory storage provider for fast access to small data.
|
|
6
|
+
|
|
7
|
+
This provider stores all data in memory, providing the fastest
|
|
8
|
+
access times but limited by available RAM.
|
|
9
|
+
|
|
10
|
+
Best for:
|
|
11
|
+
- Small to medium datasets
|
|
12
|
+
- Temporary storage
|
|
13
|
+
- Development and testing
|
|
14
|
+
- High-frequency access patterns
|
|
15
|
+
"""
|
|
16
|
+
def __init__(self) -> None:
|
|
17
|
+
"""Initialize in-memory storage."""
|
|
18
|
+
def store(self, key: str, data: Any) -> None:
|
|
19
|
+
"""Store data in memory.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
key: Unique identifier for the data
|
|
23
|
+
data: Data to store
|
|
24
|
+
|
|
25
|
+
Raises:
|
|
26
|
+
StorageError: If storage operation fails
|
|
27
|
+
"""
|
|
28
|
+
def retrieve(self, key: str) -> Any:
|
|
29
|
+
"""Retrieve data from memory.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
key: Unique identifier for the data
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
The stored data
|
|
36
|
+
|
|
37
|
+
Raises:
|
|
38
|
+
KeyError: If key not found
|
|
39
|
+
"""
|
|
40
|
+
def exists(self, key: str) -> bool:
|
|
41
|
+
"""Check if key exists in memory.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
key: Unique identifier to check
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
True if key exists, False otherwise
|
|
48
|
+
"""
|
|
49
|
+
def delete(self, key: str) -> None:
|
|
50
|
+
"""Delete data from memory.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
key: Unique identifier for the data
|
|
54
|
+
"""
|
|
55
|
+
def list_keys(self, prefix: str = '') -> list[str]:
|
|
56
|
+
"""List all keys with optional prefix.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
prefix: Optional prefix to filter keys
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
List of matching keys
|
|
63
|
+
"""
|
|
64
|
+
def clear(self) -> None:
|
|
65
|
+
"""Clear all data from memory."""
|
|
66
|
+
@property
|
|
67
|
+
def size_bytes(self) -> int:
|
|
68
|
+
"""Get approximate memory usage in bytes.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
Approximate memory usage in bytes
|
|
72
|
+
"""
|
|
73
|
+
@property
|
|
74
|
+
def count(self) -> int:
|
|
75
|
+
"""Get number of stored items.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
Number of items in storage
|
|
79
|
+
"""
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.storage.base import BaseObjectStorageClient as BaseObjectStorageClient
|
|
3
|
+
from aip_agents.storage.providers.base import BaseStorageProvider as BaseStorageProvider, StorageError as StorageError
|
|
4
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
logger: Incomplete
|
|
8
|
+
|
|
9
|
+
class ObjectStorageProvider(BaseStorageProvider):
|
|
10
|
+
"""Object storage provider for S3-compatible storage.
|
|
11
|
+
|
|
12
|
+
Works with any S3-compatible storage including AWS S3, MinIO,
|
|
13
|
+
Google Cloud Storage (with S3 compatibility), etc.
|
|
14
|
+
|
|
15
|
+
Best for:
|
|
16
|
+
- Very large datasets
|
|
17
|
+
- Distributed systems
|
|
18
|
+
- Cloud deployments
|
|
19
|
+
- Long-term storage
|
|
20
|
+
- Multi-region access
|
|
21
|
+
"""
|
|
22
|
+
client: Incomplete
|
|
23
|
+
prefix: Incomplete
|
|
24
|
+
use_json: Incomplete
|
|
25
|
+
def __init__(self, client: BaseObjectStorageClient, prefix: str = '', use_json: bool = False) -> None:
|
|
26
|
+
"""Initialize object storage provider.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
client: Object storage client instance
|
|
30
|
+
prefix: Prefix for all keys (like a directory)
|
|
31
|
+
use_json: Use JSON format (True) or pickle (False)
|
|
32
|
+
"""
|
|
33
|
+
def store(self, key: str, data: Any) -> None:
|
|
34
|
+
"""Store data in object storage.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
key: Unique identifier for the data
|
|
38
|
+
data: Data to store
|
|
39
|
+
|
|
40
|
+
Raises:
|
|
41
|
+
StorageError: If storage operation fails
|
|
42
|
+
"""
|
|
43
|
+
def retrieve(self, key: str) -> Any:
|
|
44
|
+
"""Retrieve data from object storage.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
key: Unique identifier for the data
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
The stored data
|
|
51
|
+
|
|
52
|
+
Raises:
|
|
53
|
+
KeyError: If key not found
|
|
54
|
+
StorageError: If retrieval operation fails
|
|
55
|
+
"""
|
|
56
|
+
def exists(self, key: str) -> bool:
|
|
57
|
+
"""Check if object exists.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
key: Unique identifier to check
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
True if key exists, False otherwise
|
|
64
|
+
"""
|
|
65
|
+
def delete(self, key: str) -> None:
|
|
66
|
+
"""Delete object.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
key: Unique identifier for the data
|
|
70
|
+
"""
|
|
71
|
+
def list_keys(self, prefix: str = '') -> list[str]:
|
|
72
|
+
"""List all keys with optional prefix.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
prefix: Optional prefix to filter keys
|
|
76
|
+
|
|
77
|
+
Raises:
|
|
78
|
+
NotImplementedError: list_keys is not implemented
|
|
79
|
+
"""
|
|
80
|
+
def clear(self) -> None:
|
|
81
|
+
"""Clear all objects with the configured prefix.
|
|
82
|
+
|
|
83
|
+
Warning:
|
|
84
|
+
This is a dangerous operation!
|
|
85
|
+
"""
|
|
86
|
+
def get_presigned_url(self, key: str, expires_hours: int = 24) -> str | None:
|
|
87
|
+
"""Generate presigned URL for direct access.
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
key: Storage key
|
|
91
|
+
expires_hours: URL expiration in hours
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
Presigned URL for direct access
|
|
95
|
+
|
|
96
|
+
Raises:
|
|
97
|
+
StorageError: If URL generation fails
|
|
98
|
+
"""
|
aip_agents/tools/__init__.py
CHANGED
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
from importlib import import_module
|
|
4
4
|
from typing import TYPE_CHECKING
|
|
5
5
|
|
|
6
|
+
from aip_agents.tools.date_range_tool import DateRangeTool
|
|
6
7
|
from aip_agents.tools.gl_connector import GLConnectorTool
|
|
7
|
-
from aip_agents.tools.gl_connector_tools import
|
|
8
|
+
from aip_agents.tools.gl_connector_tools import (
|
|
9
|
+
BOSA_AUTOMATED_TOOLS,
|
|
10
|
+
GL_CONNECTORS_AUTOMATED_TOOLS,
|
|
11
|
+
)
|
|
8
12
|
from aip_agents.tools.time_tool import TimeTool
|
|
9
13
|
from aip_agents.tools.web_search import GoogleSerperTool
|
|
10
14
|
from aip_agents.utils.logger import get_logger
|
|
@@ -17,6 +21,7 @@ __all__ = [
|
|
|
17
21
|
"GLConnectorTool",
|
|
18
22
|
"GoogleSerperTool",
|
|
19
23
|
"TimeTool",
|
|
24
|
+
"DateRangeTool",
|
|
20
25
|
]
|
|
21
26
|
|
|
22
27
|
|
|
@@ -51,5 +56,9 @@ _register_optional("aip_agents.tools.execute_ptc_code", "create_execute_ptc_code
|
|
|
51
56
|
if TYPE_CHECKING:
|
|
52
57
|
from aip_agents.tools.browser_use import BrowserUseTool
|
|
53
58
|
from aip_agents.tools.code_sandbox import E2BCodeSandboxTool
|
|
54
|
-
from aip_agents.tools.document_loader import
|
|
59
|
+
from aip_agents.tools.document_loader import (
|
|
60
|
+
DocxReaderTool,
|
|
61
|
+
ExcelReaderTool,
|
|
62
|
+
PDFReaderTool,
|
|
63
|
+
)
|
|
55
64
|
from aip_agents.tools.execute_ptc_code import create_execute_ptc_code_tool
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from aip_agents.tools.browser_use import BrowserUseTool as BrowserUseTool
|
|
2
|
+
from aip_agents.tools.code_sandbox import E2BCodeSandboxTool as E2BCodeSandboxTool
|
|
3
|
+
from aip_agents.tools.date_range_tool import DateRangeTool as DateRangeTool
|
|
4
|
+
from aip_agents.tools.document_loader import DocxReaderTool as DocxReaderTool, ExcelReaderTool as ExcelReaderTool, PDFReaderTool as PDFReaderTool
|
|
5
|
+
from aip_agents.tools.execute_ptc_code import create_execute_ptc_code_tool as create_execute_ptc_code_tool
|
|
6
|
+
from aip_agents.tools.gl_connector import GLConnectorTool as GLConnectorTool
|
|
7
|
+
from aip_agents.tools.gl_connector_tools import BOSA_AUTOMATED_TOOLS as BOSA_AUTOMATED_TOOLS, GL_CONNECTORS_AUTOMATED_TOOLS as GL_CONNECTORS_AUTOMATED_TOOLS
|
|
8
|
+
from aip_agents.tools.time_tool import TimeTool as TimeTool
|
|
9
|
+
from aip_agents.tools.web_search import GoogleSerperTool as GoogleSerperTool
|
|
10
|
+
|
|
11
|
+
__all__ = ['BOSA_AUTOMATED_TOOLS', 'GL_CONNECTORS_AUTOMATED_TOOLS', 'GLConnectorTool', 'GoogleSerperTool', 'TimeTool', 'DateRangeTool', 'BrowserUseTool', 'E2BCodeSandboxTool', 'DocxReaderTool', 'ExcelReaderTool', 'PDFReaderTool', 'create_execute_ptc_code_tool']
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from enum import StrEnum
|
|
2
|
+
|
|
3
|
+
__all__ = [<ImportableName.BROWSER_USE_TOOL: 'BrowserUseTool'>, <ImportableName.BROWSER_USE_TOOL_INPUT: 'BrowserUseToolInput'>, <ImportableName.BROWSER_USE_TOOL_CONFIG: 'BrowserUseToolConfig'>]
|
|
4
|
+
|
|
5
|
+
class ImportableName(StrEnum):
|
|
6
|
+
"""Names of the importable attributes."""
|
|
7
|
+
BROWSER_USE_TOOL: str
|
|
8
|
+
BROWSER_USE_TOOL_INPUT: str
|
|
9
|
+
BROWSER_USE_TOOL_CONFIG: str
|
|
10
|
+
|
|
11
|
+
# Names in __all__ with no definition:
|
|
12
|
+
# BrowserUseTool
|
|
13
|
+
# BrowserUseToolConfig
|
|
14
|
+
# BrowserUseToolInput
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from aip_agents.tools.browser_use.types import ToolCallInfo
|
|
2
|
+
from browser_use.agent.views import ActionResult, AgentOutput
|
|
3
|
+
|
|
4
|
+
__all__ = ['ActionParser']
|
|
5
|
+
|
|
6
|
+
class ActionParser:
|
|
7
|
+
"""Dedicated class for parsing agent actions with improved error handling."""
|
|
8
|
+
@staticmethod
|
|
9
|
+
def extract_actions(model_output: AgentOutput | None, last_result: list[ActionResult] | None = None) -> list[ToolCallInfo]:
|
|
10
|
+
"""Extract action information from model output.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
model_output: The model output containing action information.
|
|
14
|
+
last_result: The last result from the agent state for output extraction.
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
list[ToolCallInfo]: Structured action information.
|
|
18
|
+
"""
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.tools.browser_use import session_errors as session_errors
|
|
3
|
+
from aip_agents.tools.browser_use.action_parser import ActionParser as ActionParser
|
|
4
|
+
from aip_agents.tools.browser_use.llm_config import build_browser_use_llm as build_browser_use_llm, configure_browser_use_environment as configure_browser_use_environment
|
|
5
|
+
from aip_agents.tools.browser_use.schemas import BrowserUseToolConfig as BrowserUseToolConfig, BrowserUseToolInput as BrowserUseToolInput
|
|
6
|
+
from aip_agents.tools.browser_use.session import BrowserSession as BrowserSession
|
|
7
|
+
from aip_agents.tools.browser_use.steel_session_recording import SteelSessionRecorder as SteelSessionRecorder
|
|
8
|
+
from aip_agents.tools.browser_use.streaming import create_error_response as create_error_response, create_step_response as create_step_response, generate_step_content as generate_step_content, generate_thinking_message as generate_thinking_message, yield_iframe_activity as yield_iframe_activity, yield_status_message as yield_status_message, yield_thinking_marker as yield_thinking_marker
|
|
9
|
+
from aip_agents.tools.browser_use.structured_data_parser import detect_structured_data_failure as detect_structured_data_failure
|
|
10
|
+
from aip_agents.tools.browser_use.types import BrowserUseFatalError as BrowserUseFatalError, RetryDecision as RetryDecision, StreamingResponse as StreamingResponse, StreamingState as StreamingState, ToolCallInfo as ToolCallInfo
|
|
11
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
12
|
+
from langchain_core.runnables import RunnableConfig
|
|
13
|
+
from langchain_core.tools import BaseTool
|
|
14
|
+
from pydantic import BaseModel as BaseModel
|
|
15
|
+
|
|
16
|
+
logger: Incomplete
|
|
17
|
+
|
|
18
|
+
class BrowserUseTool(BaseTool):
|
|
19
|
+
"""Tool to execute web automation tasks using browser-use framework.
|
|
20
|
+
|
|
21
|
+
This tool provides step-by-step execution of browser automation tasks with detailed
|
|
22
|
+
logging of intermediate steps, including the agent's thinking process, goals, and
|
|
23
|
+
results at each step.
|
|
24
|
+
"""
|
|
25
|
+
name: str
|
|
26
|
+
description: str
|
|
27
|
+
args_schema: type[BaseModel]
|
|
28
|
+
tool_config_schema: type[BaseModel]
|
|
29
|
+
MAX_SESSION_RELEASE_RETRIES: int
|
|
30
|
+
SESSION_RELEASE_SLEEP_TIME_IN_S: int
|
|
31
|
+
async def arun_streaming(self, task: str = None, config: RunnableConfig | None = None, **kwargs):
|
|
32
|
+
"""Execute a web automation task using browser-use asynchronously with streaming output.
|
|
33
|
+
|
|
34
|
+
This method creates a Steel browser session, initializes a browser-use agent with
|
|
35
|
+
the specified task, and executes the automation step by step, yielding results
|
|
36
|
+
in streaming fashion. Starts background recording after completion.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
task (str, optional): The task prompt for the AI agent to execute in the browser.
|
|
40
|
+
If not provided, will attempt to extract from kwargs.
|
|
41
|
+
config (RunnableConfig): RunnableConfig containing tool configuration.
|
|
42
|
+
**kwargs: Additional parameters that may contain the task or other tool-specific arguments.
|
|
43
|
+
|
|
44
|
+
Yields:
|
|
45
|
+
dict: Step-by-step results in standardized StreamingResponse format.
|
|
46
|
+
|
|
47
|
+
Raises:
|
|
48
|
+
Exception: Any exception that occurs during task execution will be caught
|
|
49
|
+
and yielded as an error message.
|
|
50
|
+
"""
|