aip-agents-binary 0.5.25b8__py3-none-any.whl → 0.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. aip_agents/__init__.pyi +19 -0
  2. aip_agents/a2a/__init__.pyi +3 -0
  3. aip_agents/a2a/server/__init__.pyi +4 -0
  4. aip_agents/a2a/server/base_executor.pyi +73 -0
  5. aip_agents/a2a/server/google_adk_executor.pyi +51 -0
  6. aip_agents/a2a/server/langflow_executor.pyi +43 -0
  7. aip_agents/a2a/server/langgraph_executor.pyi +47 -0
  8. aip_agents/a2a/types.pyi +132 -0
  9. aip_agents/agent/__init__.pyi +9 -0
  10. aip_agents/agent/base_agent.pyi +221 -0
  11. aip_agents/agent/base_langgraph_agent.py +137 -68
  12. aip_agents/agent/base_langgraph_agent.pyi +233 -0
  13. aip_agents/agent/google_adk_agent.pyi +141 -0
  14. aip_agents/agent/google_adk_constants.pyi +3 -0
  15. aip_agents/agent/hitl/__init__.pyi +6 -0
  16. aip_agents/agent/hitl/config.pyi +15 -0
  17. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
  18. aip_agents/agent/hitl/manager.pyi +200 -0
  19. aip_agents/agent/hitl/models.pyi +3 -0
  20. aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
  21. aip_agents/agent/hitl/prompt/base.pyi +24 -0
  22. aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
  23. aip_agents/agent/hitl/registry.pyi +101 -0
  24. aip_agents/agent/interface.pyi +81 -0
  25. aip_agents/agent/interfaces.pyi +44 -0
  26. aip_agents/agent/langflow_agent.pyi +133 -0
  27. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
  28. aip_agents/agent/langgraph_react_agent.py +58 -14
  29. aip_agents/agent/langgraph_react_agent.pyi +131 -0
  30. aip_agents/agent/system_instruction_context.pyi +13 -0
  31. aip_agents/clients/__init__.pyi +4 -0
  32. aip_agents/clients/langflow/__init__.pyi +4 -0
  33. aip_agents/clients/langflow/client.pyi +140 -0
  34. aip_agents/clients/langflow/types.pyi +7 -0
  35. aip_agents/constants.pyi +7 -0
  36. aip_agents/examples/__init__.pyi +0 -0
  37. aip_agents/examples/compare_streaming_client.py +2 -2
  38. aip_agents/examples/compare_streaming_client.pyi +48 -0
  39. aip_agents/examples/compare_streaming_server.py +1 -1
  40. aip_agents/examples/compare_streaming_server.pyi +18 -0
  41. aip_agents/examples/demo_memory_recall.pyi +58 -0
  42. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
  43. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
  44. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
  45. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
  46. aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
  47. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
  48. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
  49. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
  50. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
  51. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
  52. aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
  53. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
  54. aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
  55. aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
  56. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
  57. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
  58. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
  59. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
  60. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
  61. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
  62. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
  63. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
  64. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
  65. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
  66. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
  67. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
  68. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
  69. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
  70. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
  71. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
  72. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
  73. aip_agents/examples/hello_world_google_adk.pyi +5 -0
  74. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
  75. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
  76. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
  77. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
  78. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
  79. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
  80. aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
  81. aip_agents/examples/hello_world_langchain.pyi +5 -0
  82. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
  83. aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
  84. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
  85. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
  86. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
  87. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
  88. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
  89. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
  90. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
  91. aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
  92. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
  93. aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
  94. aip_agents/examples/hello_world_langgraph.pyi +5 -0
  95. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
  96. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
  97. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
  98. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
  99. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
  100. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
  101. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
  102. aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
  103. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
  104. aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
  105. aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
  106. aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
  107. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
  108. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
  109. aip_agents/examples/hello_world_pii_logger.pyi +5 -0
  110. aip_agents/examples/hello_world_sentry.pyi +21 -0
  111. aip_agents/examples/hello_world_step_limits.pyi +17 -0
  112. aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
  113. aip_agents/examples/hello_world_tool_output_client.py +9 -0
  114. aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
  115. aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
  116. aip_agents/examples/hitl_demo.pyi +67 -0
  117. aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
  118. aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
  119. aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
  120. aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
  121. aip_agents/examples/todolist_planning_a2a_langchain_client.py +2 -2
  122. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
  123. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +1 -1
  124. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
  125. aip_agents/examples/tools/__init__.pyi +9 -0
  126. aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
  127. aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
  128. aip_agents/examples/tools/data_generator_tool.pyi +15 -0
  129. aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
  130. aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
  131. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
  132. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
  133. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
  134. aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
  135. aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
  136. aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
  137. aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
  138. aip_agents/examples/tools/random_chart_tool.pyi +20 -0
  139. aip_agents/examples/tools/serper_tool.pyi +16 -0
  140. aip_agents/examples/tools/stock_tools.pyi +36 -0
  141. aip_agents/examples/tools/table_generator_tool.pyi +22 -0
  142. aip_agents/examples/tools/time_tool.pyi +15 -0
  143. aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
  144. aip_agents/guardrails/__init__.pyi +6 -0
  145. aip_agents/guardrails/engines/__init__.pyi +4 -0
  146. aip_agents/guardrails/engines/base.py +6 -6
  147. aip_agents/guardrails/engines/base.pyi +61 -0
  148. aip_agents/guardrails/engines/nemo.pyi +46 -0
  149. aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
  150. aip_agents/guardrails/exceptions.pyi +23 -0
  151. aip_agents/guardrails/manager.pyi +42 -0
  152. aip_agents/guardrails/middleware.pyi +87 -0
  153. aip_agents/guardrails/schemas.pyi +43 -0
  154. aip_agents/guardrails/utils.pyi +19 -0
  155. aip_agents/mcp/__init__.pyi +0 -0
  156. aip_agents/mcp/client/__init__.pyi +5 -0
  157. aip_agents/mcp/client/base_mcp_client.pyi +148 -0
  158. aip_agents/mcp/client/connection_manager.py +36 -1
  159. aip_agents/mcp/client/connection_manager.pyi +51 -0
  160. aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
  161. aip_agents/mcp/client/google_adk/client.pyi +75 -0
  162. aip_agents/mcp/client/langchain/__init__.pyi +3 -0
  163. aip_agents/mcp/client/langchain/client.pyi +48 -0
  164. aip_agents/mcp/client/persistent_session.py +318 -68
  165. aip_agents/mcp/client/persistent_session.pyi +122 -0
  166. aip_agents/mcp/client/session_pool.pyi +101 -0
  167. aip_agents/mcp/client/transports.py +33 -2
  168. aip_agents/mcp/client/transports.pyi +132 -0
  169. aip_agents/mcp/utils/__init__.pyi +0 -0
  170. aip_agents/mcp/utils/config_validator.pyi +82 -0
  171. aip_agents/memory/__init__.pyi +5 -0
  172. aip_agents/memory/adapters/__init__.pyi +4 -0
  173. aip_agents/memory/adapters/base_adapter.pyi +150 -0
  174. aip_agents/memory/adapters/mem0.pyi +22 -0
  175. aip_agents/memory/base.pyi +60 -0
  176. aip_agents/memory/constants.pyi +25 -0
  177. aip_agents/memory/factory.pyi +24 -0
  178. aip_agents/memory/guidance.pyi +3 -0
  179. aip_agents/memory/simple_memory.pyi +23 -0
  180. aip_agents/middleware/__init__.pyi +5 -0
  181. aip_agents/middleware/base.pyi +75 -0
  182. aip_agents/middleware/manager.pyi +84 -0
  183. aip_agents/middleware/todolist.pyi +125 -0
  184. aip_agents/schema/__init__.pyi +9 -0
  185. aip_agents/schema/a2a.pyi +40 -0
  186. aip_agents/schema/agent.pyi +65 -0
  187. aip_agents/schema/hitl.pyi +89 -0
  188. aip_agents/schema/langgraph.pyi +28 -0
  189. aip_agents/schema/model_id.pyi +54 -0
  190. aip_agents/schema/step_limit.pyi +63 -0
  191. aip_agents/schema/storage.pyi +21 -0
  192. aip_agents/sentry/__init__.pyi +3 -0
  193. aip_agents/sentry/sentry.pyi +48 -0
  194. aip_agents/storage/__init__.pyi +8 -0
  195. aip_agents/storage/base.pyi +58 -0
  196. aip_agents/storage/clients/__init__.pyi +3 -0
  197. aip_agents/storage/clients/minio_client.pyi +137 -0
  198. aip_agents/storage/config.pyi +29 -0
  199. aip_agents/storage/providers/__init__.pyi +5 -0
  200. aip_agents/storage/providers/base.pyi +88 -0
  201. aip_agents/storage/providers/memory.pyi +79 -0
  202. aip_agents/storage/providers/object_storage.pyi +98 -0
  203. aip_agents/tools/__init__.pyi +9 -0
  204. aip_agents/tools/browser_use/__init__.pyi +14 -0
  205. aip_agents/tools/browser_use/action_parser.pyi +18 -0
  206. aip_agents/tools/browser_use/browser_use_tool.py +8 -0
  207. aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
  208. aip_agents/tools/browser_use/llm_config.pyi +52 -0
  209. aip_agents/tools/browser_use/minio_storage.pyi +109 -0
  210. aip_agents/tools/browser_use/schemas.pyi +32 -0
  211. aip_agents/tools/browser_use/session.pyi +4 -0
  212. aip_agents/tools/browser_use/session_errors.pyi +53 -0
  213. aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
  214. aip_agents/tools/browser_use/streaming.py +2 -0
  215. aip_agents/tools/browser_use/streaming.pyi +81 -0
  216. aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
  217. aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
  218. aip_agents/tools/browser_use/types.pyi +45 -0
  219. aip_agents/tools/code_sandbox/__init__.pyi +3 -0
  220. aip_agents/tools/code_sandbox/constant.pyi +4 -0
  221. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
  222. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
  223. aip_agents/tools/constants.pyi +138 -0
  224. aip_agents/tools/document_loader/__init__.pyi +7 -0
  225. aip_agents/tools/document_loader/base_reader.pyi +75 -0
  226. aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
  227. aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
  228. aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
  229. aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
  230. aip_agents/tools/gl_connector/__init__.pyi +3 -0
  231. aip_agents/tools/gl_connector/tool.pyi +74 -0
  232. aip_agents/tools/gl_connector_tools.pyi +39 -0
  233. aip_agents/tools/memory_search/__init__.pyi +5 -0
  234. aip_agents/tools/memory_search/base.pyi +69 -0
  235. aip_agents/tools/memory_search/mem0.pyi +19 -0
  236. aip_agents/tools/memory_search/schema.pyi +15 -0
  237. aip_agents/tools/memory_search_tool.pyi +3 -0
  238. aip_agents/tools/time_tool.pyi +16 -0
  239. aip_agents/tools/tool_config_injector.pyi +26 -0
  240. aip_agents/tools/web_search/__init__.pyi +3 -0
  241. aip_agents/tools/web_search/serper_tool.pyi +19 -0
  242. aip_agents/types/__init__.pyi +36 -0
  243. aip_agents/types/a2a_events.pyi +3 -0
  244. aip_agents/utils/__init__.pyi +11 -0
  245. aip_agents/utils/a2a_connector.pyi +146 -0
  246. aip_agents/utils/artifact_helpers.pyi +203 -0
  247. aip_agents/utils/constants.pyi +10 -0
  248. aip_agents/utils/datetime/__init__.pyi +4 -0
  249. aip_agents/utils/datetime/normalization.pyi +95 -0
  250. aip_agents/utils/datetime/timezone.pyi +48 -0
  251. aip_agents/utils/env_loader.pyi +10 -0
  252. aip_agents/utils/event_handler_registry.pyi +23 -0
  253. aip_agents/utils/file_prompt_utils.pyi +21 -0
  254. aip_agents/utils/final_response_builder.pyi +34 -0
  255. aip_agents/utils/formatter_llm_client.pyi +71 -0
  256. aip_agents/utils/langgraph/__init__.pyi +3 -0
  257. aip_agents/utils/langgraph/converter.pyi +49 -0
  258. aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
  259. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
  260. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
  261. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +26 -1
  262. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
  263. aip_agents/utils/langgraph/tool_output_management.py +80 -0
  264. aip_agents/utils/langgraph/tool_output_management.pyi +329 -0
  265. aip_agents/utils/logger.pyi +60 -0
  266. aip_agents/utils/metadata/__init__.pyi +5 -0
  267. aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
  268. aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
  269. aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
  270. aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
  271. aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
  272. aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
  273. aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
  274. aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
  275. aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
  276. aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
  277. aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
  278. aip_agents/utils/metadata_helper.pyi +117 -0
  279. aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
  280. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
  281. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
  282. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
  283. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
  284. aip_agents/utils/pii/__init__.pyi +5 -0
  285. aip_agents/utils/pii/pii_handler.pyi +96 -0
  286. aip_agents/utils/pii/pii_helper.pyi +78 -0
  287. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
  288. aip_agents/utils/reference_helper.pyi +81 -0
  289. aip_agents/utils/sse_chunk_transformer.pyi +166 -0
  290. aip_agents/utils/step_limit_manager.pyi +112 -0
  291. aip_agents/utils/token_usage_helper.pyi +60 -0
  292. {aip_agents_binary-0.5.25b8.dist-info → aip_agents_binary-0.6.0.dist-info}/METADATA +51 -48
  293. aip_agents_binary-0.6.0.dist-info/RECORD +566 -0
  294. aip_agents_binary-0.5.25b8.dist-info/RECORD +0 -290
  295. {aip_agents_binary-0.5.25b8.dist-info → aip_agents_binary-0.6.0.dist-info}/WHEEL +0 -0
  296. {aip_agents_binary-0.5.25b8.dist-info → aip_agents_binary-0.6.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,21 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.examples.hello_world_langgraph import langgraph_example as langgraph_example
3
+ from aip_agents.sentry import setup_telemetry as setup_telemetry
4
+ from aip_agents.utils.logger import get_logger as get_logger
5
+ from fastapi import FastAPI
6
+
7
+ logger: Incomplete
8
+ BASE_URL: str
9
+ SENTRY_ENVIRONMENT: Incomplete
10
+ USE_OPENTELEMETRY: Incomplete
11
+
12
+ def fetch_endpoints() -> None:
13
+ """Fetch all endpoints from the server."""
14
+ def create_app() -> FastAPI:
15
+ """Create and configure the FastAPI application.
16
+
17
+ Returns:
18
+ FastAPI: The configured FastAPI application.
19
+ """
20
+ def run_server() -> None:
21
+ """Run the FastAPI server."""
@@ -0,0 +1,17 @@
1
+ from aip_agents.agent import LangGraphReactAgent as LangGraphReactAgent
2
+ from aip_agents.examples.tools.langchain_arithmetic_tools import add_numbers as add_numbers
3
+ from aip_agents.schema.step_limit import MaxStepsExceededError as MaxStepsExceededError, StepLimitConfig as StepLimitConfig
4
+ from aip_agents.utils.step_limit_manager import StepLimitManager as StepLimitManager
5
+
6
+ def print_config_validation(config: StepLimitConfig | None, context: str):
7
+ """Print step limit configuration validation."""
8
+ async def test_case_1_success_no_limits() -> None:
9
+ """Test Case 1: Success - High limits, no warnings."""
10
+ async def test_case_2_parallel_tool_batch_accounting() -> None:
11
+ """Test Case 2: Demonstrate that parallel tool batches consume multiple steps."""
12
+ async def test_case_3_step_limit_exceeded() -> None:
13
+ """Test Case 3: Step Limit Exceeded - Only 2 steps allowed."""
14
+ async def test_case_4_delegation_depth_exceeded() -> None:
15
+ """Test Case 4: Delegation Depth Exceeded - Zero depth."""
16
+ async def main() -> None:
17
+ """Run all test cases."""
@@ -0,0 +1,17 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphAgent as LangGraphAgent
3
+ from aip_agents.examples.tools.stock_tools import StockNewsInput as StockNewsInput, StockPriceInput as StockPriceInput, get_stock_news as get_stock_news, get_stock_price as get_stock_price
4
+ from aip_agents.utils.logger import get_logger as get_logger
5
+ from langchain_core.tools import BaseTool as BaseTool
6
+
7
+ logger: Incomplete
8
+ SERVER_AGENT_NAME: str
9
+ stock_tools: list[BaseTool]
10
+
11
+ def main(host: str, port: int):
12
+ """Runs the StockAgent A2A server.
13
+
14
+ Args:
15
+ host (str): Host to bind the server to.
16
+ port (int): Port to bind the server to.
17
+ """
@@ -39,6 +39,15 @@ async def main():
39
39
  print(chunk["content"], end="", flush=True)
40
40
  if chunk.get("metadata"):
41
41
  print(f"\nMetadata: {chunk['metadata']}", end="\n\n", flush=True)
42
+ tool_info = chunk.get("metadata", {}).get("tool_info") if isinstance(chunk.get("metadata"), dict) else None
43
+ if isinstance(tool_info, dict):
44
+ for tool_call in tool_info.get("tool_calls", []):
45
+ if tool_call.get("name") == "data_visualizer":
46
+ data_source = tool_call.get("args", {}).get("data_source")
47
+ if not (isinstance(data_source, str) and data_source.startswith("$tool_output.")):
48
+ raise RuntimeError(
49
+ "Tool output sharing failed: expected data_source to reference $tool_output.<call_id>."
50
+ )
42
51
  print("\n")
43
52
 
44
53
 
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangGraphReactAgent as LangGraphReactAgent
2
+ from aip_agents.schema.agent import A2AClientConfig as A2AClientConfig
3
+
4
+ async def main() -> None:
5
+ """Demonstrate tool output management with data visualization."""
@@ -0,0 +1,19 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphReactAgent as LangGraphReactAgent
3
+ from aip_agents.examples.tools.data_generator_tool import DataGeneratorTool as DataGeneratorTool
4
+ from aip_agents.examples.tools.data_visualization_tool import DataVisualizerTool as DataVisualizerTool
5
+ from aip_agents.storage.clients.minio_client import MinioConfig as MinioConfig, MinioObjectStorage as MinioObjectStorage
6
+ from aip_agents.storage.providers.object_storage import ObjectStorageProvider as ObjectStorageProvider
7
+ from aip_agents.utils.langgraph.tool_output_management import ToolOutputConfig as ToolOutputConfig, ToolOutputManager as ToolOutputManager
8
+ from aip_agents.utils.logger import get_logger as get_logger
9
+
10
+ logger: Incomplete
11
+ SERVER_AGENT_NAME: str
12
+
13
+ def main(host: str, port: int):
14
+ """Run the Data Visualization A2A server.
15
+
16
+ Args:
17
+ host (str): Host to bind the server to.
18
+ port (int): Port to bind the server to.
19
+ """
@@ -0,0 +1,67 @@
1
+ import asyncio
2
+ import httpx
3
+ from _typeshed import Incomplete
4
+ from aip_agents.agent import LangGraphReactAgent as LangGraphReactAgent
5
+ from aip_agents.schema.hitl import ApprovalRequest as ApprovalRequest
6
+ from aip_agents.utils.env_loader import load_local_env as load_local_env
7
+ from aip_agents.utils.logger import get_logger as get_logger
8
+ from dataclasses import dataclass
9
+ from langchain_core.tools import tool
10
+ from starlette.applications import Starlette
11
+
12
+ logger: Incomplete
13
+
14
+ @tool
15
+ def check_candidate_inbox(candidate_email: str) -> str:
16
+ """Retrieve the latest email from a candidate (safe tool).
17
+
18
+ Args:
19
+ candidate_email (str): The email address of the candidate.
20
+
21
+ Returns:
22
+ str: The latest email content from the candidate.
23
+ """
24
+ @tool
25
+ def validate_candidate(candidate_name: str, role: str, score: int) -> str:
26
+ """Record the candidate decision in the applicant tracking system.
27
+
28
+ Args:
29
+ candidate_name (str): The name of the candidate.
30
+ role (str): The role the candidate is being evaluated for.
31
+ score (int): The evaluation score for the candidate.
32
+
33
+ Returns:
34
+ str: The validation result with recommendation and notes.
35
+ """
36
+ @tool
37
+ def send_candidate_email(candidate_email: str, subject: str, body: str) -> str:
38
+ """Send an email update to the candidate.
39
+
40
+ Args:
41
+ candidate_email (str): The email address of the candidate.
42
+ subject (str): The subject line of the email.
43
+ body (str): The body content of the email.
44
+
45
+ Returns:
46
+ str: Confirmation message that the email was sent.
47
+ """
48
+
49
+ CANDIDATE_PROFILES: dict[str, dict[str, str | int | bool]]
50
+ CANDIDATE_SEQUENCE: list[dict[str, str | int | bool]]
51
+ NAME_INDEX: Incomplete
52
+
53
+ class _ServerContext:
54
+ def __init__(self, app: Starlette, host: str, port: int) -> None: ...
55
+ async def __aenter__(self) -> _ServerContext: ...
56
+ async def __aexit__(self, exc_type, exc, _tb) -> None: ...
57
+
58
+ @dataclass
59
+ class RunContext:
60
+ """Context object containing runtime dependencies for the HITL demo server."""
61
+ http_client: httpx.AsyncClient
62
+ host: str
63
+ port: int
64
+ pending_queue: asyncio.Queue[ApprovalRequest]
65
+
66
+ async def main() -> None:
67
+ """Interactive HITL approval demo."""
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
2
+ from aip_agents.schema.agent import A2AClientConfig as A2AClientConfig
3
+
4
+ async def main() -> None:
5
+ """Stream queries and inspect chunks with PII handling."""
@@ -0,0 +1,20 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangChainAgent as LangChainAgent
3
+ from aip_agents.examples.tools.pii_demo_tools import get_customer_info as get_customer_info, get_employee_data as get_employee_data, get_user_profile as get_user_profile
4
+ from aip_agents.utils.logger import LoggerManager as LoggerManager
5
+
6
+ logger: Incomplete
7
+ SERVER_AGENT_NAME: str
8
+
9
+ def main(host: str, port: int):
10
+ """Runs the PII Demo LangGraph A2A server.
11
+
12
+ This server demonstrates PII handling capabilities including:
13
+ - Automatic anonymization of sensitive data in tool outputs
14
+ - Deanonymization of PII for tool inputs
15
+ - Collision detection and resolution in parallel tool execution
16
+
17
+ Args:
18
+ host (str): Host to bind the server to.
19
+ port (int): Port to bind the server to.
20
+ """
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangGraphAgent as LangGraphAgent
2
+ from aip_agents.schema.agent import A2AClientConfig as A2AClientConfig
3
+
4
+ async def main() -> None:
5
+ """Main function demonstrating the Multi-Agent PII Demo client."""
@@ -0,0 +1,40 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphAgent as LangGraphAgent
3
+ from aip_agents.examples.tools.pii_demo_tools import get_customer_info as get_customer_info, get_employee_data as get_employee_data, get_user_profile as get_user_profile
4
+ from aip_agents.utils.logger import LoggerManager as LoggerManager
5
+ from langchain_openai import ChatOpenAI
6
+
7
+ logger: Incomplete
8
+ SERVER_AGENT_NAME: str
9
+
10
+ def create_specialist_agents(llm: ChatOpenAI) -> tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent]:
11
+ """Create Level 2 specialist agents with PII-returning tools.
12
+
13
+ Args:
14
+ llm: The language model to use for the specialist agents.
15
+
16
+ Returns:
17
+ Tuple of (customer_service_agent, hr_agent, user_support_agent).
18
+ """
19
+ def create_coordinator_agent(llm: ChatOpenAI, specialist_agents: tuple[LangGraphAgent, LangGraphAgent, LangGraphAgent]) -> LangGraphAgent:
20
+ """Create Level 1 coordinator agent that orchestrates specialist agents.
21
+
22
+ Args:
23
+ llm: The language model to use for the coordinator agent.
24
+ specialist_agents: Tuple of specialist agents.
25
+
26
+ Returns:
27
+ The configured coordinator agent.
28
+ """
29
+ def main(host: str, port: int):
30
+ """Runs the Multi-Agent PII Demo A2A server.
31
+
32
+ This server demonstrates PII handling across a multi-agent hierarchy:
33
+ - PII anonymization in tool outputs
34
+ - PII propagation from child agents to parent
35
+ - Multi-agent delegation with PII mapping merge
36
+
37
+ Args:
38
+ host: Host to bind the server to.
39
+ port: Port to bind the server to.
40
+ """
@@ -1,10 +1,10 @@
1
1
  """A2A client for the planning LangGraphReactAgent.
2
2
 
3
3
  Run the planning server first:
4
- uv run python -m aip_agents.examples.todolist_planning_a2a_langgraph_server
4
+ poetry run python -m aip_agents.examples.todolist_planning_a2a_langgraph_server
5
5
 
6
6
  Then run this client:
7
- uv run python -m aip_agents.examples.todolist_planning_a2a_langchain_client
7
+ poetry run python -m aip_agents.examples.todolist_planning_a2a_langchain_client
8
8
 
9
9
  You should see streaming output, including when write_todos_tool is called.
10
10
  """
@@ -0,0 +1,5 @@
1
+ from aip_agents.agent import LangChainAgent as LangChainAgent
2
+ from aip_agents.schema.agent import A2AClientConfig as A2AClientConfig
3
+
4
+ async def main() -> None:
5
+ """Connect to the planning A2A server and stream a planning query."""
@@ -1,7 +1,7 @@
1
1
  """A2A server exposing a LangGraphReactAgent with planning (TodoListMiddleware).
2
2
 
3
3
  Run:
4
- uv run python -m aip_agents.examples.todolist_planning_a2a_langgraph_server \
4
+ poetry run python -m aip_agents.examples.todolist_planning_a2a_langgraph_server \
5
5
  --host localhost --port 8002
6
6
 
7
7
  Then connect with the matching A2A client to observe write_todos_tool calls.
@@ -0,0 +1,19 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.agent import LangGraphReactAgent as LangGraphReactAgent
3
+ from aip_agents.examples.tools.serper_tool import MockGoogleSerperTool as MockGoogleSerperTool
4
+ from aip_agents.examples.tools.stock_tools import get_stock_price as get_stock_price
5
+ from aip_agents.utils.logger import get_logger as get_logger
6
+
7
+ logger: Incomplete
8
+ SERVER_AGENT_NAME: str
9
+
10
+ def main(host: str, port: int) -> None:
11
+ """Run an A2A server with a planning-enabled LangGraphReactAgent.
12
+
13
+ The agent has TodoListMiddleware attached via planning=True and will
14
+ expose the write_todos_tool over A2A with token streaming enabled.
15
+
16
+ Args:
17
+ host: The host to bind the server to.
18
+ port: The port to bind the server to.
19
+ """
@@ -0,0 +1,9 @@
1
+ from aip_agents.examples.tools.adk_weather_tool import get_weather as weather_tool_adk
2
+ from aip_agents.examples.tools.langchain_weather_tool import weather_tool as weather_tool_langchain
3
+ from aip_agents.examples.tools.langgraph_streaming_tool import LangGraphStreamingTool as langgraph_streaming_tool
4
+ from aip_agents.examples.tools.mock_retrieval_tool import MockRetrievalTool as mock_retrieval_tool
5
+ from aip_agents.examples.tools.random_chart_tool import RandomChartTool as random_chart_tool
6
+ from aip_agents.examples.tools.serper_tool import MockGoogleSerperTool as google_serper_tool
7
+ from aip_agents.examples.tools.time_tool import TimeTool as time_tool
8
+
9
+ __all__ = ['weather_tool_langchain', 'weather_tool_adk', 'time_tool', 'google_serper_tool', 'langgraph_streaming_tool', 'mock_retrieval_tool', 'random_chart_tool']
@@ -0,0 +1,24 @@
1
+ def add_numbers(a: int, b: int) -> str:
2
+ """Adds two integer numbers together and returns the result as a string.
3
+
4
+ For example, to add 5 and 3, you would call this with a=5 and b=3.
5
+
6
+ Args:
7
+ a: The first number.
8
+ b: The second number.
9
+
10
+ Returns:
11
+ The sum of the two numbers as a string, or an error message if addition fails.
12
+ """
13
+ def sum_numbers(a: int, b: int) -> int:
14
+ """Adds two integer numbers together and returns the integer result.
15
+
16
+ Used specifically in Google ADK examples where an integer return is expected.
17
+
18
+ Args:
19
+ a: The first number.
20
+ b: The second number.
21
+
22
+ Returns:
23
+ The sum of the two numbers as an integer.
24
+ """
@@ -0,0 +1,18 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.utils.logger import get_logger as get_logger
3
+
4
+ logger: Incomplete
5
+ WEATHER_DATA: Incomplete
6
+
7
+ def get_weather(location: str) -> dict:
8
+ """Gets detailed weather information for a specified location.
9
+
10
+ Args:
11
+ location: The name of the city to get weather for.
12
+
13
+ Returns:
14
+ A dictionary containing:
15
+ - location: The requested location name
16
+ - weather: A dictionary with temperature, conditions, and humidity
17
+ """
18
+ weather_tool = get_weather
@@ -0,0 +1,15 @@
1
+ from langchain_core.tools import BaseTool
2
+ from pydantic import BaseModel
3
+ from typing import Literal
4
+
5
+ class DataInput(BaseModel):
6
+ """Input schema for data generation."""
7
+ data_type: Literal['sales', 'scores', 'growth']
8
+ size: int
9
+
10
+ class DataGeneratorTool(BaseTool):
11
+ """Tool that generates sample datasets with automatic output storage."""
12
+ name: str
13
+ description: str
14
+ args_schema: type[BaseModel]
15
+ store_final_output: bool
@@ -0,0 +1,19 @@
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
+ from typing import Any
6
+
7
+ PIL_AVAILABLE: bool
8
+
9
+ class ChartInput(BaseModel):
10
+ """Input schema for chart generation."""
11
+ data_source: Any
12
+ chart_type: str
13
+ title: str
14
+
15
+ class DataVisualizerTool(BaseTool):
16
+ """Tool that creates visualizations with automatic output storage."""
17
+ name: str
18
+ description: str
19
+ args_schema: type[BaseModel]
@@ -0,0 +1,26 @@
1
+ from aip_agents.a2a.types import MimeType as MimeType
2
+ from aip_agents.utils.artifact_helpers import create_artifact_response as create_artifact_response, create_error_response as create_error_response
3
+ from langchain_core.tools import BaseTool
4
+ from pydantic import BaseModel
5
+
6
+ PIL_AVAILABLE: bool
7
+
8
+ class ImageArtifactInput(BaseModel):
9
+ """Input schema for image artifact tool."""
10
+ width: int
11
+ height: int
12
+ color: str
13
+ text: str
14
+ image_name: str
15
+
16
+ class ImageArtifactTool(BaseTool):
17
+ """Tool that generates simple images with artifact support.
18
+
19
+ This tool demonstrates the standardized artifact format for binary data by:
20
+ 1. Generating a simple image using PIL
21
+ 2. Providing a confirmation message for the agent
22
+ 3. Creating an image file artifact for the user
23
+ """
24
+ name: str
25
+ description: str
26
+ args_schema: type[BaseModel]
@@ -0,0 +1,17 @@
1
+ from langchain_core.tools import tool
2
+
3
+ @tool
4
+ def add_numbers(a: int, b: int) -> str:
5
+ """Adds two numbers and returns the result as a string.
6
+
7
+ This is a self-contained LangChain tool.
8
+ For example:
9
+ add_numbers(a=5, b=3)
10
+
11
+ Args:
12
+ a (int): First number to add.
13
+ b (int): Second number to add.
14
+
15
+ Returns:
16
+ str: Sum of the two numbers as a string.
17
+ """
@@ -0,0 +1,20 @@
1
+ from langchain_core.tools import BaseTool
2
+ from pydantic import BaseModel
3
+
4
+ class CurrencyConfig(BaseModel):
5
+ """Tool configuration schema."""
6
+ tenant_id: str
7
+ auth_key: str
8
+
9
+ class CurrencyInput(BaseModel):
10
+ """Input schema for currency exchange."""
11
+ amount: float
12
+ from_currency: str
13
+ to_currency: str
14
+
15
+ class CurrencyExchangeTool(BaseTool):
16
+ """Simple currency exchange tool with SDK auto-injection configuration."""
17
+ name: str
18
+ description: str
19
+ args_schema: type[BaseModel]
20
+ tool_config_schema: type[BaseModel]
@@ -0,0 +1,25 @@
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
+ PIL_AVAILABLE: bool
7
+
8
+ class GraphCommandInput(BaseModel):
9
+ """Input schema for a tiny bar/line chart artifact tool.
10
+
11
+ Note: width/height are clamped to a small size to keep artifacts lightweight.
12
+ """
13
+ chart_type: str
14
+ labels: list[str]
15
+ values: list[float]
16
+ title: str
17
+ width: int
18
+ height: int
19
+ image_name: str
20
+
21
+ class GraphArtifactCommandTool(BaseTool):
22
+ """Generate a very small PNG chart and return it as a Command artifact."""
23
+ name: str
24
+ description: str
25
+ args_schema: type[BaseModel]
@@ -0,0 +1,19 @@
1
+ from _typeshed import Incomplete
2
+ from aip_agents.utils.logger import get_logger as get_logger
3
+ from pydantic import BaseModel
4
+
5
+ logger: Incomplete
6
+
7
+ class WeatherToolInputSchema(BaseModel):
8
+ """Schema for weather tool input."""
9
+ city: str
10
+
11
+ def weather_tool(city: str) -> str:
12
+ """Gets the weather for a specified city.
13
+
14
+ Args:
15
+ city: The name of the city to get weather for.
16
+
17
+ Returns:
18
+ A string describing the weather conditions.
19
+ """
@@ -0,0 +1,43 @@
1
+ from aip_agents.agent.langgraph_react_agent import LangGraphReactAgent as LangGraphReactAgent
2
+ from aip_agents.examples.tools.langchain_weather_tool import weather_tool as weather_tool
3
+ from aip_agents.examples.tools.time_tool import TimeTool as TimeTool
4
+ from langchain_core.runnables import RunnableConfig
5
+ from langchain_core.tools import BaseTool
6
+ from pydantic import BaseModel
7
+ from typing import Any
8
+
9
+ class StreamingToolConfig(BaseModel):
10
+ """Tool configuration schema for the LangGraph streaming tool."""
11
+ time_format: str
12
+
13
+ class LangGraphStreamingToolInput(BaseModel):
14
+ """Input schema for the LangGraphStreamingTool."""
15
+ query: str
16
+
17
+ class LangGraphStreamingTool(BaseTool):
18
+ """Tool that wraps a LangGraph agent with time and weather forecast capabilities."""
19
+ name: str
20
+ description: str
21
+ args_schema: type[BaseModel]
22
+ tool_config_schema: type[BaseModel]
23
+ def __init__(self, model: Any = None, **kwargs) -> None:
24
+ """Initialize the LangGraphStreamingTool.
25
+
26
+ Args:
27
+ model: The model to use for the agent.
28
+ **kwargs: Additional keyword arguments.
29
+ """
30
+ @property
31
+ def agent(self):
32
+ """Access the internal agent."""
33
+ async def arun_streaming(self, query: str = None, config: RunnableConfig = None, **kwargs):
34
+ """Execute the LangGraph agent asynchronously with A2A streaming output.
35
+
36
+ Args:
37
+ query: The query to execute.
38
+ config: Tool configuration containing user context and preferences.
39
+ **kwargs: Additional keyword arguments.
40
+
41
+ Returns:
42
+ An async generator that yields streaming events.
43
+ """
@@ -0,0 +1,13 @@
1
+ from langchain_core.tools import BaseTool
2
+ from pydantic import BaseModel
3
+
4
+ class MockRetrievalInput(BaseModel):
5
+ """Input schema for the MockRetrievalTool."""
6
+ query: str
7
+
8
+ class MockRetrievalTool(BaseTool):
9
+ """Mock tool that returns hardcoded references for testing."""
10
+ name: str
11
+ description: str
12
+ args_schema: type[BaseModel]
13
+ save_output_history: bool
@@ -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,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,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]