aip-agents-binary 0.6.0__py3-none-any.whl → 0.6.2__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 (306) hide show
  1. aip_agents/agent/langgraph_react_agent.py +194 -2
  2. aip_agents/examples/hello_world_ptc.py +49 -0
  3. aip_agents/ptc/__init__.py +48 -0
  4. aip_agents/ptc/doc_gen.py +122 -0
  5. aip_agents/ptc/exceptions.py +39 -0
  6. aip_agents/ptc/executor.py +143 -0
  7. aip_agents/ptc/mcp/__init__.py +45 -0
  8. aip_agents/ptc/mcp/sandbox_bridge.py +668 -0
  9. aip_agents/ptc/mcp/templates/__init__.py +1 -0
  10. aip_agents/ptc/mcp/templates/mcp_client.py.template +239 -0
  11. aip_agents/ptc/naming.py +184 -0
  12. aip_agents/ptc/payload.py +26 -0
  13. aip_agents/ptc/prompt_builder.py +571 -0
  14. aip_agents/ptc/ptc_helper.py +16 -0
  15. aip_agents/ptc/sandbox_bridge.py +58 -0
  16. aip_agents/ptc/template_utils.py +33 -0
  17. aip_agents/ptc/templates/__init__.py +1 -0
  18. aip_agents/ptc/templates/ptc_helper.py.template +134 -0
  19. aip_agents/sandbox/__init__.py +43 -0
  20. aip_agents/sandbox/defaults.py +9 -0
  21. aip_agents/sandbox/e2b_runtime.py +267 -0
  22. aip_agents/sandbox/template_builder.py +131 -0
  23. aip_agents/sandbox/types.py +24 -0
  24. aip_agents/sandbox/validation.py +50 -0
  25. aip_agents/tools/__init__.py +2 -0
  26. aip_agents/tools/execute_ptc_code.py +308 -0
  27. {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/METADATA +1 -1
  28. {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/RECORD +30 -282
  29. aip_agents/__init__.pyi +0 -19
  30. aip_agents/a2a/__init__.pyi +0 -3
  31. aip_agents/a2a/server/__init__.pyi +0 -4
  32. aip_agents/a2a/server/base_executor.pyi +0 -73
  33. aip_agents/a2a/server/google_adk_executor.pyi +0 -51
  34. aip_agents/a2a/server/langflow_executor.pyi +0 -43
  35. aip_agents/a2a/server/langgraph_executor.pyi +0 -47
  36. aip_agents/a2a/types.pyi +0 -132
  37. aip_agents/agent/__init__.pyi +0 -9
  38. aip_agents/agent/base_agent.pyi +0 -221
  39. aip_agents/agent/base_langgraph_agent.pyi +0 -233
  40. aip_agents/agent/google_adk_agent.pyi +0 -141
  41. aip_agents/agent/google_adk_constants.pyi +0 -3
  42. aip_agents/agent/hitl/__init__.pyi +0 -6
  43. aip_agents/agent/hitl/config.pyi +0 -15
  44. aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +0 -42
  45. aip_agents/agent/hitl/manager.pyi +0 -200
  46. aip_agents/agent/hitl/models.pyi +0 -3
  47. aip_agents/agent/hitl/prompt/__init__.pyi +0 -4
  48. aip_agents/agent/hitl/prompt/base.pyi +0 -24
  49. aip_agents/agent/hitl/prompt/deferred.pyi +0 -30
  50. aip_agents/agent/hitl/registry.pyi +0 -101
  51. aip_agents/agent/interface.pyi +0 -81
  52. aip_agents/agent/interfaces.pyi +0 -44
  53. aip_agents/agent/langflow_agent.pyi +0 -133
  54. aip_agents/agent/langgraph_memory_enhancer_agent.pyi +0 -49
  55. aip_agents/agent/langgraph_react_agent.pyi +0 -131
  56. aip_agents/agent/system_instruction_context.pyi +0 -13
  57. aip_agents/clients/__init__.pyi +0 -4
  58. aip_agents/clients/langflow/__init__.pyi +0 -4
  59. aip_agents/clients/langflow/client.pyi +0 -140
  60. aip_agents/clients/langflow/types.pyi +0 -7
  61. aip_agents/constants.pyi +0 -7
  62. aip_agents/examples/__init__.pyi +0 -0
  63. aip_agents/examples/compare_streaming_client.pyi +0 -48
  64. aip_agents/examples/compare_streaming_server.pyi +0 -18
  65. aip_agents/examples/demo_memory_recall.pyi +0 -58
  66. aip_agents/examples/hello_world_a2a_google_adk_client.pyi +0 -9
  67. aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +0 -9
  68. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +0 -9
  69. aip_agents/examples/hello_world_a2a_google_adk_server.pyi +0 -15
  70. aip_agents/examples/hello_world_a2a_langchain_client.pyi +0 -5
  71. aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +0 -5
  72. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +0 -5
  73. aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +0 -5
  74. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +0 -5
  75. aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +0 -15
  76. aip_agents/examples/hello_world_a2a_langchain_server.pyi +0 -15
  77. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +0 -15
  78. aip_agents/examples/hello_world_a2a_langflow_client.pyi +0 -9
  79. aip_agents/examples/hello_world_a2a_langflow_server.pyi +0 -14
  80. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +0 -5
  81. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +0 -5
  82. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +0 -16
  83. aip_agents/examples/hello_world_a2a_langgraph_client.pyi +0 -9
  84. aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +0 -9
  85. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +0 -2
  86. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +0 -9
  87. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +0 -5
  88. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +0 -5
  89. aip_agents/examples/hello_world_a2a_langgraph_server.pyi +0 -14
  90. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +0 -15
  91. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +0 -15
  92. aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +0 -48
  93. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +0 -48
  94. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +0 -45
  95. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +0 -5
  96. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +0 -15
  97. aip_agents/examples/hello_world_google_adk.pyi +0 -5
  98. aip_agents/examples/hello_world_google_adk_mcp_http.pyi +0 -5
  99. aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +0 -5
  100. aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +0 -5
  101. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +0 -5
  102. aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +0 -5
  103. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +0 -5
  104. aip_agents/examples/hello_world_google_adk_stream.pyi +0 -5
  105. aip_agents/examples/hello_world_langchain.pyi +0 -5
  106. aip_agents/examples/hello_world_langchain_lm_invoker.pyi +0 -2
  107. aip_agents/examples/hello_world_langchain_mcp_http.pyi +0 -5
  108. aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +0 -16
  109. aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +0 -5
  110. aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +0 -18
  111. aip_agents/examples/hello_world_langchain_mcp_sse.pyi +0 -5
  112. aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +0 -5
  113. aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +0 -5
  114. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +0 -5
  115. aip_agents/examples/hello_world_langchain_stream.pyi +0 -5
  116. aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +0 -5
  117. aip_agents/examples/hello_world_langflow_agent.pyi +0 -35
  118. aip_agents/examples/hello_world_langgraph.pyi +0 -5
  119. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +0 -5
  120. aip_agents/examples/hello_world_langgraph_mcp_http.pyi +0 -5
  121. aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +0 -5
  122. aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +0 -5
  123. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +0 -5
  124. aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +0 -5
  125. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +0 -5
  126. aip_agents/examples/hello_world_langgraph_stream.pyi +0 -5
  127. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +0 -5
  128. aip_agents/examples/hello_world_model_switch_cli.pyi +0 -30
  129. aip_agents/examples/hello_world_multi_agent_adk.pyi +0 -6
  130. aip_agents/examples/hello_world_multi_agent_langchain.pyi +0 -5
  131. aip_agents/examples/hello_world_multi_agent_langgraph.pyi +0 -5
  132. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +0 -5
  133. aip_agents/examples/hello_world_pii_logger.pyi +0 -5
  134. aip_agents/examples/hello_world_sentry.pyi +0 -21
  135. aip_agents/examples/hello_world_step_limits.pyi +0 -17
  136. aip_agents/examples/hello_world_stock_a2a_server.pyi +0 -17
  137. aip_agents/examples/hello_world_tool_output_client.pyi +0 -5
  138. aip_agents/examples/hello_world_tool_output_server.pyi +0 -19
  139. aip_agents/examples/hitl_demo.pyi +0 -67
  140. aip_agents/examples/pii_demo_langgraph_client.pyi +0 -5
  141. aip_agents/examples/pii_demo_langgraph_server.pyi +0 -20
  142. aip_agents/examples/pii_demo_multi_agent_client.pyi +0 -5
  143. aip_agents/examples/pii_demo_multi_agent_server.pyi +0 -40
  144. aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +0 -5
  145. aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +0 -19
  146. aip_agents/examples/tools/__init__.pyi +0 -9
  147. aip_agents/examples/tools/adk_arithmetic_tools.pyi +0 -24
  148. aip_agents/examples/tools/adk_weather_tool.pyi +0 -18
  149. aip_agents/examples/tools/data_generator_tool.pyi +0 -15
  150. aip_agents/examples/tools/data_visualization_tool.pyi +0 -19
  151. aip_agents/examples/tools/image_artifact_tool.pyi +0 -26
  152. aip_agents/examples/tools/langchain_arithmetic_tools.pyi +0 -17
  153. aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +0 -20
  154. aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +0 -25
  155. aip_agents/examples/tools/langchain_weather_tool.pyi +0 -19
  156. aip_agents/examples/tools/langgraph_streaming_tool.pyi +0 -43
  157. aip_agents/examples/tools/mock_retrieval_tool.pyi +0 -13
  158. aip_agents/examples/tools/pii_demo_tools.pyi +0 -54
  159. aip_agents/examples/tools/random_chart_tool.pyi +0 -20
  160. aip_agents/examples/tools/serper_tool.pyi +0 -16
  161. aip_agents/examples/tools/stock_tools.pyi +0 -36
  162. aip_agents/examples/tools/table_generator_tool.pyi +0 -22
  163. aip_agents/examples/tools/time_tool.pyi +0 -15
  164. aip_agents/examples/tools/weather_forecast_tool.pyi +0 -14
  165. aip_agents/guardrails/__init__.pyi +0 -6
  166. aip_agents/guardrails/engines/__init__.pyi +0 -4
  167. aip_agents/guardrails/engines/base.pyi +0 -61
  168. aip_agents/guardrails/engines/nemo.pyi +0 -46
  169. aip_agents/guardrails/engines/phrase_matcher.pyi +0 -48
  170. aip_agents/guardrails/exceptions.pyi +0 -23
  171. aip_agents/guardrails/manager.pyi +0 -42
  172. aip_agents/guardrails/middleware.pyi +0 -87
  173. aip_agents/guardrails/schemas.pyi +0 -43
  174. aip_agents/guardrails/utils.pyi +0 -19
  175. aip_agents/mcp/__init__.pyi +0 -0
  176. aip_agents/mcp/client/__init__.pyi +0 -5
  177. aip_agents/mcp/client/base_mcp_client.pyi +0 -148
  178. aip_agents/mcp/client/connection_manager.pyi +0 -51
  179. aip_agents/mcp/client/google_adk/__init__.pyi +0 -3
  180. aip_agents/mcp/client/google_adk/client.pyi +0 -75
  181. aip_agents/mcp/client/langchain/__init__.pyi +0 -3
  182. aip_agents/mcp/client/langchain/client.pyi +0 -48
  183. aip_agents/mcp/client/persistent_session.pyi +0 -122
  184. aip_agents/mcp/client/session_pool.pyi +0 -101
  185. aip_agents/mcp/client/transports.pyi +0 -132
  186. aip_agents/mcp/utils/__init__.pyi +0 -0
  187. aip_agents/mcp/utils/config_validator.pyi +0 -82
  188. aip_agents/memory/__init__.pyi +0 -5
  189. aip_agents/memory/adapters/__init__.pyi +0 -4
  190. aip_agents/memory/adapters/base_adapter.pyi +0 -150
  191. aip_agents/memory/adapters/mem0.pyi +0 -22
  192. aip_agents/memory/base.pyi +0 -60
  193. aip_agents/memory/constants.pyi +0 -25
  194. aip_agents/memory/factory.pyi +0 -24
  195. aip_agents/memory/guidance.pyi +0 -3
  196. aip_agents/memory/simple_memory.pyi +0 -23
  197. aip_agents/middleware/__init__.pyi +0 -5
  198. aip_agents/middleware/base.pyi +0 -75
  199. aip_agents/middleware/manager.pyi +0 -84
  200. aip_agents/middleware/todolist.pyi +0 -125
  201. aip_agents/schema/__init__.pyi +0 -9
  202. aip_agents/schema/a2a.pyi +0 -40
  203. aip_agents/schema/agent.pyi +0 -65
  204. aip_agents/schema/hitl.pyi +0 -89
  205. aip_agents/schema/langgraph.pyi +0 -28
  206. aip_agents/schema/model_id.pyi +0 -54
  207. aip_agents/schema/step_limit.pyi +0 -63
  208. aip_agents/schema/storage.pyi +0 -21
  209. aip_agents/sentry/__init__.pyi +0 -3
  210. aip_agents/sentry/sentry.pyi +0 -48
  211. aip_agents/storage/__init__.pyi +0 -8
  212. aip_agents/storage/base.pyi +0 -58
  213. aip_agents/storage/clients/__init__.pyi +0 -3
  214. aip_agents/storage/clients/minio_client.pyi +0 -137
  215. aip_agents/storage/config.pyi +0 -29
  216. aip_agents/storage/providers/__init__.pyi +0 -5
  217. aip_agents/storage/providers/base.pyi +0 -88
  218. aip_agents/storage/providers/memory.pyi +0 -79
  219. aip_agents/storage/providers/object_storage.pyi +0 -98
  220. aip_agents/tools/__init__.pyi +0 -9
  221. aip_agents/tools/browser_use/__init__.pyi +0 -14
  222. aip_agents/tools/browser_use/action_parser.pyi +0 -18
  223. aip_agents/tools/browser_use/browser_use_tool.pyi +0 -50
  224. aip_agents/tools/browser_use/llm_config.pyi +0 -52
  225. aip_agents/tools/browser_use/minio_storage.pyi +0 -109
  226. aip_agents/tools/browser_use/schemas.pyi +0 -32
  227. aip_agents/tools/browser_use/session.pyi +0 -4
  228. aip_agents/tools/browser_use/session_errors.pyi +0 -53
  229. aip_agents/tools/browser_use/steel_session_recording.pyi +0 -63
  230. aip_agents/tools/browser_use/streaming.pyi +0 -81
  231. aip_agents/tools/browser_use/structured_data_parser.pyi +0 -86
  232. aip_agents/tools/browser_use/structured_data_recovery.pyi +0 -43
  233. aip_agents/tools/browser_use/types.pyi +0 -45
  234. aip_agents/tools/code_sandbox/__init__.pyi +0 -3
  235. aip_agents/tools/code_sandbox/constant.pyi +0 -4
  236. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +0 -102
  237. aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +0 -29
  238. aip_agents/tools/constants.pyi +0 -138
  239. aip_agents/tools/document_loader/__init__.pyi +0 -7
  240. aip_agents/tools/document_loader/base_reader.pyi +0 -75
  241. aip_agents/tools/document_loader/docx_reader_tool.pyi +0 -10
  242. aip_agents/tools/document_loader/excel_reader_tool.pyi +0 -26
  243. aip_agents/tools/document_loader/pdf_reader_tool.pyi +0 -11
  244. aip_agents/tools/document_loader/pdf_splitter.pyi +0 -18
  245. aip_agents/tools/gl_connector/__init__.pyi +0 -3
  246. aip_agents/tools/gl_connector/tool.pyi +0 -74
  247. aip_agents/tools/gl_connector_tools.pyi +0 -39
  248. aip_agents/tools/memory_search/__init__.pyi +0 -5
  249. aip_agents/tools/memory_search/base.pyi +0 -69
  250. aip_agents/tools/memory_search/mem0.pyi +0 -19
  251. aip_agents/tools/memory_search/schema.pyi +0 -15
  252. aip_agents/tools/memory_search_tool.pyi +0 -3
  253. aip_agents/tools/time_tool.pyi +0 -16
  254. aip_agents/tools/tool_config_injector.pyi +0 -26
  255. aip_agents/tools/web_search/__init__.pyi +0 -3
  256. aip_agents/tools/web_search/serper_tool.pyi +0 -19
  257. aip_agents/types/__init__.pyi +0 -36
  258. aip_agents/types/a2a_events.pyi +0 -3
  259. aip_agents/utils/__init__.pyi +0 -11
  260. aip_agents/utils/a2a_connector.pyi +0 -146
  261. aip_agents/utils/artifact_helpers.pyi +0 -203
  262. aip_agents/utils/constants.pyi +0 -10
  263. aip_agents/utils/datetime/__init__.pyi +0 -4
  264. aip_agents/utils/datetime/normalization.pyi +0 -95
  265. aip_agents/utils/datetime/timezone.pyi +0 -48
  266. aip_agents/utils/env_loader.pyi +0 -10
  267. aip_agents/utils/event_handler_registry.pyi +0 -23
  268. aip_agents/utils/file_prompt_utils.pyi +0 -21
  269. aip_agents/utils/final_response_builder.pyi +0 -34
  270. aip_agents/utils/formatter_llm_client.pyi +0 -71
  271. aip_agents/utils/langgraph/__init__.pyi +0 -3
  272. aip_agents/utils/langgraph/converter.pyi +0 -49
  273. aip_agents/utils/langgraph/tool_managers/__init__.pyi +0 -5
  274. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +0 -35
  275. aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +0 -48
  276. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +0 -56
  277. aip_agents/utils/langgraph/tool_output_management.pyi +0 -329
  278. aip_agents/utils/logger.pyi +0 -60
  279. aip_agents/utils/metadata/__init__.pyi +0 -5
  280. aip_agents/utils/metadata/activity_metadata_helper.pyi +0 -25
  281. aip_agents/utils/metadata/activity_narrative/__init__.pyi +0 -7
  282. aip_agents/utils/metadata/activity_narrative/builder.pyi +0 -35
  283. aip_agents/utils/metadata/activity_narrative/constants.pyi +0 -10
  284. aip_agents/utils/metadata/activity_narrative/context.pyi +0 -32
  285. aip_agents/utils/metadata/activity_narrative/formatters.pyi +0 -48
  286. aip_agents/utils/metadata/activity_narrative/utils.pyi +0 -12
  287. aip_agents/utils/metadata/schemas/__init__.pyi +0 -4
  288. aip_agents/utils/metadata/schemas/activity_schema.pyi +0 -18
  289. aip_agents/utils/metadata/schemas/thinking_schema.pyi +0 -20
  290. aip_agents/utils/metadata/thinking_metadata_helper.pyi +0 -4
  291. aip_agents/utils/metadata_helper.pyi +0 -117
  292. aip_agents/utils/name_preprocessor/__init__.pyi +0 -6
  293. aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +0 -52
  294. aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +0 -38
  295. aip_agents/utils/name_preprocessor/name_preprocessor.pyi +0 -41
  296. aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +0 -34
  297. aip_agents/utils/pii/__init__.pyi +0 -5
  298. aip_agents/utils/pii/pii_handler.pyi +0 -96
  299. aip_agents/utils/pii/pii_helper.pyi +0 -78
  300. aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +0 -73
  301. aip_agents/utils/reference_helper.pyi +0 -81
  302. aip_agents/utils/sse_chunk_transformer.pyi +0 -166
  303. aip_agents/utils/step_limit_manager.pyi +0 -112
  304. aip_agents/utils/token_usage_helper.pyi +0 -60
  305. {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/WHEEL +0 -0
  306. {aip_agents_binary-0.6.0.dist-info → aip_agents_binary-0.6.2.dist-info}/top_level.txt +0 -0
@@ -1,46 +0,0 @@
1
- from aip_agents.guardrails.engines.base import BaseGuardrailEngine as BaseGuardrailEngine
2
- from aip_agents.guardrails.schemas import BaseGuardrailEngineConfig as BaseGuardrailEngineConfig, GuardrailResult as GuardrailResult
3
- from aip_agents.guardrails.utils import convert_guardrail_mode_to_gl_sdk as convert_guardrail_mode_to_gl_sdk
4
- from typing import Any
5
-
6
- class NemoGuardrailEngine(BaseGuardrailEngine):
7
- """Wrapper for GL SDK NemoGuardrailEngine with aip-agents interface.
8
-
9
- This engine provides advanced LLM-based content filtering using NVIDIA's
10
- NeMo Guardrails. It can detect more complex safety violations beyond
11
- simple phrase matching.
12
-
13
- Note: Import of gllm_guardrail is deferred to __init__ to support
14
- lazy loading when guardrails are optional dependency.
15
- """
16
- def __init__(self, config: BaseGuardrailEngineConfig | None = None, **nemo_config: dict[str, Any]) -> None:
17
- """Initialize the NemoGuardrailEngine.
18
-
19
- Args:
20
- config: Engine configuration. Uses defaults if None provided.
21
- **nemo_config: Additional configuration passed to the underlying
22
- NeMo engine (e.g., model paths, thresholds, etc.)
23
-
24
- Raises:
25
- ImportError: If gllm-guardrail is not installed.
26
- """
27
- async def check_input(self, content: str) -> GuardrailResult:
28
- """Check user input content using wrapped GL SDK NeMo engine.
29
-
30
- Args:
31
- content: The user input content to check
32
-
33
- Returns:
34
- GuardrailResult indicating if content is safe
35
- """
36
- async def check_output(self, content: str) -> GuardrailResult:
37
- """Check AI output content using wrapped GL SDK NeMo engine.
38
-
39
- Args:
40
- content: The AI output content to check
41
-
42
- Returns:
43
- GuardrailResult indicating if content is safe
44
- """
45
- def model_dump(self) -> dict:
46
- """Serialize engine configuration into a JSON-compatible dictionary."""
@@ -1,48 +0,0 @@
1
- from aip_agents.guardrails.engines.base import BaseGuardrailEngine as BaseGuardrailEngine
2
- from aip_agents.guardrails.schemas import BaseGuardrailEngineConfig as BaseGuardrailEngineConfig, GuardrailResult as GuardrailResult
3
- from aip_agents.guardrails.utils import convert_guardrail_mode_to_gl_sdk as convert_guardrail_mode_to_gl_sdk
4
-
5
- class PhraseMatcherEngine(BaseGuardrailEngine):
6
- """Wrapper for GL SDK PhraseMatcherEngine with aip-agents interface.
7
-
8
- This engine performs rule-based banned phrase detection using the
9
- GL SDK's PhraseMatcherEngine. It checks for exact phrase matches
10
- and blocks content containing banned phrases.
11
-
12
- Note: Import of gllm_guardrail is deferred to __init__ to support
13
- lazy loading when guardrails are optional dependency.
14
- """
15
- def __init__(self, config: BaseGuardrailEngineConfig | None = None, banned_phrases: list[str] | None = None) -> None:
16
- """Initialize the PhraseMatcherEngine.
17
-
18
- Args:
19
- config: Engine configuration. Uses defaults if None provided.
20
- banned_phrases: List of phrases that should trigger blocking.
21
- Defaults to empty list if None provided.
22
-
23
- Raises:
24
- ImportError: If gllm-guardrail is not installed.
25
- """
26
- @property
27
- def banned_phrases(self) -> list[str]:
28
- """Get the list of banned phrases."""
29
- async def check_input(self, content: str) -> GuardrailResult:
30
- """Check user input content using wrapped GL SDK engine.
31
-
32
- Args:
33
- content: The user input content to check
34
-
35
- Returns:
36
- GuardrailResult indicating if content is safe
37
- """
38
- async def check_output(self, content: str) -> GuardrailResult:
39
- """Check AI output content using wrapped GL SDK engine.
40
-
41
- Args:
42
- content: The AI output content to check
43
-
44
- Returns:
45
- GuardrailResult indicating if content is safe
46
- """
47
- def model_dump(self) -> dict:
48
- """Serialize engine configuration into a JSON-compatible dictionary."""
@@ -1,23 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.guardrails.schemas import GuardrailResult as GuardrailResult
3
-
4
- class GuardrailViolationError(Exception):
5
- """Exception raised when unsafe content is detected by guardrails.
6
-
7
- This exception is raised by GuardrailMiddleware when content violates
8
- safety policies. It contains the GuardrailResult with details about
9
- why the content was blocked.
10
-
11
- Attributes:
12
- result: The GuardrailResult containing safety check details
13
- message: Human-readable error message
14
- """
15
- result: Incomplete
16
- message: Incomplete
17
- def __init__(self, result: GuardrailResult, message: str | None = None) -> None:
18
- """Initialize the exception.
19
-
20
- Args:
21
- result: The GuardrailResult from the failed safety check
22
- message: Optional custom error message
23
- """
@@ -1,42 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.guardrails.engines.base import GuardrailEngine as GuardrailEngine
3
- from aip_agents.guardrails.schemas import GuardrailInput as GuardrailInput, GuardrailMode as GuardrailMode, GuardrailResult as GuardrailResult
4
- from typing import Any
5
-
6
- class GuardrailManager:
7
- """Orchestrates multiple guardrail engines with fail-fast behavior.
8
-
9
- The manager accepts one or more guardrail engines and runs them in sequence.
10
- If any engine reports unsafe content, execution stops immediately (fail-fast)
11
- and returns the violation result.
12
-
13
- Attributes:
14
- engines: List of guardrail engines to orchestrate
15
- """
16
- enabled: bool
17
- engines: Incomplete
18
- def __init__(self, engine: GuardrailEngine | list[GuardrailEngine] | None = None, engines: list[GuardrailEngine] | None = None) -> None:
19
- """Initialize the GuardrailManager.
20
-
21
- Args:
22
- engine: Single guardrail engine to use
23
- engines: List of guardrail engines to use
24
-
25
- Raises:
26
- ValueError: If both engine and engines are provided
27
- """
28
- def model_dump(self) -> dict[str, Any]:
29
- """Serialize manager configuration into a JSON-compatible dictionary."""
30
- async def check_content(self, content: str | GuardrailInput) -> GuardrailResult:
31
- """Check content against all registered engines.
32
-
33
- Executes engines in order with fail-fast behavior. If any engine
34
- reports unsafe content, returns immediately with that result.
35
-
36
- Args:
37
- content: Content to check. Can be a string (treated as input-only)
38
- or GuardrailInput with input/output fields.
39
-
40
- Returns:
41
- GuardrailResult indicating if content passed all checks
42
- """
@@ -1,87 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.guardrails.exceptions import GuardrailViolationError as GuardrailViolationError
3
- from aip_agents.guardrails.manager import GuardrailManager as GuardrailManager
4
- from aip_agents.guardrails.schemas import GuardrailInput as GuardrailInput
5
- from aip_agents.middleware.base import AgentMiddleware as AgentMiddleware, ModelRequest as ModelRequest
6
- from typing import Any
7
-
8
- class GuardrailMiddleware(AgentMiddleware):
9
- """Middleware that integrates guardrails into agent execution.
10
-
11
- This middleware wraps a GuardrailManager and automatically checks content
12
- at appropriate points during agent execution:
13
-
14
- - Before model invocation: checks user input from messages
15
- - After model invocation: checks AI output from messages
16
-
17
- If unsafe content is detected, raises GuardrailViolationError to stop execution.
18
-
19
- Attributes:
20
- guardrail_manager: The GuardrailManager to use for content checking
21
- """
22
- guardrail_manager: Incomplete
23
- def __init__(self, guardrail_manager: GuardrailManager) -> None:
24
- """Initialize the GuardrailMiddleware.
25
-
26
- Args:
27
- guardrail_manager: GuardrailManager instance to use for checking
28
- """
29
- @property
30
- def tools(self) -> list:
31
- """Guardrails are passive filters and don't contribute tools."""
32
- @property
33
- def system_prompt_additions(self) -> str | None:
34
- """Guardrails are passive filters and don't modify system prompts."""
35
- async def abefore_model(self, state: dict[str, Any]) -> dict[str, Any]:
36
- """Asynchronously check user input before model invocation.
37
-
38
- Extracts the last user message from state and checks it with guardrails.
39
- If unsafe, raises GuardrailViolationError to stop execution.
40
-
41
- Args:
42
- state: Current agent state containing messages and context
43
-
44
- Returns:
45
- Empty dict (no state modifications needed)
46
-
47
- Raises:
48
- GuardrailViolationError: If user input violates safety policies
49
- """
50
- def before_model(self, state: dict[str, Any]) -> dict[str, Any]:
51
- """Check user input before model invocation (synchronous wrapper).
52
-
53
- Note:
54
- This is a synchronous wrapper for the async `abefore_model()` method.
55
- LangGraph agents primarily use `abefore_model()` in async contexts.
56
- This method should rarely be called directly. If called from an async
57
- context with a running event loop, it will attempt to handle it,
58
- but `abefore_model()` should be preferred.
59
-
60
- Args:
61
- state: Current agent state containing messages and context
62
-
63
- Returns:
64
- Empty dict (no state modifications needed)
65
-
66
- Raises:
67
- GuardrailViolationError: If user input violates safety policies
68
- """
69
- def modify_model_request(self, request: ModelRequest, state: dict[str, Any]) -> ModelRequest:
70
- """Guardrails don't modify model requests."""
71
- async def aafter_model(self, state: dict[str, Any]) -> dict[str, Any]:
72
- """Asynchronously check AI output after model invocation.
73
-
74
- Extracts the last AI message from state and checks it with guardrails.
75
- If unsafe, raises GuardrailViolationError to stop execution.
76
-
77
- Args:
78
- state: Current agent state after model invocation
79
-
80
- Returns:
81
- Empty dict (no state modifications needed)
82
-
83
- Raises:
84
- GuardrailViolationError: If AI output violates safety policies
85
- """
86
- def after_model(self, state: dict[str, Any]) -> dict[str, Any]:
87
- """Check AI output after model invocation (synchronous wrapper)."""
@@ -1,43 +0,0 @@
1
- from _typeshed import Incomplete
2
- from enum import StrEnum
3
- from pydantic import BaseModel
4
-
5
- class GuardrailMode(StrEnum):
6
- """Modes determining what content an engine checks."""
7
- INPUT_ONLY: str
8
- OUTPUT_ONLY: str
9
- INPUT_OUTPUT: str
10
- DISABLED: str
11
-
12
- class GuardrailInput(BaseModel):
13
- """Input schema for guardrail checks.
14
-
15
- Attributes:
16
- input: User input content to check (queries, prompts, context)
17
- output: AI output content to check (responses, generated text)
18
- """
19
- model_config: Incomplete
20
- input: str | None
21
- output: str | None
22
-
23
- class GuardrailResult(BaseModel):
24
- """Result schema returned by guardrail engines and managers.
25
-
26
- Attributes:
27
- is_safe: Whether the content passed all checks
28
- reason: Explanation when content is blocked (None if safe)
29
- filtered_content: Cleaned/sanitized content if engine provides it
30
- """
31
- model_config: Incomplete
32
- is_safe: bool
33
- reason: str | None
34
- filtered_content: str | None
35
-
36
- class BaseGuardrailEngineConfig(BaseModel):
37
- """Base configuration for guardrail engines.
38
-
39
- Attributes:
40
- guardrail_mode: What content this engine should check
41
- """
42
- model_config: Incomplete
43
- guardrail_mode: GuardrailMode
@@ -1,19 +0,0 @@
1
- from aip_agents.guardrails.schemas import GuardrailMode as GuardrailMode
2
- from typing import Any
3
-
4
- def convert_guardrail_mode_to_gl_sdk(mode: GuardrailMode) -> Any:
5
- """Convert aip-agents GuardrailMode to gllm-guardrail GuardrailMode.
6
-
7
- This function performs lazy import of gllm-guardrail to support optional
8
- dependencies. The conversion is necessary because we maintain our own
9
- GuardrailMode enum for API consistency while wrapping the external library.
10
-
11
- Args:
12
- mode: The aip-agents GuardrailMode to convert
13
-
14
- Returns:
15
- The corresponding gllm-guardrail GuardrailMode enum value
16
-
17
- Raises:
18
- ImportError: If gllm-guardrail is not installed
19
- """
File without changes
@@ -1,5 +0,0 @@
1
- from aip_agents.mcp.client.base_mcp_client import BaseMCPClient as BaseMCPClient
2
- from aip_agents.mcp.client.google_adk.client import GoogleADKMCPClient as GoogleADKMCPClient
3
- from aip_agents.mcp.client.langchain.client import LangchainMCPClient as LangchainMCPClient
4
-
5
- __all__ = ['GoogleADKMCPClient', 'LangchainMCPClient', 'BaseMCPClient']
@@ -1,148 +0,0 @@
1
- from _typeshed import Incomplete
2
- from abc import ABC, abstractmethod
3
- from aip_agents.mcp.client.persistent_session import PersistentMCPSession as PersistentMCPSession
4
- from aip_agents.mcp.client.session_pool import MCPSessionPool as MCPSessionPool
5
- from aip_agents.utils.logger import get_logger as get_logger
6
- from gllm_tools.mcp.client.client import MCPClient
7
- from gllm_tools.mcp.client.config import MCPConfiguration as MCPConfiguration
8
- from mcp.types import CallToolResult, Tool as Tool
9
- from typing import Any
10
-
11
- logger: Incomplete
12
-
13
- class BaseMCPClient(MCPClient, ABC):
14
- """Base MCP Client with persistent session management for aip-agents.
15
-
16
- This class provides:
17
- - Persistent session management across tool calls
18
- - One-time tool registration and caching
19
- - Automatic connection health monitoring and reconnection
20
- - Centralized cleanup of all MCP resources
21
- - Generic tool discovery from all configured MCP servers
22
-
23
- Subclasses should implement SDK-specific tool conversion in _process_tool() method.
24
- """
25
- session_pool: Incomplete
26
- def __init__(self, servers: dict[str, MCPConfiguration]) -> None:
27
- """Initialize the base MCP client with session pool.
28
-
29
- Args:
30
- servers (dict[str, MCPConfiguration]): Dictionary of MCP server configurations by server name
31
- """
32
- async def initialize(self) -> None:
33
- """Initialize all MCP sessions and cache tools once.
34
-
35
- This method is idempotent and only performs initialization if not already done.
36
- It establishes persistent connections to all configured MCP servers and caches
37
- available tools for efficient access.
38
-
39
- Raises:
40
- Exception: If any session initialization fails
41
- """
42
- @abstractmethod
43
- async def get_tools(self, server: str | None = None) -> list[Any]:
44
- """Get framework-specific tools from MCP servers.
45
-
46
- This method must be implemented by subclasses to provide framework-specific
47
- tool conversion (e.g., StructuredTool for LangChain, FunctionTool for Google ADK).
48
-
49
- Args:
50
- server (str | None): Optional server name to filter tools from a specific server.
51
- If None, returns tools from all configured servers.
52
-
53
- Returns:
54
- list[Any]: List of framework-specific tool objects.
55
- """
56
- async def get_raw_mcp_tools(self, server: str | None = None) -> list[Tool]:
57
- """Get raw MCP tools - for subclasses to perform framework-specific conversions.
58
-
59
- This method provides access to the cached raw MCP Tool objects.
60
- Subclasses use this to convert to framework-specific tools.
61
-
62
- Args:
63
- server (str | None): Optional server name to filter tools from a specific server.
64
- If None, returns tools from all configured servers.
65
-
66
- Returns:
67
- list[Tool]: List of raw MCP Tool objects. Empty list if not initialized or no tools available.
68
- """
69
- def get_tools_count(self, server: str | None = None) -> int:
70
- """Get count of raw MCP tools without expensive copying.
71
-
72
- This is an efficient way to get tool counts for logging/metrics
73
- without the overhead of copying tool lists.
74
-
75
- Args:
76
- server (str | None): Optional server name to filter tools from a specific server.
77
- If None, returns count from all configured servers.
78
-
79
- Returns:
80
- int: Count of raw MCP tools available.
81
- """
82
- async def get_session(self, server_name: str) -> PersistentMCPSession:
83
- """Get a persistent session for a specific server.
84
-
85
- Args:
86
- server_name (str): The name of the MCP server
87
-
88
- Returns:
89
- PersistentMCPSession: Persistent MCP session for the specified server
90
-
91
- Raises:
92
- KeyError: If the server is not configured or no active session exists
93
- """
94
- async def call_tool(self, server_name: str, tool_name: str, arguments: dict[str, Any]) -> CallToolResult:
95
- """Execute a tool on a specific MCP server using persistent session.
96
-
97
- Args:
98
- server_name (str): The MCP server to execute the tool on
99
- tool_name (str): The name of the tool to execute
100
- arguments (dict[str, Any]): Arguments for the tool execution
101
-
102
- Returns:
103
- CallToolResult: The result of the tool execution
104
-
105
- Raises:
106
- KeyError: If the server doesn't exist
107
- Exception: If tool execution fails
108
- """
109
- async def read_resource(self, server_name: str, resource_uri: str):
110
- """Read an MCP resource from a specific server using persistent session.
111
-
112
- Args:
113
- server_name (str): The MCP server to read the resource from
114
- resource_uri (str): The URI of the resource to read
115
-
116
- Returns:
117
- Any: The resource content
118
-
119
- Raises:
120
- KeyError: If the server doesn't exist
121
- Exception: If resource reading fails
122
- """
123
- async def cleanup(self) -> None:
124
- """Clean up all MCP resources and close sessions.
125
-
126
- This method properly closes all persistent sessions and cleans up resources.
127
- It can be called multiple times safely.
128
- """
129
- @property
130
- def is_initialized(self) -> bool:
131
- """Check if the client is fully initialized.
132
-
133
- Returns:
134
- bool: True if sessions are initialized and tools are cached, False otherwise
135
- """
136
- @property
137
- def active_sessions(self) -> dict[str, PersistentMCPSession]:
138
- """Get all active persistent sessions.
139
-
140
- Returns:
141
- dict[str, PersistentMCPSession]: Dictionary of active sessions by server name
142
- """
143
- def get_session_count(self) -> int:
144
- """Get the number of active MCP sessions.
145
-
146
- Returns:
147
- Number of active persistent sessions
148
- """
@@ -1,51 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.mcp.client.transports import TransportType as TransportType, create_transport as create_transport
3
- from aip_agents.utils.logger import get_logger as get_logger
4
- from gllm_tools.mcp.client.config import MCPConfiguration
5
- from typing import Any
6
-
7
- logger: Incomplete
8
-
9
- class MCPConnectionManager:
10
- """Manages MCP connection lifecycle following mcp-use patterns.
11
-
12
- This connection manager handles the transport connection lifecycle in a background
13
- task to avoid cancel scope issues during cleanup. It supports automatic transport
14
- negotiation (HTTP -> SSE fallback) and graceful shutdown. Invalid explicit transports
15
- are normalized via aliases (e.g., 'streamable_http' -> 'http') or fall back to
16
- auto-detection with a warning.
17
- """
18
- TRANSPORT_ALIASES: Incomplete
19
- server_name: Incomplete
20
- config: Incomplete
21
- transport_type: Incomplete
22
- max_retries: Incomplete
23
- initial_retry_delay: Incomplete
24
- def __init__(self, server_name: str, config: MCPConfiguration) -> None:
25
- """Initialize connection manager.
26
-
27
- Args:
28
- server_name (str): Name of the MCP server
29
- config (MCPConfiguration): MCP server configuration
30
- """
31
- async def start(self) -> tuple[Any, Any]:
32
- """Start connection in background task.
33
-
34
- For HTTP/SSE transports, establishes connection directly to avoid anyio context issues.
35
- For stdio transport, uses background task to manage subprocess lifecycle.
36
-
37
- Returns:
38
- tuple[Any, Any]: Tuple of (read_stream, write_stream) for ClientSession
39
-
40
- Raises:
41
- Exception: If connection establishment fails
42
- """
43
- async def stop(self) -> None:
44
- """Stop connection gracefully."""
45
- @property
46
- def is_connected(self) -> bool:
47
- """Check if connection is active.
48
-
49
- Returns:
50
- bool: True if connected, False otherwise
51
- """
@@ -1,3 +0,0 @@
1
- from aip_agents.mcp.client.google_adk.client import GoogleADKMCPClient as GoogleADKMCPClient
2
-
3
- __all__ = ['GoogleADKMCPClient']
@@ -1,75 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.mcp.client.base_mcp_client import BaseMCPClient as BaseMCPClient
3
- from aip_agents.utils.logger import get_logger as get_logger
4
- from gllm_tools.mcp.client.config import MCPConfiguration as MCPConfiguration
5
- from google.adk.tools import FunctionTool
6
- from mcp.types import EmbeddedResource, ImageContent
7
-
8
- NonTextContent = ImageContent | EmbeddedResource
9
- logger: Incomplete
10
-
11
- class GoogleADKMCPClient(BaseMCPClient):
12
- '''Google ADK MCP Client with Persistent Sessions.
13
-
14
- This client extends BaseMCPClient to provide Google ADK-specific tool conversion
15
- while maintaining persistent MCP sessions and connection reuse across tool calls.
16
- It converts MCP tools into ADK FunctionTool instances for seamless integration.
17
-
18
- The client handles:
19
- - Converting MCP tools to ADK FunctionTool instances using persistent sessions
20
- - Managing MCP server connections with automatic reconnection
21
- - Converting MCP resources to ADK-compatible formats
22
- - Handling tool execution with proper error formatting for ADK agents
23
-
24
- Example:
25
- ```python
26
- from aip_agents.mcp.client.google_adk.client import GoogleADKMCPClient
27
- from gllm_tools.mcp.client.config import MCPConfiguration
28
-
29
- servers = {
30
- "filesystem": MCPConfiguration(
31
- command="npx",
32
- args=["-y", "@modelcontextprotocol/server-filesystem", "/path/to/folder"]
33
- )
34
- }
35
-
36
- client = GoogleADKMCPClient(servers)
37
- await client.initialize() # Initialize persistent sessions
38
- tools = await client.get_tools() # Returns list of ADK FunctionTool instances
39
- ```
40
- '''
41
- RESOURCE_FETCH_TIMEOUT: int
42
- def __init__(self, servers: dict[str, MCPConfiguration]) -> None:
43
- """Initialize Google ADK MCP client.
44
-
45
- Args:
46
- servers (dict[str, MCPConfiguration]): Dictionary of MCP server configurations
47
- """
48
- async def initialize(self) -> None:
49
- """Initialize persistent MCP sessions for Google ADK integration.
50
-
51
- This method ensures all MCP servers are connected with persistent sessions
52
- and prepares the client for ADK tool conversion.
53
-
54
- Raises:
55
- Exception: If session initialization fails
56
- """
57
- async def get_tools(self, server: str | None = None) -> list[FunctionTool]:
58
- """Get ADK-compatible FunctionTool instances with smart caching.
59
-
60
- Converts MCP tools to ADK format and caches them for better performance
61
- on repeated access. Cache is keyed by server parameter.
62
-
63
- Args:
64
- server (str | None): Optional server name to filter tools from a specific server.
65
- If None, returns tools from all configured servers.
66
-
67
- Returns:
68
- list[FunctionTool]: List of cached ADK FunctionTool instances.
69
- """
70
- async def cleanup(self) -> None:
71
- """Clean up Google ADK MCP client resources.
72
-
73
- This method ensures all persistent sessions are properly closed and
74
- ADK-specific resources are cleaned up.
75
- """
@@ -1,3 +0,0 @@
1
- from aip_agents.mcp.client.langchain.client import LangchainMCPClient as LangchainMCPClient
2
-
3
- __all__ = ['LangchainMCPClient']
@@ -1,48 +0,0 @@
1
- from _typeshed import Incomplete
2
- from aip_agents.mcp.client.base_mcp_client import BaseMCPClient as BaseMCPClient
3
- from aip_agents.utils.logger import get_logger as get_logger
4
- from gllm_tools.mcp.client.config import MCPConfiguration as MCPConfiguration
5
- from langchain_core.tools import StructuredTool
6
- from mcp.types import EmbeddedResource, ImageContent
7
-
8
- NonTextContent = ImageContent | EmbeddedResource
9
- logger: Incomplete
10
-
11
- class LangchainMCPClient(BaseMCPClient):
12
- """Langchain MCP Client with Session Persistence.
13
-
14
- This client extends BaseMCPClient to provide LangChain-specific tool conversion
15
- while maintaining persistent MCP sessions and connection reuse across tool calls.
16
- """
17
- RESOURCE_FETCH_TIMEOUT: int
18
- def __init__(self, servers: dict[str, MCPConfiguration]) -> None:
19
- """Initialize LangChain MCP client.
20
-
21
- Args:
22
- servers (dict[str, MCPConfiguration]): Dictionary of MCP server configurations
23
- """
24
- async def initialize(self) -> None:
25
- """Initialize all sessions for LangChain client.
26
-
27
- This method initializes the base MCP sessions and prepares for tool caching.
28
-
29
- Raises:
30
- Exception: If base initialization fails
31
- """
32
- async def get_tools(self, server: str | None = None) -> list[StructuredTool]:
33
- """Get LangChain StructuredTools with smart caching.
34
-
35
- Converts MCP tools to LangChain format and caches them for better performance
36
- on repeated access. Cache is keyed by server parameter.
37
-
38
- Args:
39
- server (str | None): Optional server name to filter tools. If None, returns all tools.
40
-
41
- Returns:
42
- list[StructuredTool]: List of cached LangChain StructuredTool instances
43
- """
44
- async def cleanup(self) -> None:
45
- """Cleanup LangChain MCP resources.
46
-
47
- This method extends base class cleanup and clears the LangChain tool cache.
48
- """