aip-agents-binary 0.5.20__py3-none-manylinux_2_31_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. aip_agents/__init__.py +65 -0
  2. aip_agents/__init__.pyi +19 -0
  3. aip_agents/a2a/__init__.py +19 -0
  4. aip_agents/a2a/__init__.pyi +3 -0
  5. aip_agents/a2a/server/__init__.py +10 -0
  6. aip_agents/a2a/server/__init__.pyi +4 -0
  7. aip_agents/a2a/server/base_executor.py +1086 -0
  8. aip_agents/a2a/server/base_executor.pyi +73 -0
  9. aip_agents/a2a/server/google_adk_executor.py +198 -0
  10. aip_agents/a2a/server/google_adk_executor.pyi +51 -0
  11. aip_agents/a2a/server/langflow_executor.py +180 -0
  12. aip_agents/a2a/server/langflow_executor.pyi +43 -0
  13. aip_agents/a2a/server/langgraph_executor.py +270 -0
  14. aip_agents/a2a/server/langgraph_executor.pyi +47 -0
  15. aip_agents/a2a/types.py +232 -0
  16. aip_agents/a2a/types.pyi +132 -0
  17. aip_agents/agent/__init__.py +27 -0
  18. aip_agents/agent/__init__.pyi +9 -0
  19. aip_agents/agent/base_agent.py +970 -0
  20. aip_agents/agent/base_agent.pyi +221 -0
  21. aip_agents/agent/base_langgraph_agent.py +2942 -0
  22. aip_agents/agent/base_langgraph_agent.pyi +232 -0
  23. aip_agents/agent/google_adk_agent.py +926 -0
  24. aip_agents/agent/google_adk_agent.pyi +141 -0
  25. aip_agents/agent/google_adk_constants.py +6 -0
  26. aip_agents/agent/google_adk_constants.pyi +3 -0
  27. aip_agents/agent/hitl/__init__.py +24 -0
  28. aip_agents/agent/hitl/__init__.pyi +6 -0
  29. aip_agents/agent/hitl/config.py +28 -0
  30. aip_agents/agent/hitl/config.pyi +15 -0
  31. aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
  32. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
  33. aip_agents/agent/hitl/manager.py +532 -0
  34. aip_agents/agent/hitl/manager.pyi +200 -0
  35. aip_agents/agent/hitl/models.py +18 -0
  36. aip_agents/agent/hitl/models.pyi +3 -0
  37. aip_agents/agent/hitl/prompt/__init__.py +9 -0
  38. aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
  39. aip_agents/agent/hitl/prompt/base.py +42 -0
  40. aip_agents/agent/hitl/prompt/base.pyi +24 -0
  41. aip_agents/agent/hitl/prompt/deferred.py +73 -0
  42. aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
  43. aip_agents/agent/hitl/registry.py +149 -0
  44. aip_agents/agent/hitl/registry.pyi +101 -0
  45. aip_agents/agent/interface.py +138 -0
  46. aip_agents/agent/interface.pyi +81 -0
  47. aip_agents/agent/interfaces.py +65 -0
  48. aip_agents/agent/interfaces.pyi +44 -0
  49. aip_agents/agent/langflow_agent.py +464 -0
  50. aip_agents/agent/langflow_agent.pyi +133 -0
  51. aip_agents/agent/langgraph_memory_enhancer_agent.py +433 -0
  52. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
  53. aip_agents/agent/langgraph_react_agent.py +2514 -0
  54. aip_agents/agent/langgraph_react_agent.pyi +126 -0
  55. aip_agents/agent/system_instruction_context.py +34 -0
  56. aip_agents/agent/system_instruction_context.pyi +13 -0
  57. aip_agents/clients/__init__.py +10 -0
  58. aip_agents/clients/__init__.pyi +4 -0
  59. aip_agents/clients/langflow/__init__.py +10 -0
  60. aip_agents/clients/langflow/__init__.pyi +4 -0
  61. aip_agents/clients/langflow/client.py +477 -0
  62. aip_agents/clients/langflow/client.pyi +140 -0
  63. aip_agents/clients/langflow/types.py +18 -0
  64. aip_agents/clients/langflow/types.pyi +7 -0
  65. aip_agents/constants.py +23 -0
  66. aip_agents/constants.pyi +7 -0
  67. aip_agents/credentials/manager.py +132 -0
  68. aip_agents/examples/__init__.py +5 -0
  69. aip_agents/examples/__init__.pyi +0 -0
  70. aip_agents/examples/compare_streaming_client.py +783 -0
  71. aip_agents/examples/compare_streaming_client.pyi +48 -0
  72. aip_agents/examples/compare_streaming_server.py +142 -0
  73. aip_agents/examples/compare_streaming_server.pyi +18 -0
  74. aip_agents/examples/demo_memory_recall.py +401 -0
  75. aip_agents/examples/demo_memory_recall.pyi +58 -0
  76. aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
  77. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  78. aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
  79. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  80. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
  81. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  82. aip_agents/examples/hello_world_a2a_google_adk_server.py +79 -0
  83. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  84. aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
  85. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  86. aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
  87. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  88. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
  89. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  90. aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
  91. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  92. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
  93. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  94. aip_agents/examples/hello_world_a2a_langchain_reference_server.py +105 -0
  95. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  96. aip_agents/examples/hello_world_a2a_langchain_server.py +79 -0
  97. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  98. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +78 -0
  99. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  100. aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
  101. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  102. aip_agents/examples/hello_world_a2a_langflow_server.py +82 -0
  103. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  104. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
  105. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  106. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
  107. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  108. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +92 -0
  109. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  110. aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
  111. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  112. aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
  113. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  114. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
  115. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  116. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
  117. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  118. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
  119. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  120. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
  121. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  122. aip_agents/examples/hello_world_a2a_langgraph_server.py +84 -0
  123. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  124. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +79 -0
  125. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  126. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +132 -0
  127. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  128. aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
  129. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  130. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
  131. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  132. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +251 -0
  133. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  134. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
  135. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  136. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +80 -0
  137. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  138. aip_agents/examples/hello_world_google_adk.py +41 -0
  139. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  140. aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
  141. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  142. aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
  143. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  144. aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
  145. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  146. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
  147. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  148. aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
  149. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  150. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
  151. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  152. aip_agents/examples/hello_world_google_adk_stream.py +44 -0
  153. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  154. aip_agents/examples/hello_world_langchain.py +28 -0
  155. aip_agents/examples/hello_world_langchain.pyi +5 -0
  156. aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
  157. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  158. aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
  159. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  160. aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
  161. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  162. aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
  163. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  164. aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
  165. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  166. aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
  167. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  168. aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
  169. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  170. aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
  171. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  172. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
  173. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  174. aip_agents/examples/hello_world_langchain_stream.py +36 -0
  175. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  176. aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
  177. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  178. aip_agents/examples/hello_world_langflow_agent.py +163 -0
  179. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  180. aip_agents/examples/hello_world_langgraph.py +39 -0
  181. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  182. aip_agents/examples/hello_world_langgraph_bosa_twitter.py +41 -0
  183. aip_agents/examples/hello_world_langgraph_bosa_twitter.pyi +5 -0
  184. aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
  185. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  186. aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
  187. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  188. aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
  189. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  190. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
  191. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  192. aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
  193. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  194. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
  195. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  196. aip_agents/examples/hello_world_langgraph_stream.py +43 -0
  197. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  198. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
  199. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  200. aip_agents/examples/hello_world_model_switch_cli.py +210 -0
  201. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  202. aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
  203. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  204. aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
  205. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  206. aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
  207. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  208. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
  209. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  210. aip_agents/examples/hello_world_pii_logger.py +21 -0
  211. aip_agents/examples/hello_world_pii_logger.pyi +5 -0
  212. aip_agents/examples/hello_world_sentry.py +133 -0
  213. aip_agents/examples/hello_world_sentry.pyi +21 -0
  214. aip_agents/examples/hello_world_step_limits.py +273 -0
  215. aip_agents/examples/hello_world_step_limits.pyi +17 -0
  216. aip_agents/examples/hello_world_stock_a2a_server.py +103 -0
  217. aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
  218. aip_agents/examples/hello_world_tool_output_client.py +46 -0
  219. aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
  220. aip_agents/examples/hello_world_tool_output_server.py +114 -0
  221. aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
  222. aip_agents/examples/hitl_demo.py +724 -0
  223. aip_agents/examples/hitl_demo.pyi +67 -0
  224. aip_agents/examples/mcp_configs/configs.py +63 -0
  225. aip_agents/examples/mcp_servers/common.py +76 -0
  226. aip_agents/examples/mcp_servers/mcp_name.py +29 -0
  227. aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
  228. aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
  229. aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
  230. aip_agents/examples/mcp_servers/mcp_time.py +10 -0
  231. aip_agents/examples/pii_demo_langgraph_client.py +69 -0
  232. aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
  233. aip_agents/examples/pii_demo_langgraph_server.py +126 -0
  234. aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
  235. aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
  236. aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
  237. aip_agents/examples/pii_demo_multi_agent_server.py +247 -0
  238. aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
  239. aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
  240. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
  241. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +88 -0
  242. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
  243. aip_agents/examples/tools/__init__.py +27 -0
  244. aip_agents/examples/tools/__init__.pyi +9 -0
  245. aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
  246. aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
  247. aip_agents/examples/tools/adk_weather_tool.py +60 -0
  248. aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
  249. aip_agents/examples/tools/data_generator_tool.py +103 -0
  250. aip_agents/examples/tools/data_generator_tool.pyi +15 -0
  251. aip_agents/examples/tools/data_visualization_tool.py +312 -0
  252. aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
  253. aip_agents/examples/tools/image_artifact_tool.py +136 -0
  254. aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
  255. aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
  256. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
  257. aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
  258. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
  259. aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
  260. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
  261. aip_agents/examples/tools/langchain_weather_tool.py +48 -0
  262. aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
  263. aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
  264. aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
  265. aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
  266. aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
  267. aip_agents/examples/tools/pii_demo_tools.py +189 -0
  268. aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
  269. aip_agents/examples/tools/random_chart_tool.py +142 -0
  270. aip_agents/examples/tools/random_chart_tool.pyi +20 -0
  271. aip_agents/examples/tools/serper_tool.py +202 -0
  272. aip_agents/examples/tools/serper_tool.pyi +16 -0
  273. aip_agents/examples/tools/stock_tools.py +82 -0
  274. aip_agents/examples/tools/stock_tools.pyi +36 -0
  275. aip_agents/examples/tools/table_generator_tool.py +167 -0
  276. aip_agents/examples/tools/table_generator_tool.pyi +22 -0
  277. aip_agents/examples/tools/time_tool.py +82 -0
  278. aip_agents/examples/tools/time_tool.pyi +15 -0
  279. aip_agents/examples/tools/weather_forecast_tool.py +38 -0
  280. aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
  281. aip_agents/executor/agent_executor.py +473 -0
  282. aip_agents/executor/base.py +48 -0
  283. aip_agents/mcp/__init__.py +1 -0
  284. aip_agents/mcp/__init__.pyi +0 -0
  285. aip_agents/mcp/client/__init__.py +14 -0
  286. aip_agents/mcp/client/__init__.pyi +5 -0
  287. aip_agents/mcp/client/base_mcp_client.py +369 -0
  288. aip_agents/mcp/client/base_mcp_client.pyi +148 -0
  289. aip_agents/mcp/client/connection_manager.py +193 -0
  290. aip_agents/mcp/client/connection_manager.pyi +48 -0
  291. aip_agents/mcp/client/google_adk/__init__.py +11 -0
  292. aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
  293. aip_agents/mcp/client/google_adk/client.py +381 -0
  294. aip_agents/mcp/client/google_adk/client.pyi +75 -0
  295. aip_agents/mcp/client/langchain/__init__.py +11 -0
  296. aip_agents/mcp/client/langchain/__init__.pyi +3 -0
  297. aip_agents/mcp/client/langchain/client.py +265 -0
  298. aip_agents/mcp/client/langchain/client.pyi +48 -0
  299. aip_agents/mcp/client/persistent_session.py +359 -0
  300. aip_agents/mcp/client/persistent_session.pyi +113 -0
  301. aip_agents/mcp/client/session_pool.py +351 -0
  302. aip_agents/mcp/client/session_pool.pyi +101 -0
  303. aip_agents/mcp/client/transports.py +215 -0
  304. aip_agents/mcp/client/transports.pyi +123 -0
  305. aip_agents/mcp/utils/__init__.py +7 -0
  306. aip_agents/mcp/utils/__init__.pyi +0 -0
  307. aip_agents/mcp/utils/config_validator.py +139 -0
  308. aip_agents/mcp/utils/config_validator.pyi +82 -0
  309. aip_agents/memory/__init__.py +14 -0
  310. aip_agents/memory/__init__.pyi +5 -0
  311. aip_agents/memory/adapters/__init__.py +10 -0
  312. aip_agents/memory/adapters/__init__.pyi +4 -0
  313. aip_agents/memory/adapters/base_adapter.py +717 -0
  314. aip_agents/memory/adapters/base_adapter.pyi +150 -0
  315. aip_agents/memory/adapters/mem0.py +84 -0
  316. aip_agents/memory/adapters/mem0.pyi +22 -0
  317. aip_agents/memory/base.py +84 -0
  318. aip_agents/memory/base.pyi +60 -0
  319. aip_agents/memory/constants.py +49 -0
  320. aip_agents/memory/constants.pyi +25 -0
  321. aip_agents/memory/factory.py +86 -0
  322. aip_agents/memory/factory.pyi +24 -0
  323. aip_agents/memory/guidance.py +20 -0
  324. aip_agents/memory/guidance.pyi +3 -0
  325. aip_agents/memory/simple_memory.py +47 -0
  326. aip_agents/memory/simple_memory.pyi +23 -0
  327. aip_agents/middleware/__init__.py +17 -0
  328. aip_agents/middleware/__init__.pyi +5 -0
  329. aip_agents/middleware/base.py +88 -0
  330. aip_agents/middleware/base.pyi +71 -0
  331. aip_agents/middleware/manager.py +128 -0
  332. aip_agents/middleware/manager.pyi +80 -0
  333. aip_agents/middleware/todolist.py +274 -0
  334. aip_agents/middleware/todolist.pyi +125 -0
  335. aip_agents/schema/__init__.py +69 -0
  336. aip_agents/schema/__init__.pyi +9 -0
  337. aip_agents/schema/a2a.py +56 -0
  338. aip_agents/schema/a2a.pyi +40 -0
  339. aip_agents/schema/agent.py +111 -0
  340. aip_agents/schema/agent.pyi +65 -0
  341. aip_agents/schema/hitl.py +157 -0
  342. aip_agents/schema/hitl.pyi +89 -0
  343. aip_agents/schema/langgraph.py +37 -0
  344. aip_agents/schema/langgraph.pyi +28 -0
  345. aip_agents/schema/model_id.py +97 -0
  346. aip_agents/schema/model_id.pyi +54 -0
  347. aip_agents/schema/step_limit.py +108 -0
  348. aip_agents/schema/step_limit.pyi +63 -0
  349. aip_agents/schema/storage.py +40 -0
  350. aip_agents/schema/storage.pyi +21 -0
  351. aip_agents/sentry/__init__.py +11 -0
  352. aip_agents/sentry/__init__.pyi +3 -0
  353. aip_agents/sentry/sentry.py +151 -0
  354. aip_agents/sentry/sentry.pyi +48 -0
  355. aip_agents/storage/__init__.py +41 -0
  356. aip_agents/storage/__init__.pyi +8 -0
  357. aip_agents/storage/base.py +85 -0
  358. aip_agents/storage/base.pyi +58 -0
  359. aip_agents/storage/clients/__init__.py +12 -0
  360. aip_agents/storage/clients/__init__.pyi +3 -0
  361. aip_agents/storage/clients/minio_client.py +318 -0
  362. aip_agents/storage/clients/minio_client.pyi +137 -0
  363. aip_agents/storage/config.py +62 -0
  364. aip_agents/storage/config.pyi +29 -0
  365. aip_agents/storage/providers/__init__.py +15 -0
  366. aip_agents/storage/providers/__init__.pyi +5 -0
  367. aip_agents/storage/providers/base.py +106 -0
  368. aip_agents/storage/providers/base.pyi +88 -0
  369. aip_agents/storage/providers/memory.py +114 -0
  370. aip_agents/storage/providers/memory.pyi +79 -0
  371. aip_agents/storage/providers/object_storage.py +214 -0
  372. aip_agents/storage/providers/object_storage.pyi +98 -0
  373. aip_agents/tools/__init__.py +33 -0
  374. aip_agents/tools/__init__.pyi +13 -0
  375. aip_agents/tools/bosa_tools.py +105 -0
  376. aip_agents/tools/bosa_tools.pyi +37 -0
  377. aip_agents/tools/browser_use/__init__.py +82 -0
  378. aip_agents/tools/browser_use/__init__.pyi +14 -0
  379. aip_agents/tools/browser_use/action_parser.py +103 -0
  380. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  381. aip_agents/tools/browser_use/browser_use_tool.py +1112 -0
  382. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  383. aip_agents/tools/browser_use/llm_config.py +120 -0
  384. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  385. aip_agents/tools/browser_use/minio_storage.py +198 -0
  386. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  387. aip_agents/tools/browser_use/schemas.py +119 -0
  388. aip_agents/tools/browser_use/schemas.pyi +32 -0
  389. aip_agents/tools/browser_use/session.py +76 -0
  390. aip_agents/tools/browser_use/session.pyi +4 -0
  391. aip_agents/tools/browser_use/session_errors.py +132 -0
  392. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  393. aip_agents/tools/browser_use/steel_session_recording.py +317 -0
  394. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  395. aip_agents/tools/browser_use/streaming.py +813 -0
  396. aip_agents/tools/browser_use/streaming.pyi +81 -0
  397. aip_agents/tools/browser_use/structured_data_parser.py +257 -0
  398. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  399. aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
  400. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  401. aip_agents/tools/browser_use/types.py +78 -0
  402. aip_agents/tools/browser_use/types.pyi +45 -0
  403. aip_agents/tools/code_sandbox/__init__.py +26 -0
  404. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  405. aip_agents/tools/code_sandbox/constant.py +13 -0
  406. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  407. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +257 -0
  408. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +86 -0
  409. aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +411 -0
  410. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  411. aip_agents/tools/constants.py +165 -0
  412. aip_agents/tools/constants.pyi +135 -0
  413. aip_agents/tools/document_loader/__init__.py +44 -0
  414. aip_agents/tools/document_loader/__init__.pyi +7 -0
  415. aip_agents/tools/document_loader/base_reader.py +302 -0
  416. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  417. aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
  418. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  419. aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
  420. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  421. aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
  422. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  423. aip_agents/tools/document_loader/pdf_splitter.py +169 -0
  424. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  425. aip_agents/tools/gl_connector/__init__.py +5 -0
  426. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  427. aip_agents/tools/gl_connector/tool.py +351 -0
  428. aip_agents/tools/gl_connector/tool.pyi +74 -0
  429. aip_agents/tools/memory_search/__init__.py +22 -0
  430. aip_agents/tools/memory_search/__init__.pyi +5 -0
  431. aip_agents/tools/memory_search/base.py +200 -0
  432. aip_agents/tools/memory_search/base.pyi +69 -0
  433. aip_agents/tools/memory_search/mem0.py +258 -0
  434. aip_agents/tools/memory_search/mem0.pyi +19 -0
  435. aip_agents/tools/memory_search/schema.py +48 -0
  436. aip_agents/tools/memory_search/schema.pyi +15 -0
  437. aip_agents/tools/memory_search_tool.py +26 -0
  438. aip_agents/tools/memory_search_tool.pyi +3 -0
  439. aip_agents/tools/time_tool.py +117 -0
  440. aip_agents/tools/time_tool.pyi +16 -0
  441. aip_agents/tools/tool_config_injector.py +300 -0
  442. aip_agents/tools/tool_config_injector.pyi +26 -0
  443. aip_agents/tools/web_search/__init__.py +15 -0
  444. aip_agents/tools/web_search/__init__.pyi +3 -0
  445. aip_agents/tools/web_search/serper_tool.py +187 -0
  446. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  447. aip_agents/types/__init__.py +70 -0
  448. aip_agents/types/__init__.pyi +36 -0
  449. aip_agents/types/a2a_events.py +13 -0
  450. aip_agents/types/a2a_events.pyi +3 -0
  451. aip_agents/utils/__init__.py +79 -0
  452. aip_agents/utils/__init__.pyi +11 -0
  453. aip_agents/utils/a2a_connector.py +1757 -0
  454. aip_agents/utils/a2a_connector.pyi +146 -0
  455. aip_agents/utils/artifact_helpers.py +502 -0
  456. aip_agents/utils/artifact_helpers.pyi +203 -0
  457. aip_agents/utils/constants.py +22 -0
  458. aip_agents/utils/constants.pyi +10 -0
  459. aip_agents/utils/datetime/__init__.py +34 -0
  460. aip_agents/utils/datetime/__init__.pyi +4 -0
  461. aip_agents/utils/datetime/normalization.py +231 -0
  462. aip_agents/utils/datetime/normalization.pyi +95 -0
  463. aip_agents/utils/datetime/timezone.py +206 -0
  464. aip_agents/utils/datetime/timezone.pyi +48 -0
  465. aip_agents/utils/env_loader.py +27 -0
  466. aip_agents/utils/env_loader.pyi +10 -0
  467. aip_agents/utils/event_handler_registry.py +58 -0
  468. aip_agents/utils/event_handler_registry.pyi +23 -0
  469. aip_agents/utils/file_prompt_utils.py +176 -0
  470. aip_agents/utils/file_prompt_utils.pyi +21 -0
  471. aip_agents/utils/final_response_builder.py +211 -0
  472. aip_agents/utils/final_response_builder.pyi +34 -0
  473. aip_agents/utils/formatter_llm_client.py +231 -0
  474. aip_agents/utils/formatter_llm_client.pyi +71 -0
  475. aip_agents/utils/langgraph/__init__.py +19 -0
  476. aip_agents/utils/langgraph/__init__.pyi +3 -0
  477. aip_agents/utils/langgraph/converter.py +128 -0
  478. aip_agents/utils/langgraph/converter.pyi +49 -0
  479. aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
  480. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  481. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
  482. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  483. aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
  484. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  485. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1071 -0
  486. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  487. aip_agents/utils/langgraph/tool_output_management.py +967 -0
  488. aip_agents/utils/langgraph/tool_output_management.pyi +292 -0
  489. aip_agents/utils/logger.py +195 -0
  490. aip_agents/utils/logger.pyi +60 -0
  491. aip_agents/utils/metadata/__init__.py +27 -0
  492. aip_agents/utils/metadata/__init__.pyi +5 -0
  493. aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
  494. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  495. aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
  496. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  497. aip_agents/utils/metadata/activity_narrative/builder.py +817 -0
  498. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  499. aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
  500. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  501. aip_agents/utils/metadata/activity_narrative/context.py +49 -0
  502. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  503. aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
  504. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  505. aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
  506. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  507. aip_agents/utils/metadata/schemas/__init__.py +16 -0
  508. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  509. aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
  510. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  511. aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
  512. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  513. aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
  514. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  515. aip_agents/utils/metadata_helper.py +358 -0
  516. aip_agents/utils/metadata_helper.pyi +117 -0
  517. aip_agents/utils/name_preprocessor/__init__.py +17 -0
  518. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  519. aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
  520. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  521. aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
  522. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  523. aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
  524. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  525. aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
  526. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  527. aip_agents/utils/pii/__init__.py +25 -0
  528. aip_agents/utils/pii/__init__.pyi +5 -0
  529. aip_agents/utils/pii/pii_handler.py +397 -0
  530. aip_agents/utils/pii/pii_handler.pyi +96 -0
  531. aip_agents/utils/pii/pii_helper.py +207 -0
  532. aip_agents/utils/pii/pii_helper.pyi +78 -0
  533. aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
  534. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  535. aip_agents/utils/reference_helper.py +273 -0
  536. aip_agents/utils/reference_helper.pyi +81 -0
  537. aip_agents/utils/sse_chunk_transformer.py +831 -0
  538. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  539. aip_agents/utils/step_limit_manager.py +265 -0
  540. aip_agents/utils/step_limit_manager.pyi +112 -0
  541. aip_agents/utils/token_usage_helper.py +156 -0
  542. aip_agents/utils/token_usage_helper.pyi +60 -0
  543. aip_agents_binary-0.5.20.dist-info/METADATA +681 -0
  544. aip_agents_binary-0.5.20.dist-info/RECORD +546 -0
  545. aip_agents_binary-0.5.20.dist-info/WHEEL +5 -0
  546. aip_agents_binary-0.5.20.dist-info/top_level.txt +1 -0
@@ -0,0 +1,50 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.tools.browser_use import session_errors as session_errors
3
+ from aip_agents.tools.browser_use.action_parser import ActionParser as ActionParser
4
+ from aip_agents.tools.browser_use.llm_config import build_browser_use_llm as build_browser_use_llm, configure_browser_use_environment as configure_browser_use_environment
5
+ from aip_agents.tools.browser_use.schemas import BrowserUseToolConfig as BrowserUseToolConfig, BrowserUseToolInput as BrowserUseToolInput
6
+ from aip_agents.tools.browser_use.session import BrowserSession as BrowserSession
7
+ from aip_agents.tools.browser_use.steel_session_recording import SteelSessionRecorder as SteelSessionRecorder
8
+ from aip_agents.tools.browser_use.streaming import create_error_response as create_error_response, create_step_response as create_step_response, generate_step_content as generate_step_content, generate_thinking_message as generate_thinking_message, yield_iframe_activity as yield_iframe_activity, yield_status_message as yield_status_message, yield_thinking_marker as yield_thinking_marker
9
+ from aip_agents.tools.browser_use.structured_data_parser import detect_structured_data_failure as detect_structured_data_failure
10
+ from aip_agents.tools.browser_use.types import BrowserUseFatalError as BrowserUseFatalError, RetryDecision as RetryDecision, StreamingResponse as StreamingResponse, StreamingState as StreamingState, ToolCallInfo as ToolCallInfo
11
+ from aip_agents.utils.logger import get_logger as get_logger
12
+ from langchain_core.runnables import RunnableConfig
13
+ from langchain_core.tools import BaseTool
14
+ from pydantic import BaseModel as BaseModel
15
+
16
+ logger: Incomplete
17
+
18
+ class BrowserUseTool(BaseTool):
19
+ """Tool to execute web automation tasks using browser-use framework.
20
+
21
+ This tool provides step-by-step execution of browser automation tasks with detailed
22
+ logging of intermediate steps, including the agent's thinking process, goals, and
23
+ results at each step.
24
+ """
25
+ name: str
26
+ description: str
27
+ args_schema: type[BaseModel]
28
+ tool_config_schema: type[BaseModel]
29
+ MAX_SESSION_RELEASE_RETRIES: int
30
+ SESSION_RELEASE_SLEEP_TIME_IN_S: int
31
+ async def arun_streaming(self, task: str = None, config: RunnableConfig | None = None, **kwargs):
32
+ """Execute a web automation task using browser-use asynchronously with streaming output.
33
+
34
+ This method creates a Steel browser session, initializes a browser-use agent with
35
+ the specified task, and executes the automation step by step, yielding results
36
+ in streaming fashion. Starts background recording after completion.
37
+
38
+ Args:
39
+ task (str, optional): The task prompt for the AI agent to execute in the browser.
40
+ If not provided, will attempt to extract from kwargs.
41
+ config (RunnableConfig): RunnableConfig containing tool configuration.
42
+ **kwargs: Additional parameters that may contain the task or other tool-specific arguments.
43
+
44
+ Yields:
45
+ dict: Step-by-step results in standardized StreamingResponse format.
46
+
47
+ Raises:
48
+ Exception: Any exception that occurs during task execution will be caught
49
+ and yielded as an error message.
50
+ """
@@ -0,0 +1,120 @@
1
+ """Helpers for configuring browser-use LLM instances and environment flags.
2
+
3
+ Authors:
4
+ Raymond Christopher (raymond.christopher@gdplabs.id)
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import os
10
+ from typing import Any
11
+
12
+ from browser_use.llm import ChatOpenAI
13
+ from browser_use.logging_config import setup_logging
14
+
15
+
16
+ def model_disallows_tunable_params(model: Any) -> bool:
17
+ """Return True if the provider forbids temperature/frequency overrides for the model.
18
+
19
+ Args:
20
+ model: The model name or identifier to check.
21
+
22
+ Returns:
23
+ bool: True if the model disallows tunable parameters, False otherwise.
24
+ """
25
+ model_name = str(model).lower()
26
+
27
+ if model_name.startswith("gpt-5"):
28
+ return True
29
+
30
+ short_name = model_name.split("-", 1)[0]
31
+ return short_name.startswith("o") and short_name[1:].isdigit()
32
+
33
+
34
+ def supports_temperature_override(model: Any) -> bool:
35
+ """Return True when the given model supports setting a custom temperature.
36
+
37
+ Args:
38
+ model: The model name or identifier to check.
39
+
40
+ Returns:
41
+ bool: True if the model supports temperature override, False otherwise.
42
+ """
43
+ return not model_disallows_tunable_params(model)
44
+
45
+
46
+ def supports_frequency_penalty(model: Any) -> bool:
47
+ """Return True when the given model supports custom frequency penalties.
48
+
49
+ Args:
50
+ model: The model name or identifier to check.
51
+
52
+ Returns:
53
+ bool: True if the model supports frequency penalty override, False otherwise.
54
+ """
55
+ return not model_disallows_tunable_params(model)
56
+
57
+
58
+ def build_browser_use_llm(
59
+ *,
60
+ model: Any,
61
+ reasoning_effort: Any,
62
+ temperature: float | None,
63
+ api_key: str,
64
+ base_url: str | None = None,
65
+ ) -> ChatOpenAI:
66
+ """Construct a ChatOpenAI instance with browser-use specific safeguards.
67
+
68
+ Args:
69
+ model: The model name or identifier to use.
70
+ reasoning_effort: The reasoning effort level for the model.
71
+ temperature: Optional temperature setting for the model. Can be None.
72
+ api_key: The API key for authentication.
73
+ base_url: The base URL for the model.
74
+
75
+ Returns:
76
+ ChatOpenAI: The configured ChatOpenAI instance.
77
+ """
78
+ llm_kwargs: dict[str, Any] = {
79
+ "model": model,
80
+ "reasoning_effort": reasoning_effort,
81
+ "api_key": api_key,
82
+ "base_url": base_url,
83
+ }
84
+
85
+ if temperature is not None and supports_temperature_override(model):
86
+ llm_kwargs["temperature"] = temperature
87
+ else:
88
+ llm_kwargs["temperature"] = None
89
+
90
+ if not supports_frequency_penalty(model):
91
+ llm_kwargs["frequency_penalty"] = None
92
+
93
+ return ChatOpenAI(**llm_kwargs)
94
+
95
+
96
+ def configure_browser_use_environment(enable_cloud_sync: bool, logging_level: str) -> None:
97
+ """Ensure Browser Use environment flags are aligned with tool configuration.
98
+
99
+ Args:
100
+ enable_cloud_sync: Whether to enable cloud synchronization for browser sessions.
101
+ logging_level: The desired logging level for browser use operations.
102
+ """
103
+ desired_sync = "true" if enable_cloud_sync else "false"
104
+ if os.environ.get("BROWSER_USE_CLOUD_SYNC") != desired_sync:
105
+ os.environ["BROWSER_USE_CLOUD_SYNC"] = desired_sync
106
+
107
+ desired_level = logging_level.lower()
108
+ current_level = os.environ.get("BROWSER_USE_LOGGING_LEVEL")
109
+ if not current_level or current_level.lower() != desired_level:
110
+ os.environ["BROWSER_USE_LOGGING_LEVEL"] = desired_level
111
+ setup_logging(log_level=desired_level, force_setup=True)
112
+
113
+
114
+ __all__ = [
115
+ "build_browser_use_llm",
116
+ "configure_browser_use_environment",
117
+ "model_disallows_tunable_params",
118
+ "supports_frequency_penalty",
119
+ "supports_temperature_override",
120
+ ]
@@ -0,0 +1,52 @@
1
+ from browser_use.llm import ChatOpenAI
2
+ from typing import Any
3
+
4
+ __all__ = ['build_browser_use_llm', 'configure_browser_use_environment', 'model_disallows_tunable_params', 'supports_frequency_penalty', 'supports_temperature_override']
5
+
6
+ def model_disallows_tunable_params(model: Any) -> bool:
7
+ """Return True if the provider forbids temperature/frequency overrides for the model.
8
+
9
+ Args:
10
+ model: The model name or identifier to check.
11
+
12
+ Returns:
13
+ bool: True if the model disallows tunable parameters, False otherwise.
14
+ """
15
+ def supports_temperature_override(model: Any) -> bool:
16
+ """Return True when the given model supports setting a custom temperature.
17
+
18
+ Args:
19
+ model: The model name or identifier to check.
20
+
21
+ Returns:
22
+ bool: True if the model supports temperature override, False otherwise.
23
+ """
24
+ def supports_frequency_penalty(model: Any) -> bool:
25
+ """Return True when the given model supports custom frequency penalties.
26
+
27
+ Args:
28
+ model: The model name or identifier to check.
29
+
30
+ Returns:
31
+ bool: True if the model supports frequency penalty override, False otherwise.
32
+ """
33
+ def build_browser_use_llm(*, model: Any, reasoning_effort: Any, temperature: float | None, api_key: str, base_url: str | None = None) -> ChatOpenAI:
34
+ """Construct a ChatOpenAI instance with browser-use specific safeguards.
35
+
36
+ Args:
37
+ model: The model name or identifier to use.
38
+ reasoning_effort: The reasoning effort level for the model.
39
+ temperature: Optional temperature setting for the model. Can be None.
40
+ api_key: The API key for authentication.
41
+ base_url: The base URL for the model.
42
+
43
+ Returns:
44
+ ChatOpenAI: The configured ChatOpenAI instance.
45
+ """
46
+ def configure_browser_use_environment(enable_cloud_sync: bool, logging_level: str) -> None:
47
+ """Ensure Browser Use environment flags are aligned with tool configuration.
48
+
49
+ Args:
50
+ enable_cloud_sync: Whether to enable cloud synchronization for browser sessions.
51
+ logging_level: The desired logging level for browser use operations.
52
+ """
@@ -0,0 +1,198 @@
1
+ """MinIO Storage Handler for Steel Session Recording.
2
+
3
+ This module provides MinIO cloud storage functionality for uploading and managing
4
+ video files from Steel session recordings. It handles file uploads, bucket management,
5
+ and presigned URL generation for secure file access.
6
+
7
+ The module supports:
8
+ - Automatic bucket creation and validation
9
+ - Secure file uploads with proper content types
10
+ - Presigned URL generation for temporary file access
11
+ - Directory prefix support for organized storage
12
+ - Comprehensive error handling and logging
13
+
14
+ Authors:
15
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
16
+ """
17
+
18
+ import os
19
+
20
+ from dotenv import load_dotenv
21
+ from minio import Minio
22
+ from minio.error import S3Error
23
+
24
+ load_dotenv()
25
+
26
+ OBJECT_NAME_PREFIX = "steel-recordings/"
27
+
28
+
29
+ class MinIOStorage:
30
+ """Handles MinIO cloud storage operations for video files.
31
+
32
+ This class provides a complete interface for MinIO operations including:
33
+ - Connection management with authentication
34
+ - Bucket existence validation and creation
35
+ - File upload with proper metadata
36
+ - Presigned URL generation for secure access
37
+
38
+ Attributes:
39
+ endpoint: MinIO server endpoint URL.
40
+ access_key: MinIO access key for authentication.
41
+ secret_key: MinIO secret key for authentication.
42
+ secure: Whether to use HTTPS/TLS for connections.
43
+ bucket_name: Target bucket for file storage.
44
+ directory_prefix: Optional directory prefix for organized storage.
45
+ client: MinIO client instance for API operations.
46
+ """
47
+
48
+ def __init__(self):
49
+ """Initialize MinIO storage with configuration from environment variables.
50
+
51
+ Reads configuration from the following environment variables:
52
+ - OBJECT_STORAGE_URL: MinIO server endpoint
53
+ - OBJECT_STORAGE_USER: MinIO access key
54
+ - OBJECT_STORAGE_PASSWORD: MinIO secret key
55
+ - OBJECT_STORAGE_SECURE: Whether to use HTTPS (default: False)
56
+ - OBJECT_STORAGE_BUCKET: Target bucket name
57
+ - OBJECT_STORAGE_DIRECTORY_PREFIX: Optional directory prefix
58
+
59
+ Raises:
60
+ ValueError: If required environment variables are missing.
61
+ Exception: If bucket creation or validation fails.
62
+
63
+ Note:
64
+ The method automatically ensures the target bucket exists,
65
+ creating it if necessary.
66
+ """
67
+ self.endpoint = os.getenv("OBJECT_STORAGE_URL")
68
+ self.access_key = os.getenv("OBJECT_STORAGE_USER")
69
+ self.secret_key = os.getenv("OBJECT_STORAGE_PASSWORD")
70
+ self.secure = os.getenv("OBJECT_STORAGE_SECURE", "False").lower() == "true"
71
+ self.bucket_name = os.getenv("OBJECT_STORAGE_BUCKET")
72
+ self.directory_prefix = os.getenv("OBJECT_STORAGE_DIRECTORY_PREFIX")
73
+
74
+ if not all([self.endpoint, self.access_key, self.secret_key, self.bucket_name]):
75
+ raise ValueError(
76
+ "MinIO configuration incomplete. Set OBJECT_STORAGE_URL, OBJECT_STORAGE_USER, OBJECT_STORAGE_PASSWORD,"
77
+ "and OBJECT_STORAGE_BUCKET."
78
+ )
79
+
80
+ self.client = Minio(
81
+ self.endpoint,
82
+ access_key=self.access_key,
83
+ secret_key=self.secret_key,
84
+ secure=self.secure,
85
+ )
86
+
87
+ # Ensure bucket exists
88
+ self._ensure_bucket_exists()
89
+
90
+ def _ensure_bucket_exists(self):
91
+ """Ensure the configured bucket exists, create if it doesn't.
92
+
93
+ This method checks if the target bucket exists and creates it if necessary.
94
+ It's called during initialization to ensure the storage is ready for use.
95
+
96
+ Raises:
97
+ Exception: If bucket creation or validation fails.
98
+
99
+ Note:
100
+ Bucket creation failures are logged as warnings but don't prevent
101
+ the class from being usable (existing buckets can still be accessed).
102
+ """
103
+ try:
104
+ if not self.client.bucket_exists(self.bucket_name):
105
+ self.client.make_bucket(self.bucket_name)
106
+ except S3Error as e:
107
+ raise Exception(f"Warning: Could not ensure bucket exists: {e}") from e
108
+
109
+ def get_object_name(self, object_name: str) -> str:
110
+ """Get the object name with the directory prefix.
111
+
112
+ This method constructs the full object path by combining the directory
113
+ prefix with the base object name. It ensures consistent path structure
114
+ for all stored files.
115
+
116
+ Args:
117
+ object_name: Name of the object in MinIO.
118
+
119
+ Returns:
120
+ str: Object name with the directory prefix and steel-recordings subdirectory.
121
+ Format: {prefix}/steel-recordings/{object_name} or steel-recordings/{object_name}
122
+
123
+ Note:
124
+ The method automatically adds a "steel-recordings" subdirectory to
125
+ organize video files separately from other content.
126
+ """
127
+ object_name = f"{OBJECT_NAME_PREFIX}{object_name}"
128
+ if self.directory_prefix:
129
+ return f"{self.directory_prefix}/{object_name}"
130
+ return object_name
131
+
132
+ def upload_file(self, file_path: str, object_name: str) -> None:
133
+ """Upload a file to MinIO bucket.
134
+
135
+ This method handles the complete file upload process including:
136
+ - File existence validation
137
+ - Proper content type setting for video files
138
+ - Error handling and logging
139
+ - Structured object naming with prefixes
140
+
141
+ Args:
142
+ file_path: Local path to the file to upload.
143
+ object_name: Name to use for the object in MinIO.
144
+
145
+ Raises:
146
+ Exception: If the file doesn't exist or upload fails.
147
+ Specific S3Error details are included in the exception message.
148
+
149
+ Note:
150
+ The method automatically sets the content type to "video/webm"
151
+ for proper video file handling in browsers and applications.
152
+ """
153
+ try:
154
+ if not os.path.exists(file_path):
155
+ raise Exception(f"File not found: {file_path}")
156
+
157
+ # Upload the file
158
+ self.client.fput_object(
159
+ self.bucket_name,
160
+ self.get_object_name(object_name),
161
+ file_path,
162
+ content_type="video/webm",
163
+ )
164
+
165
+ except S3Error as e:
166
+ raise Exception(f"Error uploading to MinIO: {e}") from e
167
+ except Exception as e:
168
+ raise Exception(f"Unexpected error during upload: {e}") from e
169
+
170
+ def get_file_url(self, object_name: str) -> str:
171
+ """Generate a presigned URL for accessing the uploaded file.
172
+
173
+ This method creates a temporary, secure URL that allows access to the
174
+ uploaded file without requiring MinIO credentials. The URL is valid
175
+ for a limited time and provides secure, direct access to the file.
176
+
177
+ Args:
178
+ object_name: Name of the object in MinIO.
179
+
180
+ Returns:
181
+ str: Presigned URL for secure file access.
182
+ The URL includes authentication tokens and is valid for a limited time.
183
+
184
+ Raises:
185
+ Exception: If presigned URL generation fails.
186
+ S3Error details are included in the exception message.
187
+
188
+ Note:
189
+ Presigned URLs are useful for sharing files temporarily without
190
+ exposing MinIO credentials or requiring users to have storage access.
191
+ """
192
+ try:
193
+ return self.client.presigned_get_object(
194
+ self.bucket_name,
195
+ self.get_object_name(object_name),
196
+ )
197
+ except S3Error as e:
198
+ raise Exception(f"Error generating presigned URL: {e}") from e
@@ -0,0 +1,109 @@
1
+ from _typeshed import Incomplete
2
+
3
+ OBJECT_NAME_PREFIX: str
4
+
5
+ class MinIOStorage:
6
+ """Handles MinIO cloud storage operations for video files.
7
+
8
+ This class provides a complete interface for MinIO operations including:
9
+ - Connection management with authentication
10
+ - Bucket existence validation and creation
11
+ - File upload with proper metadata
12
+ - Presigned URL generation for secure access
13
+
14
+ Attributes:
15
+ endpoint: MinIO server endpoint URL.
16
+ access_key: MinIO access key for authentication.
17
+ secret_key: MinIO secret key for authentication.
18
+ secure: Whether to use HTTPS/TLS for connections.
19
+ bucket_name: Target bucket for file storage.
20
+ directory_prefix: Optional directory prefix for organized storage.
21
+ client: MinIO client instance for API operations.
22
+ """
23
+ endpoint: Incomplete
24
+ access_key: Incomplete
25
+ secret_key: Incomplete
26
+ secure: Incomplete
27
+ bucket_name: Incomplete
28
+ directory_prefix: Incomplete
29
+ client: Incomplete
30
+ def __init__(self) -> None:
31
+ """Initialize MinIO storage with configuration from environment variables.
32
+
33
+ Reads configuration from the following environment variables:
34
+ - OBJECT_STORAGE_URL: MinIO server endpoint
35
+ - OBJECT_STORAGE_USER: MinIO access key
36
+ - OBJECT_STORAGE_PASSWORD: MinIO secret key
37
+ - OBJECT_STORAGE_SECURE: Whether to use HTTPS (default: False)
38
+ - OBJECT_STORAGE_BUCKET: Target bucket name
39
+ - OBJECT_STORAGE_DIRECTORY_PREFIX: Optional directory prefix
40
+
41
+ Raises:
42
+ ValueError: If required environment variables are missing.
43
+ Exception: If bucket creation or validation fails.
44
+
45
+ Note:
46
+ The method automatically ensures the target bucket exists,
47
+ creating it if necessary.
48
+ """
49
+ def get_object_name(self, object_name: str) -> str:
50
+ '''Get the object name with the directory prefix.
51
+
52
+ This method constructs the full object path by combining the directory
53
+ prefix with the base object name. It ensures consistent path structure
54
+ for all stored files.
55
+
56
+ Args:
57
+ object_name: Name of the object in MinIO.
58
+
59
+ Returns:
60
+ str: Object name with the directory prefix and steel-recordings subdirectory.
61
+ Format: {prefix}/steel-recordings/{object_name} or steel-recordings/{object_name}
62
+
63
+ Note:
64
+ The method automatically adds a "steel-recordings" subdirectory to
65
+ organize video files separately from other content.
66
+ '''
67
+ def upload_file(self, file_path: str, object_name: str) -> None:
68
+ '''Upload a file to MinIO bucket.
69
+
70
+ This method handles the complete file upload process including:
71
+ - File existence validation
72
+ - Proper content type setting for video files
73
+ - Error handling and logging
74
+ - Structured object naming with prefixes
75
+
76
+ Args:
77
+ file_path: Local path to the file to upload.
78
+ object_name: Name to use for the object in MinIO.
79
+
80
+ Raises:
81
+ Exception: If the file doesn\'t exist or upload fails.
82
+ Specific S3Error details are included in the exception message.
83
+
84
+ Note:
85
+ The method automatically sets the content type to "video/webm"
86
+ for proper video file handling in browsers and applications.
87
+ '''
88
+ def get_file_url(self, object_name: str) -> str:
89
+ """Generate a presigned URL for accessing the uploaded file.
90
+
91
+ This method creates a temporary, secure URL that allows access to the
92
+ uploaded file without requiring MinIO credentials. The URL is valid
93
+ for a limited time and provides secure, direct access to the file.
94
+
95
+ Args:
96
+ object_name: Name of the object in MinIO.
97
+
98
+ Returns:
99
+ str: Presigned URL for secure file access.
100
+ The URL includes authentication tokens and is valid for a limited time.
101
+
102
+ Raises:
103
+ Exception: If presigned URL generation fails.
104
+ S3Error details are included in the exception message.
105
+
106
+ Note:
107
+ Presigned URLs are useful for sharing files temporarily without
108
+ exposing MinIO credentials or requiring users to have storage access.
109
+ """
@@ -0,0 +1,119 @@
1
+ """Configuration schemas for Browser Use tool.
2
+
3
+ Authors:
4
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
5
+ """
6
+
7
+ import os
8
+ from typing import Literal
9
+
10
+ from openai.types.shared.chat_model import ChatModel
11
+ from pydantic import BaseModel, Field
12
+
13
+
14
+ class BrowserUseToolInput(BaseModel):
15
+ """Input schema for Browser Use tool."""
16
+
17
+ task: str = Field(..., description="Task prompt for the AI agent to execute in the browser")
18
+
19
+
20
+ class BrowserUseToolConfig(BaseModel):
21
+ """Tool configuration schema for Browser Use tool."""
22
+
23
+ steel_api_key: str = Field(
24
+ default_factory=lambda: os.getenv("STEEL_API_KEY"),
25
+ description="Steel API key for Steel access",
26
+ )
27
+ steel_base_url: str = Field(
28
+ default="https://api.steel.dev",
29
+ description="Steel API base URL",
30
+ )
31
+ steel_ws_url: str = Field(
32
+ default="wss://connect.steel.dev",
33
+ description="Steel WebSocket URL for browser connection",
34
+ )
35
+ steel_timeout_in_ms: int = Field(
36
+ default=600_000,
37
+ description="Timeout for Steel operations in milliseconds",
38
+ )
39
+
40
+ browser_use_llm_openai_api_key: str = Field(
41
+ default_factory=lambda: os.getenv("OPENAI_API_KEY"),
42
+ description="OpenAI API key for browser-use access",
43
+ )
44
+ browser_use_llm_openai_model: ChatModel | str = Field(
45
+ default="o3",
46
+ description="OpenAI model to use for browser-use agent",
47
+ )
48
+ browser_use_llm_openai_temperature: float | None = Field(
49
+ default=None,
50
+ description="Temperature setting for OpenAI model (None uses provider default)",
51
+ )
52
+ browser_use_llm_openai_reasoning_effort: Literal["minimal", "low", "medium", "high"] = Field(
53
+ default="low",
54
+ description="Reasoning effort for OpenAI model",
55
+ )
56
+ browser_use_llm_openai_base_url: str | None = Field(
57
+ default=None,
58
+ description="Base URL for OpenAI model (None uses provider default)",
59
+ )
60
+
61
+ browser_use_page_extraction_llm_openai_api_key: str = Field(
62
+ default_factory=lambda: os.getenv("OPENAI_API_KEY"),
63
+ description="OpenAI API key for page extraction access",
64
+ )
65
+ browser_use_page_extraction_llm_openai_model: ChatModel | str = Field(
66
+ default="gpt-5-mini",
67
+ description="OpenAI model to use for page extraction",
68
+ )
69
+ browser_use_page_extraction_llm_openai_temperature: float | None = Field(
70
+ default=None,
71
+ description="Temperature setting for OpenAI model (None uses provider default)",
72
+ )
73
+ browser_use_page_extraction_llm_openai_reasoning_effort: Literal["minimal", "low", "medium", "high"] = Field(
74
+ default="minimal",
75
+ description="Reasoning effort for OpenAI model",
76
+ )
77
+ browser_use_page_extraction_llm_openai_base_url: str | None = Field(
78
+ default=None,
79
+ description="Base URL for OpenAI model (None uses provider default)",
80
+ )
81
+
82
+ browser_use_extend_system_message: str | None = Field(
83
+ default=None,
84
+ description="Extend system message for browser-use agent",
85
+ )
86
+
87
+ browser_use_vision_detail_level: Literal["auto", "low", "high"] = Field(
88
+ default="auto",
89
+ description="Detail level for vision",
90
+ )
91
+
92
+ browser_use_enable_cloud_sync: bool = Field(
93
+ default=False,
94
+ description="Enable Browser Use cloud sync and telemetry events",
95
+ )
96
+
97
+ browser_use_logging_level: Literal["debug", "info", "warning", "error", "result"] = Field(
98
+ default="info",
99
+ description="Logging verbosity for browser-use internals",
100
+ )
101
+
102
+ browser_use_llm_timeout_in_s: int = Field(
103
+ default=60,
104
+ description="Timeout for LLM in seconds",
105
+ )
106
+ browser_use_step_timeout_in_s: int = Field(
107
+ default=180,
108
+ description="Timeout for step in seconds",
109
+ )
110
+ browser_use_max_session_retries: int = Field(
111
+ default=2,
112
+ ge=0,
113
+ description="How many times to recreate the Steel session after recoverable disconnects.",
114
+ )
115
+ browser_use_session_retry_delay_in_s: float = Field(
116
+ default=3.0,
117
+ ge=0.0,
118
+ description="Delay (in seconds) before attempting to recover from a lost Steel session.",
119
+ )
@@ -0,0 +1,32 @@
1
+ from openai.types.shared.chat_model import ChatModel
2
+ from pydantic import BaseModel
3
+ from typing import Literal
4
+
5
+ class BrowserUseToolInput(BaseModel):
6
+ """Input schema for Browser Use tool."""
7
+ task: str
8
+
9
+ class BrowserUseToolConfig(BaseModel):
10
+ """Tool configuration schema for Browser Use tool."""
11
+ steel_api_key: str
12
+ steel_base_url: str
13
+ steel_ws_url: str
14
+ steel_timeout_in_ms: int
15
+ browser_use_llm_openai_api_key: str
16
+ browser_use_llm_openai_model: ChatModel | str
17
+ browser_use_llm_openai_temperature: float | None
18
+ browser_use_llm_openai_reasoning_effort: Literal['minimal', 'low', 'medium', 'high']
19
+ browser_use_llm_openai_base_url: str | None
20
+ browser_use_page_extraction_llm_openai_api_key: str
21
+ browser_use_page_extraction_llm_openai_model: ChatModel | str
22
+ browser_use_page_extraction_llm_openai_temperature: float | None
23
+ browser_use_page_extraction_llm_openai_reasoning_effort: Literal['minimal', 'low', 'medium', 'high']
24
+ browser_use_page_extraction_llm_openai_base_url: str | None
25
+ browser_use_extend_system_message: str | None
26
+ browser_use_vision_detail_level: Literal['auto', 'low', 'high']
27
+ browser_use_enable_cloud_sync: bool
28
+ browser_use_logging_level: Literal['debug', 'info', 'warning', 'error', 'result']
29
+ browser_use_llm_timeout_in_s: int
30
+ browser_use_step_timeout_in_s: int
31
+ browser_use_max_session_retries: int
32
+ browser_use_session_retry_delay_in_s: float