aip-agents-binary 0.5.20__py3-none-manylinux_2_31_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aip_agents/__init__.py +65 -0
- aip_agents/__init__.pyi +19 -0
- aip_agents/a2a/__init__.py +19 -0
- aip_agents/a2a/__init__.pyi +3 -0
- aip_agents/a2a/server/__init__.py +10 -0
- aip_agents/a2a/server/__init__.pyi +4 -0
- aip_agents/a2a/server/base_executor.py +1086 -0
- aip_agents/a2a/server/base_executor.pyi +73 -0
- aip_agents/a2a/server/google_adk_executor.py +198 -0
- aip_agents/a2a/server/google_adk_executor.pyi +51 -0
- aip_agents/a2a/server/langflow_executor.py +180 -0
- aip_agents/a2a/server/langflow_executor.pyi +43 -0
- aip_agents/a2a/server/langgraph_executor.py +270 -0
- aip_agents/a2a/server/langgraph_executor.pyi +47 -0
- aip_agents/a2a/types.py +232 -0
- aip_agents/a2a/types.pyi +132 -0
- aip_agents/agent/__init__.py +27 -0
- aip_agents/agent/__init__.pyi +9 -0
- aip_agents/agent/base_agent.py +970 -0
- aip_agents/agent/base_agent.pyi +221 -0
- aip_agents/agent/base_langgraph_agent.py +2942 -0
- aip_agents/agent/base_langgraph_agent.pyi +232 -0
- aip_agents/agent/google_adk_agent.py +926 -0
- aip_agents/agent/google_adk_agent.pyi +141 -0
- aip_agents/agent/google_adk_constants.py +6 -0
- aip_agents/agent/google_adk_constants.pyi +3 -0
- aip_agents/agent/hitl/__init__.py +24 -0
- aip_agents/agent/hitl/__init__.pyi +6 -0
- aip_agents/agent/hitl/config.py +28 -0
- aip_agents/agent/hitl/config.pyi +15 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
- aip_agents/agent/hitl/manager.py +532 -0
- aip_agents/agent/hitl/manager.pyi +200 -0
- aip_agents/agent/hitl/models.py +18 -0
- aip_agents/agent/hitl/models.pyi +3 -0
- aip_agents/agent/hitl/prompt/__init__.py +9 -0
- aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
- aip_agents/agent/hitl/prompt/base.py +42 -0
- aip_agents/agent/hitl/prompt/base.pyi +24 -0
- aip_agents/agent/hitl/prompt/deferred.py +73 -0
- aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
- aip_agents/agent/hitl/registry.py +149 -0
- aip_agents/agent/hitl/registry.pyi +101 -0
- aip_agents/agent/interface.py +138 -0
- aip_agents/agent/interface.pyi +81 -0
- aip_agents/agent/interfaces.py +65 -0
- aip_agents/agent/interfaces.pyi +44 -0
- aip_agents/agent/langflow_agent.py +464 -0
- aip_agents/agent/langflow_agent.pyi +133 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.py +433 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
- aip_agents/agent/langgraph_react_agent.py +2514 -0
- aip_agents/agent/langgraph_react_agent.pyi +126 -0
- aip_agents/agent/system_instruction_context.py +34 -0
- aip_agents/agent/system_instruction_context.pyi +13 -0
- aip_agents/clients/__init__.py +10 -0
- aip_agents/clients/__init__.pyi +4 -0
- aip_agents/clients/langflow/__init__.py +10 -0
- aip_agents/clients/langflow/__init__.pyi +4 -0
- aip_agents/clients/langflow/client.py +477 -0
- aip_agents/clients/langflow/client.pyi +140 -0
- aip_agents/clients/langflow/types.py +18 -0
- aip_agents/clients/langflow/types.pyi +7 -0
- aip_agents/constants.py +23 -0
- aip_agents/constants.pyi +7 -0
- aip_agents/credentials/manager.py +132 -0
- aip_agents/examples/__init__.py +5 -0
- aip_agents/examples/__init__.pyi +0 -0
- aip_agents/examples/compare_streaming_client.py +783 -0
- aip_agents/examples/compare_streaming_client.pyi +48 -0
- aip_agents/examples/compare_streaming_server.py +142 -0
- aip_agents/examples/compare_streaming_server.pyi +18 -0
- aip_agents/examples/demo_memory_recall.py +401 -0
- aip_agents/examples/demo_memory_recall.pyi +58 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
- aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
- aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
- aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_google_adk.py +41 -0
- aip_agents/examples/hello_world_google_adk.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_stream.py +44 -0
- aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain.py +28 -0
- aip_agents/examples/hello_world_langchain.pyi +5 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream.py +36 -0
- aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_langflow_agent.py +163 -0
- aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
- aip_agents/examples/hello_world_langgraph.py +39 -0
- aip_agents/examples/hello_world_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_bosa_twitter.py +41 -0
- aip_agents/examples/hello_world_langgraph_bosa_twitter.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream.py +43 -0
- aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_model_switch_cli.py +210 -0
- aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
- aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
- aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
- aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
- aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_pii_logger.py +21 -0
- aip_agents/examples/hello_world_pii_logger.pyi +5 -0
- aip_agents/examples/hello_world_sentry.py +133 -0
- aip_agents/examples/hello_world_sentry.pyi +21 -0
- aip_agents/examples/hello_world_step_limits.py +273 -0
- aip_agents/examples/hello_world_step_limits.pyi +17 -0
- aip_agents/examples/hello_world_stock_a2a_server.py +103 -0
- aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
- aip_agents/examples/hello_world_tool_output_client.py +46 -0
- aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
- aip_agents/examples/hello_world_tool_output_server.py +114 -0
- aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
- aip_agents/examples/hitl_demo.py +724 -0
- aip_agents/examples/hitl_demo.pyi +67 -0
- aip_agents/examples/mcp_configs/configs.py +63 -0
- aip_agents/examples/mcp_servers/common.py +76 -0
- aip_agents/examples/mcp_servers/mcp_name.py +29 -0
- aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
- aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
- aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
- aip_agents/examples/mcp_servers/mcp_time.py +10 -0
- aip_agents/examples/pii_demo_langgraph_client.py +69 -0
- aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
- aip_agents/examples/pii_demo_langgraph_server.py +126 -0
- aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
- aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
- aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
- aip_agents/examples/pii_demo_multi_agent_server.py +247 -0
- aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.py +88 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
- aip_agents/examples/tools/__init__.py +27 -0
- aip_agents/examples/tools/__init__.pyi +9 -0
- aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
- aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
- aip_agents/examples/tools/adk_weather_tool.py +60 -0
- aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
- aip_agents/examples/tools/data_generator_tool.py +103 -0
- aip_agents/examples/tools/data_generator_tool.pyi +15 -0
- aip_agents/examples/tools/data_visualization_tool.py +312 -0
- aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
- aip_agents/examples/tools/image_artifact_tool.py +136 -0
- aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
- aip_agents/examples/tools/langchain_weather_tool.py +48 -0
- aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
- aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
- aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
- aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
- aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
- aip_agents/examples/tools/pii_demo_tools.py +189 -0
- aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
- aip_agents/examples/tools/random_chart_tool.py +142 -0
- aip_agents/examples/tools/random_chart_tool.pyi +20 -0
- aip_agents/examples/tools/serper_tool.py +202 -0
- aip_agents/examples/tools/serper_tool.pyi +16 -0
- aip_agents/examples/tools/stock_tools.py +82 -0
- aip_agents/examples/tools/stock_tools.pyi +36 -0
- aip_agents/examples/tools/table_generator_tool.py +167 -0
- aip_agents/examples/tools/table_generator_tool.pyi +22 -0
- aip_agents/examples/tools/time_tool.py +82 -0
- aip_agents/examples/tools/time_tool.pyi +15 -0
- aip_agents/examples/tools/weather_forecast_tool.py +38 -0
- aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
- aip_agents/executor/agent_executor.py +473 -0
- aip_agents/executor/base.py +48 -0
- aip_agents/mcp/__init__.py +1 -0
- aip_agents/mcp/__init__.pyi +0 -0
- aip_agents/mcp/client/__init__.py +14 -0
- aip_agents/mcp/client/__init__.pyi +5 -0
- aip_agents/mcp/client/base_mcp_client.py +369 -0
- aip_agents/mcp/client/base_mcp_client.pyi +148 -0
- aip_agents/mcp/client/connection_manager.py +193 -0
- aip_agents/mcp/client/connection_manager.pyi +48 -0
- aip_agents/mcp/client/google_adk/__init__.py +11 -0
- aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
- aip_agents/mcp/client/google_adk/client.py +381 -0
- aip_agents/mcp/client/google_adk/client.pyi +75 -0
- aip_agents/mcp/client/langchain/__init__.py +11 -0
- aip_agents/mcp/client/langchain/__init__.pyi +3 -0
- aip_agents/mcp/client/langchain/client.py +265 -0
- aip_agents/mcp/client/langchain/client.pyi +48 -0
- aip_agents/mcp/client/persistent_session.py +359 -0
- aip_agents/mcp/client/persistent_session.pyi +113 -0
- aip_agents/mcp/client/session_pool.py +351 -0
- aip_agents/mcp/client/session_pool.pyi +101 -0
- aip_agents/mcp/client/transports.py +215 -0
- aip_agents/mcp/client/transports.pyi +123 -0
- aip_agents/mcp/utils/__init__.py +7 -0
- aip_agents/mcp/utils/__init__.pyi +0 -0
- aip_agents/mcp/utils/config_validator.py +139 -0
- aip_agents/mcp/utils/config_validator.pyi +82 -0
- aip_agents/memory/__init__.py +14 -0
- aip_agents/memory/__init__.pyi +5 -0
- aip_agents/memory/adapters/__init__.py +10 -0
- aip_agents/memory/adapters/__init__.pyi +4 -0
- aip_agents/memory/adapters/base_adapter.py +717 -0
- aip_agents/memory/adapters/base_adapter.pyi +150 -0
- aip_agents/memory/adapters/mem0.py +84 -0
- aip_agents/memory/adapters/mem0.pyi +22 -0
- aip_agents/memory/base.py +84 -0
- aip_agents/memory/base.pyi +60 -0
- aip_agents/memory/constants.py +49 -0
- aip_agents/memory/constants.pyi +25 -0
- aip_agents/memory/factory.py +86 -0
- aip_agents/memory/factory.pyi +24 -0
- aip_agents/memory/guidance.py +20 -0
- aip_agents/memory/guidance.pyi +3 -0
- aip_agents/memory/simple_memory.py +47 -0
- aip_agents/memory/simple_memory.pyi +23 -0
- aip_agents/middleware/__init__.py +17 -0
- aip_agents/middleware/__init__.pyi +5 -0
- aip_agents/middleware/base.py +88 -0
- aip_agents/middleware/base.pyi +71 -0
- aip_agents/middleware/manager.py +128 -0
- aip_agents/middleware/manager.pyi +80 -0
- aip_agents/middleware/todolist.py +274 -0
- aip_agents/middleware/todolist.pyi +125 -0
- aip_agents/schema/__init__.py +69 -0
- aip_agents/schema/__init__.pyi +9 -0
- aip_agents/schema/a2a.py +56 -0
- aip_agents/schema/a2a.pyi +40 -0
- aip_agents/schema/agent.py +111 -0
- aip_agents/schema/agent.pyi +65 -0
- aip_agents/schema/hitl.py +157 -0
- aip_agents/schema/hitl.pyi +89 -0
- aip_agents/schema/langgraph.py +37 -0
- aip_agents/schema/langgraph.pyi +28 -0
- aip_agents/schema/model_id.py +97 -0
- aip_agents/schema/model_id.pyi +54 -0
- aip_agents/schema/step_limit.py +108 -0
- aip_agents/schema/step_limit.pyi +63 -0
- aip_agents/schema/storage.py +40 -0
- aip_agents/schema/storage.pyi +21 -0
- aip_agents/sentry/__init__.py +11 -0
- aip_agents/sentry/__init__.pyi +3 -0
- aip_agents/sentry/sentry.py +151 -0
- aip_agents/sentry/sentry.pyi +48 -0
- aip_agents/storage/__init__.py +41 -0
- aip_agents/storage/__init__.pyi +8 -0
- aip_agents/storage/base.py +85 -0
- aip_agents/storage/base.pyi +58 -0
- aip_agents/storage/clients/__init__.py +12 -0
- aip_agents/storage/clients/__init__.pyi +3 -0
- aip_agents/storage/clients/minio_client.py +318 -0
- aip_agents/storage/clients/minio_client.pyi +137 -0
- aip_agents/storage/config.py +62 -0
- aip_agents/storage/config.pyi +29 -0
- aip_agents/storage/providers/__init__.py +15 -0
- aip_agents/storage/providers/__init__.pyi +5 -0
- aip_agents/storage/providers/base.py +106 -0
- aip_agents/storage/providers/base.pyi +88 -0
- aip_agents/storage/providers/memory.py +114 -0
- aip_agents/storage/providers/memory.pyi +79 -0
- aip_agents/storage/providers/object_storage.py +214 -0
- aip_agents/storage/providers/object_storage.pyi +98 -0
- aip_agents/tools/__init__.py +33 -0
- aip_agents/tools/__init__.pyi +13 -0
- aip_agents/tools/bosa_tools.py +105 -0
- aip_agents/tools/bosa_tools.pyi +37 -0
- aip_agents/tools/browser_use/__init__.py +82 -0
- aip_agents/tools/browser_use/__init__.pyi +14 -0
- aip_agents/tools/browser_use/action_parser.py +103 -0
- aip_agents/tools/browser_use/action_parser.pyi +18 -0
- aip_agents/tools/browser_use/browser_use_tool.py +1112 -0
- aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
- aip_agents/tools/browser_use/llm_config.py +120 -0
- aip_agents/tools/browser_use/llm_config.pyi +52 -0
- aip_agents/tools/browser_use/minio_storage.py +198 -0
- aip_agents/tools/browser_use/minio_storage.pyi +109 -0
- aip_agents/tools/browser_use/schemas.py +119 -0
- aip_agents/tools/browser_use/schemas.pyi +32 -0
- aip_agents/tools/browser_use/session.py +76 -0
- aip_agents/tools/browser_use/session.pyi +4 -0
- aip_agents/tools/browser_use/session_errors.py +132 -0
- aip_agents/tools/browser_use/session_errors.pyi +53 -0
- aip_agents/tools/browser_use/steel_session_recording.py +317 -0
- aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
- aip_agents/tools/browser_use/streaming.py +813 -0
- aip_agents/tools/browser_use/streaming.pyi +81 -0
- aip_agents/tools/browser_use/structured_data_parser.py +257 -0
- aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
- aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
- aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
- aip_agents/tools/browser_use/types.py +78 -0
- aip_agents/tools/browser_use/types.pyi +45 -0
- aip_agents/tools/code_sandbox/__init__.py +26 -0
- aip_agents/tools/code_sandbox/__init__.pyi +3 -0
- aip_agents/tools/code_sandbox/constant.py +13 -0
- aip_agents/tools/code_sandbox/constant.pyi +4 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +257 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +86 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
- aip_agents/tools/constants.py +165 -0
- aip_agents/tools/constants.pyi +135 -0
- aip_agents/tools/document_loader/__init__.py +44 -0
- aip_agents/tools/document_loader/__init__.pyi +7 -0
- aip_agents/tools/document_loader/base_reader.py +302 -0
- aip_agents/tools/document_loader/base_reader.pyi +75 -0
- aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
- aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
- aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
- aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
- aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
- aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
- aip_agents/tools/document_loader/pdf_splitter.py +169 -0
- aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
- aip_agents/tools/gl_connector/__init__.py +5 -0
- aip_agents/tools/gl_connector/__init__.pyi +3 -0
- aip_agents/tools/gl_connector/tool.py +351 -0
- aip_agents/tools/gl_connector/tool.pyi +74 -0
- aip_agents/tools/memory_search/__init__.py +22 -0
- aip_agents/tools/memory_search/__init__.pyi +5 -0
- aip_agents/tools/memory_search/base.py +200 -0
- aip_agents/tools/memory_search/base.pyi +69 -0
- aip_agents/tools/memory_search/mem0.py +258 -0
- aip_agents/tools/memory_search/mem0.pyi +19 -0
- aip_agents/tools/memory_search/schema.py +48 -0
- aip_agents/tools/memory_search/schema.pyi +15 -0
- aip_agents/tools/memory_search_tool.py +26 -0
- aip_agents/tools/memory_search_tool.pyi +3 -0
- aip_agents/tools/time_tool.py +117 -0
- aip_agents/tools/time_tool.pyi +16 -0
- aip_agents/tools/tool_config_injector.py +300 -0
- aip_agents/tools/tool_config_injector.pyi +26 -0
- aip_agents/tools/web_search/__init__.py +15 -0
- aip_agents/tools/web_search/__init__.pyi +3 -0
- aip_agents/tools/web_search/serper_tool.py +187 -0
- aip_agents/tools/web_search/serper_tool.pyi +19 -0
- aip_agents/types/__init__.py +70 -0
- aip_agents/types/__init__.pyi +36 -0
- aip_agents/types/a2a_events.py +13 -0
- aip_agents/types/a2a_events.pyi +3 -0
- aip_agents/utils/__init__.py +79 -0
- aip_agents/utils/__init__.pyi +11 -0
- aip_agents/utils/a2a_connector.py +1757 -0
- aip_agents/utils/a2a_connector.pyi +146 -0
- aip_agents/utils/artifact_helpers.py +502 -0
- aip_agents/utils/artifact_helpers.pyi +203 -0
- aip_agents/utils/constants.py +22 -0
- aip_agents/utils/constants.pyi +10 -0
- aip_agents/utils/datetime/__init__.py +34 -0
- aip_agents/utils/datetime/__init__.pyi +4 -0
- aip_agents/utils/datetime/normalization.py +231 -0
- aip_agents/utils/datetime/normalization.pyi +95 -0
- aip_agents/utils/datetime/timezone.py +206 -0
- aip_agents/utils/datetime/timezone.pyi +48 -0
- aip_agents/utils/env_loader.py +27 -0
- aip_agents/utils/env_loader.pyi +10 -0
- aip_agents/utils/event_handler_registry.py +58 -0
- aip_agents/utils/event_handler_registry.pyi +23 -0
- aip_agents/utils/file_prompt_utils.py +176 -0
- aip_agents/utils/file_prompt_utils.pyi +21 -0
- aip_agents/utils/final_response_builder.py +211 -0
- aip_agents/utils/final_response_builder.pyi +34 -0
- aip_agents/utils/formatter_llm_client.py +231 -0
- aip_agents/utils/formatter_llm_client.pyi +71 -0
- aip_agents/utils/langgraph/__init__.py +19 -0
- aip_agents/utils/langgraph/__init__.pyi +3 -0
- aip_agents/utils/langgraph/converter.py +128 -0
- aip_agents/utils/langgraph/converter.pyi +49 -0
- aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
- aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1071 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
- aip_agents/utils/langgraph/tool_output_management.py +967 -0
- aip_agents/utils/langgraph/tool_output_management.pyi +292 -0
- aip_agents/utils/logger.py +195 -0
- aip_agents/utils/logger.pyi +60 -0
- aip_agents/utils/metadata/__init__.py +27 -0
- aip_agents/utils/metadata/__init__.pyi +5 -0
- aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
- aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
- aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
- aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
- aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
- aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
- aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
- aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
- aip_agents/utils/metadata/activity_narrative/context.py +49 -0
- aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
- aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
- aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
- aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
- aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
- aip_agents/utils/metadata/schemas/__init__.py +16 -0
- aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
- aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
- aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
- aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
- aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
- aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
- aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
- aip_agents/utils/metadata_helper.py +358 -0
- aip_agents/utils/metadata_helper.pyi +117 -0
- aip_agents/utils/name_preprocessor/__init__.py +17 -0
- aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
- aip_agents/utils/pii/__init__.py +25 -0
- aip_agents/utils/pii/__init__.pyi +5 -0
- aip_agents/utils/pii/pii_handler.py +397 -0
- aip_agents/utils/pii/pii_handler.pyi +96 -0
- aip_agents/utils/pii/pii_helper.py +207 -0
- aip_agents/utils/pii/pii_helper.pyi +78 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
- aip_agents/utils/reference_helper.py +273 -0
- aip_agents/utils/reference_helper.pyi +81 -0
- aip_agents/utils/sse_chunk_transformer.py +831 -0
- aip_agents/utils/sse_chunk_transformer.pyi +166 -0
- aip_agents/utils/step_limit_manager.py +265 -0
- aip_agents/utils/step_limit_manager.pyi +112 -0
- aip_agents/utils/token_usage_helper.py +156 -0
- aip_agents/utils/token_usage_helper.pyi +60 -0
- aip_agents_binary-0.5.20.dist-info/METADATA +681 -0
- aip_agents_binary-0.5.20.dist-info/RECORD +546 -0
- aip_agents_binary-0.5.20.dist-info/WHEEL +5 -0
- aip_agents_binary-0.5.20.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from enum import Enum, StrEnum
|
|
3
|
+
|
|
4
|
+
BOSA_API_BASE_URL: Incomplete
|
|
5
|
+
BOSA_API_KEY: Incomplete
|
|
6
|
+
BOSA_FETCH_MAX_RETRIES: int
|
|
7
|
+
|
|
8
|
+
class ToolType(StrEnum):
|
|
9
|
+
"""Tool types for BOSA Connector."""
|
|
10
|
+
GLLM: str
|
|
11
|
+
LANGCHAIN: str
|
|
12
|
+
|
|
13
|
+
class Action(Enum):
|
|
14
|
+
"""Actions for BOSA Connector."""
|
|
15
|
+
GITHUB: str
|
|
16
|
+
GOOGLE: str
|
|
17
|
+
GOOGLE_DRIVE: str
|
|
18
|
+
GOOGLE_MAIL: str
|
|
19
|
+
TWITTER: str
|
|
20
|
+
|
|
21
|
+
class GitHubEndpoint(Enum):
|
|
22
|
+
"""GitHub endpoints for BOSA Connector."""
|
|
23
|
+
INTEGRATIONS: str
|
|
24
|
+
USER_HAS_INTEGRATION: str
|
|
25
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
26
|
+
CREATE_ISSUE_HANDLER: str
|
|
27
|
+
GET_ISSUE_HANDLER: str
|
|
28
|
+
LIST_ISSUES: str
|
|
29
|
+
LIST_ISSUES_COMMENTS: str
|
|
30
|
+
SEARCH_ALL_ISSUES: str
|
|
31
|
+
GET_COMMITS: str
|
|
32
|
+
SEARCH_COMMITS: str
|
|
33
|
+
GET_COLLABORATORS: str
|
|
34
|
+
GET_RELEASES: str
|
|
35
|
+
GET_CONTRIBUTORS: str
|
|
36
|
+
GET_LANGUAGES: str
|
|
37
|
+
SEARCH_CONTRIBUTIONS: str
|
|
38
|
+
LIST_PULL_REQUESTS: str
|
|
39
|
+
SEARCH_PR: str
|
|
40
|
+
GET_PULL: str
|
|
41
|
+
GET_ALL_CONTRIBUTOR_COMMIT_ACTIVITIES: str
|
|
42
|
+
GET_COMMIT_ACTIVITY: str
|
|
43
|
+
GET_WEEKLY_COMMIT_COUNTS: str
|
|
44
|
+
GET_USER_CONTRIBUTION_STATISTICS: str
|
|
45
|
+
LIST_PROJECT_ITEMS: str
|
|
46
|
+
LIST_PROJECTS: str
|
|
47
|
+
|
|
48
|
+
class GoogleDriveEndpoint(Enum):
|
|
49
|
+
"""Google Drive endpoints for BOSA Connector."""
|
|
50
|
+
INTEGRATIONS: str
|
|
51
|
+
USER_HAS_INTEGRATION: str
|
|
52
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
53
|
+
SEARCH_FILES: str
|
|
54
|
+
GET_FILE: str
|
|
55
|
+
CREATE_FILE: str
|
|
56
|
+
CREATE_FOLDER: str
|
|
57
|
+
UPDATE_FILE: str
|
|
58
|
+
UPDATE_FOLDER: str
|
|
59
|
+
COPY_FILE: str
|
|
60
|
+
DELETE_FILE: str
|
|
61
|
+
SUMMARIZE_FOLDER_FILES_BY_TYPE: str
|
|
62
|
+
SUMMARIZE_TOTAL_FILES_BY_TYPE: str
|
|
63
|
+
RECENT_FILES: str
|
|
64
|
+
CREATE_PERMISSION: str
|
|
65
|
+
LIST_PERMISSIONS: str
|
|
66
|
+
GET_PERMISSION: str
|
|
67
|
+
UPDATE_PERMISSION: str
|
|
68
|
+
DELETE_PERMISSION: str
|
|
69
|
+
DOWNLOAD_FILE: str
|
|
70
|
+
|
|
71
|
+
class GoogleDocsEndpoint(Enum):
|
|
72
|
+
"""Google Docs endpoints for BOSA Connector."""
|
|
73
|
+
INTEGRATIONS: str
|
|
74
|
+
USER_HAS_INTEGRATION: str
|
|
75
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
76
|
+
GET_DOCUMENT: str
|
|
77
|
+
LIST_DOCUMENTS: str
|
|
78
|
+
CREATE_DOCUMENT: str
|
|
79
|
+
UPDATE_DOCUMENT: str
|
|
80
|
+
COPY_CONTENT: str
|
|
81
|
+
UPDATE_DOCUMENT_MARKDOWN: str
|
|
82
|
+
LIST_COMMENTS: str
|
|
83
|
+
SUMMARIZE_COMMENTS: str
|
|
84
|
+
|
|
85
|
+
class GoogleEndpoint(Enum):
|
|
86
|
+
"""Google endpoints for BOSA Connector."""
|
|
87
|
+
INTEGRATIONS: str
|
|
88
|
+
USER_HAS_INTEGRATION: str
|
|
89
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
90
|
+
USERINFO: str
|
|
91
|
+
|
|
92
|
+
class TwitterEndpoint(Enum):
|
|
93
|
+
"""Twitter endpoints for BOSA Connector."""
|
|
94
|
+
INTEGRATIONS: str
|
|
95
|
+
USER_HAS_INTEGRATION: str
|
|
96
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
97
|
+
SEARCH: str
|
|
98
|
+
GET_TWEETS: str
|
|
99
|
+
GET_THREAD: str
|
|
100
|
+
GET_USERS: str
|
|
101
|
+
|
|
102
|
+
class GoogleMailEndpoint(Enum):
|
|
103
|
+
"""Google Mail endpoints for BOSA Connector."""
|
|
104
|
+
INTEGRATIONS: str
|
|
105
|
+
USER_HAS_INTEGRATION: str
|
|
106
|
+
SUCCESS_AUTHORIZE_CALLBACK: str
|
|
107
|
+
CREATE_DRAFT: str
|
|
108
|
+
LIST_DRAFTS: str
|
|
109
|
+
SEND_DRAFT: str
|
|
110
|
+
GET_DRAFT: str
|
|
111
|
+
MODIFY_DRAFT: str
|
|
112
|
+
LIST_LABELS: str
|
|
113
|
+
LABEL_STATS: str
|
|
114
|
+
GET_LABEL_DETAILS: str
|
|
115
|
+
CREATE_LABELS: str
|
|
116
|
+
MODIFY_LABELS: str
|
|
117
|
+
DELETE_LABELS: str
|
|
118
|
+
SEND_EMAIL: str
|
|
119
|
+
LIST_EMAILS: str
|
|
120
|
+
GET_EMAIL_DETAILS: str
|
|
121
|
+
MODIFY_EMAIL: str
|
|
122
|
+
DELETE_EMAIL: str
|
|
123
|
+
TRASH_EMAIL: str
|
|
124
|
+
UNTRASH_EMAIL: str
|
|
125
|
+
LIST_THREADS: str
|
|
126
|
+
THREAD_DETAILS: str
|
|
127
|
+
MODIFY_THREAD: str
|
|
128
|
+
GET_AUTO_REPLY: str
|
|
129
|
+
SET_AUTO_REPLY: str
|
|
130
|
+
GET_ATTACHMENT: str
|
|
131
|
+
USERINFO: str
|
|
132
|
+
|
|
133
|
+
class ActionEndpointMap:
|
|
134
|
+
"""Maps Action enums to their corresponding Endpoint enums."""
|
|
135
|
+
MAP: dict[Action, type[Enum]]
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""Document loader tools package.
|
|
2
|
+
|
|
3
|
+
This package provides tools for reading and extracting content from various document formats.
|
|
4
|
+
|
|
5
|
+
Authors:
|
|
6
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
7
|
+
Douglas Raevan Faisal (douglas.raevan.faisal@gdplabs.id)
|
|
8
|
+
|
|
9
|
+
References:
|
|
10
|
+
NONE
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
from aip_agents.tools.document_loader.base_reader import ( # noqa: F401
|
|
15
|
+
DOCPROC_AVAILABLE,
|
|
16
|
+
DOCPROC_MISSING_MESSAGE,
|
|
17
|
+
BaseDocumentReaderTool,
|
|
18
|
+
DocumentReaderInput,
|
|
19
|
+
)
|
|
20
|
+
from aip_agents.tools.document_loader.docx_reader_tool import DocxReaderTool # noqa: F401
|
|
21
|
+
from aip_agents.tools.document_loader.excel_reader_tool import ExcelReaderTool # noqa: F401
|
|
22
|
+
from aip_agents.tools.document_loader.pdf_reader_tool import PDFReaderTool # noqa: F401
|
|
23
|
+
from aip_agents.tools.document_loader.pdf_splitter import PDFSplitter # noqa: F401
|
|
24
|
+
|
|
25
|
+
__all__ = [
|
|
26
|
+
"BaseDocumentReaderTool",
|
|
27
|
+
"DocumentReaderInput",
|
|
28
|
+
"PDFReaderTool",
|
|
29
|
+
"DocxReaderTool",
|
|
30
|
+
"ExcelReaderTool",
|
|
31
|
+
"PDFSplitter",
|
|
32
|
+
]
|
|
33
|
+
if not DOCPROC_AVAILABLE:
|
|
34
|
+
import warnings
|
|
35
|
+
|
|
36
|
+
warnings.warn(DOCPROC_MISSING_MESSAGE, ImportWarning)
|
|
37
|
+
except ImportError:
|
|
38
|
+
import warnings
|
|
39
|
+
|
|
40
|
+
warnings.warn(
|
|
41
|
+
"Document loader tools not available. Install gllm-docproc to enable them.",
|
|
42
|
+
ImportWarning,
|
|
43
|
+
)
|
|
44
|
+
__all__ = []
|
|
@@ -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,302 @@
|
|
|
1
|
+
"""Base document reader tool.
|
|
2
|
+
|
|
3
|
+
Authors:
|
|
4
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
5
|
+
|
|
6
|
+
References:
|
|
7
|
+
https://github.com/GDP-ADMIN/gdplabs-exploration/blob/ai-agent-app/backend/aip_agents/tools/reader/base_reader.py
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import gc
|
|
11
|
+
import os
|
|
12
|
+
from abc import ABC, abstractmethod
|
|
13
|
+
from typing import TYPE_CHECKING, Any
|
|
14
|
+
|
|
15
|
+
from langchain_core.runnables import RunnableConfig
|
|
16
|
+
from langchain_core.tools import BaseTool
|
|
17
|
+
from pydantic import BaseModel, Field
|
|
18
|
+
from unidecode import unidecode
|
|
19
|
+
|
|
20
|
+
from aip_agents.utils.logger import get_logger
|
|
21
|
+
|
|
22
|
+
logger = get_logger(__name__)
|
|
23
|
+
|
|
24
|
+
DOCPROC_MISSING_MESSAGE = (
|
|
25
|
+
"gllm-docproc is required for document loader tools but is not installed. "
|
|
26
|
+
"Install it from your internal registry to enable document processing."
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
from gllm_docproc.loader.pipeline_loader import PipelineLoader
|
|
31
|
+
except ImportError:
|
|
32
|
+
PipelineLoader = None # type: ignore[assignment]
|
|
33
|
+
|
|
34
|
+
if TYPE_CHECKING:
|
|
35
|
+
from gllm_docproc.loader.pipeline_loader import PipelineLoader as PipelineLoaderType
|
|
36
|
+
else:
|
|
37
|
+
PipelineLoaderType = Any
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class _MissingDocprocLoader:
|
|
41
|
+
"""Fallback loader that errors when document processing is attempted."""
|
|
42
|
+
|
|
43
|
+
def __init__(self) -> None:
|
|
44
|
+
self.loaders: list[object] = []
|
|
45
|
+
|
|
46
|
+
def add_loader(self, loader: object) -> None:
|
|
47
|
+
self.loaders.append(loader)
|
|
48
|
+
|
|
49
|
+
def load(self, *_args: object, **_kwargs: object) -> list[dict[str, str]]:
|
|
50
|
+
raise ImportError(DOCPROC_MISSING_MESSAGE)
|
|
51
|
+
|
|
52
|
+
def clear_cache(self) -> None:
|
|
53
|
+
self.loaders.clear()
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _build_pipeline_loader() -> "PipelineLoader":
|
|
57
|
+
if PipelineLoader is None:
|
|
58
|
+
return _MissingDocprocLoader()
|
|
59
|
+
return PipelineLoader() # type: ignore[misc]
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
DOCPROC_AVAILABLE = PipelineLoader is not None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class BaseDocumentConfig(BaseModel):
|
|
66
|
+
"""Base tool configuration schema for document processing with batching functionality.
|
|
67
|
+
|
|
68
|
+
This configuration enables page-by-page batching to optimize memory usage when
|
|
69
|
+
processing large document files. When batching is enabled, documents are processed
|
|
70
|
+
sequentially by pages rather than loading the entire document into memory at once.
|
|
71
|
+
|
|
72
|
+
Attributes:
|
|
73
|
+
batching (bool): Enable page-by-page batching to reduce memory usage.
|
|
74
|
+
When True, documents are processed page by page sequentially.
|
|
75
|
+
When False, maintains current behavior of loading entire document.
|
|
76
|
+
Defaults to False for backward compatibility.
|
|
77
|
+
batch_size (int): Number of pages to process in each batch.
|
|
78
|
+
Must be between 1 and 100 pages inclusive.
|
|
79
|
+
Larger batch sizes may use more memory but could be more efficient.
|
|
80
|
+
Smaller batch sizes use less memory but may have more overhead.
|
|
81
|
+
Defaults to 10 for balanced memory usage and efficiency.
|
|
82
|
+
|
|
83
|
+
Examples:
|
|
84
|
+
>>> # Default configuration (no batching)
|
|
85
|
+
>>> config = BaseDocumentConfig()
|
|
86
|
+
>>> print(config.batching) # False
|
|
87
|
+
>>> print(config.batch_size) # 10
|
|
88
|
+
|
|
89
|
+
>>> # Enable batching with single page processing
|
|
90
|
+
>>> config = BaseDocumentConfig(batching=True, batch_size=1)
|
|
91
|
+
|
|
92
|
+
>>> # Enable batching with multi-page batches
|
|
93
|
+
>>> config = BaseDocumentConfig(batching=True, batch_size=3)
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
batching: bool = Field(
|
|
97
|
+
default=False,
|
|
98
|
+
description="Enable page-by-page batching to reduce memory usage when processing large documents",
|
|
99
|
+
)
|
|
100
|
+
batch_size: int = Field(
|
|
101
|
+
default=10,
|
|
102
|
+
ge=1,
|
|
103
|
+
le=100,
|
|
104
|
+
description="Number of pages to process per batch (1-100 pages)",
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class DocumentReaderInput(BaseModel):
|
|
109
|
+
"""Input schema for the DocumentReader tool."""
|
|
110
|
+
|
|
111
|
+
file_path: str = Field(..., description="Path to the document file to be read")
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class BaseDocumentReaderTool(BaseTool, ABC):
|
|
115
|
+
"""Base tool to read and extract text from document files."""
|
|
116
|
+
|
|
117
|
+
name: str = "base_document_reader_tool"
|
|
118
|
+
description: str = "Read a document file and extract its text content."
|
|
119
|
+
args_schema: type[BaseModel] = DocumentReaderInput
|
|
120
|
+
tool_config_schema: type[BaseModel] = BaseDocumentConfig
|
|
121
|
+
loader: PipelineLoaderType = Field(default_factory=_build_pipeline_loader)
|
|
122
|
+
|
|
123
|
+
def __init__(self):
|
|
124
|
+
"""Initialize the base document reader tool."""
|
|
125
|
+
super().__init__()
|
|
126
|
+
self._setup_loader()
|
|
127
|
+
|
|
128
|
+
@abstractmethod
|
|
129
|
+
def _setup_loader(self):
|
|
130
|
+
"""Set up the specific loaders for each document type."""
|
|
131
|
+
pass # pragma: no cover
|
|
132
|
+
|
|
133
|
+
def _run(self, file_path: str, config: RunnableConfig | None = None) -> str:
|
|
134
|
+
"""Run with optional batching based on configuration.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
file_path: Path to the document file to be read
|
|
138
|
+
config: Optional RunnableConfig containing tool configuration
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
Extracted text content from the document
|
|
142
|
+
"""
|
|
143
|
+
tool_config = None
|
|
144
|
+
if hasattr(self, "get_tool_config"):
|
|
145
|
+
tool_config = self.get_tool_config(config)
|
|
146
|
+
|
|
147
|
+
tool_config = tool_config or BaseDocumentConfig()
|
|
148
|
+
|
|
149
|
+
logger.info(f"Batching: {tool_config.batching}, Batch size: {tool_config.batch_size}")
|
|
150
|
+
if tool_config.batching:
|
|
151
|
+
return self._run_with_batching(file_path, tool_config.batch_size)
|
|
152
|
+
else:
|
|
153
|
+
return self._run_standard(file_path)
|
|
154
|
+
|
|
155
|
+
def _run_standard(self, file_path: str) -> str:
|
|
156
|
+
"""Standard processing (existing behavior).
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
file_path: Path to the document file to be read
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
Extracted text content from the document
|
|
163
|
+
"""
|
|
164
|
+
try:
|
|
165
|
+
return self._process_single_file(file_path)
|
|
166
|
+
except Exception as e:
|
|
167
|
+
return f"Error reading file: {str(e)}"
|
|
168
|
+
|
|
169
|
+
def _run_with_batching(self, file_path: str, batch_size: int) -> str:
|
|
170
|
+
"""Process file using batching with existing loader.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
file_path: Path to the document file to be read
|
|
174
|
+
batch_size: Number of pages to process per batch
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
Extracted text content from the document
|
|
178
|
+
"""
|
|
179
|
+
try:
|
|
180
|
+
logger.info(f"Splitting file: {file_path} into {batch_size} pages per batch")
|
|
181
|
+
split_files = self._split_file(file_path, batch_size)
|
|
182
|
+
return self._process_file_batch(split_files)
|
|
183
|
+
except Exception as e:
|
|
184
|
+
return f"Error reading file: {str(e)}"
|
|
185
|
+
|
|
186
|
+
def _process_single_file(self, file_path: str) -> str:
|
|
187
|
+
"""Process a single file and return extracted text.
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
file_path: Path to the document file to be read
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
Extracted text content from the document (ASCII-normalized)
|
|
194
|
+
"""
|
|
195
|
+
try:
|
|
196
|
+
# Load and process the file
|
|
197
|
+
loaded_elements = self.loader.load(file_path)
|
|
198
|
+
full_text = "\n".join(element["text"] for element in loaded_elements)
|
|
199
|
+
|
|
200
|
+
# Apply unidecode to convert non-ASCII characters to ASCII equivalents
|
|
201
|
+
# This prevents encoding errors by transliterating characters like:
|
|
202
|
+
# "Café" -> "Cafe", "François" -> "Francois", "北京" -> "Bei Jing"
|
|
203
|
+
result = unidecode(full_text).strip()
|
|
204
|
+
|
|
205
|
+
# Explicit memory cleanup
|
|
206
|
+
del loaded_elements
|
|
207
|
+
del full_text
|
|
208
|
+
|
|
209
|
+
# Force garbage collection to free memory immediately
|
|
210
|
+
gc.collect()
|
|
211
|
+
|
|
212
|
+
return result
|
|
213
|
+
|
|
214
|
+
except Exception:
|
|
215
|
+
# Ensure cleanup even on error
|
|
216
|
+
gc.collect()
|
|
217
|
+
raise
|
|
218
|
+
|
|
219
|
+
def _process_file_batch(self, split_files: list[str]) -> str:
|
|
220
|
+
"""Process a batch of split files and return combined text.
|
|
221
|
+
|
|
222
|
+
Args:
|
|
223
|
+
split_files: List of temporary file paths to process
|
|
224
|
+
|
|
225
|
+
Returns:
|
|
226
|
+
Combined extracted text content from all files
|
|
227
|
+
"""
|
|
228
|
+
results = []
|
|
229
|
+
errors = []
|
|
230
|
+
|
|
231
|
+
for split_file in split_files:
|
|
232
|
+
try:
|
|
233
|
+
text = self._process_single_file(split_file)
|
|
234
|
+
results.append(text)
|
|
235
|
+
|
|
236
|
+
# Clear the text variable to free memory immediately
|
|
237
|
+
del text
|
|
238
|
+
|
|
239
|
+
except Exception as e:
|
|
240
|
+
error_msg = f"Error processing batch: {str(e)}"
|
|
241
|
+
errors.append(error_msg)
|
|
242
|
+
finally:
|
|
243
|
+
self._cleanup_temp_file(split_file)
|
|
244
|
+
# Force garbage collection after each file to minimize memory usage
|
|
245
|
+
gc.collect()
|
|
246
|
+
|
|
247
|
+
# Combine results
|
|
248
|
+
full_text = "\n".join(results).strip()
|
|
249
|
+
|
|
250
|
+
# Clear intermediate results to free memory
|
|
251
|
+
del results
|
|
252
|
+
gc.collect()
|
|
253
|
+
|
|
254
|
+
if errors:
|
|
255
|
+
error_summary = f"\n\nProcessing completed with {len(errors)} errors:\n" + "\n".join(errors)
|
|
256
|
+
full_text += error_summary
|
|
257
|
+
|
|
258
|
+
return full_text
|
|
259
|
+
|
|
260
|
+
def _cleanup_temp_file(self, file_path: str) -> None:
|
|
261
|
+
"""Clean up temporary file.
|
|
262
|
+
|
|
263
|
+
Args:
|
|
264
|
+
file_path: Path to the temporary file to clean up
|
|
265
|
+
"""
|
|
266
|
+
try:
|
|
267
|
+
os.unlink(file_path)
|
|
268
|
+
except OSError:
|
|
269
|
+
pass
|
|
270
|
+
|
|
271
|
+
def cleanup_memory(self) -> None:
|
|
272
|
+
"""Explicitly clean up memory and force garbage collection.
|
|
273
|
+
|
|
274
|
+
This method can be called after processing to minimize memory usage.
|
|
275
|
+
While it won't reset memory to exactly 0, it will free up as much
|
|
276
|
+
memory as possible by clearing internal caches and forcing garbage collection.
|
|
277
|
+
"""
|
|
278
|
+
# Clear any cached data in the loader if it has a cleanup method
|
|
279
|
+
if hasattr(self.loader, "clear_cache"):
|
|
280
|
+
self.loader.clear_cache()
|
|
281
|
+
|
|
282
|
+
# Force garbage collection multiple times to ensure cleanup
|
|
283
|
+
for _ in range(3):
|
|
284
|
+
gc.collect()
|
|
285
|
+
|
|
286
|
+
# Optional: Clear loader entirely and reinitialize (more aggressive)
|
|
287
|
+
# This is commented out as it may affect performance for subsequent calls
|
|
288
|
+
# self.loader = PipelineLoader()
|
|
289
|
+
# self._setup_loader()
|
|
290
|
+
|
|
291
|
+
@abstractmethod
|
|
292
|
+
def _split_file(self, file_path: str, batch_size: int) -> list[str]:
|
|
293
|
+
"""Split file into temporary files for batch processing.
|
|
294
|
+
|
|
295
|
+
Args:
|
|
296
|
+
file_path: Path to the document file to be split
|
|
297
|
+
batch_size: Number of pages to include in each split file
|
|
298
|
+
|
|
299
|
+
Returns:
|
|
300
|
+
List of temporary file paths containing the split content
|
|
301
|
+
"""
|
|
302
|
+
pass # pragma: no cover
|
|
@@ -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,68 @@
|
|
|
1
|
+
"""Base tool to read and extract text from document files.
|
|
2
|
+
|
|
3
|
+
Authors:
|
|
4
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
5
|
+
|
|
6
|
+
References:
|
|
7
|
+
https://github.com/GDP-ADMIN/gdplabs-exploration/blob/ai-agent-app/backend/aip_agents/tools/
|
|
8
|
+
reader/docx_reader_tool.py
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
try:
|
|
12
|
+
from gllm_docproc.loader.docx import DOCX2PythonLoader, PythonDOCXTableLoader
|
|
13
|
+
except ImportError as exc:
|
|
14
|
+
DOCX2PythonLoader = None # type: ignore[assignment]
|
|
15
|
+
PythonDOCXTableLoader = None # type: ignore[assignment]
|
|
16
|
+
_DOCPROC_IMPORT_ERROR: Exception | None = exc
|
|
17
|
+
else:
|
|
18
|
+
_DOCPROC_IMPORT_ERROR = None
|
|
19
|
+
|
|
20
|
+
from aip_agents.tools.document_loader.base_reader import DOCPROC_MISSING_MESSAGE, BaseDocumentReaderTool
|
|
21
|
+
from aip_agents.utils.logger import get_logger
|
|
22
|
+
|
|
23
|
+
logger = get_logger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class DocxReaderTool(BaseDocumentReaderTool):
|
|
27
|
+
"""Tool to read and extract text from Word documents."""
|
|
28
|
+
|
|
29
|
+
name: str = "docx_reader_tool"
|
|
30
|
+
description: str = "Read a Word document and extract its text content. Input should be the path to the Word file."
|
|
31
|
+
|
|
32
|
+
def _setup_loader(self):
|
|
33
|
+
if DOCX2PythonLoader is None or PythonDOCXTableLoader is None:
|
|
34
|
+
logger.warning(DOCPROC_MISSING_MESSAGE)
|
|
35
|
+
if _DOCPROC_IMPORT_ERROR is not None:
|
|
36
|
+
logger.debug("gllm_docproc import failed: %s", _DOCPROC_IMPORT_ERROR)
|
|
37
|
+
return
|
|
38
|
+
self.loader.add_loader(DOCX2PythonLoader())
|
|
39
|
+
self.loader.add_loader(PythonDOCXTableLoader())
|
|
40
|
+
|
|
41
|
+
def _run_with_batching(self, file_path: str, batch_size: int) -> str:
|
|
42
|
+
"""Run without batching until DOCX splitting is implemented.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
file_path: Path to the DOCX file to be processed
|
|
46
|
+
batch_size: Number of pages to include in each batch (not used currently)
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Extracted text content from the document
|
|
50
|
+
"""
|
|
51
|
+
# TODO: implement DOCX batching with real splits before enabling batching flow.
|
|
52
|
+
return self._run_standard(file_path)
|
|
53
|
+
|
|
54
|
+
def _split_file(self, file_path: str, batch_size: int) -> list[str]:
|
|
55
|
+
"""Split DOCX file into temporary files for batch processing.
|
|
56
|
+
|
|
57
|
+
Note: This is a placeholder implementation. DOCX batching is not
|
|
58
|
+
implemented in this feature but the method is required by the abstract base class.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
file_path: Path to the DOCX file to be split
|
|
62
|
+
batch_size: Number of pages to include in each split file
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
List of temporary file paths containing the split content
|
|
66
|
+
"""
|
|
67
|
+
# Placeholder implementation - DOCX batching not implemented in this feature
|
|
68
|
+
return [file_path]
|
|
@@ -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
|