aip-agents-binary 0.5.11__py3-none-any.whl → 0.5.12__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 (271) hide show
  1. aip_agents/a2a/server/langgraph_executor.py +4 -1
  2. aip_agents/agent/hitl/manager.py +10 -0
  3. aip_agents/agent/hitl/registry.py +149 -0
  4. {aip_agents_binary-0.5.11.dist-info → aip_agents_binary-0.5.12.dist-info}/METADATA +1 -1
  5. {aip_agents_binary-0.5.11.dist-info → aip_agents_binary-0.5.12.dist-info}/RECORD +7 -270
  6. aip_agents/__init__.pyi +0 -19
  7. aip_agents/a2a/__init__.pyi +0 -3
  8. aip_agents/a2a/server/__init__.pyi +0 -4
  9. aip_agents/a2a/server/base_executor.pyi +0 -73
  10. aip_agents/a2a/server/google_adk_executor.pyi +0 -51
  11. aip_agents/a2a/server/langflow_executor.pyi +0 -43
  12. aip_agents/a2a/server/langgraph_executor.pyi +0 -47
  13. aip_agents/a2a/types.pyi +0 -132
  14. aip_agents/agent/__init__.pyi +0 -9
  15. aip_agents/agent/base_agent.pyi +0 -221
  16. aip_agents/agent/base_langgraph_agent.pyi +0 -232
  17. aip_agents/agent/google_adk_agent.pyi +0 -141
  18. aip_agents/agent/google_adk_constants.pyi +0 -3
  19. aip_agents/agent/hitl/__init__.pyi +0 -6
  20. aip_agents/agent/hitl/config.pyi +0 -15
  21. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +0 -42
  22. aip_agents/agent/hitl/manager.pyi +0 -199
  23. aip_agents/agent/hitl/models.pyi +0 -3
  24. aip_agents/agent/hitl/prompt/__init__.pyi +0 -4
  25. aip_agents/agent/hitl/prompt/base.pyi +0 -24
  26. aip_agents/agent/hitl/prompt/deferred.pyi +0 -30
  27. aip_agents/agent/interface.pyi +0 -81
  28. aip_agents/agent/interfaces.pyi +0 -44
  29. aip_agents/agent/langflow_agent.pyi +0 -133
  30. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +0 -49
  31. aip_agents/agent/langgraph_react_agent.pyi +0 -126
  32. aip_agents/agent/system_instruction_context.pyi +0 -13
  33. aip_agents/clients/__init__.pyi +0 -4
  34. aip_agents/clients/langflow/__init__.pyi +0 -4
  35. aip_agents/clients/langflow/client.pyi +0 -140
  36. aip_agents/clients/langflow/types.pyi +0 -7
  37. aip_agents/constants.pyi +0 -7
  38. aip_agents/examples/__init__.pyi +0 -0
  39. aip_agents/examples/compare_streaming_client.pyi +0 -48
  40. aip_agents/examples/compare_streaming_server.pyi +0 -18
  41. aip_agents/examples/demo_memory_recall.pyi +0 -58
  42. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +0 -9
  43. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +0 -9
  44. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +0 -9
  45. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +0 -15
  46. aip_agents/examples/hello_world_a2a_langchain_client.pyi +0 -5
  47. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +0 -5
  48. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +0 -5
  49. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +0 -5
  50. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +0 -5
  51. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +0 -15
  52. aip_agents/examples/hello_world_a2a_langchain_server.pyi +0 -15
  53. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +0 -15
  54. aip_agents/examples/hello_world_a2a_langflow_client.pyi +0 -9
  55. aip_agents/examples/hello_world_a2a_langflow_server.pyi +0 -14
  56. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +0 -5
  57. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +0 -5
  58. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +0 -16
  59. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +0 -9
  60. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +0 -9
  61. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +0 -2
  62. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +0 -9
  63. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +0 -5
  64. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +0 -5
  65. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +0 -14
  66. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +0 -15
  67. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +0 -15
  68. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +0 -48
  69. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +0 -48
  70. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +0 -45
  71. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +0 -5
  72. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +0 -15
  73. aip_agents/examples/hello_world_google_adk.pyi +0 -5
  74. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +0 -5
  75. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +0 -5
  76. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +0 -5
  77. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +0 -5
  78. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +0 -5
  79. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +0 -5
  80. aip_agents/examples/hello_world_google_adk_stream.pyi +0 -5
  81. aip_agents/examples/hello_world_langchain.pyi +0 -5
  82. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +0 -2
  83. aip_agents/examples/hello_world_langchain_mcp_http.pyi +0 -5
  84. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +0 -16
  85. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +0 -5
  86. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +0 -18
  87. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +0 -5
  88. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +0 -5
  89. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +0 -5
  90. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +0 -5
  91. aip_agents/examples/hello_world_langchain_stream.pyi +0 -5
  92. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +0 -5
  93. aip_agents/examples/hello_world_langflow_agent.pyi +0 -35
  94. aip_agents/examples/hello_world_langgraph.pyi +0 -5
  95. aip_agents/examples/hello_world_langgraph_bosa_twitter.pyi +0 -5
  96. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +0 -5
  97. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +0 -5
  98. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +0 -5
  99. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +0 -5
  100. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +0 -5
  101. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +0 -5
  102. aip_agents/examples/hello_world_langgraph_stream.pyi +0 -5
  103. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +0 -5
  104. aip_agents/examples/hello_world_model_switch_cli.pyi +0 -30
  105. aip_agents/examples/hello_world_multi_agent_adk.pyi +0 -6
  106. aip_agents/examples/hello_world_multi_agent_langchain.pyi +0 -5
  107. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +0 -5
  108. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +0 -5
  109. aip_agents/examples/hello_world_pii_logger.pyi +0 -5
  110. aip_agents/examples/hello_world_sentry.pyi +0 -21
  111. aip_agents/examples/hello_world_step_limits.pyi +0 -17
  112. aip_agents/examples/hello_world_stock_a2a_server.pyi +0 -17
  113. aip_agents/examples/hello_world_tool_output_client.pyi +0 -5
  114. aip_agents/examples/hello_world_tool_output_server.pyi +0 -19
  115. aip_agents/examples/hitl_demo.pyi +0 -67
  116. aip_agents/examples/pii_demo_langgraph_client.pyi +0 -5
  117. aip_agents/examples/pii_demo_langgraph_server.pyi +0 -20
  118. aip_agents/examples/pii_demo_multi_agent_client.pyi +0 -5
  119. aip_agents/examples/pii_demo_multi_agent_server.pyi +0 -40
  120. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +0 -5
  121. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +0 -19
  122. aip_agents/examples/tools/__init__.pyi +0 -9
  123. aip_agents/examples/tools/adk_arithmetic_tools.pyi +0 -24
  124. aip_agents/examples/tools/adk_weather_tool.pyi +0 -18
  125. aip_agents/examples/tools/data_generator_tool.pyi +0 -15
  126. aip_agents/examples/tools/data_visualization_tool.pyi +0 -19
  127. aip_agents/examples/tools/image_artifact_tool.pyi +0 -26
  128. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +0 -17
  129. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +0 -20
  130. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +0 -25
  131. aip_agents/examples/tools/langchain_weather_tool.pyi +0 -19
  132. aip_agents/examples/tools/langgraph_streaming_tool.pyi +0 -43
  133. aip_agents/examples/tools/mock_retrieval_tool.pyi +0 -13
  134. aip_agents/examples/tools/pii_demo_tools.pyi +0 -54
  135. aip_agents/examples/tools/random_chart_tool.pyi +0 -20
  136. aip_agents/examples/tools/serper_tool.pyi +0 -16
  137. aip_agents/examples/tools/stock_tools.pyi +0 -36
  138. aip_agents/examples/tools/table_generator_tool.pyi +0 -22
  139. aip_agents/examples/tools/time_tool.pyi +0 -15
  140. aip_agents/examples/tools/weather_forecast_tool.pyi +0 -14
  141. aip_agents/mcp/__init__.pyi +0 -0
  142. aip_agents/mcp/client/__init__.pyi +0 -5
  143. aip_agents/mcp/client/base_mcp_client.pyi +0 -148
  144. aip_agents/mcp/client/connection_manager.pyi +0 -48
  145. aip_agents/mcp/client/google_adk/__init__.pyi +0 -3
  146. aip_agents/mcp/client/google_adk/client.pyi +0 -75
  147. aip_agents/mcp/client/langchain/__init__.pyi +0 -3
  148. aip_agents/mcp/client/langchain/client.pyi +0 -48
  149. aip_agents/mcp/client/persistent_session.pyi +0 -113
  150. aip_agents/mcp/client/session_pool.pyi +0 -101
  151. aip_agents/mcp/client/transports.pyi +0 -123
  152. aip_agents/mcp/utils/__init__.pyi +0 -0
  153. aip_agents/mcp/utils/config_validator.pyi +0 -82
  154. aip_agents/memory/__init__.pyi +0 -5
  155. aip_agents/memory/adapters/__init__.pyi +0 -4
  156. aip_agents/memory/adapters/base_adapter.pyi +0 -150
  157. aip_agents/memory/adapters/mem0.pyi +0 -22
  158. aip_agents/memory/base.pyi +0 -60
  159. aip_agents/memory/constants.pyi +0 -25
  160. aip_agents/memory/factory.pyi +0 -24
  161. aip_agents/memory/guidance.pyi +0 -3
  162. aip_agents/memory/simple_memory.pyi +0 -23
  163. aip_agents/middleware/__init__.pyi +0 -5
  164. aip_agents/middleware/base.pyi +0 -71
  165. aip_agents/middleware/manager.pyi +0 -80
  166. aip_agents/middleware/todolist.pyi +0 -125
  167. aip_agents/schema/__init__.pyi +0 -9
  168. aip_agents/schema/a2a.pyi +0 -40
  169. aip_agents/schema/agent.pyi +0 -65
  170. aip_agents/schema/hitl.pyi +0 -89
  171. aip_agents/schema/langgraph.pyi +0 -28
  172. aip_agents/schema/model_id.pyi +0 -54
  173. aip_agents/schema/step_limit.pyi +0 -63
  174. aip_agents/schema/storage.pyi +0 -21
  175. aip_agents/sentry/__init__.pyi +0 -3
  176. aip_agents/sentry/sentry.pyi +0 -48
  177. aip_agents/storage/__init__.pyi +0 -8
  178. aip_agents/storage/base.pyi +0 -58
  179. aip_agents/storage/clients/__init__.pyi +0 -3
  180. aip_agents/storage/clients/minio_client.pyi +0 -137
  181. aip_agents/storage/config.pyi +0 -29
  182. aip_agents/storage/providers/__init__.pyi +0 -5
  183. aip_agents/storage/providers/base.pyi +0 -88
  184. aip_agents/storage/providers/memory.pyi +0 -79
  185. aip_agents/storage/providers/object_storage.pyi +0 -98
  186. aip_agents/tools/__init__.pyi +0 -4
  187. aip_agents/tools/bosa_tools.pyi +0 -37
  188. aip_agents/tools/browser_use/__init__.pyi +0 -14
  189. aip_agents/tools/browser_use/action_parser.pyi +0 -18
  190. aip_agents/tools/browser_use/browser_use_tool.pyi +0 -50
  191. aip_agents/tools/browser_use/llm_config.pyi +0 -52
  192. aip_agents/tools/browser_use/minio_storage.pyi +0 -109
  193. aip_agents/tools/browser_use/schemas.pyi +0 -32
  194. aip_agents/tools/browser_use/session.pyi +0 -4
  195. aip_agents/tools/browser_use/session_errors.pyi +0 -53
  196. aip_agents/tools/browser_use/steel_session_recording.pyi +0 -63
  197. aip_agents/tools/browser_use/streaming.pyi +0 -81
  198. aip_agents/tools/browser_use/structured_data_parser.pyi +0 -86
  199. aip_agents/tools/browser_use/structured_data_recovery.pyi +0 -43
  200. aip_agents/tools/browser_use/types.pyi +0 -45
  201. aip_agents/tools/code_sandbox/__init__.pyi +0 -3
  202. aip_agents/tools/code_sandbox/constant.pyi +0 -4
  203. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +0 -86
  204. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +0 -29
  205. aip_agents/tools/constants.pyi +0 -135
  206. aip_agents/tools/document_loader/__init__.pyi +0 -7
  207. aip_agents/tools/document_loader/base_reader.pyi +0 -62
  208. aip_agents/tools/document_loader/docx_reader_tool.pyi +0 -6
  209. aip_agents/tools/document_loader/excel_reader_tool.pyi +0 -26
  210. aip_agents/tools/document_loader/pdf_reader_tool.pyi +0 -11
  211. aip_agents/tools/document_loader/pdf_splitter.pyi +0 -18
  212. aip_agents/tools/gl_connector/__init__.pyi +0 -3
  213. aip_agents/tools/gl_connector/tool.pyi +0 -74
  214. aip_agents/tools/memory_search/__init__.pyi +0 -5
  215. aip_agents/tools/memory_search/base.pyi +0 -69
  216. aip_agents/tools/memory_search/mem0.pyi +0 -19
  217. aip_agents/tools/memory_search/schema.pyi +0 -15
  218. aip_agents/tools/memory_search_tool.pyi +0 -3
  219. aip_agents/tools/tool_config_injector.pyi +0 -26
  220. aip_agents/tools/web_search/__init__.pyi +0 -3
  221. aip_agents/tools/web_search/serper_tool.pyi +0 -19
  222. aip_agents/types/__init__.pyi +0 -36
  223. aip_agents/types/a2a_events.pyi +0 -3
  224. aip_agents/utils/__init__.pyi +0 -11
  225. aip_agents/utils/a2a_connector.pyi +0 -146
  226. aip_agents/utils/artifact_helpers.pyi +0 -203
  227. aip_agents/utils/constants.pyi +0 -10
  228. aip_agents/utils/datetime/__init__.pyi +0 -4
  229. aip_agents/utils/datetime/normalization.pyi +0 -95
  230. aip_agents/utils/datetime/timezone.pyi +0 -48
  231. aip_agents/utils/env_loader.pyi +0 -10
  232. aip_agents/utils/event_handler_registry.pyi +0 -23
  233. aip_agents/utils/file_prompt_utils.pyi +0 -21
  234. aip_agents/utils/final_response_builder.pyi +0 -34
  235. aip_agents/utils/formatter_llm_client.pyi +0 -71
  236. aip_agents/utils/langgraph/__init__.pyi +0 -3
  237. aip_agents/utils/langgraph/converter.pyi +0 -49
  238. aip_agents/utils/langgraph/tool_managers/__init__.pyi +0 -5
  239. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +0 -35
  240. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +0 -48
  241. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +0 -56
  242. aip_agents/utils/langgraph/tool_output_management.pyi +0 -292
  243. aip_agents/utils/logger.pyi +0 -60
  244. aip_agents/utils/metadata/__init__.pyi +0 -5
  245. aip_agents/utils/metadata/activity_metadata_helper.pyi +0 -25
  246. aip_agents/utils/metadata/activity_narrative/__init__.pyi +0 -7
  247. aip_agents/utils/metadata/activity_narrative/builder.pyi +0 -35
  248. aip_agents/utils/metadata/activity_narrative/constants.pyi +0 -10
  249. aip_agents/utils/metadata/activity_narrative/context.pyi +0 -32
  250. aip_agents/utils/metadata/activity_narrative/formatters.pyi +0 -48
  251. aip_agents/utils/metadata/activity_narrative/utils.pyi +0 -12
  252. aip_agents/utils/metadata/schemas/__init__.pyi +0 -4
  253. aip_agents/utils/metadata/schemas/activity_schema.pyi +0 -18
  254. aip_agents/utils/metadata/schemas/thinking_schema.pyi +0 -20
  255. aip_agents/utils/metadata/thinking_metadata_helper.pyi +0 -4
  256. aip_agents/utils/metadata_helper.pyi +0 -117
  257. aip_agents/utils/name_preprocessor/__init__.pyi +0 -6
  258. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +0 -52
  259. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +0 -38
  260. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +0 -41
  261. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +0 -34
  262. aip_agents/utils/pii/__init__.pyi +0 -5
  263. aip_agents/utils/pii/pii_handler.pyi +0 -96
  264. aip_agents/utils/pii/pii_helper.pyi +0 -78
  265. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +0 -73
  266. aip_agents/utils/reference_helper.pyi +0 -81
  267. aip_agents/utils/sse_chunk_transformer.pyi +0 -166
  268. aip_agents/utils/step_limit_manager.pyi +0 -112
  269. aip_agents/utils/token_usage_helper.pyi +0 -60
  270. {aip_agents_binary-0.5.11.dist-info → aip_agents_binary-0.5.12.dist-info}/WHEEL +0 -0
  271. {aip_agents_binary-0.5.11.dist-info → aip_agents_binary-0.5.12.dist-info}/top_level.txt +0 -0
@@ -1,86 +0,0 @@
1
- from aip_agents.tools.browser_use.types import ToolCallInfo
2
- from collections.abc import Callable, Sequence
3
- from typing import Any
4
-
5
- __all__ = ['attempt_json_recovery', 'detect_structured_data_failure', 'extract_content_after_marker', 'extract_json_blob', 'parse_structured_data', 'payload_reports_empty', 'payload_reports_error', 'structured_data_failure_for_call']
6
-
7
- def detect_structured_data_failure(tool_calls: Sequence[ToolCallInfo], summarize_error: Callable[[str], str]) -> str | None:
8
- """Return a descriptive error when structured data extraction yields no results.
9
-
10
- Args:
11
- tool_calls: Tool call descriptors extracted from the latest agent step.
12
- summarize_error: Function to summarize error messages.
13
-
14
- Returns:
15
- str | None: Failure reason when extraction yielded nothing, otherwise None.
16
- """
17
- def structured_data_failure_for_call(call: ToolCallInfo, summarize_error: Callable[[str], str]) -> str | None:
18
- """Evaluate a single tool call for extractor failures.
19
-
20
- Args:
21
- call: Tool call descriptor encapsulating name/args/output.
22
- summarize_error: Function to summarize error messages.
23
-
24
- Returns:
25
- str | None: Failure message when the call represents a bad extraction.
26
- """
27
- def payload_reports_error(payload: dict[str, Any], raw_output: str, summarize_error: Callable[[str], str]) -> str | None:
28
- """Return a formatted error message when extractor status indicates failure.
29
-
30
- Args:
31
- payload: Parsed JSON payload emitted by the extractor.
32
- raw_output: Original extractor output (used for fallback summaries).
33
- summarize_error: Function to summarize error messages.
34
-
35
- Returns:
36
- str | None: Human-readable failure string when extraction failed.
37
- """
38
- def payload_reports_empty(payload: dict[str, Any], raw_output: str, summarize_error: Callable[[str], str]) -> str | None:
39
- """Return a formatted message when the extractor returned no usable data.
40
-
41
- Args:
42
- payload: Parsed JSON payload emitted by the extractor.
43
- raw_output: Original extractor output string.
44
- summarize_error: Function to summarize error messages.
45
-
46
- Returns:
47
- str | None: Human-readable failure message when no content was extracted.
48
- """
49
- def parse_structured_data(output: str, summarize_error: Callable[[str], str]) -> tuple[dict[str, Any] | list[Any] | None, str | None]:
50
- """Extract the JSON blob emitted by extract_structured_data if present.
51
-
52
- Args:
53
- output: Raw string payload returned by extract_structured_data.
54
- summarize_error: Function to summarize error messages.
55
-
56
- Returns:
57
- tuple[dict[str, Any] | list[Any] | None, str | None]: Parsed JSON payload when extraction succeeds,
58
- otherwise a tuple containing None and a diagnostic string on failure.
59
- """
60
- def extract_content_after_marker(output: str) -> str | None:
61
- """Extract content after the 'Extracted Content:' marker and clean trailing metadata.
62
-
63
- Args:
64
- output: Raw string payload returned by extract_structured_data.
65
-
66
- Returns:
67
- str | None: Cleaned content after the marker, or None if marker not found.
68
- """
69
- def extract_json_blob(content: str) -> str | None:
70
- """Extract the JSON blob from content by finding delimiters and trimming trailing content.
71
-
72
- Args:
73
- content: Content string potentially containing JSON.
74
-
75
- Returns:
76
- str | None: Extracted JSON blob, or None if no valid JSON delimiters found.
77
- """
78
- def attempt_json_recovery(json_blob: str) -> dict[str, Any] | list[Any] | None:
79
- """Attempt to parse JSON blob, with recovery strategies for common issues.
80
-
81
- Args:
82
- json_blob: JSON string to attempt parsing.
83
-
84
- Returns:
85
- dict[str, Any] | list[Any] | None: Parsed JSON data if successful, None if all recovery attempts fail.
86
- """
@@ -1,43 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.utils.logger import get_logger as get_logger
3
- from typing import Any
4
-
5
- logger: Incomplete
6
-
7
- def recover_concatenated_json_objects(json_blob: str) -> dict[str, Any] | None:
8
- """Normalize concatenated JSON object strings into a structured payload.
9
-
10
- Args:
11
- json_blob: Raw JSON-like string returned by the structured data extractor.
12
-
13
- Returns:
14
- dict[str, Any] | None: Standardized payload when multiple objects are recovered,
15
- otherwise None.
16
- """
17
- def repair_json_blob(json_blob: str) -> str | None:
18
- """Apply json_repair to malformed JSON strings and return the mutated payload.
19
-
20
- Args:
21
- json_blob: Raw JSON string that may contain syntax mistakes.
22
-
23
- Returns:
24
- str | None: Repaired JSON string when modifications were applied, otherwise None.
25
- """
26
-
27
- class _JsonObjectSplitter:
28
- """Helper class to split JSON objects with reduced cognitive complexity."""
29
- json_blob: Incomplete
30
- segments: list[str]
31
- depth: int
32
- start: int | None
33
- last_end: int
34
- in_string: bool
35
- escaping: bool
36
- def __init__(self, json_blob: str) -> None:
37
- """Initialize the splitter with the raw JSON string.
38
-
39
- Args:
40
- json_blob: Raw string potentially containing concatenated JSON objects.
41
- """
42
- def split_objects(self) -> list[str]:
43
- """Main method to split JSON objects."""
@@ -1,45 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any
3
-
4
- __all__ = ['BrowserUseFatalError', 'RetryDecision', 'StreamingResponse', 'StreamingState', 'ToolCallInfo']
5
-
6
- class BrowserUseFatalError(RuntimeError):
7
- """Raised when the Browser Use session must terminate immediately."""
8
-
9
- @dataclass
10
- class ToolCallInfo:
11
- """Structured information for a single tool call."""
12
- name: str
13
- args: dict[str, Any]
14
- output: str
15
-
16
- @dataclass
17
- class StreamingResponse:
18
- """Standardized streaming response structure."""
19
- event_type: str
20
- content: str
21
- thinking_and_activity_info: dict
22
- is_final: bool
23
- tool_info: dict[str, Any] | None = ...
24
- metadata: dict[str, Any] | None = ...
25
- def to_dict(self) -> dict[str, Any]:
26
- """Convert to dictionary format for yielding."""
27
-
28
- @dataclass
29
- class StreamingState:
30
- """State management for streaming operations."""
31
- debug_url: str
32
- recording_url: str
33
- step_count: int = ...
34
- is_complete: bool = ...
35
- session_id: str | None = ...
36
- terminal_error: str | None = ...
37
- recording_started: bool = ...
38
-
39
- @dataclass
40
- class RetryDecision:
41
- """Encapsulate retry metadata when Steel sessions need to be restarted."""
42
- retries_remaining: int
43
- attempted_retries: int
44
- message: str
45
- delay: float
@@ -1,3 +0,0 @@
1
- from aip_agents.tools.code_sandbox.e2b_sandbox_tool import E2BCodeSandboxTool as E2BCodeSandboxTool
2
-
3
- __all__ = ['E2BCodeSandboxTool']
@@ -1,4 +0,0 @@
1
- from _typeshed import Incomplete
2
-
3
- DATA_FILE_NAME: str
4
- DATA_FILE_PATH: Incomplete
@@ -1,86 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.tools.code_sandbox.constant import DATA_FILE_PATH as DATA_FILE_PATH
3
- from aip_agents.utils.logger import get_logger as get_logger
4
- from gllm_inference.schema import Attachment as Attachment
5
- from gllm_tools.code_interpreter.code_sandbox.e2b_cloud_sandbox import E2BCloudSandbox
6
- from gllm_tools.code_interpreter.code_sandbox.models import ExecutionResult
7
- from typing import Any
8
-
9
- logger: Incomplete
10
-
11
- class SandboxFileWatcher:
12
- """File watcher for monitoring file creation in sandbox environments."""
13
- sandbox: Incomplete
14
- def __init__(self, sandbox: Any) -> None:
15
- """Initialize the file watcher with a sandbox instance.
16
-
17
- Args:
18
- sandbox (Any): The sandbox instance to monitor.
19
- """
20
- def setup_monitoring(self) -> None:
21
- """Set up filesystem watchers for monitoring file creation.
22
-
23
- Note: /tmp/output is a sandbox-isolated directory, not a shared system /tmp.
24
- This directory is scoped to the E2B sandbox instance and is safe for use.
25
- """
26
- async def process_events(self) -> None:
27
- """Process filesystem events from watchers and update created files list."""
28
- def reset_created_files(self) -> None:
29
- """Reset the list of created files."""
30
- def get_created_files(self) -> list[str]:
31
- """Get the list of files created during monitoring.
32
-
33
- Returns:
34
- list[str]: List of file paths that were created.
35
- """
36
-
37
- class MyE2BCloudSandbox(E2BCloudSandbox):
38
- """Extended E2B Cloud Sandbox with filesystem monitoring capabilities."""
39
- file_watcher: SandboxFileWatcher | None
40
- def __init__(self, *args, **kwargs) -> None:
41
- """Initialize the sandbox with monitoring capabilities.
42
-
43
- Args:
44
- *args: Positional arguments forwarded to ``E2BCloudSandbox``.
45
- **kwargs: Keyword arguments forwarded to ``E2BCloudSandbox``.
46
- """
47
- async def execute_code(self, code: str, timeout: int = 30, files: list[Attachment] | None = None, **kwargs: Any) -> ExecutionResult:
48
- """Execute code in the E2B Cloud sandbox with filesystem monitoring.
49
-
50
- This override fixes the Pydantic validation error by ensuring execution.error
51
- is converted to string. Always enables filesystem monitoring to track
52
- created files.
53
-
54
- Args:
55
- code (str): The code to execute.
56
- timeout (int, optional): Maximum execution time in seconds. Defaults to 30.
57
- files (list[Attachment] | None, optional): List of Attachment objects with file details. Defaults to None.
58
- **kwargs (Any): Additional execution parameters.
59
-
60
- Returns:
61
- ExecutionResult: Structured result of the execution.
62
-
63
- Raises:
64
- RuntimeError: If sandbox is not initialized.
65
- """
66
- def get_created_files(self) -> list[str]:
67
- """Get the list of files created during the last monitored execution.
68
-
69
- Returns:
70
- list[str]: List of file paths that were created.
71
- """
72
- def download_file(self, file_path: str) -> bytes | None:
73
- """Download file content from the sandbox.
74
-
75
- Uses download_url method to get a direct URL and downloads via HTTP,
76
- which avoids the binary corruption issue with files.read().
77
-
78
- Args:
79
- file_path (str): Path to the file in the sandbox.
80
-
81
- Returns:
82
- bytes | None: File content as bytes, or None if download fails.
83
-
84
- Raises:
85
- RuntimeError: If sandbox is not initialized.
86
- """
@@ -1,29 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.a2a.types import get_mime_type_from_filename as get_mime_type_from_filename
3
- from aip_agents.tools.code_sandbox.constant import DATA_FILE_NAME as DATA_FILE_NAME
4
- from aip_agents.tools.code_sandbox.e2b_cloud_sandbox_extended import MyE2BCloudSandbox as MyE2BCloudSandbox
5
- from aip_agents.utils.artifact_helpers import ArtifactHandler as ArtifactHandler, create_multiple_artifacts_response as create_multiple_artifacts_response
6
- from aip_agents.utils.logger import get_logger as get_logger
7
- from langchain_core.tools import BaseTool
8
- from pydantic import BaseModel
9
- from typing import Any
10
-
11
- logger: Incomplete
12
-
13
- class E2BCodeSandboxInput(BaseModel):
14
- """Input schema for the E2BCodeSandboxTool."""
15
- code: str
16
- data_source: str | list[dict[str, Any]] | None
17
- timeout: int
18
- language: str
19
- additional_packages: list[str] | None
20
-
21
- class E2BCodeSandboxTool(BaseTool):
22
- """Tool to execute Python code in E2B Cloud Sandbox."""
23
- name: str
24
- description: str
25
- save_output_history: bool
26
- args_schema: type[BaseModel]
27
- api_key: str
28
- default_additional_packages: list[str]
29
- store_final_output: bool
@@ -1,135 +0,0 @@
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]]
@@ -1,7 +0,0 @@
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']
@@ -1,62 +0,0 @@
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
5
- from langchain_core.tools import BaseTool
6
- from pydantic import BaseModel
7
-
8
- logger: Incomplete
9
-
10
- class BaseDocumentConfig(BaseModel):
11
- """Base tool configuration schema for document processing with batching functionality.
12
-
13
- This configuration enables page-by-page batching to optimize memory usage when
14
- processing large document files. When batching is enabled, documents are processed
15
- sequentially by pages rather than loading the entire document into memory at once.
16
-
17
- Attributes:
18
- batching (bool): Enable page-by-page batching to reduce memory usage.
19
- When True, documents are processed page by page sequentially.
20
- When False, maintains current behavior of loading entire document.
21
- Defaults to False for backward compatibility.
22
- batch_size (int): Number of pages to process in each batch.
23
- Must be between 1 and 100 pages inclusive.
24
- Larger batch sizes may use more memory but could be more efficient.
25
- Smaller batch sizes use less memory but may have more overhead.
26
- Defaults to 10 for balanced memory usage and efficiency.
27
-
28
- Examples:
29
- >>> # Default configuration (no batching)
30
- >>> config = BaseDocumentConfig()
31
- >>> print(config.batching) # False
32
- >>> print(config.batch_size) # 10
33
-
34
- >>> # Enable batching with single page processing
35
- >>> config = BaseDocumentConfig(batching=True, batch_size=1)
36
-
37
- >>> # Enable batching with multi-page batches
38
- >>> config = BaseDocumentConfig(batching=True, batch_size=3)
39
- """
40
- batching: bool
41
- batch_size: int
42
-
43
- class DocumentReaderInput(BaseModel):
44
- """Input schema for the DocumentReader tool."""
45
- file_path: str
46
-
47
- class BaseDocumentReaderTool(BaseTool, ABC):
48
- """Base tool to read and extract text from document files."""
49
- name: str
50
- description: str
51
- args_schema: type[BaseModel]
52
- tool_config_schema: type[BaseModel]
53
- loader: PipelineLoader
54
- def __init__(self) -> None:
55
- """Initialize the base document reader tool."""
56
- def cleanup_memory(self) -> None:
57
- """Explicitly clean up memory and force garbage collection.
58
-
59
- This method can be called after processing to minimize memory usage.
60
- While it won't reset memory to exactly 0, it will free up as much
61
- memory as possible by clearing internal caches and forcing garbage collection.
62
- """
@@ -1,6 +0,0 @@
1
- from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool as BaseDocumentReaderTool
2
-
3
- class DocxReaderTool(BaseDocumentReaderTool):
4
- """Tool to read and extract text from Word documents."""
5
- name: str
6
- description: str
@@ -1,26 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool as BaseDocumentReaderTool
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
@@ -1,11 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.tools.document_loader.base_reader import BaseDocumentReaderTool as BaseDocumentReaderTool
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
@@ -1,18 +0,0 @@
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
- """
@@ -1,3 +0,0 @@
1
- from aip_agents.tools.gl_connector.tool import GLConnectorTool as GLConnectorTool
2
-
3
- __all__ = ['GLConnectorTool']
@@ -1,74 +0,0 @@
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
- """
@@ -1,5 +0,0 @@
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']