aip-agents-binary 0.5.25b1__py3-none-macosx_13_0_arm64.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 (566) 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 +2948 -0
  22. aip_agents/agent/base_langgraph_agent.pyi +232 -0
  23. aip_agents/agent/google_adk_agent.py +926 -0
  24. aip_agents/agent/google_adk_agent.pyi +141 -0
  25. aip_agents/agent/google_adk_constants.py +6 -0
  26. aip_agents/agent/google_adk_constants.pyi +3 -0
  27. aip_agents/agent/hitl/__init__.py +24 -0
  28. aip_agents/agent/hitl/__init__.pyi +6 -0
  29. aip_agents/agent/hitl/config.py +28 -0
  30. aip_agents/agent/hitl/config.pyi +15 -0
  31. aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
  32. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
  33. aip_agents/agent/hitl/manager.py +532 -0
  34. aip_agents/agent/hitl/manager.pyi +200 -0
  35. aip_agents/agent/hitl/models.py +18 -0
  36. aip_agents/agent/hitl/models.pyi +3 -0
  37. aip_agents/agent/hitl/prompt/__init__.py +9 -0
  38. aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
  39. aip_agents/agent/hitl/prompt/base.py +42 -0
  40. aip_agents/agent/hitl/prompt/base.pyi +24 -0
  41. aip_agents/agent/hitl/prompt/deferred.py +73 -0
  42. aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
  43. aip_agents/agent/hitl/registry.py +149 -0
  44. aip_agents/agent/hitl/registry.pyi +101 -0
  45. aip_agents/agent/interface.py +138 -0
  46. aip_agents/agent/interface.pyi +81 -0
  47. aip_agents/agent/interfaces.py +65 -0
  48. aip_agents/agent/interfaces.pyi +44 -0
  49. aip_agents/agent/langflow_agent.py +464 -0
  50. aip_agents/agent/langflow_agent.pyi +133 -0
  51. aip_agents/agent/langgraph_memory_enhancer_agent.py +433 -0
  52. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
  53. aip_agents/agent/langgraph_react_agent.py +2596 -0
  54. aip_agents/agent/langgraph_react_agent.pyi +131 -0
  55. aip_agents/agent/system_instruction_context.py +34 -0
  56. aip_agents/agent/system_instruction_context.pyi +13 -0
  57. aip_agents/clients/__init__.py +10 -0
  58. aip_agents/clients/__init__.pyi +4 -0
  59. aip_agents/clients/langflow/__init__.py +10 -0
  60. aip_agents/clients/langflow/__init__.pyi +4 -0
  61. aip_agents/clients/langflow/client.py +477 -0
  62. aip_agents/clients/langflow/client.pyi +140 -0
  63. aip_agents/clients/langflow/types.py +18 -0
  64. aip_agents/clients/langflow/types.pyi +7 -0
  65. aip_agents/constants.py +23 -0
  66. aip_agents/constants.pyi +7 -0
  67. aip_agents/credentials/manager.py +132 -0
  68. aip_agents/examples/__init__.py +5 -0
  69. aip_agents/examples/__init__.pyi +0 -0
  70. aip_agents/examples/compare_streaming_client.py +783 -0
  71. aip_agents/examples/compare_streaming_client.pyi +48 -0
  72. aip_agents/examples/compare_streaming_server.py +142 -0
  73. aip_agents/examples/compare_streaming_server.pyi +18 -0
  74. aip_agents/examples/demo_memory_recall.py +401 -0
  75. aip_agents/examples/demo_memory_recall.pyi +58 -0
  76. aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
  77. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  78. aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
  79. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  80. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
  81. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  82. aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
  83. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  84. aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
  85. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  86. aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
  87. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  88. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
  89. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  90. aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
  91. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  92. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
  93. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  94. aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
  95. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  96. aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
  97. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  98. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
  99. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  100. aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
  101. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  102. aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
  103. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  104. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
  105. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  106. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
  107. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  108. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
  109. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  110. aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
  111. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  112. aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
  113. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  114. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
  115. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  116. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
  117. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  118. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
  119. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  120. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
  121. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  122. aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
  123. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  124. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
  125. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  126. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
  127. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  128. aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
  129. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  130. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
  131. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  132. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
  133. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  134. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
  135. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  136. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
  137. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  138. aip_agents/examples/hello_world_google_adk.py +41 -0
  139. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  140. aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
  141. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  142. aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
  143. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  144. aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
  145. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  146. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
  147. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  148. aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
  149. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  150. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
  151. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  152. aip_agents/examples/hello_world_google_adk_stream.py +44 -0
  153. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  154. aip_agents/examples/hello_world_langchain.py +28 -0
  155. aip_agents/examples/hello_world_langchain.pyi +5 -0
  156. aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
  157. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  158. aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
  159. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  160. aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
  161. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  162. aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
  163. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  164. aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
  165. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  166. aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
  167. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  168. aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
  169. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  170. aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
  171. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  172. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
  173. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  174. aip_agents/examples/hello_world_langchain_stream.py +36 -0
  175. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  176. aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
  177. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  178. aip_agents/examples/hello_world_langflow_agent.py +163 -0
  179. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  180. aip_agents/examples/hello_world_langgraph.py +39 -0
  181. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  182. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
  183. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
  184. aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
  185. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  186. aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
  187. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  188. aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
  189. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  190. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
  191. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  192. aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
  193. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  194. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
  195. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  196. aip_agents/examples/hello_world_langgraph_stream.py +43 -0
  197. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  198. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
  199. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  200. aip_agents/examples/hello_world_model_switch_cli.py +210 -0
  201. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  202. aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
  203. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  204. aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
  205. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  206. aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
  207. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  208. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
  209. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  210. aip_agents/examples/hello_world_pii_logger.py +21 -0
  211. aip_agents/examples/hello_world_pii_logger.pyi +5 -0
  212. aip_agents/examples/hello_world_sentry.py +133 -0
  213. aip_agents/examples/hello_world_sentry.pyi +21 -0
  214. aip_agents/examples/hello_world_step_limits.py +273 -0
  215. aip_agents/examples/hello_world_step_limits.pyi +17 -0
  216. aip_agents/examples/hello_world_stock_a2a_server.py +103 -0
  217. aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
  218. aip_agents/examples/hello_world_tool_output_client.py +46 -0
  219. aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
  220. aip_agents/examples/hello_world_tool_output_server.py +114 -0
  221. aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
  222. aip_agents/examples/hitl_demo.py +724 -0
  223. aip_agents/examples/hitl_demo.pyi +67 -0
  224. aip_agents/examples/mcp_configs/configs.py +63 -0
  225. aip_agents/examples/mcp_servers/common.py +76 -0
  226. aip_agents/examples/mcp_servers/mcp_name.py +29 -0
  227. aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
  228. aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
  229. aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
  230. aip_agents/examples/mcp_servers/mcp_time.py +10 -0
  231. aip_agents/examples/pii_demo_langgraph_client.py +69 -0
  232. aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
  233. aip_agents/examples/pii_demo_langgraph_server.py +126 -0
  234. aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
  235. aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
  236. aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
  237. aip_agents/examples/pii_demo_multi_agent_server.py +247 -0
  238. aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
  239. aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
  240. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
  241. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +88 -0
  242. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
  243. aip_agents/examples/tools/__init__.py +27 -0
  244. aip_agents/examples/tools/__init__.pyi +9 -0
  245. aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
  246. aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
  247. aip_agents/examples/tools/adk_weather_tool.py +60 -0
  248. aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
  249. aip_agents/examples/tools/data_generator_tool.py +103 -0
  250. aip_agents/examples/tools/data_generator_tool.pyi +15 -0
  251. aip_agents/examples/tools/data_visualization_tool.py +312 -0
  252. aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
  253. aip_agents/examples/tools/image_artifact_tool.py +136 -0
  254. aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
  255. aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
  256. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
  257. aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
  258. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
  259. aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
  260. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
  261. aip_agents/examples/tools/langchain_weather_tool.py +48 -0
  262. aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
  263. aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
  264. aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
  265. aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
  266. aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
  267. aip_agents/examples/tools/pii_demo_tools.py +189 -0
  268. aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
  269. aip_agents/examples/tools/random_chart_tool.py +142 -0
  270. aip_agents/examples/tools/random_chart_tool.pyi +20 -0
  271. aip_agents/examples/tools/serper_tool.py +202 -0
  272. aip_agents/examples/tools/serper_tool.pyi +16 -0
  273. aip_agents/examples/tools/stock_tools.py +82 -0
  274. aip_agents/examples/tools/stock_tools.pyi +36 -0
  275. aip_agents/examples/tools/table_generator_tool.py +167 -0
  276. aip_agents/examples/tools/table_generator_tool.pyi +22 -0
  277. aip_agents/examples/tools/time_tool.py +82 -0
  278. aip_agents/examples/tools/time_tool.pyi +15 -0
  279. aip_agents/examples/tools/weather_forecast_tool.py +38 -0
  280. aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
  281. aip_agents/executor/agent_executor.py +473 -0
  282. aip_agents/executor/base.py +48 -0
  283. aip_agents/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 +193 -0
  310. aip_agents/mcp/client/connection_manager.pyi +48 -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 +362 -0
  320. aip_agents/mcp/client/persistent_session.pyi +113 -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 +228 -0
  324. aip_agents/mcp/client/transports.pyi +123 -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 +717 -0
  334. aip_agents/memory/adapters/base_adapter.pyi +150 -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/schema/__init__.py +69 -0
  356. aip_agents/schema/__init__.pyi +9 -0
  357. aip_agents/schema/a2a.py +56 -0
  358. aip_agents/schema/a2a.pyi +40 -0
  359. aip_agents/schema/agent.py +111 -0
  360. aip_agents/schema/agent.pyi +65 -0
  361. aip_agents/schema/hitl.py +157 -0
  362. aip_agents/schema/hitl.pyi +89 -0
  363. aip_agents/schema/langgraph.py +37 -0
  364. aip_agents/schema/langgraph.pyi +28 -0
  365. aip_agents/schema/model_id.py +97 -0
  366. aip_agents/schema/model_id.pyi +54 -0
  367. aip_agents/schema/step_limit.py +108 -0
  368. aip_agents/schema/step_limit.pyi +63 -0
  369. aip_agents/schema/storage.py +40 -0
  370. aip_agents/schema/storage.pyi +21 -0
  371. aip_agents/sentry/__init__.py +11 -0
  372. aip_agents/sentry/__init__.pyi +3 -0
  373. aip_agents/sentry/sentry.py +151 -0
  374. aip_agents/sentry/sentry.pyi +48 -0
  375. aip_agents/storage/__init__.py +41 -0
  376. aip_agents/storage/__init__.pyi +8 -0
  377. aip_agents/storage/base.py +85 -0
  378. aip_agents/storage/base.pyi +58 -0
  379. aip_agents/storage/clients/__init__.py +12 -0
  380. aip_agents/storage/clients/__init__.pyi +3 -0
  381. aip_agents/storage/clients/minio_client.py +318 -0
  382. aip_agents/storage/clients/minio_client.pyi +137 -0
  383. aip_agents/storage/config.py +62 -0
  384. aip_agents/storage/config.pyi +29 -0
  385. aip_agents/storage/providers/__init__.py +15 -0
  386. aip_agents/storage/providers/__init__.pyi +5 -0
  387. aip_agents/storage/providers/base.py +106 -0
  388. aip_agents/storage/providers/base.pyi +88 -0
  389. aip_agents/storage/providers/memory.py +114 -0
  390. aip_agents/storage/providers/memory.pyi +79 -0
  391. aip_agents/storage/providers/object_storage.py +214 -0
  392. aip_agents/storage/providers/object_storage.pyi +98 -0
  393. aip_agents/tools/__init__.py +53 -0
  394. aip_agents/tools/__init__.pyi +9 -0
  395. aip_agents/tools/browser_use/__init__.py +82 -0
  396. aip_agents/tools/browser_use/__init__.pyi +14 -0
  397. aip_agents/tools/browser_use/action_parser.py +103 -0
  398. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  399. aip_agents/tools/browser_use/browser_use_tool.py +1112 -0
  400. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  401. aip_agents/tools/browser_use/llm_config.py +120 -0
  402. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  403. aip_agents/tools/browser_use/minio_storage.py +198 -0
  404. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  405. aip_agents/tools/browser_use/schemas.py +119 -0
  406. aip_agents/tools/browser_use/schemas.pyi +32 -0
  407. aip_agents/tools/browser_use/session.py +76 -0
  408. aip_agents/tools/browser_use/session.pyi +4 -0
  409. aip_agents/tools/browser_use/session_errors.py +132 -0
  410. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  411. aip_agents/tools/browser_use/steel_session_recording.py +317 -0
  412. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  413. aip_agents/tools/browser_use/streaming.py +813 -0
  414. aip_agents/tools/browser_use/streaming.pyi +81 -0
  415. aip_agents/tools/browser_use/structured_data_parser.py +257 -0
  416. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  417. aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
  418. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  419. aip_agents/tools/browser_use/types.py +78 -0
  420. aip_agents/tools/browser_use/types.pyi +45 -0
  421. aip_agents/tools/code_sandbox/__init__.py +26 -0
  422. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  423. aip_agents/tools/code_sandbox/constant.py +13 -0
  424. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  425. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +306 -0
  426. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
  427. aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
  428. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  429. aip_agents/tools/constants.py +177 -0
  430. aip_agents/tools/constants.pyi +138 -0
  431. aip_agents/tools/document_loader/__init__.py +44 -0
  432. aip_agents/tools/document_loader/__init__.pyi +7 -0
  433. aip_agents/tools/document_loader/base_reader.py +302 -0
  434. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  435. aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
  436. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  437. aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
  438. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  439. aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
  440. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  441. aip_agents/tools/document_loader/pdf_splitter.py +169 -0
  442. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  443. aip_agents/tools/gl_connector/__init__.py +5 -0
  444. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  445. aip_agents/tools/gl_connector/tool.py +383 -0
  446. aip_agents/tools/gl_connector/tool.pyi +74 -0
  447. aip_agents/tools/gl_connector_tools.py +119 -0
  448. aip_agents/tools/gl_connector_tools.pyi +39 -0
  449. aip_agents/tools/memory_search/__init__.py +22 -0
  450. aip_agents/tools/memory_search/__init__.pyi +5 -0
  451. aip_agents/tools/memory_search/base.py +200 -0
  452. aip_agents/tools/memory_search/base.pyi +69 -0
  453. aip_agents/tools/memory_search/mem0.py +258 -0
  454. aip_agents/tools/memory_search/mem0.pyi +19 -0
  455. aip_agents/tools/memory_search/schema.py +48 -0
  456. aip_agents/tools/memory_search/schema.pyi +15 -0
  457. aip_agents/tools/memory_search_tool.py +26 -0
  458. aip_agents/tools/memory_search_tool.pyi +3 -0
  459. aip_agents/tools/time_tool.py +117 -0
  460. aip_agents/tools/time_tool.pyi +16 -0
  461. aip_agents/tools/tool_config_injector.py +300 -0
  462. aip_agents/tools/tool_config_injector.pyi +26 -0
  463. aip_agents/tools/web_search/__init__.py +15 -0
  464. aip_agents/tools/web_search/__init__.pyi +3 -0
  465. aip_agents/tools/web_search/serper_tool.py +187 -0
  466. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  467. aip_agents/types/__init__.py +70 -0
  468. aip_agents/types/__init__.pyi +36 -0
  469. aip_agents/types/a2a_events.py +13 -0
  470. aip_agents/types/a2a_events.pyi +3 -0
  471. aip_agents/utils/__init__.py +79 -0
  472. aip_agents/utils/__init__.pyi +11 -0
  473. aip_agents/utils/a2a_connector.py +1757 -0
  474. aip_agents/utils/a2a_connector.pyi +146 -0
  475. aip_agents/utils/artifact_helpers.py +502 -0
  476. aip_agents/utils/artifact_helpers.pyi +203 -0
  477. aip_agents/utils/constants.py +22 -0
  478. aip_agents/utils/constants.pyi +10 -0
  479. aip_agents/utils/datetime/__init__.py +34 -0
  480. aip_agents/utils/datetime/__init__.pyi +4 -0
  481. aip_agents/utils/datetime/normalization.py +231 -0
  482. aip_agents/utils/datetime/normalization.pyi +95 -0
  483. aip_agents/utils/datetime/timezone.py +206 -0
  484. aip_agents/utils/datetime/timezone.pyi +48 -0
  485. aip_agents/utils/env_loader.py +27 -0
  486. aip_agents/utils/env_loader.pyi +10 -0
  487. aip_agents/utils/event_handler_registry.py +58 -0
  488. aip_agents/utils/event_handler_registry.pyi +23 -0
  489. aip_agents/utils/file_prompt_utils.py +176 -0
  490. aip_agents/utils/file_prompt_utils.pyi +21 -0
  491. aip_agents/utils/final_response_builder.py +211 -0
  492. aip_agents/utils/final_response_builder.pyi +34 -0
  493. aip_agents/utils/formatter_llm_client.py +231 -0
  494. aip_agents/utils/formatter_llm_client.pyi +71 -0
  495. aip_agents/utils/langgraph/__init__.py +19 -0
  496. aip_agents/utils/langgraph/__init__.pyi +3 -0
  497. aip_agents/utils/langgraph/converter.py +128 -0
  498. aip_agents/utils/langgraph/converter.pyi +49 -0
  499. aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
  500. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  501. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
  502. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  503. aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
  504. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  505. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1071 -0
  506. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  507. aip_agents/utils/langgraph/tool_output_management.py +967 -0
  508. aip_agents/utils/langgraph/tool_output_management.pyi +292 -0
  509. aip_agents/utils/logger.py +195 -0
  510. aip_agents/utils/logger.pyi +60 -0
  511. aip_agents/utils/metadata/__init__.py +27 -0
  512. aip_agents/utils/metadata/__init__.pyi +5 -0
  513. aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
  514. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  515. aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
  516. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  517. aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
  518. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  519. aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
  520. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  521. aip_agents/utils/metadata/activity_narrative/context.py +49 -0
  522. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  523. aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
  524. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  525. aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
  526. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  527. aip_agents/utils/metadata/schemas/__init__.py +16 -0
  528. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  529. aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
  530. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  531. aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
  532. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  533. aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
  534. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  535. aip_agents/utils/metadata_helper.py +358 -0
  536. aip_agents/utils/metadata_helper.pyi +117 -0
  537. aip_agents/utils/name_preprocessor/__init__.py +17 -0
  538. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  539. aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
  540. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  541. aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
  542. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  543. aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
  544. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  545. aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
  546. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  547. aip_agents/utils/pii/__init__.py +25 -0
  548. aip_agents/utils/pii/__init__.pyi +5 -0
  549. aip_agents/utils/pii/pii_handler.py +397 -0
  550. aip_agents/utils/pii/pii_handler.pyi +96 -0
  551. aip_agents/utils/pii/pii_helper.py +207 -0
  552. aip_agents/utils/pii/pii_helper.pyi +78 -0
  553. aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
  554. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  555. aip_agents/utils/reference_helper.py +273 -0
  556. aip_agents/utils/reference_helper.pyi +81 -0
  557. aip_agents/utils/sse_chunk_transformer.py +831 -0
  558. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  559. aip_agents/utils/step_limit_manager.py +265 -0
  560. aip_agents/utils/step_limit_manager.pyi +112 -0
  561. aip_agents/utils/token_usage_helper.py +156 -0
  562. aip_agents/utils/token_usage_helper.pyi +60 -0
  563. aip_agents_binary-0.5.25b1.dist-info/METADATA +681 -0
  564. aip_agents_binary-0.5.25b1.dist-info/RECORD +566 -0
  565. aip_agents_binary-0.5.25b1.dist-info/WHEEL +5 -0
  566. aip_agents_binary-0.5.25b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,189 @@
1
+ """Mock tools for demonstrating PII handling in parallel tool execution.
2
+
3
+ This module provides tools that return personally identifiable information (PII)
4
+ to demonstrate how the PII handler automatically anonymizes and deanonymizes data
5
+ during tool execution.
6
+
7
+ Tools included:
8
+ - get_customer_info: Returns customer information including email and phone
9
+ - get_employee_data: Returns employee data including name and salary
10
+ - get_user_profile: Returns user profile with personal details
11
+
12
+ Authors:
13
+ Cascade AI Assistant
14
+ """
15
+
16
+ from langchain_core.tools import tool
17
+ from pydantic import BaseModel
18
+
19
+ from aip_agents.utils.logger import LoggerManager
20
+
21
+ logger = LoggerManager().get_logger(__name__)
22
+
23
+
24
+ class CustomerIdSchema(BaseModel):
25
+ """Schema for customer ID input."""
26
+
27
+ customer_id: str
28
+
29
+
30
+ class EmployeeIdSchema(BaseModel):
31
+ """Schema for employee ID input."""
32
+
33
+ employee_id: str
34
+
35
+
36
+ class UserIdSchema(BaseModel):
37
+ """Schema for user ID input."""
38
+
39
+ user_id: str
40
+
41
+
42
+ @tool(args_schema=CustomerIdSchema)
43
+ def get_customer_info(customer_id: str) -> str:
44
+ """Gets customer information including email and phone number.
45
+
46
+ This tool demonstrates PII handling by returning sensitive customer data
47
+ that will be automatically anonymized by the PII handler.
48
+
49
+ Args:
50
+ customer_id: The ID of the customer to retrieve information for.
51
+
52
+ Returns:
53
+ A string containing customer information with PII.
54
+ """
55
+ customer_data = {
56
+ "C001": {
57
+ "name": "John Smith",
58
+ "email": "john.smith@example.com",
59
+ "phone": "+1-555-0101",
60
+ "address": "123 Main St, New York, NY 10001",
61
+ },
62
+ "C002": {
63
+ "name": "Alice Johnson",
64
+ "email": "alice.johnson@example.com",
65
+ "phone": "+1-555-0102",
66
+ "address": "456 Oak Ave, Los Angeles, CA 90001",
67
+ },
68
+ "C003": {
69
+ "name": "Bob Williams",
70
+ "email": "bob.williams@example.com",
71
+ "phone": "+1-555-0103",
72
+ "address": "789 Pine Rd, Chicago, IL 60601",
73
+ },
74
+ }
75
+
76
+ customer = customer_data.get(customer_id.upper())
77
+ if customer:
78
+ logger.info(f"Retrieved customer info for {customer_id}")
79
+ return (
80
+ f"Customer {customer_id}: Name: {customer['name']}, "
81
+ f"Email: {customer['email']}, Phone: {customer['phone']}, "
82
+ f"Address: {customer['address']}"
83
+ )
84
+ else:
85
+ message = f"Customer {customer_id} not found"
86
+ logger.warning(message)
87
+ return message
88
+
89
+
90
+ @tool(args_schema=EmployeeIdSchema)
91
+ def get_employee_data(employee_id: str) -> str:
92
+ """Gets employee data including name, email, and salary information.
93
+
94
+ This tool demonstrates PII handling with employee-specific data that includes
95
+ sensitive information like salary and personal email addresses.
96
+
97
+ Args:
98
+ employee_id: The ID of the employee to retrieve data for.
99
+
100
+ Returns:
101
+ A string containing employee information with PII.
102
+ """
103
+ employee_data = {
104
+ "E001": {
105
+ "name": "Carol Davis",
106
+ "email": "carol.davis@company.com",
107
+ "phone": "+1-555-0201",
108
+ "salary": "$85,000",
109
+ "department": "Engineering",
110
+ },
111
+ "E002": {
112
+ "name": "David Miller",
113
+ "email": "david.miller@company.com",
114
+ "phone": "+1-555-0202",
115
+ "salary": "$92,000",
116
+ "department": "Product",
117
+ },
118
+ "E003": {
119
+ "name": "Emma Wilson",
120
+ "email": "emma.wilson@company.com",
121
+ "phone": "+1-555-0203",
122
+ "salary": "$78,000",
123
+ "department": "Marketing",
124
+ },
125
+ }
126
+
127
+ employee = employee_data.get(employee_id.upper())
128
+ if employee:
129
+ logger.info(f"Retrieved employee data for {employee_id}")
130
+ return (
131
+ f"Employee {employee_id}: Name: {employee['name']}, "
132
+ f"Email: {employee['email']}, Phone: {employee['phone']}, "
133
+ f"Salary: {employee['salary']}, Department: {employee['department']}"
134
+ )
135
+ else:
136
+ message = f"Employee {employee_id} not found"
137
+ logger.warning(message)
138
+ return message
139
+
140
+
141
+ @tool(args_schema=UserIdSchema)
142
+ def get_user_profile(user_id: str) -> str:
143
+ """Gets user profile information with personal details.
144
+
145
+ This tool demonstrates PII handling with user profile data that includes
146
+ personal information like email, phone, and date of birth.
147
+
148
+ Args:
149
+ user_id: The ID of the user to retrieve profile for.
150
+
151
+ Returns:
152
+ A string containing user profile information with PII.
153
+ """
154
+ user_data = {
155
+ "U001": {
156
+ "username": "john_doe",
157
+ "email": "john.doe@personal.com",
158
+ "phone": "+1-555-0301",
159
+ "dob": "1990-05-15",
160
+ "city": "Seattle, WA",
161
+ },
162
+ "U002": {
163
+ "username": "jane_smith",
164
+ "email": "jane.smith@personal.com",
165
+ "phone": "+1-555-0302",
166
+ "dob": "1992-08-22",
167
+ "city": "Portland, OR",
168
+ },
169
+ "U003": {
170
+ "username": "bob_jones",
171
+ "email": "bob.jones@personal.com",
172
+ "phone": "+1-555-0303",
173
+ "dob": "1988-03-10",
174
+ "city": "San Francisco, CA",
175
+ },
176
+ }
177
+
178
+ user = user_data.get(user_id.upper())
179
+ if user:
180
+ logger.info(f"Retrieved user profile for {user_id}")
181
+ return (
182
+ f"User {user_id}: Username: {user['username']}, "
183
+ f"Email: {user['email']}, Phone: {user['phone']}, "
184
+ f"DOB: {user['dob']}, City: {user['city']}"
185
+ )
186
+ else:
187
+ message = f"User {user_id} not found"
188
+ logger.warning(message)
189
+ return message
@@ -0,0 +1,54 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.utils.logger import LoggerManager as LoggerManager
3
+ from pydantic import BaseModel
4
+
5
+ logger: Incomplete
6
+
7
+ class CustomerIdSchema(BaseModel):
8
+ """Schema for customer ID input."""
9
+ customer_id: str
10
+
11
+ class EmployeeIdSchema(BaseModel):
12
+ """Schema for employee ID input."""
13
+ employee_id: str
14
+
15
+ class UserIdSchema(BaseModel):
16
+ """Schema for user ID input."""
17
+ user_id: str
18
+
19
+ def get_customer_info(customer_id: str) -> str:
20
+ """Gets customer information including email and phone number.
21
+
22
+ This tool demonstrates PII handling by returning sensitive customer data
23
+ that will be automatically anonymized by the PII handler.
24
+
25
+ Args:
26
+ customer_id: The ID of the customer to retrieve information for.
27
+
28
+ Returns:
29
+ A string containing customer information with PII.
30
+ """
31
+ def get_employee_data(employee_id: str) -> str:
32
+ """Gets employee data including name, email, and salary information.
33
+
34
+ This tool demonstrates PII handling with employee-specific data that includes
35
+ sensitive information like salary and personal email addresses.
36
+
37
+ Args:
38
+ employee_id: The ID of the employee to retrieve data for.
39
+
40
+ Returns:
41
+ A string containing employee information with PII.
42
+ """
43
+ def get_user_profile(user_id: str) -> str:
44
+ """Gets user profile information with personal details.
45
+
46
+ This tool demonstrates PII handling with user profile data that includes
47
+ personal information like email, phone, and date of birth.
48
+
49
+ Args:
50
+ user_id: The ID of the user to retrieve profile for.
51
+
52
+ Returns:
53
+ A string containing user profile information with PII.
54
+ """
@@ -0,0 +1,142 @@
1
+ """Tool that generates random bar chart artifacts for streaming demos."""
2
+
3
+ import io
4
+ import random
5
+ from typing import Any
6
+
7
+ from langchain_core.tools import BaseTool
8
+ from langgraph.types import Command
9
+ from pydantic import BaseModel, Field
10
+
11
+ from aip_agents.a2a.types import MimeType
12
+ from aip_agents.utils.artifact_helpers import create_artifact_command
13
+
14
+ DEFAULT_RANDOM_CHART_TITLE = "Random Insights"
15
+
16
+ try:
17
+ from PIL import Image, ImageDraw # type: ignore
18
+
19
+ PIL_AVAILABLE = True
20
+ except ImportError: # pragma: no cover - PIL optional
21
+ PIL_AVAILABLE = False
22
+ Image = None
23
+ ImageDraw = None
24
+
25
+
26
+ class RandomChartInput(BaseModel):
27
+ """Input schema for random chart generation."""
28
+
29
+ title: str = Field(
30
+ default=DEFAULT_RANDOM_CHART_TITLE,
31
+ description="Title rendered at the top of the chart.",
32
+ )
33
+ num_bars: int = Field(
34
+ default=5,
35
+ ge=3,
36
+ le=10,
37
+ description="How many bars to render.",
38
+ )
39
+ min_value: int = Field(
40
+ default=10,
41
+ ge=0,
42
+ description="Minimum possible value for a bar.",
43
+ )
44
+ max_value: int = Field(
45
+ default=100,
46
+ gt=10,
47
+ description="Maximum possible value for a bar.",
48
+ )
49
+
50
+
51
+ class RandomChartTool(BaseTool):
52
+ """Generate random bar chart images without relying on upstream data."""
53
+
54
+ name: str = "random_chart_tool"
55
+ description: str = "Create a random bar chart image artifact to showcase image streaming."
56
+ args_schema: type[BaseModel] = RandomChartInput
57
+
58
+ def _run( # noqa: D401
59
+ self,
60
+ title: str = DEFAULT_RANDOM_CHART_TITLE,
61
+ num_bars: int = 5,
62
+ min_value: int = 10,
63
+ max_value: int = 100,
64
+ **kwargs: Any,
65
+ ) -> Command:
66
+ """Generate the chart synchronously."""
67
+ if min_value >= max_value:
68
+ return Command(
69
+ update={"result": "❌ min_value must be less than max_value", "metadata": {"error": "invalid_range"}}
70
+ )
71
+
72
+ rng = random.Random()
73
+ values = [rng.randint(min_value, max_value) for _ in range(num_bars)]
74
+ labels = [f"Bar {i + 1}" for i in range(num_bars)]
75
+
76
+ if PIL_AVAILABLE:
77
+ image_bytes = self._create_image_with_pil(title, labels, values)
78
+ else:
79
+ image_bytes = self._create_text_artifact(title, labels, values)
80
+
81
+ artifact_mime_type = MimeType.IMAGE_PNG if PIL_AVAILABLE else MimeType.TEXT_PLAIN
82
+ return create_artifact_command(
83
+ result=f"📊 Generated random bar chart '{title}' with {num_bars} bars",
84
+ artifact_data=image_bytes,
85
+ artifact_name=f"{title.lower().replace(' ', '_')}_random_chart.png",
86
+ artifact_description=f"Random bar chart ({num_bars} bars)",
87
+ mime_type=artifact_mime_type,
88
+ metadata_update={
89
+ "visualization": {
90
+ "chart_type": "bar",
91
+ "title": title,
92
+ "data_points": num_bars,
93
+ "randomized": True,
94
+ }
95
+ },
96
+ )
97
+
98
+ async def _arun(
99
+ self,
100
+ title: str = DEFAULT_RANDOM_CHART_TITLE,
101
+ num_bars: int = 5,
102
+ min_value: int = 10,
103
+ max_value: int = 100,
104
+ **kwargs: Any,
105
+ ) -> Command:
106
+ """Async wrapper for random chart generation."""
107
+ return self._run(title=title, num_bars=num_bars, min_value=min_value, max_value=max_value, **kwargs)
108
+
109
+ def _create_image_with_pil(self, title: str, labels: list[str], values: list[int]) -> bytes:
110
+ width, height = 400, 300
111
+ image = Image.new("RGB", (width, height), "white")
112
+ draw = ImageDraw.Draw(image)
113
+ draw.text((10, 10), title[:40], fill="black")
114
+
115
+ chart_x, chart_y = 40, 50
116
+ chart_width = width - 80
117
+ chart_height = height - 100
118
+
119
+ max_val = max(values)
120
+ min_val = min(values)
121
+ val_range = max_val - min_val if max_val != min_val else 1
122
+ bar_width = chart_width // len(values)
123
+
124
+ for idx, (label, value) in enumerate(zip(labels, values, strict=False)):
125
+ x = chart_x + idx * bar_width
126
+ normalized = (value - min_val) / val_range
127
+ y = chart_y + chart_height - (normalized * chart_height)
128
+
129
+ draw.rectangle([x + 2, y, x + bar_width - 4, chart_y + chart_height], fill="#4C78A8", outline="black")
130
+ draw.text((x + 2, chart_y + chart_height + 5), label[:8], fill="black")
131
+
132
+ buf = io.BytesIO()
133
+ image.save(buf, format="PNG")
134
+ return buf.getvalue()
135
+
136
+ def _create_text_artifact(self, title: str, labels: list[str], values: list[int]) -> bytes:
137
+ max_val = max(values)
138
+ lines = [f"=== {title} ===", "", "Random bar chart artifact", ""]
139
+ for label, value in zip(labels, values, strict=False):
140
+ length = int((value / max_val) * 30) if max_val else 0
141
+ lines.append(f"{label:>8}: {'█' * length} ({value})")
142
+ return "\n".join(lines).encode("utf-8")
@@ -0,0 +1,20 @@
1
+ from aip_agents.a2a.types import MimeType as MimeType
2
+ from aip_agents.utils.artifact_helpers import create_artifact_command as create_artifact_command
3
+ from langchain_core.tools import BaseTool
4
+ from pydantic import BaseModel
5
+
6
+ DEFAULT_RANDOM_CHART_TITLE: str
7
+ PIL_AVAILABLE: bool
8
+
9
+ class RandomChartInput(BaseModel):
10
+ """Input schema for random chart generation."""
11
+ title: str
12
+ num_bars: int
13
+ min_value: int
14
+ max_value: int
15
+
16
+ class RandomChartTool(BaseTool):
17
+ """Generate random bar chart images without relying on upstream data."""
18
+ name: str
19
+ description: str
20
+ args_schema: type[BaseModel]
@@ -0,0 +1,202 @@
1
+ """Tool to search Google Serper API.
2
+
3
+ Authors:
4
+ Raymond Christopher (raymond.christopher@gdplabs.id)
5
+ Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
6
+ """
7
+
8
+ import json
9
+ import logging
10
+ from typing import Any
11
+
12
+ from gllm_core.schema import Chunk
13
+ from langchain_core.tools import BaseTool
14
+ from pydantic import BaseModel, Field
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ class GoogleSerperInput(BaseModel):
20
+ """Input schema for the GoogleSerperTool."""
21
+
22
+ query: str = Field(..., description="Search query")
23
+
24
+
25
+ class MockGoogleSerperTool(BaseTool):
26
+ """Mock Tool to simulate Google Serper API results for testing."""
27
+
28
+ name: str = "google_serper"
29
+ description: str = """
30
+ Useful for searching the web using the Google Serper API (mocked).
31
+ Input should be a search query.
32
+ """
33
+ save_output_history: bool = True
34
+ args_schema: type[BaseModel] = GoogleSerperInput
35
+
36
+ def _run(self, query: str) -> str:
37
+ """Return a hardcoded mock response as a JSON string.
38
+
39
+ Args:
40
+ query (str): The search query to process.
41
+
42
+ Returns:
43
+ str: JSON string containing mock search results.
44
+ """
45
+ normalized_query = query.lower()
46
+
47
+ # Special-case oncology AI drug discovery queries so the agent
48
+ # naturally sees stock-oriented company context and can call
49
+ # stock tools (get_stock_price, get_stock_news) afterwards.
50
+ if "oncology" in normalized_query or "drug discovery" in normalized_query:
51
+ mock_result = {
52
+ "organic": [
53
+ {
54
+ "title": "NVIDIA (NVDA) - AI infrastructure for healthcare and drug discovery",
55
+ "link": "https://nvidia.example.com/healthcare-ai",
56
+ "snippet": (
57
+ "NVIDIA (ticker: NVDA) provides GPU-accelerated platforms widely used in AI-driven "
58
+ "drug discovery and oncology research. Investors closely watch NVDA stock as demand "
59
+ "for healthcare and life-sciences AI workloads grows."
60
+ ),
61
+ },
62
+ {
63
+ "title": "Microsoft (MSFT) - Azure AI partnerships with pharma and oncology",
64
+ "link": "https://microsoft.example.com/azure-health",
65
+ "snippet": (
66
+ "Microsoft (MSFT) collaborates with leading pharma companies to apply Azure AI to "
67
+ "oncology and drug discovery workflows. Analysts frequently reference MSFT stock when "
68
+ "discussing enterprise AI in healthcare."
69
+ ),
70
+ },
71
+ {
72
+ "title": "Apple (AAPL) - Devices and AI ecosystems in digital health",
73
+ "link": "https://apple.example.com/health-ai",
74
+ "snippet": (
75
+ "Apple (AAPL) integrates AI into health and wellness features that support oncology "
76
+ "patients and clinical research. Market commentary often links AAPL stock to long-term "
77
+ "growth in digital health and AI."
78
+ ),
79
+ },
80
+ ],
81
+ "news": [
82
+ {
83
+ "title": "NVDA rallies on new healthcare AI partnerships",
84
+ "link": "https://news.example.com/nvda-oncology-ai",
85
+ "snippet": (
86
+ "NVIDIA (NVDA) announced expanded collaborations focused on oncology and AI-driven "
87
+ "drug discovery, prompting renewed interest in NVDA stock among growth investors."
88
+ ),
89
+ },
90
+ {
91
+ "title": "MSFT deepens AI oncology collaborations on Azure",
92
+ "link": "https://news.example.com/msft-azure-oncology",
93
+ "snippet": (
94
+ "Microsoft (MSFT) reported new Azure AI partnerships with oncology research centers, "
95
+ "and analysts highlighted MSFT stock as a key AI infrastructure play in healthcare."
96
+ ),
97
+ },
98
+ {
99
+ "title": "AAPL explores AI-enabled health insights for cancer care",
100
+ "link": "https://news.example.com/aapl-health-oncology",
101
+ "snippet": (
102
+ "Apple (AAPL) is reportedly piloting AI-enabled health features that could support "
103
+ "oncology patient monitoring, adding another angle to the long-term AAPL stock story."
104
+ ),
105
+ },
106
+ ],
107
+ }
108
+ else:
109
+ # Default mock result used for generic queries.
110
+ mock_result = {
111
+ "organic": [
112
+ {
113
+ "title": "NeoAI - Artificial Intelligence Research",
114
+ "link": "https://neoai.example.com/",
115
+ "snippet": (
116
+ "NeoAI is an AI research and deployment company. Our mission is to ensure that "
117
+ "artificial general intelligence benefits all of humanity."
118
+ ),
119
+ },
120
+ {
121
+ "title": "Wikipedia - NeoAI",
122
+ "link": "https://en.wikipedia.org/wiki/NeoAI",
123
+ "snippet": (
124
+ "NeoAI is a fictional artificial intelligence research organization consisting of the "
125
+ "for-profit NeoAI LP and its parent company, the non-profit NeoAI Foundation."
126
+ ),
127
+ },
128
+ ],
129
+ "news": [
130
+ {
131
+ "title": "NeoAI unveils new LLM model",
132
+ "link": "https://news.example.com/neoai-llm",
133
+ "snippet": (
134
+ "NeoAI has announced the release of NeoAI-LLM, a new large multimodal model that accepts "
135
+ "image and text inputs."
136
+ ),
137
+ }
138
+ ],
139
+ }
140
+
141
+ return json.dumps(mock_result)
142
+
143
+ def _format_agent_reference(self, tool_output: str) -> list[Chunk]:
144
+ parsed_output = self._parse_tool_output(tool_output)
145
+ if not parsed_output:
146
+ return []
147
+ formatted_chunks = []
148
+ file_id_counter = 0
149
+ for section_name, section_data in parsed_output.items():
150
+ if not isinstance(section_data, list):
151
+ continue
152
+ results = self._process_section_items(section_name, section_data, file_id_counter)
153
+ formatted_chunks.extend(results["chunks"])
154
+ file_id_counter = results["counter"]
155
+ return formatted_chunks
156
+
157
+ def _parse_tool_output(self, tool_output: str) -> dict[str, Any]:
158
+ if isinstance(tool_output, str):
159
+ try:
160
+ return json.loads(tool_output)
161
+ except json.JSONDecodeError:
162
+ logger.error("Error: Unable to parse tool_output as JSON when formatting agent references.")
163
+ return {}
164
+ return tool_output
165
+
166
+ def _process_section_items(self, section_name: str, section_data: list[dict], start_counter: int) -> dict[str, Any]:
167
+ chunks = []
168
+ counter = start_counter
169
+ for item in section_data:
170
+ if not isinstance(item, dict):
171
+ continue
172
+ try:
173
+ chunk = self._create_chunk_from_item(section_name, item, counter)
174
+ if chunk:
175
+ chunks.append(chunk)
176
+ counter += 1
177
+ except Exception as e:
178
+ logger.error(f"Error processing {section_name} result: {e}")
179
+ return {"chunks": chunks, "counter": counter}
180
+
181
+ def _create_chunk_from_item(self, section_name: str, item: dict[str, Any], file_id: int) -> Chunk | None:
182
+ link = item.get("link")
183
+ if not link:
184
+ logger.warning(f"Skipping item {file_id} from {section_name} result: Missing link")
185
+ return None
186
+ content = ""
187
+ if "snippet" in item:
188
+ content = item["snippet"]
189
+ elif "title" in item:
190
+ content = item["title"]
191
+ if not content:
192
+ logger.warning(f"Skipping item {file_id} from {section_name} result: Missing content")
193
+ return None
194
+ metadata = {
195
+ "source": item.get("title", "Untitled Source"),
196
+ "section_type": section_name,
197
+ "source_type": "website",
198
+ "title": item.get("title", "Untitled"),
199
+ "link": link,
200
+ "file_id": str(file_id),
201
+ }
202
+ return Chunk(content=content, metadata=metadata)
@@ -0,0 +1,16 @@
1
+ from _typeshed import Incomplete
2
+ from langchain_core.tools import BaseTool
3
+ from pydantic import BaseModel
4
+
5
+ logger: Incomplete
6
+
7
+ class GoogleSerperInput(BaseModel):
8
+ """Input schema for the GoogleSerperTool."""
9
+ query: str
10
+
11
+ class MockGoogleSerperTool(BaseTool):
12
+ """Mock Tool to simulate Google Serper API results for testing."""
13
+ name: str
14
+ description: str
15
+ save_output_history: bool
16
+ args_schema: type[BaseModel]