aip-agents-binary 0.5.14__py3-none-any.whl → 0.5.16__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. aip_agents/__init__.pyi +19 -0
  2. aip_agents/a2a/__init__.pyi +3 -0
  3. aip_agents/a2a/server/__init__.pyi +4 -0
  4. aip_agents/a2a/server/base_executor.pyi +73 -0
  5. aip_agents/a2a/server/google_adk_executor.pyi +51 -0
  6. aip_agents/a2a/server/langflow_executor.pyi +43 -0
  7. aip_agents/a2a/server/langgraph_executor.pyi +47 -0
  8. aip_agents/a2a/types.pyi +132 -0
  9. aip_agents/agent/__init__.pyi +9 -0
  10. aip_agents/agent/base_agent.pyi +221 -0
  11. aip_agents/agent/base_langgraph_agent.pyi +232 -0
  12. aip_agents/agent/google_adk_agent.pyi +141 -0
  13. aip_agents/agent/google_adk_constants.pyi +3 -0
  14. aip_agents/agent/hitl/__init__.pyi +6 -0
  15. aip_agents/agent/hitl/config.pyi +15 -0
  16. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
  17. aip_agents/agent/hitl/manager.pyi +200 -0
  18. aip_agents/agent/hitl/models.pyi +3 -0
  19. aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
  20. aip_agents/agent/hitl/prompt/base.pyi +24 -0
  21. aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
  22. aip_agents/agent/hitl/registry.pyi +101 -0
  23. aip_agents/agent/interface.pyi +81 -0
  24. aip_agents/agent/interfaces.pyi +44 -0
  25. aip_agents/agent/langflow_agent.pyi +133 -0
  26. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
  27. aip_agents/agent/langgraph_react_agent.pyi +126 -0
  28. aip_agents/agent/system_instruction_context.pyi +13 -0
  29. aip_agents/clients/__init__.pyi +4 -0
  30. aip_agents/clients/langflow/__init__.pyi +4 -0
  31. aip_agents/clients/langflow/client.pyi +140 -0
  32. aip_agents/clients/langflow/types.pyi +7 -0
  33. aip_agents/constants.pyi +7 -0
  34. aip_agents/examples/__init__.pyi +0 -0
  35. aip_agents/examples/compare_streaming_client.pyi +48 -0
  36. aip_agents/examples/compare_streaming_server.pyi +18 -0
  37. aip_agents/examples/demo_memory_recall.pyi +58 -0
  38. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  39. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  40. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  41. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  42. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  43. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  44. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  45. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  46. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  47. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  48. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  49. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  50. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  51. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  52. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  53. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  54. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  55. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  56. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  57. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  58. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  59. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  60. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  61. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  62. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  63. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  64. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  65. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  66. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  67. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  68. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  69. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  70. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  71. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  72. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  73. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  74. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  75. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  76. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  77. aip_agents/examples/hello_world_langchain.pyi +5 -0
  78. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  79. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  80. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  81. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  82. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  83. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  84. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  85. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  86. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  87. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  88. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  89. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  90. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  91. aip_agents/examples/hello_world_langgraph_bosa_twitter.pyi +5 -0
  92. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  93. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  94. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  95. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  96. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  97. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  98. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  99. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  100. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  101. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  102. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  103. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  104. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  105. aip_agents/examples/hello_world_pii_logger.pyi +5 -0
  106. aip_agents/examples/hello_world_sentry.pyi +21 -0
  107. aip_agents/examples/hello_world_step_limits.pyi +17 -0
  108. aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
  109. aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
  110. aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
  111. aip_agents/examples/hitl_demo.pyi +67 -0
  112. aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
  113. aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
  114. aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
  115. aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
  116. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
  117. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
  118. aip_agents/examples/tools/__init__.pyi +9 -0
  119. aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
  120. aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
  121. aip_agents/examples/tools/data_generator_tool.pyi +15 -0
  122. aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
  123. aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
  124. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
  125. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
  126. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
  127. aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
  128. aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
  129. aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
  130. aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
  131. aip_agents/examples/tools/random_chart_tool.pyi +20 -0
  132. aip_agents/examples/tools/serper_tool.pyi +16 -0
  133. aip_agents/examples/tools/stock_tools.pyi +36 -0
  134. aip_agents/examples/tools/table_generator_tool.pyi +22 -0
  135. aip_agents/examples/tools/time_tool.pyi +15 -0
  136. aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
  137. aip_agents/mcp/__init__.pyi +0 -0
  138. aip_agents/mcp/client/__init__.pyi +5 -0
  139. aip_agents/mcp/client/base_mcp_client.pyi +148 -0
  140. aip_agents/mcp/client/connection_manager.pyi +48 -0
  141. aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
  142. aip_agents/mcp/client/google_adk/client.pyi +75 -0
  143. aip_agents/mcp/client/langchain/__init__.pyi +3 -0
  144. aip_agents/mcp/client/langchain/client.pyi +48 -0
  145. aip_agents/mcp/client/persistent_session.pyi +113 -0
  146. aip_agents/mcp/client/session_pool.pyi +101 -0
  147. aip_agents/mcp/client/transports.pyi +123 -0
  148. aip_agents/mcp/utils/__init__.pyi +0 -0
  149. aip_agents/mcp/utils/config_validator.pyi +82 -0
  150. aip_agents/memory/__init__.pyi +5 -0
  151. aip_agents/memory/adapters/__init__.pyi +4 -0
  152. aip_agents/memory/adapters/base_adapter.pyi +150 -0
  153. aip_agents/memory/adapters/mem0.pyi +22 -0
  154. aip_agents/memory/base.pyi +60 -0
  155. aip_agents/memory/constants.pyi +25 -0
  156. aip_agents/memory/factory.pyi +24 -0
  157. aip_agents/memory/guidance.pyi +3 -0
  158. aip_agents/memory/simple_memory.pyi +23 -0
  159. aip_agents/middleware/__init__.pyi +5 -0
  160. aip_agents/middleware/base.pyi +71 -0
  161. aip_agents/middleware/manager.pyi +80 -0
  162. aip_agents/middleware/todolist.pyi +125 -0
  163. aip_agents/schema/__init__.pyi +9 -0
  164. aip_agents/schema/a2a.pyi +40 -0
  165. aip_agents/schema/agent.pyi +65 -0
  166. aip_agents/schema/hitl.pyi +89 -0
  167. aip_agents/schema/langgraph.pyi +28 -0
  168. aip_agents/schema/model_id.pyi +54 -0
  169. aip_agents/schema/step_limit.pyi +63 -0
  170. aip_agents/schema/storage.pyi +21 -0
  171. aip_agents/sentry/__init__.pyi +3 -0
  172. aip_agents/sentry/sentry.pyi +48 -0
  173. aip_agents/storage/__init__.pyi +8 -0
  174. aip_agents/storage/base.pyi +58 -0
  175. aip_agents/storage/clients/__init__.pyi +3 -0
  176. aip_agents/storage/clients/minio_client.pyi +137 -0
  177. aip_agents/storage/config.pyi +29 -0
  178. aip_agents/storage/providers/__init__.pyi +5 -0
  179. aip_agents/storage/providers/base.pyi +88 -0
  180. aip_agents/storage/providers/memory.pyi +79 -0
  181. aip_agents/storage/providers/object_storage.pyi +98 -0
  182. aip_agents/tools/__init__.pyi +4 -0
  183. aip_agents/tools/bosa_tools.pyi +37 -0
  184. aip_agents/tools/browser_use/__init__.pyi +14 -0
  185. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  186. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  187. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  188. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  189. aip_agents/tools/browser_use/schemas.pyi +32 -0
  190. aip_agents/tools/browser_use/session.pyi +4 -0
  191. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  192. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  193. aip_agents/tools/browser_use/streaming.pyi +81 -0
  194. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  195. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  196. aip_agents/tools/browser_use/types.pyi +45 -0
  197. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  198. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  199. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +86 -0
  200. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  201. aip_agents/tools/constants.pyi +135 -0
  202. aip_agents/tools/document_loader/__init__.py +8 -1
  203. aip_agents/tools/document_loader/__init__.pyi +7 -0
  204. aip_agents/tools/document_loader/base_reader.py +42 -2
  205. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  206. aip_agents/tools/document_loader/docx_reader_tool.py +17 -2
  207. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  208. aip_agents/tools/document_loader/excel_reader_tool.py +14 -3
  209. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  210. aip_agents/tools/document_loader/pdf_reader_tool.py +17 -5
  211. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  212. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  213. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  214. aip_agents/tools/gl_connector/tool.pyi +74 -0
  215. aip_agents/tools/memory_search/__init__.pyi +5 -0
  216. aip_agents/tools/memory_search/base.pyi +69 -0
  217. aip_agents/tools/memory_search/mem0.pyi +19 -0
  218. aip_agents/tools/memory_search/schema.pyi +15 -0
  219. aip_agents/tools/memory_search_tool.pyi +3 -0
  220. aip_agents/tools/tool_config_injector.pyi +26 -0
  221. aip_agents/tools/web_search/__init__.pyi +3 -0
  222. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  223. aip_agents/types/__init__.pyi +36 -0
  224. aip_agents/types/a2a_events.pyi +3 -0
  225. aip_agents/utils/__init__.pyi +11 -0
  226. aip_agents/utils/a2a_connector.pyi +146 -0
  227. aip_agents/utils/artifact_helpers.pyi +203 -0
  228. aip_agents/utils/constants.pyi +10 -0
  229. aip_agents/utils/datetime/__init__.pyi +4 -0
  230. aip_agents/utils/datetime/normalization.pyi +95 -0
  231. aip_agents/utils/datetime/timezone.pyi +48 -0
  232. aip_agents/utils/env_loader.pyi +10 -0
  233. aip_agents/utils/event_handler_registry.pyi +23 -0
  234. aip_agents/utils/file_prompt_utils.pyi +21 -0
  235. aip_agents/utils/final_response_builder.pyi +34 -0
  236. aip_agents/utils/formatter_llm_client.pyi +71 -0
  237. aip_agents/utils/langgraph/__init__.pyi +3 -0
  238. aip_agents/utils/langgraph/converter.pyi +49 -0
  239. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  240. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  241. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  242. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  243. aip_agents/utils/langgraph/tool_output_management.pyi +292 -0
  244. aip_agents/utils/logger.pyi +60 -0
  245. aip_agents/utils/metadata/__init__.pyi +5 -0
  246. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  247. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  248. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  249. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  250. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  251. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  252. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  253. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  254. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  255. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  256. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  257. aip_agents/utils/metadata_helper.pyi +117 -0
  258. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  259. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  260. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  261. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  262. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  263. aip_agents/utils/pii/__init__.pyi +5 -0
  264. aip_agents/utils/pii/pii_handler.pyi +96 -0
  265. aip_agents/utils/pii/pii_helper.pyi +78 -0
  266. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  267. aip_agents/utils/reference_helper.pyi +81 -0
  268. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  269. aip_agents/utils/step_limit_manager.pyi +112 -0
  270. aip_agents/utils/token_usage_helper.pyi +60 -0
  271. {aip_agents_binary-0.5.14.dist-info → aip_agents_binary-0.5.16.dist-info}/METADATA +1 -3
  272. aip_agents_binary-0.5.16.dist-info/RECORD +544 -0
  273. aip_agents_binary-0.5.14.dist-info/RECORD +0 -279
  274. {aip_agents_binary-0.5.14.dist-info → aip_agents_binary-0.5.16.dist-info}/WHEEL +0 -0
  275. {aip_agents_binary-0.5.14.dist-info → aip_agents_binary-0.5.16.dist-info}/top_level.txt +0 -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]]
@@ -12,6 +12,8 @@ References:
12
12
 
13
13
  try:
14
14
  from aip_agents.tools.document_loader.base_reader import ( # noqa: F401
15
+ DOCPROC_AVAILABLE,
16
+ DOCPROC_MISSING_MESSAGE,
15
17
  BaseDocumentReaderTool,
16
18
  DocumentReaderInput,
17
19
  )
@@ -28,10 +30,15 @@ try:
28
30
  "ExcelReaderTool",
29
31
  "PDFSplitter",
30
32
  ]
33
+ if not DOCPROC_AVAILABLE:
34
+ import warnings
35
+
36
+ warnings.warn(DOCPROC_MISSING_MESSAGE, ImportWarning)
31
37
  except ImportError:
32
38
  import warnings
33
39
 
34
40
  warnings.warn(
35
- "Document loader tools not available. Install with: pip install aip-agents[document-loader]", ImportWarning
41
+ "Document loader tools not available. Install gllm-docproc to enable them.",
42
+ ImportWarning,
36
43
  )
37
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']
@@ -10,8 +10,8 @@ References:
10
10
  import gc
11
11
  import os
12
12
  from abc import ABC, abstractmethod
13
+ from typing import TYPE_CHECKING, Any
13
14
 
14
- from gllm_docproc.loader.pipeline_loader import PipelineLoader
15
15
  from langchain_core.runnables import RunnableConfig
16
16
  from langchain_core.tools import BaseTool
17
17
  from pydantic import BaseModel, Field
@@ -21,6 +21,46 @@ from aip_agents.utils.logger import get_logger
21
21
 
22
22
  logger = get_logger(__name__)
23
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
+
24
64
 
25
65
  class BaseDocumentConfig(BaseModel):
26
66
  """Base tool configuration schema for document processing with batching functionality.
@@ -78,7 +118,7 @@ class BaseDocumentReaderTool(BaseTool, ABC):
78
118
  description: str = "Read a document file and extract its text content."
79
119
  args_schema: type[BaseModel] = DocumentReaderInput
80
120
  tool_config_schema: type[BaseModel] = BaseDocumentConfig
81
- loader: PipelineLoader = Field(default_factory=PipelineLoader)
121
+ loader: PipelineLoaderType = Field(default_factory=_build_pipeline_loader)
82
122
 
83
123
  def __init__(self):
84
124
  """Initialize the base document reader tool."""
@@ -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
+ """
@@ -8,9 +8,19 @@ References:
8
8
  reader/docx_reader_tool.py
9
9
  """
10
10
 
11
- from gllm_docproc.loader.docx import DOCX2PythonLoader, PythonDOCXTableLoader
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
12
19
 
13
- from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool
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__)
14
24
 
15
25
 
16
26
  class DocxReaderTool(BaseDocumentReaderTool):
@@ -20,6 +30,11 @@ class DocxReaderTool(BaseDocumentReaderTool):
20
30
  description: str = "Read a Word document and extract its text content. Input should be the path to the Word file."
21
31
 
22
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
23
38
  self.loader.add_loader(DOCX2PythonLoader())
24
39
  self.loader.add_loader(PythonDOCXTableLoader())
25
40
 
@@ -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
@@ -10,9 +10,15 @@ Authors:
10
10
  import zipfile
11
11
  from pathlib import Path
12
12
 
13
- from gllm_docproc.loader.xlsx import OpenpyxlLoader
14
-
15
- from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool
13
+ try:
14
+ from gllm_docproc.loader.xlsx import OpenpyxlLoader
15
+ except ImportError as exc:
16
+ OpenpyxlLoader = None # type: ignore[assignment]
17
+ _DOCPROC_IMPORT_ERROR: Exception | None = exc
18
+ else:
19
+ _DOCPROC_IMPORT_ERROR = None
20
+
21
+ from aip_agents.tools.document_loader.base_reader import DOCPROC_MISSING_MESSAGE, BaseDocumentReaderTool
16
22
  from aip_agents.utils.logger import get_logger
17
23
 
18
24
  logger = get_logger(__name__)
@@ -50,6 +56,11 @@ class ExcelReaderTool(BaseDocumentReaderTool):
50
56
  This method initializes the OpenpyxlLoader which handles extraction
51
57
  of content from Excel files and formatting as Markdown tables.
52
58
  """
59
+ if OpenpyxlLoader is None:
60
+ logger.warning(DOCPROC_MISSING_MESSAGE)
61
+ if _DOCPROC_IMPORT_ERROR is not None:
62
+ logger.debug("gllm_docproc import failed: %s", _DOCPROC_IMPORT_ERROR)
63
+ return
53
64
  self.loader.add_loader(OpenpyxlLoader())
54
65
 
55
66
  def _run_with_batching(self, file_path: str, batch_size: int) -> str:
@@ -0,0 +1,26 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool as BaseDocumentReaderTool, DOCPROC_MISSING_MESSAGE as DOCPROC_MISSING_MESSAGE
3
+ from aip_agents.utils.logger import get_logger as get_logger
4
+
5
+ logger: Incomplete
6
+
7
+ class ExcelReaderTool(BaseDocumentReaderTool):
8
+ '''Tool to read and extract content from Excel files.
9
+
10
+ This tool reads Excel files (.xlsx, .xlsm) and extracts their content using
11
+ the gllm_docproc loader pipeline. The content is formatted as Markdown tables
12
+ for easy readability.
13
+
14
+ Features:
15
+ - Supports .xlsx and .xlsm formats
16
+ - Extracts all sheets or specific sheets
17
+ - Formats output as Markdown tables
18
+ - Configurable row limits and file size limits
19
+
20
+ Examples:
21
+ >>> tool = ExcelReaderTool()
22
+ >>> result = tool._run("/tmp/data.xlsx")
23
+ >>> print(result)
24
+ '''
25
+ name: str
26
+ description: str
@@ -8,9 +8,16 @@ References:
8
8
  reader/pdf_reader_tool.py
9
9
  """
10
10
 
11
- from gllm_docproc.loader.pdf import PDFPlumberLoader, PyMuPDFLoader
12
-
13
- from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool
11
+ try:
12
+ from gllm_docproc.loader.pdf import PDFPlumberLoader, PyMuPDFLoader
13
+ except ImportError as exc:
14
+ PDFPlumberLoader = None # type: ignore[assignment]
15
+ PyMuPDFLoader = 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
14
21
  from aip_agents.tools.document_loader.pdf_splitter import PDFSplitter
15
22
  from aip_agents.utils.logger import get_logger
16
23
 
@@ -24,6 +31,11 @@ class PDFReaderTool(BaseDocumentReaderTool):
24
31
  description: str = "Read a PDF file and extract its text content. Input should be the path to the PDF file."
25
32
 
26
33
  def _setup_loader(self):
34
+ if PDFPlumberLoader is None or PyMuPDFLoader is None:
35
+ logger.warning(DOCPROC_MISSING_MESSAGE)
36
+ if _DOCPROC_IMPORT_ERROR is not None:
37
+ logger.debug("gllm_docproc import failed: %s", _DOCPROC_IMPORT_ERROR)
38
+ return
27
39
  self.loader.add_loader(PyMuPDFLoader())
28
40
  self.loader.add_loader(PDFPlumberLoader())
29
41
 
@@ -43,7 +55,7 @@ class PDFReaderTool(BaseDocumentReaderTool):
43
55
  Raises:
44
56
  FileNotFoundError: If the input PDF file doesn't exist
45
57
  ValueError: If batch_size is invalid or PDF processing fails
46
- Exception: For other unexpected errors during PDF splitting
58
+ RuntimeError: For other unexpected errors during PDF splitting
47
59
  """
48
60
  logger.info(f"Splitting PDF file '{file_path}' with batch_size={batch_size}")
49
61
 
@@ -64,4 +76,4 @@ class PDFReaderTool(BaseDocumentReaderTool):
64
76
  raise
65
77
  except Exception as e:
66
78
  logger.error(f"Unexpected error splitting PDF '{file_path}': {str(e)}")
67
- raise Exception(f"Failed to split PDF file: {str(e)}") from e
79
+ raise RuntimeError(f"Failed to split PDF file: {str(e)}") from e
@@ -0,0 +1,11 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool as BaseDocumentReaderTool, DOCPROC_MISSING_MESSAGE as DOCPROC_MISSING_MESSAGE
3
+ from aip_agents.tools.document_loader.pdf_splitter import PDFSplitter as PDFSplitter
4
+ from aip_agents.utils.logger import get_logger as get_logger
5
+
6
+ logger: Incomplete
7
+
8
+ class PDFReaderTool(BaseDocumentReaderTool):
9
+ """Tool to read and extract text from PDF files."""
10
+ name: str
11
+ description: str
@@ -0,0 +1,18 @@
1
+ class PDFSplitter:
2
+ """Utility class for splitting PDF files into page-based temporary files."""
3
+ @staticmethod
4
+ def split_by_pages(file_path: str, batch_size: int) -> list[str]:
5
+ """Split PDF into temporary files containing batch_size pages each.
6
+
7
+ Args:
8
+ file_path: Path to the PDF file to split
9
+ batch_size: Number of pages to include in each batch (1-10)
10
+
11
+ Returns:
12
+ List of temporary file paths containing the split PDF batches
13
+
14
+ Raises:
15
+ FileNotFoundError: If the input PDF file doesn't exist
16
+ ValueError: If batch_size is invalid or PDF is corrupted
17
+ Exception: For other PDF processing errors
18
+ """
@@ -0,0 +1,3 @@
1
+ from aip_agents.tools.gl_connector.tool import GLConnectorTool as GLConnectorTool
2
+
3
+ __all__ = ['GLConnectorTool']
@@ -0,0 +1,74 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.tools.constants import ToolType as ToolType
3
+ from langchain_core.runnables import RunnableConfig
4
+ from langchain_core.tools import BaseTool
5
+ from typing import Any
6
+
7
+ class _InjectedTool(BaseTool):
8
+ """Wrap a BaseTool to inject token and optional identifier into inputs."""
9
+ model_config: Incomplete
10
+ def __init__(self, base_tool: BaseTool, token: str, identifier: str | None) -> None:
11
+ """Initialize the injected tool wrapper.
12
+
13
+ Args:
14
+ base_tool: The base tool to wrap.
15
+ token: Authentication token to inject into tool inputs.
16
+ identifier: Optional identifier to inject into tool inputs.
17
+
18
+ Returns:
19
+ None
20
+ """
21
+ def invoke(self, input: Any, config: RunnableConfig | None = None, **kwargs: Any) -> Any:
22
+ """Invoke the tool with token and optional identifier injected.
23
+
24
+ Args:
25
+ input: Tool input to process.
26
+ config: Optional runnable configuration.
27
+ **kwargs: Additional keyword arguments.
28
+
29
+ Returns:
30
+ The result of invoking the tool with injected parameters.
31
+ """
32
+ async def ainvoke(self, input: Any, config: RunnableConfig | None = None, **kwargs: Any) -> Any:
33
+ """Invoke the tool asynchronously with token and optional identifier injected.
34
+
35
+ Args:
36
+ input: Tool input to process.
37
+ config: Optional runnable configuration.
38
+ **kwargs: Additional keyword arguments.
39
+
40
+ Returns:
41
+ The result of invoking the tool with injected parameters.
42
+ """
43
+ def run(self, tool_input: Any, **kwargs: Any) -> Any:
44
+ """Run the tool with token and optional identifier injected.
45
+
46
+ Args:
47
+ tool_input: Tool input to process.
48
+ **kwargs: Additional keyword arguments.
49
+
50
+ Returns:
51
+ The result of running the tool with injected parameters.
52
+ """
53
+ async def arun(self, tool_input: Any, **kwargs: Any) -> Any:
54
+ """Run the tool asynchronously with token and optional identifier injected.
55
+
56
+ Args:
57
+ tool_input: Tool input to process.
58
+ **kwargs: Additional keyword arguments.
59
+
60
+ Returns:
61
+ The result of running the tool with injected parameters.
62
+ """
63
+
64
+ def GLConnectorTool(tool_name: str, *, api_key: str | None = None, identifier: str | None = None) -> BaseTool:
65
+ """Create a single GL Connector tool by exact tool name.
66
+
67
+ Args:
68
+ tool_name: Exact tool name (not module name).
69
+ api_key: Optional override for BOSA API key.
70
+ identifier: Optional override for BOSA identifier.
71
+
72
+ Returns:
73
+ A single LangChain BaseTool with token injection.
74
+ """
@@ -0,0 +1,5 @@
1
+ from aip_agents.tools.memory_search.base import LongTermMemorySearchTool as LongTermMemorySearchTool
2
+ from aip_agents.tools.memory_search.mem0 import MEMORY_SEARCH_TOOL_NAME as MEMORY_SEARCH_TOOL_NAME, Mem0SearchInput as Mem0SearchInput, Mem0SearchTool as Mem0SearchTool
3
+ from aip_agents.tools.memory_search.schema import LongTermMemorySearchInput as LongTermMemorySearchInput, MemoryConfig as MemoryConfig
4
+
5
+ __all__ = ['MemoryConfig', 'LongTermMemorySearchInput', 'LongTermMemorySearchTool', 'Mem0SearchInput', 'Mem0SearchTool', 'MEMORY_SEARCH_TOOL_NAME']
@@ -0,0 +1,69 @@
1
+ from _typeshed import Incomplete
2
+ from abc import ABC
3
+ from aip_agents.memory.constants import MemoryDefaults as MemoryDefaults
4
+ from aip_agents.tools.memory_search.schema import LongTermMemorySearchInput as LongTermMemorySearchInput, MemoryConfig as MemoryConfig
5
+ from aip_agents.utils.logger import get_logger as get_logger
6
+ from collections.abc import Callable
7
+ from langchain_core.tools import BaseTool
8
+ from pydantic import BaseModel as BaseModel
9
+ from typing import Any, ClassVar, Protocol
10
+
11
+ logger: Incomplete
12
+
13
+ class LongTermMemoryBackend(Protocol):
14
+ """Protocol for memory adapters that support retrieval and formatting."""
15
+ def retrieve(self, *, query: str | None, user_id: str, limit: int | None = None, filters: dict[str, Any] | None = None, page: int | None = None) -> list[dict[str, Any]]:
16
+ """Retrieve memories matching the given query and filters.
17
+
18
+ Args:
19
+ query: Optional search query string.
20
+ user_id: User identifier for scoped retrieval.
21
+ limit: Maximum number of results to return.
22
+ filters: Optional filters to apply to the retrieval.
23
+ page: Page number for pagination.
24
+
25
+ Returns:
26
+ List of memory hit dictionaries.
27
+ """
28
+ def format_hits(self, hits: list[dict[str, Any]], max_items: int = ..., with_tag: bool = True) -> str:
29
+ """Format memory hits into a readable string.
30
+
31
+ Args:
32
+ hits: List of memory hit dictionaries to format.
33
+ max_items: Maximum number of hits to include in output.
34
+ with_tag: Whether to wrap output with memory tags.
35
+
36
+ Returns:
37
+ Formatted string representation of memory hits.
38
+ """
39
+
40
+ class LongTermMemorySearchTool(BaseTool, ABC):
41
+ """Abstract base class for provider-specific long-term memory search tools."""
42
+ name: str
43
+ description: str
44
+ args_schema: type[LongTermMemorySearchInput]
45
+ tool_config_schema: type[BaseModel]
46
+ memory: LongTermMemoryBackend
47
+ default_user_id: str | None
48
+ user_id_provider: Callable[[], str | None] | None
49
+ MINIMUM_MEMORY_RETRIEVAL: ClassVar[int]
50
+ LOG_PREFIX: ClassVar[str]
51
+ def __init__(self, memory: LongTermMemoryBackend, *, default_user_id: str | None = None, user_id_provider: Callable[[], str | None] | None = None, **kwargs: Any) -> None:
52
+ """Initialize the long-term memory search tool.
53
+
54
+ Args:
55
+ memory: Memory adapter instance with retrieve() and format_hits() methods.
56
+ default_user_id: Default user ID to use if not provided in metadata.
57
+ user_id_provider: Callable that returns a user ID.
58
+ **kwargs: Additional keyword arguments passed to the parent class.
59
+ """
60
+ def format_hits(self, hits: list[dict[str, Any]], with_tag: bool = False) -> str:
61
+ """Format hits into a string with optional tags.
62
+
63
+ Args:
64
+ hits: List of memory hit dictionaries to format.
65
+ with_tag: Whether to wrap the output with memory tags.
66
+
67
+ Returns:
68
+ Formatted string representation of the memory hits.
69
+ """
@@ -0,0 +1,19 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.memory.constants import MemoryDefaults as MemoryDefaults
3
+ from aip_agents.tools.memory_search.base import LongTermMemorySearchTool as LongTermMemorySearchTool
4
+ from aip_agents.tools.memory_search.schema import LongTermMemorySearchInput as LongTermMemorySearchInput
5
+ from aip_agents.utils.datetime import is_valid_date_string as is_valid_date_string, next_day_iso as next_day_iso
6
+ from aip_agents.utils.logger import get_logger as get_logger
7
+ from typing import ClassVar
8
+
9
+ logger: Incomplete
10
+ MEMORY_SEARCH_TOOL_NAME: str
11
+
12
+ class Mem0SearchTool(LongTermMemorySearchTool):
13
+ """Mem0-specific implementation of the long-term memory search tool."""
14
+ name: str
15
+ description: str
16
+ args_schema: type[LongTermMemorySearchInput]
17
+ LOG_PREFIX: ClassVar[str]
18
+ METADATA_FILTER_BLOCKLIST: ClassVar[set[str]]
19
+ Mem0SearchInput = LongTermMemorySearchInput