aip-agents-binary 0.6.4__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 (612) 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 +3037 -0
  22. aip_agents/agent/base_langgraph_agent.pyi +233 -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 +767 -0
  52. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +50 -0
  53. aip_agents/agent/langgraph_react_agent.py +2856 -0
  54. aip_agents/agent/langgraph_react_agent.pyi +170 -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/hello_world_a2a_google_adk_client.py +49 -0
  75. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  76. aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
  77. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  78. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
  79. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  80. aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
  81. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  82. aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
  83. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  84. aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
  85. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  86. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
  87. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  88. aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
  89. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  90. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
  91. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  92. aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
  93. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  94. aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
  95. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  96. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
  97. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  98. aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
  99. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  100. aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
  101. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  102. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
  103. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  104. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
  105. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  106. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
  107. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  108. aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
  109. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  110. aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
  111. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  112. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
  113. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  114. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
  115. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  116. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
  117. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  118. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
  119. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  120. aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
  121. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  122. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
  123. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  124. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
  125. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  126. aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
  127. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  128. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
  129. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  130. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
  131. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  132. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
  133. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  134. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
  135. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  136. aip_agents/examples/hello_world_google_adk.py +41 -0
  137. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  138. aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
  139. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  140. aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
  141. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  142. aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
  143. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  144. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
  145. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  146. aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
  147. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  148. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
  149. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  150. aip_agents/examples/hello_world_google_adk_stream.py +44 -0
  151. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  152. aip_agents/examples/hello_world_langchain.py +28 -0
  153. aip_agents/examples/hello_world_langchain.pyi +5 -0
  154. aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
  155. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  156. aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
  157. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  158. aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
  159. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  160. aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
  161. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  162. aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
  163. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  164. aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
  165. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  166. aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
  167. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  168. aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
  169. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  170. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
  171. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  172. aip_agents/examples/hello_world_langchain_stream.py +36 -0
  173. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  174. aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
  175. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  176. aip_agents/examples/hello_world_langflow_agent.py +163 -0
  177. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  178. aip_agents/examples/hello_world_langgraph.py +39 -0
  179. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  180. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
  181. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
  182. aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
  183. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  184. aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
  185. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  186. aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
  187. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  188. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
  189. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  190. aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
  191. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  192. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
  193. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  194. aip_agents/examples/hello_world_langgraph_stream.py +43 -0
  195. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  196. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
  197. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  198. aip_agents/examples/hello_world_model_switch_cli.py +210 -0
  199. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  200. aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
  201. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  202. aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
  203. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  204. aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
  205. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  206. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
  207. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  208. aip_agents/examples/hello_world_pii_logger.py +21 -0
  209. aip_agents/examples/hello_world_pii_logger.pyi +5 -0
  210. aip_agents/examples/hello_world_ptc.py +49 -0
  211. aip_agents/examples/hello_world_ptc.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 +55 -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/guardrails/__init__.py +83 -0
  284. aip_agents/guardrails/__init__.pyi +6 -0
  285. aip_agents/guardrails/engines/__init__.py +69 -0
  286. aip_agents/guardrails/engines/__init__.pyi +4 -0
  287. aip_agents/guardrails/engines/base.py +90 -0
  288. aip_agents/guardrails/engines/base.pyi +61 -0
  289. aip_agents/guardrails/engines/nemo.py +101 -0
  290. aip_agents/guardrails/engines/nemo.pyi +46 -0
  291. aip_agents/guardrails/engines/phrase_matcher.py +113 -0
  292. aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
  293. aip_agents/guardrails/exceptions.py +39 -0
  294. aip_agents/guardrails/exceptions.pyi +23 -0
  295. aip_agents/guardrails/manager.py +163 -0
  296. aip_agents/guardrails/manager.pyi +42 -0
  297. aip_agents/guardrails/middleware.py +199 -0
  298. aip_agents/guardrails/middleware.pyi +87 -0
  299. aip_agents/guardrails/schemas.py +63 -0
  300. aip_agents/guardrails/schemas.pyi +43 -0
  301. aip_agents/guardrails/utils.py +45 -0
  302. aip_agents/guardrails/utils.pyi +19 -0
  303. aip_agents/mcp/__init__.py +1 -0
  304. aip_agents/mcp/__init__.pyi +0 -0
  305. aip_agents/mcp/client/__init__.py +14 -0
  306. aip_agents/mcp/client/__init__.pyi +5 -0
  307. aip_agents/mcp/client/base_mcp_client.py +369 -0
  308. aip_agents/mcp/client/base_mcp_client.pyi +148 -0
  309. aip_agents/mcp/client/connection_manager.py +228 -0
  310. aip_agents/mcp/client/connection_manager.pyi +51 -0
  311. aip_agents/mcp/client/google_adk/__init__.py +11 -0
  312. aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
  313. aip_agents/mcp/client/google_adk/client.py +381 -0
  314. aip_agents/mcp/client/google_adk/client.pyi +75 -0
  315. aip_agents/mcp/client/langchain/__init__.py +11 -0
  316. aip_agents/mcp/client/langchain/__init__.pyi +3 -0
  317. aip_agents/mcp/client/langchain/client.py +265 -0
  318. aip_agents/mcp/client/langchain/client.pyi +48 -0
  319. aip_agents/mcp/client/persistent_session.py +612 -0
  320. aip_agents/mcp/client/persistent_session.pyi +122 -0
  321. aip_agents/mcp/client/session_pool.py +351 -0
  322. aip_agents/mcp/client/session_pool.pyi +101 -0
  323. aip_agents/mcp/client/transports.py +263 -0
  324. aip_agents/mcp/client/transports.pyi +132 -0
  325. aip_agents/mcp/utils/__init__.py +7 -0
  326. aip_agents/mcp/utils/__init__.pyi +0 -0
  327. aip_agents/mcp/utils/config_validator.py +139 -0
  328. aip_agents/mcp/utils/config_validator.pyi +82 -0
  329. aip_agents/memory/__init__.py +14 -0
  330. aip_agents/memory/__init__.pyi +5 -0
  331. aip_agents/memory/adapters/__init__.py +10 -0
  332. aip_agents/memory/adapters/__init__.pyi +4 -0
  333. aip_agents/memory/adapters/base_adapter.py +811 -0
  334. aip_agents/memory/adapters/base_adapter.pyi +176 -0
  335. aip_agents/memory/adapters/mem0.py +84 -0
  336. aip_agents/memory/adapters/mem0.pyi +22 -0
  337. aip_agents/memory/base.py +84 -0
  338. aip_agents/memory/base.pyi +60 -0
  339. aip_agents/memory/constants.py +49 -0
  340. aip_agents/memory/constants.pyi +25 -0
  341. aip_agents/memory/factory.py +86 -0
  342. aip_agents/memory/factory.pyi +24 -0
  343. aip_agents/memory/guidance.py +20 -0
  344. aip_agents/memory/guidance.pyi +3 -0
  345. aip_agents/memory/simple_memory.py +47 -0
  346. aip_agents/memory/simple_memory.pyi +23 -0
  347. aip_agents/middleware/__init__.py +17 -0
  348. aip_agents/middleware/__init__.pyi +5 -0
  349. aip_agents/middleware/base.py +96 -0
  350. aip_agents/middleware/base.pyi +75 -0
  351. aip_agents/middleware/manager.py +150 -0
  352. aip_agents/middleware/manager.pyi +84 -0
  353. aip_agents/middleware/todolist.py +274 -0
  354. aip_agents/middleware/todolist.pyi +125 -0
  355. aip_agents/ptc/__init__.py +48 -0
  356. aip_agents/ptc/__init__.pyi +10 -0
  357. aip_agents/ptc/doc_gen.py +122 -0
  358. aip_agents/ptc/doc_gen.pyi +40 -0
  359. aip_agents/ptc/exceptions.py +39 -0
  360. aip_agents/ptc/exceptions.pyi +22 -0
  361. aip_agents/ptc/executor.py +143 -0
  362. aip_agents/ptc/executor.pyi +73 -0
  363. aip_agents/ptc/mcp/__init__.py +45 -0
  364. aip_agents/ptc/mcp/__init__.pyi +7 -0
  365. aip_agents/ptc/mcp/sandbox_bridge.py +668 -0
  366. aip_agents/ptc/mcp/sandbox_bridge.pyi +47 -0
  367. aip_agents/ptc/mcp/templates/__init__.py +1 -0
  368. aip_agents/ptc/mcp/templates/__init__.pyi +0 -0
  369. aip_agents/ptc/mcp/templates/mcp_client.py.template +239 -0
  370. aip_agents/ptc/naming.py +184 -0
  371. aip_agents/ptc/naming.pyi +76 -0
  372. aip_agents/ptc/payload.py +26 -0
  373. aip_agents/ptc/payload.pyi +15 -0
  374. aip_agents/ptc/prompt_builder.py +571 -0
  375. aip_agents/ptc/prompt_builder.pyi +55 -0
  376. aip_agents/ptc/ptc_helper.py +16 -0
  377. aip_agents/ptc/ptc_helper.pyi +1 -0
  378. aip_agents/ptc/sandbox_bridge.py +58 -0
  379. aip_agents/ptc/sandbox_bridge.pyi +25 -0
  380. aip_agents/ptc/template_utils.py +33 -0
  381. aip_agents/ptc/template_utils.pyi +13 -0
  382. aip_agents/ptc/templates/__init__.py +1 -0
  383. aip_agents/ptc/templates/__init__.pyi +0 -0
  384. aip_agents/ptc/templates/ptc_helper.py.template +134 -0
  385. aip_agents/sandbox/__init__.py +43 -0
  386. aip_agents/sandbox/__init__.pyi +5 -0
  387. aip_agents/sandbox/defaults.py +9 -0
  388. aip_agents/sandbox/defaults.pyi +2 -0
  389. aip_agents/sandbox/e2b_runtime.py +267 -0
  390. aip_agents/sandbox/e2b_runtime.pyi +51 -0
  391. aip_agents/sandbox/template_builder.py +131 -0
  392. aip_agents/sandbox/template_builder.pyi +36 -0
  393. aip_agents/sandbox/types.py +24 -0
  394. aip_agents/sandbox/types.pyi +14 -0
  395. aip_agents/sandbox/validation.py +50 -0
  396. aip_agents/sandbox/validation.pyi +20 -0
  397. aip_agents/schema/__init__.py +69 -0
  398. aip_agents/schema/__init__.pyi +9 -0
  399. aip_agents/schema/a2a.py +56 -0
  400. aip_agents/schema/a2a.pyi +40 -0
  401. aip_agents/schema/agent.py +111 -0
  402. aip_agents/schema/agent.pyi +65 -0
  403. aip_agents/schema/hitl.py +157 -0
  404. aip_agents/schema/hitl.pyi +89 -0
  405. aip_agents/schema/langgraph.py +37 -0
  406. aip_agents/schema/langgraph.pyi +28 -0
  407. aip_agents/schema/model_id.py +97 -0
  408. aip_agents/schema/model_id.pyi +54 -0
  409. aip_agents/schema/step_limit.py +108 -0
  410. aip_agents/schema/step_limit.pyi +63 -0
  411. aip_agents/schema/storage.py +40 -0
  412. aip_agents/schema/storage.pyi +21 -0
  413. aip_agents/sentry/__init__.py +11 -0
  414. aip_agents/sentry/__init__.pyi +3 -0
  415. aip_agents/sentry/sentry.py +151 -0
  416. aip_agents/sentry/sentry.pyi +48 -0
  417. aip_agents/storage/__init__.py +41 -0
  418. aip_agents/storage/__init__.pyi +8 -0
  419. aip_agents/storage/base.py +85 -0
  420. aip_agents/storage/base.pyi +58 -0
  421. aip_agents/storage/clients/__init__.py +12 -0
  422. aip_agents/storage/clients/__init__.pyi +3 -0
  423. aip_agents/storage/clients/minio_client.py +318 -0
  424. aip_agents/storage/clients/minio_client.pyi +137 -0
  425. aip_agents/storage/config.py +62 -0
  426. aip_agents/storage/config.pyi +29 -0
  427. aip_agents/storage/providers/__init__.py +15 -0
  428. aip_agents/storage/providers/__init__.pyi +5 -0
  429. aip_agents/storage/providers/base.py +106 -0
  430. aip_agents/storage/providers/base.pyi +88 -0
  431. aip_agents/storage/providers/memory.py +114 -0
  432. aip_agents/storage/providers/memory.pyi +79 -0
  433. aip_agents/storage/providers/object_storage.py +214 -0
  434. aip_agents/storage/providers/object_storage.pyi +98 -0
  435. aip_agents/tools/__init__.py +64 -0
  436. aip_agents/tools/__init__.pyi +11 -0
  437. aip_agents/tools/browser_use/__init__.py +82 -0
  438. aip_agents/tools/browser_use/__init__.pyi +14 -0
  439. aip_agents/tools/browser_use/action_parser.py +103 -0
  440. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  441. aip_agents/tools/browser_use/browser_use_tool.py +1120 -0
  442. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  443. aip_agents/tools/browser_use/llm_config.py +120 -0
  444. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  445. aip_agents/tools/browser_use/minio_storage.py +198 -0
  446. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  447. aip_agents/tools/browser_use/schemas.py +119 -0
  448. aip_agents/tools/browser_use/schemas.pyi +32 -0
  449. aip_agents/tools/browser_use/session.py +76 -0
  450. aip_agents/tools/browser_use/session.pyi +4 -0
  451. aip_agents/tools/browser_use/session_errors.py +132 -0
  452. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  453. aip_agents/tools/browser_use/steel_session_recording.py +317 -0
  454. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  455. aip_agents/tools/browser_use/streaming.py +815 -0
  456. aip_agents/tools/browser_use/streaming.pyi +81 -0
  457. aip_agents/tools/browser_use/structured_data_parser.py +257 -0
  458. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  459. aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
  460. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  461. aip_agents/tools/browser_use/types.py +78 -0
  462. aip_agents/tools/browser_use/types.pyi +45 -0
  463. aip_agents/tools/code_sandbox/__init__.py +26 -0
  464. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  465. aip_agents/tools/code_sandbox/constant.py +13 -0
  466. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  467. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +306 -0
  468. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
  469. aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
  470. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  471. aip_agents/tools/constants.py +177 -0
  472. aip_agents/tools/constants.pyi +138 -0
  473. aip_agents/tools/date_range_tool.py +554 -0
  474. aip_agents/tools/date_range_tool.pyi +21 -0
  475. aip_agents/tools/document_loader/__init__.py +44 -0
  476. aip_agents/tools/document_loader/__init__.pyi +7 -0
  477. aip_agents/tools/document_loader/base_reader.py +302 -0
  478. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  479. aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
  480. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  481. aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
  482. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  483. aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
  484. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  485. aip_agents/tools/document_loader/pdf_splitter.py +169 -0
  486. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  487. aip_agents/tools/execute_ptc_code.py +308 -0
  488. aip_agents/tools/execute_ptc_code.pyi +90 -0
  489. aip_agents/tools/gl_connector/__init__.py +5 -0
  490. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  491. aip_agents/tools/gl_connector/tool.py +383 -0
  492. aip_agents/tools/gl_connector/tool.pyi +74 -0
  493. aip_agents/tools/gl_connector_tools.py +119 -0
  494. aip_agents/tools/gl_connector_tools.pyi +39 -0
  495. aip_agents/tools/memory_search/__init__.py +29 -0
  496. aip_agents/tools/memory_search/__init__.pyi +5 -0
  497. aip_agents/tools/memory_search/base.py +200 -0
  498. aip_agents/tools/memory_search/base.pyi +69 -0
  499. aip_agents/tools/memory_search/mem0.py +365 -0
  500. aip_agents/tools/memory_search/mem0.pyi +29 -0
  501. aip_agents/tools/memory_search/schema.py +81 -0
  502. aip_agents/tools/memory_search/schema.pyi +25 -0
  503. aip_agents/tools/memory_search_tool.py +34 -0
  504. aip_agents/tools/memory_search_tool.pyi +3 -0
  505. aip_agents/tools/time_tool.py +117 -0
  506. aip_agents/tools/time_tool.pyi +16 -0
  507. aip_agents/tools/tool_config_injector.py +300 -0
  508. aip_agents/tools/tool_config_injector.pyi +26 -0
  509. aip_agents/tools/web_search/__init__.py +15 -0
  510. aip_agents/tools/web_search/__init__.pyi +3 -0
  511. aip_agents/tools/web_search/serper_tool.py +187 -0
  512. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  513. aip_agents/types/__init__.py +70 -0
  514. aip_agents/types/__init__.pyi +36 -0
  515. aip_agents/types/a2a_events.py +13 -0
  516. aip_agents/types/a2a_events.pyi +3 -0
  517. aip_agents/utils/__init__.py +79 -0
  518. aip_agents/utils/__init__.pyi +11 -0
  519. aip_agents/utils/a2a_connector.py +1757 -0
  520. aip_agents/utils/a2a_connector.pyi +146 -0
  521. aip_agents/utils/artifact_helpers.py +502 -0
  522. aip_agents/utils/artifact_helpers.pyi +203 -0
  523. aip_agents/utils/constants.py +22 -0
  524. aip_agents/utils/constants.pyi +10 -0
  525. aip_agents/utils/datetime/__init__.py +34 -0
  526. aip_agents/utils/datetime/__init__.pyi +4 -0
  527. aip_agents/utils/datetime/normalization.py +231 -0
  528. aip_agents/utils/datetime/normalization.pyi +95 -0
  529. aip_agents/utils/datetime/timezone.py +206 -0
  530. aip_agents/utils/datetime/timezone.pyi +48 -0
  531. aip_agents/utils/env_loader.py +27 -0
  532. aip_agents/utils/env_loader.pyi +10 -0
  533. aip_agents/utils/event_handler_registry.py +58 -0
  534. aip_agents/utils/event_handler_registry.pyi +23 -0
  535. aip_agents/utils/file_prompt_utils.py +176 -0
  536. aip_agents/utils/file_prompt_utils.pyi +21 -0
  537. aip_agents/utils/final_response_builder.py +211 -0
  538. aip_agents/utils/final_response_builder.pyi +34 -0
  539. aip_agents/utils/formatter_llm_client.py +231 -0
  540. aip_agents/utils/formatter_llm_client.pyi +71 -0
  541. aip_agents/utils/langgraph/__init__.py +19 -0
  542. aip_agents/utils/langgraph/__init__.pyi +3 -0
  543. aip_agents/utils/langgraph/converter.py +128 -0
  544. aip_agents/utils/langgraph/converter.pyi +49 -0
  545. aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
  546. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  547. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
  548. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  549. aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
  550. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  551. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1096 -0
  552. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  553. aip_agents/utils/langgraph/tool_output_management.py +1047 -0
  554. aip_agents/utils/langgraph/tool_output_management.pyi +329 -0
  555. aip_agents/utils/logger.py +195 -0
  556. aip_agents/utils/logger.pyi +60 -0
  557. aip_agents/utils/metadata/__init__.py +27 -0
  558. aip_agents/utils/metadata/__init__.pyi +5 -0
  559. aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
  560. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  561. aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
  562. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  563. aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
  564. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  565. aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
  566. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  567. aip_agents/utils/metadata/activity_narrative/context.py +49 -0
  568. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  569. aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
  570. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  571. aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
  572. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  573. aip_agents/utils/metadata/schemas/__init__.py +16 -0
  574. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  575. aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
  576. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  577. aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
  578. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  579. aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
  580. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  581. aip_agents/utils/metadata_helper.py +358 -0
  582. aip_agents/utils/metadata_helper.pyi +117 -0
  583. aip_agents/utils/name_preprocessor/__init__.py +17 -0
  584. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  585. aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
  586. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  587. aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
  588. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  589. aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
  590. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  591. aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
  592. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  593. aip_agents/utils/pii/__init__.py +25 -0
  594. aip_agents/utils/pii/__init__.pyi +5 -0
  595. aip_agents/utils/pii/pii_handler.py +397 -0
  596. aip_agents/utils/pii/pii_handler.pyi +96 -0
  597. aip_agents/utils/pii/pii_helper.py +207 -0
  598. aip_agents/utils/pii/pii_helper.pyi +78 -0
  599. aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
  600. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  601. aip_agents/utils/reference_helper.py +273 -0
  602. aip_agents/utils/reference_helper.pyi +81 -0
  603. aip_agents/utils/sse_chunk_transformer.py +831 -0
  604. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  605. aip_agents/utils/step_limit_manager.py +265 -0
  606. aip_agents/utils/step_limit_manager.pyi +112 -0
  607. aip_agents/utils/token_usage_helper.py +156 -0
  608. aip_agents/utils/token_usage_helper.pyi +60 -0
  609. aip_agents_binary-0.6.4.dist-info/METADATA +673 -0
  610. aip_agents_binary-0.6.4.dist-info/RECORD +612 -0
  611. aip_agents_binary-0.6.4.dist-info/WHEEL +5 -0
  612. aip_agents_binary-0.6.4.dist-info/top_level.txt +1 -0
@@ -0,0 +1,81 @@
1
+ """Pydantic schemas shared by memory search tools.
2
+
3
+ Authors:
4
+ Raymond Christopher (raymond.christopher@gdplabs.id)
5
+ """
6
+
7
+ from typing import Any
8
+
9
+ from pydantic import BaseModel, Field
10
+
11
+
12
+ class MemoryConfig(BaseModel):
13
+ """Tool configuration schema for memory operations."""
14
+
15
+ user_id: str = Field(description="User identifier for memory scoping")
16
+
17
+
18
+ class LongTermMemorySearchInput(BaseModel):
19
+ """Input schema for unified long-term memory retrieval."""
20
+
21
+ query: str | None = Field(
22
+ None,
23
+ description="Optional semantic query for searching memories. If provided, performs semantic search. "
24
+ "If omitted, performs pure date-based recall using time filters.",
25
+ )
26
+ start_date: str | None = Field(
27
+ None,
28
+ description="Explicit start date in YYYY-MM-DD format. Used with end_date for precise date ranges. "
29
+ "If omitted, recall is unbounded at the start.",
30
+ )
31
+ end_date: str | None = Field(
32
+ None,
33
+ description="Explicit end date in YYYY-MM-DD format. Used with start_date for precise date ranges. "
34
+ "If omitted, recall is unbounded at the end.",
35
+ )
36
+ limit: int | None = Field(
37
+ None,
38
+ description="Maximum number of memories to retrieve. If not specified, uses default. "
39
+ "Values below 5 are automatically increased to ensure adequate context.",
40
+ )
41
+ categories: list[str] | None = Field(
42
+ None,
43
+ description="Optional categories to filter by (uses 'in' operator).",
44
+ )
45
+ metadata: dict[str, Any] | None = Field(
46
+ None,
47
+ description="Optional metadata dict to filter by (exact key-value match).",
48
+ )
49
+
50
+
51
+ class LongTermMemoryDeleteInput(BaseModel):
52
+ """Input schema for unified long-term memory deletion."""
53
+
54
+ query: str | None = Field(
55
+ None,
56
+ description="Semantic query describing memories to delete. If provided, delete_by_user_query is used.",
57
+ )
58
+ memory_ids: list[str] | None = Field(
59
+ None,
60
+ description="Optional list of memory IDs to delete directly.",
61
+ )
62
+ delete_all: bool | None = Field(
63
+ None,
64
+ description="When True and no query/IDs are provided, delete all memories for the user scope.",
65
+ )
66
+ top_k: int | None = Field(
67
+ None,
68
+ description="Optional maximum number of memories to delete by query.",
69
+ )
70
+ threshold: float | None = Field(
71
+ None,
72
+ description="Optional semantic threshold for delete_by_user_query.",
73
+ )
74
+ categories: list[str] | None = Field(
75
+ None,
76
+ description="Optional categories to filter by (uses 'in' operator).",
77
+ )
78
+ metadata: dict[str, Any] | None = Field(
79
+ None,
80
+ description="Optional metadata dict to filter by (exact key-value match).",
81
+ )
@@ -0,0 +1,25 @@
1
+ from pydantic import BaseModel
2
+ from typing import Any
3
+
4
+ class MemoryConfig(BaseModel):
5
+ """Tool configuration schema for memory operations."""
6
+ user_id: str
7
+
8
+ class LongTermMemorySearchInput(BaseModel):
9
+ """Input schema for unified long-term memory retrieval."""
10
+ query: str | None
11
+ start_date: str | None
12
+ end_date: str | None
13
+ limit: int | None
14
+ categories: list[str] | None
15
+ metadata: dict[str, Any] | None
16
+
17
+ class LongTermMemoryDeleteInput(BaseModel):
18
+ """Input schema for unified long-term memory deletion."""
19
+ query: str | None
20
+ memory_ids: list[str] | None
21
+ delete_all: bool | None
22
+ top_k: int | None
23
+ threshold: float | None
24
+ categories: list[str] | None
25
+ metadata: dict[str, Any] | None
@@ -0,0 +1,34 @@
1
+ """Backward-compatible shim for the memory search tool module.
2
+
3
+ The actual implementations now live under ``aip_agents.tools.memory_search``.
4
+ Importing from this module continues to work for existing callers.
5
+
6
+ Authors:
7
+ Raymond Christopher (raymond.christopher@gdplabs.id)
8
+ """
9
+
10
+ from aip_agents.tools.memory_search import (
11
+ MEMORY_DELETE_TOOL_NAME,
12
+ MEMORY_SEARCH_TOOL_NAME,
13
+ LongTermMemoryDeleteInput,
14
+ LongTermMemorySearchInput,
15
+ LongTermMemorySearchTool,
16
+ Mem0DeleteInput,
17
+ Mem0DeleteTool,
18
+ Mem0SearchInput,
19
+ Mem0SearchTool,
20
+ MemoryConfig,
21
+ )
22
+
23
+ __all__ = [
24
+ "MemoryConfig",
25
+ "LongTermMemoryDeleteInput",
26
+ "LongTermMemorySearchInput",
27
+ "LongTermMemorySearchTool",
28
+ "Mem0DeleteInput",
29
+ "Mem0DeleteTool",
30
+ "Mem0SearchInput",
31
+ "Mem0SearchTool",
32
+ "MEMORY_DELETE_TOOL_NAME",
33
+ "MEMORY_SEARCH_TOOL_NAME",
34
+ ]
@@ -0,0 +1,3 @@
1
+ from aip_agents.tools.memory_search import LongTermMemoryDeleteInput as LongTermMemoryDeleteInput, LongTermMemorySearchInput as LongTermMemorySearchInput, LongTermMemorySearchTool as LongTermMemorySearchTool, MEMORY_DELETE_TOOL_NAME as MEMORY_DELETE_TOOL_NAME, MEMORY_SEARCH_TOOL_NAME as MEMORY_SEARCH_TOOL_NAME, Mem0DeleteInput as Mem0DeleteInput, Mem0DeleteTool as Mem0DeleteTool, Mem0SearchInput as Mem0SearchInput, Mem0SearchTool as Mem0SearchTool, MemoryConfig as MemoryConfig
2
+
3
+ __all__ = ['MemoryConfig', 'LongTermMemoryDeleteInput', 'LongTermMemorySearchInput', 'LongTermMemorySearchTool', 'Mem0DeleteInput', 'Mem0DeleteTool', 'Mem0SearchInput', 'Mem0SearchTool', 'MEMORY_DELETE_TOOL_NAME', 'MEMORY_SEARCH_TOOL_NAME']
@@ -0,0 +1,117 @@
1
+ """Tool to get the current time.
2
+
3
+ Authors:
4
+ Saul Sayers (saul.sayers@gdplabs.id)
5
+ """
6
+
7
+ import re
8
+ from datetime import datetime, timedelta, timezone, tzinfo
9
+
10
+ from dateutil import tz
11
+ from langchain_core.tools import BaseTool
12
+ from pydantic import BaseModel, Field
13
+
14
+ FORMAT_STRING = "%m/%d/%y %H:%M:%S"
15
+ DEFAULT_TIMEZONE = "UTC+7"
16
+
17
+
18
+ class TimeToolInput(BaseModel):
19
+ """Input schema for the TimeTool."""
20
+
21
+ datetime_format: str = Field(
22
+ default=FORMAT_STRING,
23
+ description="""
24
+ Optional datetime format string. Default: '%m/%d/%y %H:%M:%S'
25
+
26
+ Common format codes:
27
+ %Y: Year with century (2024)
28
+ %m: Month as number (01-12)
29
+ %d: Day of month (01-31)
30
+ %A: Full weekday name (Wednesday)
31
+ %a: Short weekday name (Wed)
32
+ %H: Hour (00-23)
33
+ %M: Minute (00-59)
34
+ %S: Second (00-59)
35
+ %Z: Timezone name
36
+ %j: Day of year (001-366)
37
+ %W: Week number (00-53, Monday first)
38
+ %U: Week number (00-53, Sunday first)
39
+ %c: Locale's date and time
40
+ %x: Locale's date
41
+ %X: Locale's time
42
+ """,
43
+ )
44
+ timezone: str | None = Field(
45
+ default=DEFAULT_TIMEZONE,
46
+ description="""
47
+ Optional timezone identifier. Supports IANA names (e.g., 'Asia/Jakarta')
48
+ or offsets (e.g., 'UTC+7', 'UTC-04:30'). Default: 'UTC+7' (Asia/Jakarta).
49
+ Highly recommended to be filled when getting the current time to ensure
50
+ the time is in the correct timezone.
51
+ """,
52
+ )
53
+
54
+
55
+ def _parse_timezone(timezone_value: str | None) -> tzinfo | None:
56
+ """Return a tzinfo instance for a given timezone string.
57
+
58
+ Args:
59
+ timezone_value: Timezone string (e.g., "UTC+7", "UTC-5:30") or None.
60
+
61
+ Returns:
62
+ tzinfo instance or None if invalid/None input.
63
+ """
64
+ if timezone_value is None:
65
+ return None
66
+
67
+ tz_string = timezone_value.strip()
68
+ if not tz_string:
69
+ return None
70
+
71
+ offset_match = re.fullmatch(r"UTC([+-])(\d{1,2})(?::?(\d{2}))?$", tz_string.upper())
72
+ if offset_match:
73
+ sign, hours_str, minutes_str = offset_match.groups()
74
+ hours = int(hours_str)
75
+ minutes = int(minutes_str) if minutes_str else 0
76
+ MAX_HOURS_OFFSET = 12
77
+ MINUTES_OFFSETS = [0, 30, 45]
78
+ if hours > MAX_HOURS_OFFSET or minutes not in MINUTES_OFFSETS:
79
+ raise ValueError(f"Invalid timezone offset: {timezone_value}")
80
+ delta = timedelta(hours=hours, minutes=minutes)
81
+ if sign == "-":
82
+ delta = -delta
83
+ return timezone(delta)
84
+
85
+ tzinfo = tz.gettz(tz_string)
86
+ if tzinfo is not None:
87
+ return tzinfo
88
+
89
+ raise ValueError(f"Unknown timezone: {timezone_value}")
90
+
91
+
92
+ class TimeTool(BaseTool):
93
+ """Tool to get the current time."""
94
+
95
+ name: str = "time_tool"
96
+ description: str = """
97
+ Useful for getting the current time in a specified format and timezone.
98
+ Default format: '%m/%d/%y %H:%M:%S' (e.g., '05/15/24 17:30:00')
99
+
100
+ Supports timezone specification to get the current time in any timezone.
101
+ It is highly recommended to specify a timezone to ensure accurate results.
102
+ """
103
+ args_schema: type[BaseModel] = TimeToolInput
104
+
105
+ def _run(self, datetime_format: str = FORMAT_STRING, timezone: str | None = DEFAULT_TIMEZONE) -> str:
106
+ """Get current time formatted according to the specified format and timezone.
107
+
108
+ Args:
109
+ datetime_format: Format string for datetime (default: ISO format).
110
+ timezone: Timezone string (default: UTC).
111
+
112
+ Returns:
113
+ Formatted datetime string.
114
+ """
115
+ tzinfo = _parse_timezone(timezone)
116
+ current_time = datetime.now(tz=tzinfo)
117
+ return current_time.strftime(datetime_format)
@@ -0,0 +1,16 @@
1
+ from langchain_core.tools import BaseTool
2
+ from pydantic import BaseModel
3
+
4
+ FORMAT_STRING: str
5
+ DEFAULT_TIMEZONE: str
6
+
7
+ class TimeToolInput(BaseModel):
8
+ """Input schema for the TimeTool."""
9
+ datetime_format: str
10
+ timezone: str | None
11
+
12
+ class TimeTool(BaseTool):
13
+ """Tool to get the current time."""
14
+ name: str
15
+ description: str
16
+ args_schema: type[BaseModel]
@@ -0,0 +1,300 @@
1
+ """Tool Configuration Injector for existing LangChain tools.
2
+
3
+ This module provides utilities to inject Pydantic-based configuration into existing
4
+ LangChain tools without requiring inheritance or modification of the tool classes.
5
+
6
+ The SDK automatically injects configuration capabilities into tools that have a
7
+ tool_config_schema attribute, providing:
8
+ - Agent-level default configurations
9
+ - Runtime configuration overrides via RunnableConfig metadata
10
+ - Type-safe validation using Pydantic models
11
+ - Support for optional fields with proper default handling
12
+
13
+ Configuration Extraction Examples:
14
+
15
+ Nested format:
16
+ metadata = {"tool_configs": {"tool_name": {"api_key": "secret", "timeout": 30}}}
17
+
18
+ Flattened format (only works if ALL required fields are present):
19
+ metadata = {"api_key": "secret", "timeout": 30} # Optional fields can be omitted
20
+
21
+ Required vs Optional fields:
22
+ class ToolConfig(BaseModel):
23
+ api_key: str # Required - must be provided
24
+ timeout: int = 30 # Optional - will use default if not provided
25
+ retries: Optional[int] = None # Optional - can be None
26
+
27
+ Authors:
28
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
29
+ """
30
+
31
+ from typing import Any, TypeVar
32
+
33
+ from langchain_core.runnables import RunnableConfig
34
+ from langchain_core.tools import BaseTool
35
+ from pydantic import BaseModel
36
+
37
+ from aip_agents.utils.logger import get_logger
38
+
39
+ logger = get_logger(__name__)
40
+
41
+ ConfigSchema = TypeVar("ConfigSchema", bound=BaseModel)
42
+
43
+ # Public API exports
44
+ __all__ = [
45
+ "inject_config_methods_into_tool",
46
+ "CONFIG_SCHEMA_ATTR",
47
+ "CONFIG_ATTR",
48
+ "TOOL_CONFIG_SCHEMA_ATTR",
49
+ "TOOL_CONFIGS_KEY",
50
+ ]
51
+
52
+ # Constants for configuration attribute names and keys
53
+ CONFIG_SCHEMA_ATTR: str = "_config_schema"
54
+ CONFIG_ATTR: str = "_config"
55
+ TOOL_CONFIG_SCHEMA_ATTR: str = "tool_config_schema"
56
+ TOOL_CONFIGS_KEY: str = "tool_configs"
57
+
58
+
59
+ def _get_config_field_names(schema: type[BaseModel]) -> list[str]:
60
+ """Get field names from a Pydantic model schema.
61
+
62
+ Args:
63
+ schema: The Pydantic model schema to get field names from.
64
+
65
+ Returns:
66
+ A list of field names.
67
+ """
68
+ if hasattr(schema, "model_fields"):
69
+ return list(schema.model_fields.keys())
70
+ elif hasattr(schema, "__fields__"):
71
+ return list(schema.__fields__.keys())
72
+ else:
73
+ return []
74
+
75
+
76
+ def _get_required_field_names(schema: type[BaseModel]) -> set[str]:
77
+ """Get required field names from a Pydantic model schema.
78
+
79
+ Args:
80
+ schema: The Pydantic model schema to get required field names from.
81
+
82
+ Returns:
83
+ A set of required field names.
84
+ """
85
+ # Pydantic V2
86
+ if hasattr(schema, "model_fields"):
87
+ return {name for name, field_info in schema.model_fields.items() if field_info.is_required()}
88
+
89
+ # Pydantic V1 (fallback)
90
+ elif hasattr(schema, "__fields__"):
91
+ return {name for name, field in schema.__fields__.items() if field.required}
92
+
93
+ return set()
94
+
95
+
96
+ def _extract_nested_config(tool: BaseTool, metadata: dict[str, Any]) -> ConfigSchema | None:
97
+ """Extract tool config from nested tool_configs structure.
98
+
99
+ Args:
100
+ tool: The tool instance to extract configuration from.
101
+ metadata: The metadata to use.
102
+
103
+ Returns:
104
+ The nested configuration.
105
+ """
106
+ tool_configs = metadata.get(TOOL_CONFIGS_KEY, {})
107
+ if not isinstance(tool_configs, dict) or tool.name not in tool_configs:
108
+ return None
109
+
110
+ tool_config_data = tool_configs[tool.name]
111
+ try:
112
+ config_schema = getattr(tool, CONFIG_SCHEMA_ATTR)
113
+ if isinstance(tool_config_data, dict):
114
+ return config_schema(**tool_config_data)
115
+ elif isinstance(tool_config_data, config_schema):
116
+ return tool_config_data
117
+ except Exception as e:
118
+ logger.debug(f"Failed to validate nested config for tool '{tool.name}': {e}")
119
+
120
+ return None
121
+
122
+
123
+ def _extract_flattened_config(tool: BaseTool, metadata: dict[str, Any]) -> ConfigSchema | None:
124
+ """Extract tool config from flattened metadata keys.
125
+
126
+ This function builds a configuration from metadata keys that match the tool's
127
+ config schema field names. Only required fields must be present; optional fields
128
+ with defaults will be handled by Pydantic during instantiation.
129
+
130
+ Behavior:
131
+ - Returns None silently if metadata is empty (likely using agent defaults)
132
+ - Logs debug message if metadata exists but contains no matching config fields
133
+ - Logs warning if some required fields are missing from provided config fields
134
+
135
+ Args:
136
+ tool: The tool instance to extract configuration from.
137
+ metadata: The metadata to use.
138
+
139
+ Returns:
140
+ The flattened configuration if all required fields are present, None otherwise.
141
+ """
142
+ config_schema = getattr(tool, CONFIG_SCHEMA_ATTR)
143
+ config_fields = _get_config_field_names(config_schema)
144
+ required_fields = _get_required_field_names(config_schema)
145
+
146
+ if not config_fields:
147
+ return None
148
+
149
+ # Extract all available config fields from metadata
150
+ flattened_config = {}
151
+ for field_name in config_fields:
152
+ if field_name in metadata:
153
+ flattened_config[field_name] = metadata[field_name]
154
+
155
+ # Only proceed if we have at least some configuration fields
156
+ if not flattened_config:
157
+ if metadata:
158
+ logger.debug(
159
+ f"No valid config fields found in flattened metadata for tool '{tool.name}'. "
160
+ f"Available metadata keys: {list(metadata.keys())}, "
161
+ f"Expected config fields: {config_fields}"
162
+ )
163
+ return None
164
+
165
+ # Check if all required fields are present
166
+ provided_fields = set(flattened_config.keys())
167
+ missing_required_fields = required_fields - provided_fields
168
+
169
+ if missing_required_fields:
170
+ logger.warning(f"Missing required fields for flattened config in tool '{tool.name}': {missing_required_fields}")
171
+ return None
172
+
173
+ try:
174
+ return config_schema(**flattened_config)
175
+ except Exception as e:
176
+ logger.debug(f"Failed to validate flattened config for tool '{tool.name}': {e}")
177
+
178
+ return None
179
+
180
+
181
+ def _extract_runtime_config(tool: BaseTool, config: RunnableConfig | None) -> ConfigSchema | None:
182
+ """Extract runtime configuration from RunnableConfig metadata.
183
+
184
+ Args:
185
+ tool: The tool instance to extract configuration from.
186
+ config: The configuration to use.
187
+
188
+ Returns:
189
+ The runtime configuration.
190
+ """
191
+ if not config or not hasattr(tool, CONFIG_SCHEMA_ATTR):
192
+ return None
193
+
194
+ metadata = config.get("metadata", {})
195
+ if not isinstance(metadata, dict):
196
+ return None
197
+
198
+ # Try nested structure first
199
+ nested_config = _extract_nested_config(tool, metadata)
200
+ if nested_config is not None:
201
+ return nested_config
202
+
203
+ # Try flattened structure
204
+ return _extract_flattened_config(tool, metadata)
205
+
206
+
207
+ def _create_tool_config_methods(tool: BaseTool) -> dict[str, Any]:
208
+ """Create the configuration management methods for a tool.
209
+
210
+ Args:
211
+ tool: The tool instance to create methods for.
212
+
213
+ Returns:
214
+ Dictionary of method names to method functions.
215
+ """
216
+
217
+ def set_tool_config(config: ConfigSchema | dict[str, Any] | None) -> None:
218
+ """Set the tool's agent-level default configuration with validation.
219
+
220
+ Args:
221
+ config: The configuration to set.
222
+
223
+ Raises:
224
+ ValueError: If the config is not an instance of the tool's config schema or a dictionary.
225
+ """
226
+ if config is None:
227
+ object.__setattr__(tool, CONFIG_ATTR, None)
228
+ return
229
+
230
+ config_schema = getattr(tool, CONFIG_SCHEMA_ATTR)
231
+ if isinstance(config, dict):
232
+ object.__setattr__(tool, CONFIG_ATTR, config_schema(**config))
233
+ elif isinstance(config, config_schema):
234
+ object.__setattr__(tool, CONFIG_ATTR, config)
235
+ else:
236
+ config_schema_name = getattr(config_schema, "__name__", repr(config_schema))
237
+ raise ValueError(f"Config must be an instance of {config_schema_name} or dict, got {type(config).__name__}")
238
+
239
+ def get_default_config() -> ConfigSchema | None:
240
+ """Get the agent-level default configuration.
241
+
242
+ Returns:
243
+ The agent-level default configuration.
244
+ """
245
+ return getattr(tool, CONFIG_ATTR)
246
+
247
+ def has_tool_config() -> bool:
248
+ """Check if the tool has an agent-level default configuration set.
249
+
250
+ Returns:
251
+ True if the tool has an agent-level default configuration set, False otherwise.
252
+ """
253
+ return getattr(tool, CONFIG_ATTR) is not None
254
+
255
+ def get_tool_config(config: RunnableConfig | None = None) -> ConfigSchema | None:
256
+ """Get the effective tool configuration.
257
+
258
+ This function extracts the tool configuration from the runnable configuration.
259
+ If the tool configuration is not found in the runnable configuration, it will
260
+ return the agent-level default configuration.
261
+
262
+ Args:
263
+ config: The runnable configuration to use from LangGraph.
264
+
265
+ Returns:
266
+ The effective tool configuration.
267
+ """
268
+ runtime_config = _extract_runtime_config(tool, config)
269
+ return runtime_config if runtime_config is not None else getattr(tool, CONFIG_ATTR)
270
+
271
+ return {
272
+ "set_tool_config": set_tool_config,
273
+ "get_default_config": get_default_config,
274
+ "has_tool_config": has_tool_config,
275
+ "get_tool_config": get_tool_config,
276
+ }
277
+
278
+
279
+ def inject_config_methods_into_tool(tool: BaseTool, config_schema: type[ConfigSchema]) -> None:
280
+ """Inject configuration methods into a tool.
281
+
282
+ This function is used by the SDK to automatically inject configuration capabilities
283
+ into tools that have a tool_config_schema attribute. It can also be used directly
284
+ by developers who want to add configuration support to their tools.
285
+
286
+ Args:
287
+ tool: The tool to inject configuration capabilities into.
288
+ config_schema: Pydantic model class for configuration validation.
289
+
290
+ Raises:
291
+ ValueError: If tool is not a BaseTool instance or config_schema is not a Pydantic BaseModel subclass.
292
+ """
293
+ # Add configuration attributes
294
+ object.__setattr__(tool, CONFIG_SCHEMA_ATTR, config_schema)
295
+ object.__setattr__(tool, CONFIG_ATTR, None)
296
+
297
+ # Create and inject methods
298
+ methods = _create_tool_config_methods(tool)
299
+ for method_name, method_func in methods.items():
300
+ object.__setattr__(tool, method_name, method_func)
@@ -0,0 +1,26 @@
1
+ from langchain_core.tools import BaseTool
2
+ from pydantic import BaseModel
3
+ from typing import TypeVar
4
+
5
+ __all__ = ['inject_config_methods_into_tool', 'CONFIG_SCHEMA_ATTR', 'CONFIG_ATTR', 'TOOL_CONFIG_SCHEMA_ATTR', 'TOOL_CONFIGS_KEY']
6
+
7
+ ConfigSchema = TypeVar('ConfigSchema', bound=BaseModel)
8
+ CONFIG_SCHEMA_ATTR: str
9
+ CONFIG_ATTR: str
10
+ TOOL_CONFIG_SCHEMA_ATTR: str
11
+ TOOL_CONFIGS_KEY: str
12
+
13
+ def inject_config_methods_into_tool(tool: BaseTool, config_schema: type[ConfigSchema]) -> None:
14
+ """Inject configuration methods into a tool.
15
+
16
+ This function is used by the SDK to automatically inject configuration capabilities
17
+ into tools that have a tool_config_schema attribute. It can also be used directly
18
+ by developers who want to add configuration support to their tools.
19
+
20
+ Args:
21
+ tool: The tool to inject configuration capabilities into.
22
+ config_schema: Pydantic model class for configuration validation.
23
+
24
+ Raises:
25
+ ValueError: If tool is not a BaseTool instance or config_schema is not a Pydantic BaseModel subclass.
26
+ """
@@ -0,0 +1,15 @@
1
+ """Web Search Tools for AI Agents.
2
+
3
+ This package provides web search capabilities for AI agents through integration
4
+ with Google Serper API and Tavily Search API.
5
+
6
+ Authors:
7
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
8
+ Saul Sayers (saul.sayers@gdplabs.id)
9
+ Raymond Christopher (raymond.christopher@gdplabs.id)
10
+ Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
11
+ """
12
+
13
+ from aip_agents.tools.web_search.serper_tool import GoogleSerperTool
14
+
15
+ __all__ = ["GoogleSerperTool"]
@@ -0,0 +1,3 @@
1
+ from aip_agents.tools.web_search.serper_tool import GoogleSerperTool as GoogleSerperTool
2
+
3
+ __all__ = ['GoogleSerperTool']