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.
Files changed (546) hide show
  1. aip_agents/__init__.py +65 -0
  2. aip_agents/__init__.pyi +19 -0
  3. aip_agents/a2a/__init__.py +19 -0
  4. aip_agents/a2a/__init__.pyi +3 -0
  5. aip_agents/a2a/server/__init__.py +10 -0
  6. aip_agents/a2a/server/__init__.pyi +4 -0
  7. aip_agents/a2a/server/base_executor.py +1086 -0
  8. aip_agents/a2a/server/base_executor.pyi +73 -0
  9. aip_agents/a2a/server/google_adk_executor.py +198 -0
  10. aip_agents/a2a/server/google_adk_executor.pyi +51 -0
  11. aip_agents/a2a/server/langflow_executor.py +180 -0
  12. aip_agents/a2a/server/langflow_executor.pyi +43 -0
  13. aip_agents/a2a/server/langgraph_executor.py +270 -0
  14. aip_agents/a2a/server/langgraph_executor.pyi +47 -0
  15. aip_agents/a2a/types.py +232 -0
  16. aip_agents/a2a/types.pyi +132 -0
  17. aip_agents/agent/__init__.py +27 -0
  18. aip_agents/agent/__init__.pyi +9 -0
  19. aip_agents/agent/base_agent.py +970 -0
  20. aip_agents/agent/base_agent.pyi +221 -0
  21. aip_agents/agent/base_langgraph_agent.py +2942 -0
  22. aip_agents/agent/base_langgraph_agent.pyi +232 -0
  23. aip_agents/agent/google_adk_agent.py +926 -0
  24. aip_agents/agent/google_adk_agent.pyi +141 -0
  25. aip_agents/agent/google_adk_constants.py +6 -0
  26. aip_agents/agent/google_adk_constants.pyi +3 -0
  27. aip_agents/agent/hitl/__init__.py +24 -0
  28. aip_agents/agent/hitl/__init__.pyi +6 -0
  29. aip_agents/agent/hitl/config.py +28 -0
  30. aip_agents/agent/hitl/config.pyi +15 -0
  31. aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
  32. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
  33. aip_agents/agent/hitl/manager.py +532 -0
  34. aip_agents/agent/hitl/manager.pyi +200 -0
  35. aip_agents/agent/hitl/models.py +18 -0
  36. aip_agents/agent/hitl/models.pyi +3 -0
  37. aip_agents/agent/hitl/prompt/__init__.py +9 -0
  38. aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
  39. aip_agents/agent/hitl/prompt/base.py +42 -0
  40. aip_agents/agent/hitl/prompt/base.pyi +24 -0
  41. aip_agents/agent/hitl/prompt/deferred.py +73 -0
  42. aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
  43. aip_agents/agent/hitl/registry.py +149 -0
  44. aip_agents/agent/hitl/registry.pyi +101 -0
  45. aip_agents/agent/interface.py +138 -0
  46. aip_agents/agent/interface.pyi +81 -0
  47. aip_agents/agent/interfaces.py +65 -0
  48. aip_agents/agent/interfaces.pyi +44 -0
  49. aip_agents/agent/langflow_agent.py +464 -0
  50. aip_agents/agent/langflow_agent.pyi +133 -0
  51. aip_agents/agent/langgraph_memory_enhancer_agent.py +433 -0
  52. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
  53. aip_agents/agent/langgraph_react_agent.py +2514 -0
  54. aip_agents/agent/langgraph_react_agent.pyi +126 -0
  55. aip_agents/agent/system_instruction_context.py +34 -0
  56. aip_agents/agent/system_instruction_context.pyi +13 -0
  57. aip_agents/clients/__init__.py +10 -0
  58. aip_agents/clients/__init__.pyi +4 -0
  59. aip_agents/clients/langflow/__init__.py +10 -0
  60. aip_agents/clients/langflow/__init__.pyi +4 -0
  61. aip_agents/clients/langflow/client.py +477 -0
  62. aip_agents/clients/langflow/client.pyi +140 -0
  63. aip_agents/clients/langflow/types.py +18 -0
  64. aip_agents/clients/langflow/types.pyi +7 -0
  65. aip_agents/constants.py +23 -0
  66. aip_agents/constants.pyi +7 -0
  67. aip_agents/credentials/manager.py +132 -0
  68. aip_agents/examples/__init__.py +5 -0
  69. aip_agents/examples/__init__.pyi +0 -0
  70. aip_agents/examples/compare_streaming_client.py +783 -0
  71. aip_agents/examples/compare_streaming_client.pyi +48 -0
  72. aip_agents/examples/compare_streaming_server.py +142 -0
  73. aip_agents/examples/compare_streaming_server.pyi +18 -0
  74. aip_agents/examples/demo_memory_recall.py +401 -0
  75. aip_agents/examples/demo_memory_recall.pyi +58 -0
  76. aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
  77. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  78. aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
  79. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  80. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
  81. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  82. aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
  83. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  84. aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
  85. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  86. aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
  87. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  88. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
  89. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  90. aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
  91. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  92. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
  93. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  94. aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
  95. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  96. aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
  97. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  98. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
  99. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  100. aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
  101. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  102. aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
  103. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  104. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
  105. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  106. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
  107. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  108. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
  109. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  110. aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
  111. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  112. aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
  113. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  114. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
  115. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  116. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
  117. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  118. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
  119. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  120. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
  121. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  122. aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
  123. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  124. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
  125. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  126. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
  127. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  128. aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
  129. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  130. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
  131. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  132. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
  133. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  134. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
  135. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  136. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
  137. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  138. aip_agents/examples/hello_world_google_adk.py +41 -0
  139. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  140. aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
  141. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  142. aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
  143. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  144. aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
  145. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  146. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
  147. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  148. aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
  149. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  150. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
  151. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  152. aip_agents/examples/hello_world_google_adk_stream.py +44 -0
  153. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  154. aip_agents/examples/hello_world_langchain.py +28 -0
  155. aip_agents/examples/hello_world_langchain.pyi +5 -0
  156. aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
  157. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  158. aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
  159. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  160. aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
  161. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  162. aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
  163. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  164. aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
  165. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  166. aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
  167. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  168. aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
  169. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  170. aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
  171. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  172. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
  173. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  174. aip_agents/examples/hello_world_langchain_stream.py +36 -0
  175. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  176. aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
  177. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  178. aip_agents/examples/hello_world_langflow_agent.py +163 -0
  179. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  180. aip_agents/examples/hello_world_langgraph.py +39 -0
  181. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  182. aip_agents/examples/hello_world_langgraph_bosa_twitter.py +41 -0
  183. aip_agents/examples/hello_world_langgraph_bosa_twitter.pyi +5 -0
  184. aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
  185. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  186. aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
  187. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  188. aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
  189. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  190. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
  191. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  192. aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
  193. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  194. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
  195. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  196. aip_agents/examples/hello_world_langgraph_stream.py +43 -0
  197. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  198. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
  199. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  200. aip_agents/examples/hello_world_model_switch_cli.py +210 -0
  201. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  202. aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
  203. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  204. aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
  205. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  206. aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
  207. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  208. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
  209. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  210. aip_agents/examples/hello_world_pii_logger.py +21 -0
  211. aip_agents/examples/hello_world_pii_logger.pyi +5 -0
  212. aip_agents/examples/hello_world_sentry.py +133 -0
  213. aip_agents/examples/hello_world_sentry.pyi +21 -0
  214. aip_agents/examples/hello_world_step_limits.py +273 -0
  215. aip_agents/examples/hello_world_step_limits.pyi +17 -0
  216. aip_agents/examples/hello_world_stock_a2a_server.py +103 -0
  217. aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
  218. aip_agents/examples/hello_world_tool_output_client.py +46 -0
  219. aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
  220. aip_agents/examples/hello_world_tool_output_server.py +114 -0
  221. aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
  222. aip_agents/examples/hitl_demo.py +724 -0
  223. aip_agents/examples/hitl_demo.pyi +67 -0
  224. aip_agents/examples/mcp_configs/configs.py +63 -0
  225. aip_agents/examples/mcp_servers/common.py +76 -0
  226. aip_agents/examples/mcp_servers/mcp_name.py +29 -0
  227. aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
  228. aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
  229. aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
  230. aip_agents/examples/mcp_servers/mcp_time.py +10 -0
  231. aip_agents/examples/pii_demo_langgraph_client.py +69 -0
  232. aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
  233. aip_agents/examples/pii_demo_langgraph_server.py +126 -0
  234. aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
  235. aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
  236. aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
  237. aip_agents/examples/pii_demo_multi_agent_server.py +247 -0
  238. aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
  239. aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
  240. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
  241. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +88 -0
  242. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
  243. aip_agents/examples/tools/__init__.py +27 -0
  244. aip_agents/examples/tools/__init__.pyi +9 -0
  245. aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
  246. aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
  247. aip_agents/examples/tools/adk_weather_tool.py +60 -0
  248. aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
  249. aip_agents/examples/tools/data_generator_tool.py +103 -0
  250. aip_agents/examples/tools/data_generator_tool.pyi +15 -0
  251. aip_agents/examples/tools/data_visualization_tool.py +312 -0
  252. aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
  253. aip_agents/examples/tools/image_artifact_tool.py +136 -0
  254. aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
  255. aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
  256. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
  257. aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
  258. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
  259. aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
  260. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
  261. aip_agents/examples/tools/langchain_weather_tool.py +48 -0
  262. aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
  263. aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
  264. aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
  265. aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
  266. aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
  267. aip_agents/examples/tools/pii_demo_tools.py +189 -0
  268. aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
  269. aip_agents/examples/tools/random_chart_tool.py +142 -0
  270. aip_agents/examples/tools/random_chart_tool.pyi +20 -0
  271. aip_agents/examples/tools/serper_tool.py +202 -0
  272. aip_agents/examples/tools/serper_tool.pyi +16 -0
  273. aip_agents/examples/tools/stock_tools.py +82 -0
  274. aip_agents/examples/tools/stock_tools.pyi +36 -0
  275. aip_agents/examples/tools/table_generator_tool.py +167 -0
  276. aip_agents/examples/tools/table_generator_tool.pyi +22 -0
  277. aip_agents/examples/tools/time_tool.py +82 -0
  278. aip_agents/examples/tools/time_tool.pyi +15 -0
  279. aip_agents/examples/tools/weather_forecast_tool.py +38 -0
  280. aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
  281. aip_agents/executor/agent_executor.py +473 -0
  282. aip_agents/executor/base.py +48 -0
  283. aip_agents/mcp/__init__.py +1 -0
  284. aip_agents/mcp/__init__.pyi +0 -0
  285. aip_agents/mcp/client/__init__.py +14 -0
  286. aip_agents/mcp/client/__init__.pyi +5 -0
  287. aip_agents/mcp/client/base_mcp_client.py +369 -0
  288. aip_agents/mcp/client/base_mcp_client.pyi +148 -0
  289. aip_agents/mcp/client/connection_manager.py +193 -0
  290. aip_agents/mcp/client/connection_manager.pyi +48 -0
  291. aip_agents/mcp/client/google_adk/__init__.py +11 -0
  292. aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
  293. aip_agents/mcp/client/google_adk/client.py +381 -0
  294. aip_agents/mcp/client/google_adk/client.pyi +75 -0
  295. aip_agents/mcp/client/langchain/__init__.py +11 -0
  296. aip_agents/mcp/client/langchain/__init__.pyi +3 -0
  297. aip_agents/mcp/client/langchain/client.py +265 -0
  298. aip_agents/mcp/client/langchain/client.pyi +48 -0
  299. aip_agents/mcp/client/persistent_session.py +359 -0
  300. aip_agents/mcp/client/persistent_session.pyi +113 -0
  301. aip_agents/mcp/client/session_pool.py +351 -0
  302. aip_agents/mcp/client/session_pool.pyi +101 -0
  303. aip_agents/mcp/client/transports.py +215 -0
  304. aip_agents/mcp/client/transports.pyi +123 -0
  305. aip_agents/mcp/utils/__init__.py +7 -0
  306. aip_agents/mcp/utils/__init__.pyi +0 -0
  307. aip_agents/mcp/utils/config_validator.py +139 -0
  308. aip_agents/mcp/utils/config_validator.pyi +82 -0
  309. aip_agents/memory/__init__.py +14 -0
  310. aip_agents/memory/__init__.pyi +5 -0
  311. aip_agents/memory/adapters/__init__.py +10 -0
  312. aip_agents/memory/adapters/__init__.pyi +4 -0
  313. aip_agents/memory/adapters/base_adapter.py +717 -0
  314. aip_agents/memory/adapters/base_adapter.pyi +150 -0
  315. aip_agents/memory/adapters/mem0.py +84 -0
  316. aip_agents/memory/adapters/mem0.pyi +22 -0
  317. aip_agents/memory/base.py +84 -0
  318. aip_agents/memory/base.pyi +60 -0
  319. aip_agents/memory/constants.py +49 -0
  320. aip_agents/memory/constants.pyi +25 -0
  321. aip_agents/memory/factory.py +86 -0
  322. aip_agents/memory/factory.pyi +24 -0
  323. aip_agents/memory/guidance.py +20 -0
  324. aip_agents/memory/guidance.pyi +3 -0
  325. aip_agents/memory/simple_memory.py +47 -0
  326. aip_agents/memory/simple_memory.pyi +23 -0
  327. aip_agents/middleware/__init__.py +17 -0
  328. aip_agents/middleware/__init__.pyi +5 -0
  329. aip_agents/middleware/base.py +88 -0
  330. aip_agents/middleware/base.pyi +71 -0
  331. aip_agents/middleware/manager.py +128 -0
  332. aip_agents/middleware/manager.pyi +80 -0
  333. aip_agents/middleware/todolist.py +274 -0
  334. aip_agents/middleware/todolist.pyi +125 -0
  335. aip_agents/schema/__init__.py +69 -0
  336. aip_agents/schema/__init__.pyi +9 -0
  337. aip_agents/schema/a2a.py +56 -0
  338. aip_agents/schema/a2a.pyi +40 -0
  339. aip_agents/schema/agent.py +111 -0
  340. aip_agents/schema/agent.pyi +65 -0
  341. aip_agents/schema/hitl.py +157 -0
  342. aip_agents/schema/hitl.pyi +89 -0
  343. aip_agents/schema/langgraph.py +37 -0
  344. aip_agents/schema/langgraph.pyi +28 -0
  345. aip_agents/schema/model_id.py +97 -0
  346. aip_agents/schema/model_id.pyi +54 -0
  347. aip_agents/schema/step_limit.py +108 -0
  348. aip_agents/schema/step_limit.pyi +63 -0
  349. aip_agents/schema/storage.py +40 -0
  350. aip_agents/schema/storage.pyi +21 -0
  351. aip_agents/sentry/__init__.py +11 -0
  352. aip_agents/sentry/__init__.pyi +3 -0
  353. aip_agents/sentry/sentry.py +151 -0
  354. aip_agents/sentry/sentry.pyi +48 -0
  355. aip_agents/storage/__init__.py +41 -0
  356. aip_agents/storage/__init__.pyi +8 -0
  357. aip_agents/storage/base.py +85 -0
  358. aip_agents/storage/base.pyi +58 -0
  359. aip_agents/storage/clients/__init__.py +12 -0
  360. aip_agents/storage/clients/__init__.pyi +3 -0
  361. aip_agents/storage/clients/minio_client.py +318 -0
  362. aip_agents/storage/clients/minio_client.pyi +137 -0
  363. aip_agents/storage/config.py +62 -0
  364. aip_agents/storage/config.pyi +29 -0
  365. aip_agents/storage/providers/__init__.py +15 -0
  366. aip_agents/storage/providers/__init__.pyi +5 -0
  367. aip_agents/storage/providers/base.py +106 -0
  368. aip_agents/storage/providers/base.pyi +88 -0
  369. aip_agents/storage/providers/memory.py +114 -0
  370. aip_agents/storage/providers/memory.pyi +79 -0
  371. aip_agents/storage/providers/object_storage.py +214 -0
  372. aip_agents/storage/providers/object_storage.pyi +98 -0
  373. aip_agents/tools/__init__.py +33 -0
  374. aip_agents/tools/__init__.pyi +13 -0
  375. aip_agents/tools/bosa_tools.py +105 -0
  376. aip_agents/tools/bosa_tools.pyi +37 -0
  377. aip_agents/tools/browser_use/__init__.py +82 -0
  378. aip_agents/tools/browser_use/__init__.pyi +14 -0
  379. aip_agents/tools/browser_use/action_parser.py +103 -0
  380. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  381. aip_agents/tools/browser_use/browser_use_tool.py +1112 -0
  382. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  383. aip_agents/tools/browser_use/llm_config.py +120 -0
  384. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  385. aip_agents/tools/browser_use/minio_storage.py +198 -0
  386. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  387. aip_agents/tools/browser_use/schemas.py +119 -0
  388. aip_agents/tools/browser_use/schemas.pyi +32 -0
  389. aip_agents/tools/browser_use/session.py +76 -0
  390. aip_agents/tools/browser_use/session.pyi +4 -0
  391. aip_agents/tools/browser_use/session_errors.py +132 -0
  392. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  393. aip_agents/tools/browser_use/steel_session_recording.py +317 -0
  394. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  395. aip_agents/tools/browser_use/streaming.py +813 -0
  396. aip_agents/tools/browser_use/streaming.pyi +81 -0
  397. aip_agents/tools/browser_use/structured_data_parser.py +257 -0
  398. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  399. aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
  400. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  401. aip_agents/tools/browser_use/types.py +78 -0
  402. aip_agents/tools/browser_use/types.pyi +45 -0
  403. aip_agents/tools/code_sandbox/__init__.py +26 -0
  404. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  405. aip_agents/tools/code_sandbox/constant.py +13 -0
  406. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  407. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +257 -0
  408. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +86 -0
  409. aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
  410. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  411. aip_agents/tools/constants.py +165 -0
  412. aip_agents/tools/constants.pyi +135 -0
  413. aip_agents/tools/document_loader/__init__.py +44 -0
  414. aip_agents/tools/document_loader/__init__.pyi +7 -0
  415. aip_agents/tools/document_loader/base_reader.py +302 -0
  416. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  417. aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
  418. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  419. aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
  420. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  421. aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
  422. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  423. aip_agents/tools/document_loader/pdf_splitter.py +169 -0
  424. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  425. aip_agents/tools/gl_connector/__init__.py +5 -0
  426. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  427. aip_agents/tools/gl_connector/tool.py +351 -0
  428. aip_agents/tools/gl_connector/tool.pyi +74 -0
  429. aip_agents/tools/memory_search/__init__.py +22 -0
  430. aip_agents/tools/memory_search/__init__.pyi +5 -0
  431. aip_agents/tools/memory_search/base.py +200 -0
  432. aip_agents/tools/memory_search/base.pyi +69 -0
  433. aip_agents/tools/memory_search/mem0.py +258 -0
  434. aip_agents/tools/memory_search/mem0.pyi +19 -0
  435. aip_agents/tools/memory_search/schema.py +48 -0
  436. aip_agents/tools/memory_search/schema.pyi +15 -0
  437. aip_agents/tools/memory_search_tool.py +26 -0
  438. aip_agents/tools/memory_search_tool.pyi +3 -0
  439. aip_agents/tools/time_tool.py +117 -0
  440. aip_agents/tools/time_tool.pyi +16 -0
  441. aip_agents/tools/tool_config_injector.py +300 -0
  442. aip_agents/tools/tool_config_injector.pyi +26 -0
  443. aip_agents/tools/web_search/__init__.py +15 -0
  444. aip_agents/tools/web_search/__init__.pyi +3 -0
  445. aip_agents/tools/web_search/serper_tool.py +187 -0
  446. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  447. aip_agents/types/__init__.py +70 -0
  448. aip_agents/types/__init__.pyi +36 -0
  449. aip_agents/types/a2a_events.py +13 -0
  450. aip_agents/types/a2a_events.pyi +3 -0
  451. aip_agents/utils/__init__.py +79 -0
  452. aip_agents/utils/__init__.pyi +11 -0
  453. aip_agents/utils/a2a_connector.py +1757 -0
  454. aip_agents/utils/a2a_connector.pyi +146 -0
  455. aip_agents/utils/artifact_helpers.py +502 -0
  456. aip_agents/utils/artifact_helpers.pyi +203 -0
  457. aip_agents/utils/constants.py +22 -0
  458. aip_agents/utils/constants.pyi +10 -0
  459. aip_agents/utils/datetime/__init__.py +34 -0
  460. aip_agents/utils/datetime/__init__.pyi +4 -0
  461. aip_agents/utils/datetime/normalization.py +231 -0
  462. aip_agents/utils/datetime/normalization.pyi +95 -0
  463. aip_agents/utils/datetime/timezone.py +206 -0
  464. aip_agents/utils/datetime/timezone.pyi +48 -0
  465. aip_agents/utils/env_loader.py +27 -0
  466. aip_agents/utils/env_loader.pyi +10 -0
  467. aip_agents/utils/event_handler_registry.py +58 -0
  468. aip_agents/utils/event_handler_registry.pyi +23 -0
  469. aip_agents/utils/file_prompt_utils.py +176 -0
  470. aip_agents/utils/file_prompt_utils.pyi +21 -0
  471. aip_agents/utils/final_response_builder.py +211 -0
  472. aip_agents/utils/final_response_builder.pyi +34 -0
  473. aip_agents/utils/formatter_llm_client.py +231 -0
  474. aip_agents/utils/formatter_llm_client.pyi +71 -0
  475. aip_agents/utils/langgraph/__init__.py +19 -0
  476. aip_agents/utils/langgraph/__init__.pyi +3 -0
  477. aip_agents/utils/langgraph/converter.py +128 -0
  478. aip_agents/utils/langgraph/converter.pyi +49 -0
  479. aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
  480. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  481. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
  482. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  483. aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
  484. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  485. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1071 -0
  486. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  487. aip_agents/utils/langgraph/tool_output_management.py +967 -0
  488. aip_agents/utils/langgraph/tool_output_management.pyi +292 -0
  489. aip_agents/utils/logger.py +195 -0
  490. aip_agents/utils/logger.pyi +60 -0
  491. aip_agents/utils/metadata/__init__.py +27 -0
  492. aip_agents/utils/metadata/__init__.pyi +5 -0
  493. aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
  494. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  495. aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
  496. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  497. aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
  498. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  499. aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
  500. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  501. aip_agents/utils/metadata/activity_narrative/context.py +49 -0
  502. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  503. aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
  504. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  505. aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
  506. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  507. aip_agents/utils/metadata/schemas/__init__.py +16 -0
  508. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  509. aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
  510. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  511. aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
  512. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  513. aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
  514. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  515. aip_agents/utils/metadata_helper.py +358 -0
  516. aip_agents/utils/metadata_helper.pyi +117 -0
  517. aip_agents/utils/name_preprocessor/__init__.py +17 -0
  518. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  519. aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
  520. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  521. aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
  522. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  523. aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
  524. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  525. aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
  526. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  527. aip_agents/utils/pii/__init__.py +25 -0
  528. aip_agents/utils/pii/__init__.pyi +5 -0
  529. aip_agents/utils/pii/pii_handler.py +397 -0
  530. aip_agents/utils/pii/pii_handler.pyi +96 -0
  531. aip_agents/utils/pii/pii_helper.py +207 -0
  532. aip_agents/utils/pii/pii_helper.pyi +78 -0
  533. aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
  534. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  535. aip_agents/utils/reference_helper.py +273 -0
  536. aip_agents/utils/reference_helper.pyi +81 -0
  537. aip_agents/utils/sse_chunk_transformer.py +831 -0
  538. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  539. aip_agents/utils/step_limit_manager.py +265 -0
  540. aip_agents/utils/step_limit_manager.pyi +112 -0
  541. aip_agents/utils/token_usage_helper.py +156 -0
  542. aip_agents/utils/token_usage_helper.pyi +60 -0
  543. aip_agents_binary-0.5.20.dist-info/METADATA +681 -0
  544. aip_agents_binary-0.5.20.dist-info/RECORD +546 -0
  545. aip_agents_binary-0.5.20.dist-info/WHEEL +5 -0
  546. 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