aip-agents-binary 0.5.24__py3-none-any.whl → 0.5.25b1__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.py +6 -0
- aip_agents/agent/base_langgraph_agent.pyi +232 -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.py +96 -14
- aip_agents/agent/langgraph_react_agent.pyi +131 -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.py +2 -2
- aip_agents/examples/compare_streaming_client.pyi +48 -0
- aip_agents/examples/compare_streaming_server.py +1 -1
- 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_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.py +2 -2
- aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.py +1 -1
- 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__.py +83 -0
- aip_agents/guardrails/__init__.pyi +6 -0
- aip_agents/guardrails/engines/__init__.py +69 -0
- aip_agents/guardrails/engines/__init__.pyi +4 -0
- aip_agents/guardrails/engines/base.py +90 -0
- aip_agents/guardrails/engines/base.pyi +61 -0
- aip_agents/guardrails/engines/nemo.py +101 -0
- aip_agents/guardrails/engines/nemo.pyi +46 -0
- aip_agents/guardrails/engines/phrase_matcher.py +113 -0
- aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
- aip_agents/guardrails/exceptions.py +39 -0
- aip_agents/guardrails/exceptions.pyi +23 -0
- aip_agents/guardrails/manager.py +163 -0
- aip_agents/guardrails/manager.pyi +42 -0
- aip_agents/guardrails/middleware.py +199 -0
- aip_agents/guardrails/middleware.pyi +87 -0
- aip_agents/guardrails/schemas.py +63 -0
- aip_agents/guardrails/schemas.pyi +43 -0
- aip_agents/guardrails/utils.py +45 -0
- aip_agents/guardrails/utils.pyi +19 -0
- aip_agents/mcp/__init__.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 +48 -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 +113 -0
- aip_agents/mcp/client/session_pool.pyi +101 -0
- aip_agents/mcp/client/transports.pyi +123 -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.py +8 -0
- aip_agents/middleware/base.pyi +75 -0
- aip_agents/middleware/manager.py +22 -0
- aip_agents/middleware/manager.pyi +84 -0
- aip_agents/middleware/todolist.pyi +125 -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__.pyi +9 -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/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/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 +292 -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.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/METADATA +49 -49
- aip_agents_binary-0.5.25b1.dist-info/RECORD +566 -0
- {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/WHEEL +1 -1
- aip_agents_binary-0.5.24.dist-info/RECORD +0 -280
- {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
from aip_agents.tools.browser_use.types import StreamingResponse, ToolCallInfo
|
|
2
|
+
from browser_use import Agent
|
|
3
|
+
from typing import Any, Literal
|
|
4
|
+
|
|
5
|
+
__all__ = ['PROCESSING_MESSAGE', 'TASK_COMPLETED_MESSAGE', 'create_error_response', 'create_step_response', 'generate_step_content', 'generate_thinking_message', 'yield_iframe_activity', 'yield_status_message', 'yield_thinking_marker']
|
|
6
|
+
|
|
7
|
+
TASK_COMPLETED_MESSAGE: str
|
|
8
|
+
PROCESSING_MESSAGE: str
|
|
9
|
+
|
|
10
|
+
def create_step_response(agent: Agent, tool_calls: list[ToolCallInfo], is_done: bool, content: str, thinking_message: str | None) -> StreamingResponse:
|
|
11
|
+
"""Compose the per-step payload emitted during browser-use streaming.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
agent: Browser-use agent producing the step output.
|
|
15
|
+
tool_calls: Tool call descriptors extracted from the step.
|
|
16
|
+
is_done: Flag indicating whether this is the final step in the run.
|
|
17
|
+
content: High-level status text describing the step progress.
|
|
18
|
+
thinking_message: Optional preformatted thinking summary to attach.
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
StreamingResponse: Serialized payload for the current streaming step.
|
|
22
|
+
"""
|
|
23
|
+
async def generate_thinking_message(content: str, tool_calls: list[dict[str, Any]], *, is_final: bool) -> str | None:
|
|
24
|
+
"""Generate a user-facing thinking summary using the formatter LLM when available.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
content: High-level status text describing the step progress.
|
|
28
|
+
tool_calls: Serialized tool call dictionaries with outputs.
|
|
29
|
+
is_final: Whether the task has completed.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
Markdown-formatted summary string, or ``None`` when not applicable.
|
|
33
|
+
"""
|
|
34
|
+
def create_error_response(error_message: str, recording_url: str = '') -> dict:
|
|
35
|
+
"""Create a standardized error response.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
error_message: The error message to include.
|
|
39
|
+
recording_url: The recording URL if available.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
dict: Standardized error response.
|
|
43
|
+
"""
|
|
44
|
+
def generate_step_content(tool_calls: list[ToolCallInfo], is_done: bool) -> str:
|
|
45
|
+
"""Return user-friendly status text derived from tool call outputs.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
tool_calls: Tool call descriptors extracted from the step.
|
|
49
|
+
is_done: Flag indicating whether this is the final step in the run.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
User-friendly status text string.
|
|
53
|
+
"""
|
|
54
|
+
def yield_iframe_activity(url: str, content: str) -> dict:
|
|
55
|
+
"""Create and return an iframe activity streaming response.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
url: The URL to display in the iframe.
|
|
59
|
+
content: The content message for the response.
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
dict: Streaming response dictionary.
|
|
63
|
+
"""
|
|
64
|
+
def yield_status_message(content: str) -> dict:
|
|
65
|
+
"""Create a status update event notifying clients about recovery attempts.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
content: The status message content to include in the event.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
dict: Streaming response dictionary for the status update event.
|
|
72
|
+
"""
|
|
73
|
+
def yield_thinking_marker(marker_type: Literal['start', 'end']) -> dict:
|
|
74
|
+
"""Create and return a thinking marker streaming response.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
marker_type: Either 'start' or 'end' to indicate thinking phase.
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
dict: Streaming response dictionary.
|
|
81
|
+
"""
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from aip_agents.tools.browser_use.types import ToolCallInfo
|
|
2
|
+
from collections.abc import Callable, Sequence
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
__all__ = ['attempt_json_recovery', 'detect_structured_data_failure', 'extract_content_after_marker', 'extract_json_blob', 'parse_structured_data', 'payload_reports_empty', 'payload_reports_error', 'structured_data_failure_for_call']
|
|
6
|
+
|
|
7
|
+
def detect_structured_data_failure(tool_calls: Sequence[ToolCallInfo], summarize_error: Callable[[str], str]) -> str | None:
|
|
8
|
+
"""Return a descriptive error when structured data extraction yields no results.
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
tool_calls: Tool call descriptors extracted from the latest agent step.
|
|
12
|
+
summarize_error: Function to summarize error messages.
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
str | None: Failure reason when extraction yielded nothing, otherwise None.
|
|
16
|
+
"""
|
|
17
|
+
def structured_data_failure_for_call(call: ToolCallInfo, summarize_error: Callable[[str], str]) -> str | None:
|
|
18
|
+
"""Evaluate a single tool call for extractor failures.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
call: Tool call descriptor encapsulating name/args/output.
|
|
22
|
+
summarize_error: Function to summarize error messages.
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
str | None: Failure message when the call represents a bad extraction.
|
|
26
|
+
"""
|
|
27
|
+
def payload_reports_error(payload: dict[str, Any], raw_output: str, summarize_error: Callable[[str], str]) -> str | None:
|
|
28
|
+
"""Return a formatted error message when extractor status indicates failure.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
payload: Parsed JSON payload emitted by the extractor.
|
|
32
|
+
raw_output: Original extractor output (used for fallback summaries).
|
|
33
|
+
summarize_error: Function to summarize error messages.
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
str | None: Human-readable failure string when extraction failed.
|
|
37
|
+
"""
|
|
38
|
+
def payload_reports_empty(payload: dict[str, Any], raw_output: str, summarize_error: Callable[[str], str]) -> str | None:
|
|
39
|
+
"""Return a formatted message when the extractor returned no usable data.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
payload: Parsed JSON payload emitted by the extractor.
|
|
43
|
+
raw_output: Original extractor output string.
|
|
44
|
+
summarize_error: Function to summarize error messages.
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
str | None: Human-readable failure message when no content was extracted.
|
|
48
|
+
"""
|
|
49
|
+
def parse_structured_data(output: str, summarize_error: Callable[[str], str]) -> tuple[dict[str, Any] | list[Any] | None, str | None]:
|
|
50
|
+
"""Extract the JSON blob emitted by extract_structured_data if present.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
output: Raw string payload returned by extract_structured_data.
|
|
54
|
+
summarize_error: Function to summarize error messages.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
tuple[dict[str, Any] | list[Any] | None, str | None]: Parsed JSON payload when extraction succeeds,
|
|
58
|
+
otherwise a tuple containing None and a diagnostic string on failure.
|
|
59
|
+
"""
|
|
60
|
+
def extract_content_after_marker(output: str) -> str | None:
|
|
61
|
+
"""Extract content after the 'Extracted Content:' marker and clean trailing metadata.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
output: Raw string payload returned by extract_structured_data.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
str | None: Cleaned content after the marker, or None if marker not found.
|
|
68
|
+
"""
|
|
69
|
+
def extract_json_blob(content: str) -> str | None:
|
|
70
|
+
"""Extract the JSON blob from content by finding delimiters and trimming trailing content.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
content: Content string potentially containing JSON.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
str | None: Extracted JSON blob, or None if no valid JSON delimiters found.
|
|
77
|
+
"""
|
|
78
|
+
def attempt_json_recovery(json_blob: str) -> dict[str, Any] | list[Any] | None:
|
|
79
|
+
"""Attempt to parse JSON blob, with recovery strategies for common issues.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
json_blob: JSON string to attempt parsing.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
dict[str, Any] | list[Any] | None: Parsed JSON data if successful, None if all recovery attempts fail.
|
|
86
|
+
"""
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
logger: Incomplete
|
|
6
|
+
|
|
7
|
+
def recover_concatenated_json_objects(json_blob: str) -> dict[str, Any] | None:
|
|
8
|
+
"""Normalize concatenated JSON object strings into a structured payload.
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
json_blob: Raw JSON-like string returned by the structured data extractor.
|
|
12
|
+
|
|
13
|
+
Returns:
|
|
14
|
+
dict[str, Any] | None: Standardized payload when multiple objects are recovered,
|
|
15
|
+
otherwise None.
|
|
16
|
+
"""
|
|
17
|
+
def repair_json_blob(json_blob: str) -> str | None:
|
|
18
|
+
"""Apply json_repair to malformed JSON strings and return the mutated payload.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
json_blob: Raw JSON string that may contain syntax mistakes.
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
str | None: Repaired JSON string when modifications were applied, otherwise None.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
class _JsonObjectSplitter:
|
|
28
|
+
"""Helper class to split JSON objects with reduced cognitive complexity."""
|
|
29
|
+
json_blob: Incomplete
|
|
30
|
+
segments: list[str]
|
|
31
|
+
depth: int
|
|
32
|
+
start: int | None
|
|
33
|
+
last_end: int
|
|
34
|
+
in_string: bool
|
|
35
|
+
escaping: bool
|
|
36
|
+
def __init__(self, json_blob: str) -> None:
|
|
37
|
+
"""Initialize the splitter with the raw JSON string.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
json_blob: Raw string potentially containing concatenated JSON objects.
|
|
41
|
+
"""
|
|
42
|
+
def split_objects(self) -> list[str]:
|
|
43
|
+
"""Main method to split JSON objects."""
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
__all__ = ['BrowserUseFatalError', 'RetryDecision', 'StreamingResponse', 'StreamingState', 'ToolCallInfo']
|
|
5
|
+
|
|
6
|
+
class BrowserUseFatalError(RuntimeError):
|
|
7
|
+
"""Raised when the Browser Use session must terminate immediately."""
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class ToolCallInfo:
|
|
11
|
+
"""Structured information for a single tool call."""
|
|
12
|
+
name: str
|
|
13
|
+
args: dict[str, Any]
|
|
14
|
+
output: str
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class StreamingResponse:
|
|
18
|
+
"""Standardized streaming response structure."""
|
|
19
|
+
event_type: str
|
|
20
|
+
content: str
|
|
21
|
+
thinking_and_activity_info: dict
|
|
22
|
+
is_final: bool
|
|
23
|
+
tool_info: dict[str, Any] | None = ...
|
|
24
|
+
metadata: dict[str, Any] | None = ...
|
|
25
|
+
def to_dict(self) -> dict[str, Any]:
|
|
26
|
+
"""Convert to dictionary format for yielding."""
|
|
27
|
+
|
|
28
|
+
@dataclass
|
|
29
|
+
class StreamingState:
|
|
30
|
+
"""State management for streaming operations."""
|
|
31
|
+
debug_url: str
|
|
32
|
+
recording_url: str
|
|
33
|
+
step_count: int = ...
|
|
34
|
+
is_complete: bool = ...
|
|
35
|
+
session_id: str | None = ...
|
|
36
|
+
terminal_error: str | None = ...
|
|
37
|
+
recording_started: bool = ...
|
|
38
|
+
|
|
39
|
+
@dataclass
|
|
40
|
+
class RetryDecision:
|
|
41
|
+
"""Encapsulate retry metadata when Steel sessions need to be restarted."""
|
|
42
|
+
retries_remaining: int
|
|
43
|
+
attempted_retries: int
|
|
44
|
+
message: str
|
|
45
|
+
delay: float
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.tools.code_sandbox.constant import DATA_FILE_PATH as DATA_FILE_PATH
|
|
3
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
4
|
+
from gllm_inference.schema import Attachment as Attachment
|
|
5
|
+
from gllm_tools.code_interpreter.code_sandbox.e2b_sandbox import E2BSandbox
|
|
6
|
+
from gllm_tools.code_interpreter.code_sandbox.models import ExecutionResult
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
logger: Incomplete
|
|
10
|
+
|
|
11
|
+
class SandboxFileWatcher:
|
|
12
|
+
"""File watcher for monitoring file creation in sandbox environments."""
|
|
13
|
+
sandbox: Incomplete
|
|
14
|
+
def __init__(self, sandbox: Any) -> None:
|
|
15
|
+
"""Initialize the file watcher with a sandbox instance.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
sandbox (Any): The sandbox instance to monitor.
|
|
19
|
+
"""
|
|
20
|
+
def setup_monitoring(self) -> None:
|
|
21
|
+
"""Set up filesystem watchers for monitoring file creation.
|
|
22
|
+
|
|
23
|
+
Note: /tmp/output is a sandbox-isolated directory, not a shared system /tmp.
|
|
24
|
+
This directory is scoped to the E2B sandbox instance and is safe for use.
|
|
25
|
+
"""
|
|
26
|
+
async def process_events(self) -> None:
|
|
27
|
+
"""Process filesystem events from watchers and update created files list."""
|
|
28
|
+
def reset_created_files(self) -> None:
|
|
29
|
+
"""Reset the list of created files."""
|
|
30
|
+
def get_created_files(self) -> list[str]:
|
|
31
|
+
"""Get the list of files created during monitoring.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
list[str]: List of file paths that were created.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
class MyE2BCloudSandbox(E2BSandbox):
|
|
38
|
+
"""Extended E2B sandbox with filesystem monitoring capabilities.
|
|
39
|
+
|
|
40
|
+
Use `create()` in production to build a fully initialized sandbox wrapper.
|
|
41
|
+
Direct construction is intentionally blocked to prevent partially initialized
|
|
42
|
+
instances that lack the underlying E2B sandbox clients.
|
|
43
|
+
"""
|
|
44
|
+
file_watcher: SandboxFileWatcher | None
|
|
45
|
+
def __init__(self, language: str = 'python', *, _unsafe_allow_init: bool = False) -> None:
|
|
46
|
+
"""Initialize the sandbox wrapper.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
language (str): Language to execute inside the sandbox.
|
|
50
|
+
_unsafe_allow_init (bool): Escape hatch for tests/mocks only.
|
|
51
|
+
|
|
52
|
+
Raises:
|
|
53
|
+
RuntimeError: When instantiated directly without `create()`.
|
|
54
|
+
"""
|
|
55
|
+
@classmethod
|
|
56
|
+
async def create(cls, api_key: str, domain: str | None = None, template: str | None = None, language: str = 'python', additional_packages: list[str] | None = None, **kwargs: Any) -> MyE2BCloudSandbox:
|
|
57
|
+
"""Create a fully initialized sandbox wrapper.
|
|
58
|
+
|
|
59
|
+
This is the supported construction path for production usage. It wires
|
|
60
|
+
the E2B sandbox instance and its filesystem/command clients, then
|
|
61
|
+
installs language dependencies.
|
|
62
|
+
"""
|
|
63
|
+
async def execute_code(self, code: str, timeout: int = 30, files: list[Attachment] | None = None, **kwargs: Any) -> ExecutionResult:
|
|
64
|
+
"""Execute code in the E2B Cloud sandbox with filesystem monitoring.
|
|
65
|
+
|
|
66
|
+
This override fixes the Pydantic validation error by ensuring execution.error
|
|
67
|
+
is converted to string. Always enables filesystem monitoring to track
|
|
68
|
+
created files.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
code (str): The code to execute.
|
|
72
|
+
timeout (int, optional): Maximum execution time in seconds. Defaults to 30.
|
|
73
|
+
files (list[Attachment] | None, optional): List of Attachment objects with file details. Defaults to None.
|
|
74
|
+
**kwargs (Any): Additional execution parameters.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
ExecutionResult: Structured result of the execution.
|
|
78
|
+
|
|
79
|
+
Raises:
|
|
80
|
+
RuntimeError: If sandbox is not initialized.
|
|
81
|
+
"""
|
|
82
|
+
def get_created_files(self) -> list[str]:
|
|
83
|
+
"""Get the list of files created during the last monitored execution.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
list[str]: List of file paths that were created.
|
|
87
|
+
"""
|
|
88
|
+
def download_file(self, file_path: str) -> bytes | None:
|
|
89
|
+
"""Download file content from the sandbox.
|
|
90
|
+
|
|
91
|
+
Uses download_url when available to avoid binary corruption issues.
|
|
92
|
+
Falls back to the filesystem API when download_url fails or is unavailable.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
file_path (str): Path to the file in the sandbox.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
bytes | None: File content as bytes, or None if download fails.
|
|
99
|
+
|
|
100
|
+
Raises:
|
|
101
|
+
RuntimeError: If sandbox is not initialized.
|
|
102
|
+
"""
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.a2a.types import get_mime_type_from_filename as get_mime_type_from_filename
|
|
3
|
+
from aip_agents.tools.code_sandbox.constant import DATA_FILE_NAME as DATA_FILE_NAME
|
|
4
|
+
from aip_agents.tools.code_sandbox.e2b_cloud_sandbox_extended import MyE2BCloudSandbox as MyE2BCloudSandbox
|
|
5
|
+
from aip_agents.utils.artifact_helpers import ArtifactHandler as ArtifactHandler, create_multiple_artifacts_response as create_multiple_artifacts_response
|
|
6
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
7
|
+
from langchain_core.tools import BaseTool
|
|
8
|
+
from pydantic import BaseModel
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
logger: Incomplete
|
|
12
|
+
|
|
13
|
+
class E2BCodeSandboxInput(BaseModel):
|
|
14
|
+
"""Input schema for the E2BCodeSandboxTool."""
|
|
15
|
+
code: str
|
|
16
|
+
data_source: str | list[dict[str, Any]] | None
|
|
17
|
+
timeout: int
|
|
18
|
+
language: str
|
|
19
|
+
additional_packages: list[str] | None
|
|
20
|
+
|
|
21
|
+
class E2BCodeSandboxTool(BaseTool):
|
|
22
|
+
"""Tool to execute Python code in E2B Cloud Sandbox."""
|
|
23
|
+
name: str
|
|
24
|
+
description: str
|
|
25
|
+
save_output_history: bool
|
|
26
|
+
args_schema: type[BaseModel]
|
|
27
|
+
api_key: str
|
|
28
|
+
default_additional_packages: list[str]
|
|
29
|
+
store_final_output: bool
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from enum import Enum, StrEnum
|
|
3
|
+
|
|
4
|
+
GL_CONNECTORS_BASE_URL: Incomplete
|
|
5
|
+
GL_CONNECTORS_API_KEY: Incomplete
|
|
6
|
+
GL_CONNECTORS_FETCH_MAX_RETRIES: Incomplete
|
|
7
|
+
BOSA_API_BASE_URL = GL_CONNECTORS_BASE_URL
|
|
8
|
+
BOSA_API_KEY = GL_CONNECTORS_API_KEY
|
|
9
|
+
BOSA_FETCH_MAX_RETRIES = GL_CONNECTORS_FETCH_MAX_RETRIES
|
|
10
|
+
|
|
11
|
+
class ToolType(StrEnum):
|
|
12
|
+
"""Tool types for GL Connectors."""
|
|
13
|
+
GLLM: str
|
|
14
|
+
LANGCHAIN: str
|
|
15
|
+
|
|
16
|
+
class Action(Enum):
|
|
17
|
+
"""Actions for GL Connectors."""
|
|
18
|
+
GITHUB: str
|
|
19
|
+
GOOGLE: str
|
|
20
|
+
GOOGLE_DRIVE: str
|
|
21
|
+
GOOGLE_MAIL: str
|
|
22
|
+
TWITTER: str
|
|
23
|
+
|
|
24
|
+
class GitHubEndpoint(Enum):
|
|
25
|
+
"""GitHub endpoints for GL Connectors."""
|
|
26
|
+
INTEGRATIONS: str
|
|
27
|
+
USER_HAS_INTEGRATION: str
|
|
28
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
29
|
+
CREATE_ISSUE_HANDLER: str
|
|
30
|
+
GET_ISSUE_HANDLER: str
|
|
31
|
+
LIST_ISSUES: str
|
|
32
|
+
LIST_ISSUES_COMMENTS: str
|
|
33
|
+
SEARCH_ALL_ISSUES: str
|
|
34
|
+
GET_COMMITS: str
|
|
35
|
+
SEARCH_COMMITS: str
|
|
36
|
+
GET_COLLABORATORS: str
|
|
37
|
+
GET_RELEASES: str
|
|
38
|
+
GET_CONTRIBUTORS: str
|
|
39
|
+
GET_LANGUAGES: str
|
|
40
|
+
SEARCH_CONTRIBUTIONS: str
|
|
41
|
+
LIST_PULL_REQUESTS: str
|
|
42
|
+
SEARCH_PR: str
|
|
43
|
+
GET_PULL: str
|
|
44
|
+
GET_ALL_CONTRIBUTOR_COMMIT_ACTIVITIES: str
|
|
45
|
+
GET_COMMIT_ACTIVITY: str
|
|
46
|
+
GET_WEEKLY_COMMIT_COUNTS: str
|
|
47
|
+
GET_USER_CONTRIBUTION_STATISTICS: str
|
|
48
|
+
LIST_PROJECT_ITEMS: str
|
|
49
|
+
LIST_PROJECTS: str
|
|
50
|
+
|
|
51
|
+
class GoogleDriveEndpoint(Enum):
|
|
52
|
+
"""Google Drive endpoints for GL Connectors."""
|
|
53
|
+
INTEGRATIONS: str
|
|
54
|
+
USER_HAS_INTEGRATION: str
|
|
55
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
56
|
+
SEARCH_FILES: str
|
|
57
|
+
GET_FILE: str
|
|
58
|
+
CREATE_FILE: str
|
|
59
|
+
CREATE_FOLDER: str
|
|
60
|
+
UPDATE_FILE: str
|
|
61
|
+
UPDATE_FOLDER: str
|
|
62
|
+
COPY_FILE: str
|
|
63
|
+
DELETE_FILE: str
|
|
64
|
+
SUMMARIZE_FOLDER_FILES_BY_TYPE: str
|
|
65
|
+
SUMMARIZE_TOTAL_FILES_BY_TYPE: str
|
|
66
|
+
RECENT_FILES: str
|
|
67
|
+
CREATE_PERMISSION: str
|
|
68
|
+
LIST_PERMISSIONS: str
|
|
69
|
+
GET_PERMISSION: str
|
|
70
|
+
UPDATE_PERMISSION: str
|
|
71
|
+
DELETE_PERMISSION: str
|
|
72
|
+
DOWNLOAD_FILE: str
|
|
73
|
+
|
|
74
|
+
class GoogleDocsEndpoint(Enum):
|
|
75
|
+
"""Google Docs endpoints for GL Connectors."""
|
|
76
|
+
INTEGRATIONS: str
|
|
77
|
+
USER_HAS_INTEGRATION: str
|
|
78
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
79
|
+
GET_DOCUMENT: str
|
|
80
|
+
LIST_DOCUMENTS: str
|
|
81
|
+
CREATE_DOCUMENT: str
|
|
82
|
+
UPDATE_DOCUMENT: str
|
|
83
|
+
COPY_CONTENT: str
|
|
84
|
+
UPDATE_DOCUMENT_MARKDOWN: str
|
|
85
|
+
LIST_COMMENTS: str
|
|
86
|
+
SUMMARIZE_COMMENTS: str
|
|
87
|
+
|
|
88
|
+
class GoogleEndpoint(Enum):
|
|
89
|
+
"""Google endpoints for GL Connectors."""
|
|
90
|
+
INTEGRATIONS: str
|
|
91
|
+
USER_HAS_INTEGRATION: str
|
|
92
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
93
|
+
USERINFO: str
|
|
94
|
+
|
|
95
|
+
class TwitterEndpoint(Enum):
|
|
96
|
+
"""Twitter endpoints for GL Connectors."""
|
|
97
|
+
INTEGRATIONS: str
|
|
98
|
+
USER_HAS_INTEGRATION: str
|
|
99
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
100
|
+
SEARCH: str
|
|
101
|
+
GET_TWEETS: str
|
|
102
|
+
GET_THREAD: str
|
|
103
|
+
GET_USERS: str
|
|
104
|
+
|
|
105
|
+
class GoogleMailEndpoint(Enum):
|
|
106
|
+
"""Google Mail endpoints for GL Connectors."""
|
|
107
|
+
INTEGRATIONS: str
|
|
108
|
+
USER_HAS_INTEGRATION: str
|
|
109
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
110
|
+
CREATE_DRAFT: str
|
|
111
|
+
LIST_DRAFTS: str
|
|
112
|
+
SEND_DRAFT: str
|
|
113
|
+
GET_DRAFT: str
|
|
114
|
+
MODIFY_DRAFT: str
|
|
115
|
+
LIST_LABELS: str
|
|
116
|
+
LABEL_STATS: str
|
|
117
|
+
GET_LABEL_DETAILS: str
|
|
118
|
+
CREATE_LABELS: str
|
|
119
|
+
MODIFY_LABELS: str
|
|
120
|
+
DELETE_LABELS: str
|
|
121
|
+
SEND_EMAIL: str
|
|
122
|
+
LIST_EMAILS: str
|
|
123
|
+
GET_EMAIL_DETAILS: str
|
|
124
|
+
MODIFY_EMAIL: str
|
|
125
|
+
DELETE_EMAIL: str
|
|
126
|
+
TRASH_EMAIL: str
|
|
127
|
+
UNTRASH_EMAIL: str
|
|
128
|
+
LIST_THREADS: str
|
|
129
|
+
THREAD_DETAILS: str
|
|
130
|
+
MODIFY_THREAD: str
|
|
131
|
+
GET_AUTO_REPLY: str
|
|
132
|
+
SET_AUTO_REPLY: str
|
|
133
|
+
GET_ATTACHMENT: str
|
|
134
|
+
USERINFO: str
|
|
135
|
+
|
|
136
|
+
class ActionEndpointMap:
|
|
137
|
+
"""Maps Action enums to their corresponding Endpoint enums."""
|
|
138
|
+
MAP: dict[Action, type[Enum]]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool as BaseDocumentReaderTool, DocumentReaderInput as DocumentReaderInput
|
|
2
|
+
from aip_agents.tools.document_loader.docx_reader_tool import DocxReaderTool as DocxReaderTool
|
|
3
|
+
from aip_agents.tools.document_loader.excel_reader_tool import ExcelReaderTool as ExcelReaderTool
|
|
4
|
+
from aip_agents.tools.document_loader.pdf_reader_tool import PDFReaderTool as PDFReaderTool
|
|
5
|
+
from aip_agents.tools.document_loader.pdf_splitter import PDFSplitter as PDFSplitter
|
|
6
|
+
|
|
7
|
+
__all__ = ['BaseDocumentReaderTool', 'DocumentReaderInput', 'PDFReaderTool', 'DocxReaderTool', 'ExcelReaderTool', 'PDFSplitter']
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from abc import ABC
|
|
3
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
4
|
+
from gllm_docproc.loader.pipeline_loader import PipelineLoader as PipelineLoaderType
|
|
5
|
+
from langchain_core.tools import BaseTool
|
|
6
|
+
from pydantic import BaseModel
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
logger: Incomplete
|
|
10
|
+
DOCPROC_MISSING_MESSAGE: str
|
|
11
|
+
PipelineLoaderType = Any
|
|
12
|
+
|
|
13
|
+
class _MissingDocprocLoader:
|
|
14
|
+
"""Fallback loader that errors when document processing is attempted."""
|
|
15
|
+
loaders: list[object]
|
|
16
|
+
def __init__(self) -> None: ...
|
|
17
|
+
def add_loader(self, loader: object) -> None: ...
|
|
18
|
+
def load(self, *_args: object, **_kwargs: object) -> list[dict[str, str]]: ...
|
|
19
|
+
def clear_cache(self) -> None: ...
|
|
20
|
+
|
|
21
|
+
DOCPROC_AVAILABLE: Incomplete
|
|
22
|
+
|
|
23
|
+
class BaseDocumentConfig(BaseModel):
|
|
24
|
+
"""Base tool configuration schema for document processing with batching functionality.
|
|
25
|
+
|
|
26
|
+
This configuration enables page-by-page batching to optimize memory usage when
|
|
27
|
+
processing large document files. When batching is enabled, documents are processed
|
|
28
|
+
sequentially by pages rather than loading the entire document into memory at once.
|
|
29
|
+
|
|
30
|
+
Attributes:
|
|
31
|
+
batching (bool): Enable page-by-page batching to reduce memory usage.
|
|
32
|
+
When True, documents are processed page by page sequentially.
|
|
33
|
+
When False, maintains current behavior of loading entire document.
|
|
34
|
+
Defaults to False for backward compatibility.
|
|
35
|
+
batch_size (int): Number of pages to process in each batch.
|
|
36
|
+
Must be between 1 and 100 pages inclusive.
|
|
37
|
+
Larger batch sizes may use more memory but could be more efficient.
|
|
38
|
+
Smaller batch sizes use less memory but may have more overhead.
|
|
39
|
+
Defaults to 10 for balanced memory usage and efficiency.
|
|
40
|
+
|
|
41
|
+
Examples:
|
|
42
|
+
>>> # Default configuration (no batching)
|
|
43
|
+
>>> config = BaseDocumentConfig()
|
|
44
|
+
>>> print(config.batching) # False
|
|
45
|
+
>>> print(config.batch_size) # 10
|
|
46
|
+
|
|
47
|
+
>>> # Enable batching with single page processing
|
|
48
|
+
>>> config = BaseDocumentConfig(batching=True, batch_size=1)
|
|
49
|
+
|
|
50
|
+
>>> # Enable batching with multi-page batches
|
|
51
|
+
>>> config = BaseDocumentConfig(batching=True, batch_size=3)
|
|
52
|
+
"""
|
|
53
|
+
batching: bool
|
|
54
|
+
batch_size: int
|
|
55
|
+
|
|
56
|
+
class DocumentReaderInput(BaseModel):
|
|
57
|
+
"""Input schema for the DocumentReader tool."""
|
|
58
|
+
file_path: str
|
|
59
|
+
|
|
60
|
+
class BaseDocumentReaderTool(BaseTool, ABC):
|
|
61
|
+
"""Base tool to read and extract text from document files."""
|
|
62
|
+
name: str
|
|
63
|
+
description: str
|
|
64
|
+
args_schema: type[BaseModel]
|
|
65
|
+
tool_config_schema: type[BaseModel]
|
|
66
|
+
loader: PipelineLoaderType
|
|
67
|
+
def __init__(self) -> None:
|
|
68
|
+
"""Initialize the base document reader tool."""
|
|
69
|
+
def cleanup_memory(self) -> None:
|
|
70
|
+
"""Explicitly clean up memory and force garbage collection.
|
|
71
|
+
|
|
72
|
+
This method can be called after processing to minimize memory usage.
|
|
73
|
+
While it won't reset memory to exactly 0, it will free up as much
|
|
74
|
+
memory as possible by clearing internal caches and forcing garbage collection.
|
|
75
|
+
"""
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool as BaseDocumentReaderTool, DOCPROC_MISSING_MESSAGE as DOCPROC_MISSING_MESSAGE
|
|
3
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
4
|
+
|
|
5
|
+
logger: Incomplete
|
|
6
|
+
|
|
7
|
+
class DocxReaderTool(BaseDocumentReaderTool):
|
|
8
|
+
"""Tool to read and extract text from Word documents."""
|
|
9
|
+
name: str
|
|
10
|
+
description: str
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool as BaseDocumentReaderTool, DOCPROC_MISSING_MESSAGE as DOCPROC_MISSING_MESSAGE
|
|
3
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
4
|
+
|
|
5
|
+
logger: Incomplete
|
|
6
|
+
|
|
7
|
+
class ExcelReaderTool(BaseDocumentReaderTool):
|
|
8
|
+
'''Tool to read and extract content from Excel files.
|
|
9
|
+
|
|
10
|
+
This tool reads Excel files (.xlsx, .xlsm) and extracts their content using
|
|
11
|
+
the gllm_docproc loader pipeline. The content is formatted as Markdown tables
|
|
12
|
+
for easy readability.
|
|
13
|
+
|
|
14
|
+
Features:
|
|
15
|
+
- Supports .xlsx and .xlsm formats
|
|
16
|
+
- Extracts all sheets or specific sheets
|
|
17
|
+
- Formats output as Markdown tables
|
|
18
|
+
- Configurable row limits and file size limits
|
|
19
|
+
|
|
20
|
+
Examples:
|
|
21
|
+
>>> tool = ExcelReaderTool()
|
|
22
|
+
>>> result = tool._run("/tmp/data.xlsx")
|
|
23
|
+
>>> print(result)
|
|
24
|
+
'''
|
|
25
|
+
name: str
|
|
26
|
+
description: str
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool as BaseDocumentReaderTool, DOCPROC_MISSING_MESSAGE as DOCPROC_MISSING_MESSAGE
|
|
3
|
+
from aip_agents.tools.document_loader.pdf_splitter import PDFSplitter as PDFSplitter
|
|
4
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
5
|
+
|
|
6
|
+
logger: Incomplete
|
|
7
|
+
|
|
8
|
+
class PDFReaderTool(BaseDocumentReaderTool):
|
|
9
|
+
"""Tool to read and extract text from PDF files."""
|
|
10
|
+
name: str
|
|
11
|
+
description: str
|