solace-agent-mesh 0.2.4__py3-none-any.whl → 1.0.1__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.

Potentially problematic release.


This version of solace-agent-mesh might be problematic. Click here for more details.

Files changed (518) hide show
  1. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  2. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  3. solace_agent_mesh/agent/adk/callbacks.py +1694 -0
  4. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  5. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  6. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  7. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  8. solace_agent_mesh/agent/adk/runner.py +353 -0
  9. solace_agent_mesh/agent/adk/services.py +240 -0
  10. solace_agent_mesh/agent/adk/setup.py +751 -0
  11. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  12. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  13. solace_agent_mesh/agent/agent_llm.txt +41 -0
  14. solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
  15. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  16. solace_agent_mesh/agent/sac/app.py +640 -0
  17. solace_agent_mesh/agent/sac/component.py +3388 -0
  18. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  19. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  20. solace_agent_mesh/agent/sac/task_execution_context.py +176 -0
  21. solace_agent_mesh/agent/testing/__init__.py +3 -0
  22. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  23. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  24. solace_agent_mesh/agent/tools/__init__.py +14 -0
  25. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  26. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  27. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  28. solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
  29. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  30. solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
  31. solace_agent_mesh/agent/tools/registry.py +36 -0
  32. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  33. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  34. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  35. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  36. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  37. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  38. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  39. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  40. solace_agent_mesh/assets/docs/404.html +16 -0
  41. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  42. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  43. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  46. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  54. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  57. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  104. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  105. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
  132. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
  133. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  165. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  167. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  168. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  170. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  171. solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
  172. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  173. solace_agent_mesh/assets/docs/search-doc-1753813536522.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  175. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  176. solace_agent_mesh/cli/__init__.py +1 -1
  177. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  178. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  179. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  180. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  181. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  183. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  184. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  185. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  186. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  187. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  188. solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
  189. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  190. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -0
  191. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  192. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  193. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  194. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  201. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  202. solace_agent_mesh/cli/main.py +17 -294
  203. solace_agent_mesh/cli/utils.py +135 -204
  204. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  205. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  210. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  211. solace_agent_mesh/common/__init__.py +1 -0
  212. solace_agent_mesh/common/a2a_protocol.py +564 -0
  213. solace_agent_mesh/common/agent_registry.py +42 -0
  214. solace_agent_mesh/common/client/__init__.py +4 -0
  215. solace_agent_mesh/common/client/card_resolver.py +21 -0
  216. solace_agent_mesh/common/client/client.py +85 -0
  217. solace_agent_mesh/common/client/client_llm.txt +133 -0
  218. solace_agent_mesh/common/common_llm.txt +144 -0
  219. solace_agent_mesh/common/constants.py +1 -14
  220. solace_agent_mesh/common/middleware/__init__.py +12 -0
  221. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  222. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  223. solace_agent_mesh/common/middleware/registry.py +125 -0
  224. solace_agent_mesh/common/server/__init__.py +4 -0
  225. solace_agent_mesh/common/server/server.py +122 -0
  226. solace_agent_mesh/common/server/server_llm.txt +169 -0
  227. solace_agent_mesh/common/server/task_manager.py +291 -0
  228. solace_agent_mesh/common/server/utils.py +28 -0
  229. solace_agent_mesh/common/services/__init__.py +4 -0
  230. solace_agent_mesh/common/services/employee_service.py +162 -0
  231. solace_agent_mesh/common/services/identity_service.py +129 -0
  232. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  233. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  234. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  235. solace_agent_mesh/common/services/services_llm.txt +132 -0
  236. solace_agent_mesh/common/types.py +411 -0
  237. solace_agent_mesh/common/utils/__init__.py +7 -0
  238. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  239. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  240. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  241. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  242. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  243. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  244. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  245. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  246. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  247. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  248. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  249. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  250. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  251. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  252. solace_agent_mesh/config_portal/backend/common.py +66 -24
  253. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
  254. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
  258. solace_agent_mesh/config_portal/backend/server.py +550 -181
  259. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
  260. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  267. solace_agent_mesh/core_a2a/__init__.py +1 -0
  268. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  269. solace_agent_mesh/core_a2a/service.py +331 -0
  270. solace_agent_mesh/evaluation/config_loader.py +657 -0
  271. solace_agent_mesh/evaluation/evaluator.py +667 -0
  272. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  273. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  274. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  275. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  276. solace_agent_mesh/evaluation/report/modal.html +59 -0
  277. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  278. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  279. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  280. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  281. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  282. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  283. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  284. solace_agent_mesh/evaluation/report_generator.py +613 -0
  285. solace_agent_mesh/evaluation/run.py +613 -0
  286. solace_agent_mesh/evaluation/subscriber.py +872 -0
  287. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  288. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  289. solace_agent_mesh/gateway/base/__init__.py +1 -0
  290. solace_agent_mesh/gateway/base/app.py +266 -0
  291. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  292. solace_agent_mesh/gateway/base/component.py +1542 -0
  293. solace_agent_mesh/gateway/base/task_context.py +74 -0
  294. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  295. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  296. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  297. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  298. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  299. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  300. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  301. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  302. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  303. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  304. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  305. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
  306. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  307. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  308. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  309. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  310. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  311. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  312. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  313. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  314. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  315. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  316. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  317. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  318. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  319. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  320. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  321. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  322. solace_agent_mesh/llm.txt +228 -0
  323. solace_agent_mesh/llm_detail.txt +2835 -0
  324. solace_agent_mesh/templates/agent_template.yaml +53 -0
  325. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  326. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  327. solace_agent_mesh/templates/gateway_component_template.py +400 -0
  328. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  329. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  330. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  331. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  332. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  333. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  334. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  335. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  336. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  337. solace_agent_mesh/templates/shared_config.yaml +66 -0
  338. solace_agent_mesh/templates/templates_llm.txt +147 -0
  339. solace_agent_mesh/templates/webui.yaml +53 -0
  340. solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
  341. solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
  342. solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
  343. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
  344. solace_agent_mesh/agents/base_agent_component.py +0 -256
  345. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  346. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  347. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  348. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  349. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  350. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  351. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  352. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  353. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  354. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  355. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  356. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  357. solace_agent_mesh/agents/slack/__init__.py +0 -1
  358. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  359. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  360. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  361. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  362. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  363. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  364. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  365. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  366. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  367. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  368. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  369. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  370. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  371. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  372. solace_agent_mesh/cli/commands/add/add.py +0 -88
  373. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  374. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  375. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  376. solace_agent_mesh/cli/commands/build.py +0 -670
  377. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  378. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  379. solace_agent_mesh/cli/commands/config.py +0 -29
  380. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  382. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  383. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  384. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  385. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  386. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  387. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  388. solace_agent_mesh/cli/commands/init/init.py +0 -92
  389. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  390. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  391. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  392. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  393. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  394. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  395. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  396. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  397. solace_agent_mesh/cli/commands/run.py +0 -68
  398. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  399. solace_agent_mesh/cli/config.py +0 -85
  400. solace_agent_mesh/common/action.py +0 -91
  401. solace_agent_mesh/common/action_list.py +0 -37
  402. solace_agent_mesh/common/action_response.py +0 -340
  403. solace_agent_mesh/common/mysql_database.py +0 -40
  404. solace_agent_mesh/common/postgres_database.py +0 -85
  405. solace_agent_mesh/common/prompt_templates.py +0 -28
  406. solace_agent_mesh/common/stimulus_utils.py +0 -152
  407. solace_agent_mesh/common/time.py +0 -24
  408. solace_agent_mesh/common/utils.py +0 -712
  409. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-a-zJ6rLx.js +0 -46
  410. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  411. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-44c41103.js +0 -1
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  414. solace_agent_mesh/configs/agent_global.yaml +0 -74
  415. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  416. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  417. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  418. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  419. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  420. solace_agent_mesh/configs/monitor.yaml +0 -0
  421. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  422. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  423. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  424. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  425. solace_agent_mesh/configs/service_llm.yaml +0 -265
  426. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  427. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  428. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  429. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  430. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  431. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  432. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  433. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  434. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  435. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  436. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  437. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  438. solace_agent_mesh/orchestrator/__init__.py +0 -0
  439. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  440. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  441. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  442. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  443. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  444. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  445. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  446. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  447. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  448. solace_agent_mesh/services/__init__.py +0 -0
  449. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  450. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  451. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  452. solace_agent_mesh/services/common/__init__.py +0 -4
  453. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  454. solace_agent_mesh/services/common/singleton.py +0 -18
  455. solace_agent_mesh/services/file_service/__init__.py +0 -14
  456. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  457. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  458. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  459. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  460. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  461. solace_agent_mesh/services/file_service/file_service.py +0 -437
  462. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  463. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  464. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  465. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  466. solace_agent_mesh/services/history_service/__init__.py +0 -3
  467. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  468. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  469. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  470. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  471. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  472. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  473. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  474. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  475. solace_agent_mesh/services/history_service/history_service.py +0 -413
  476. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  477. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  478. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  479. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  480. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  481. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  482. solace_agent_mesh/templates/action.py +0 -38
  483. solace_agent_mesh/templates/agent.py +0 -29
  484. solace_agent_mesh/templates/agent.yaml +0 -70
  485. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  486. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  487. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  488. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  489. solace_agent_mesh/templates/gateway_base.py +0 -15
  490. solace_agent_mesh/templates/gateway_input.py +0 -98
  491. solace_agent_mesh/templates/gateway_output.py +0 -71
  492. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  493. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  494. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  495. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  496. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  497. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  498. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  499. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  500. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  501. solace_agent_mesh/templates/web-flows.yaml +0 -76
  502. solace_agent_mesh/tools/__init__.py +0 -0
  503. solace_agent_mesh/tools/components/__init__.py +0 -0
  504. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  505. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  506. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  507. solace_agent_mesh-0.2.4.dist-info/METADATA +0 -176
  508. solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
  509. solace_agent_mesh-0.2.4.dist-info/entry_points.txt +0 -3
  510. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  511. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  512. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  513. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  517. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  518. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,94 @@
1
+ Here is the developer guide for the `models` directory.
2
+
3
+ ## Quick Summary
4
+ This directory contains concrete implementations of the `BaseLlm` interface, acting as wrappers or clients for various Large Language Model APIs. These classes translate the ADK's standard `LlmRequest` into the format required by the specific LLM backend and parse the backend's response back into a standard `LlmResponse`.
5
+
6
+ ## Files Overview
7
+ - `lite_llm.py`: An LLM client that uses the `litellm` library to support a wide variety of models from different providers.
8
+
9
+ ## Developer API Reference
10
+
11
+ ### lite_llm.py
12
+ **Purpose:** Provides the `LiteLlm` class, a `BaseLlm` implementation that interfaces with hundreds of LLM models through the `litellm` library. This allows developers to use models from providers like OpenAI, Anthropic, Vertex AI, etc., by simply changing the model string. Environment variables required by the target model provider must be set.
13
+
14
+ **Import:** `from google.adk.models.lite_llm import LiteLlm`
15
+
16
+ **Classes:**
17
+ - `LiteLlm(model: str, **kwargs)` - Wrapper around `litellm` that can be used with any model it supports.
18
+ - `__init__(self, model: str, **kwargs)` - Initializes the `LiteLlm` client.
19
+ - **model**: The name of the model as recognized by `litellm` (e.g., `"vertex_ai/gemini-1.5-pro-preview-0409"`, `"claude-3-opus-20240229"`, `"gpt-4-turbo"`).
20
+ - **\*\*kwargs**: Additional arguments to pass directly to the `litellm.completion` or `litellm.acompletion` API on every call.
21
+ - `async generate_content_async(llm_request: LlmRequest, stream: bool = False) -> AsyncGenerator[LlmResponse, None]` - Sends a request to the configured LLM and yields one or more responses.
22
+ - **llm_request**: The request object containing conversation history, tool definitions, and configuration.
23
+ - **stream**: If `True`, yields partial responses as they become available. If `False`, yields a single, complete response.
24
+ - **Returns**: An async generator that yields `LlmResponse` objects.
25
+ - `supported_models() -> list[str]` - Provides a list of supported models. For `LiteLlm`, this returns an empty list because `litellm` supports a vast and dynamic set of models. Refer to the `litellm` documentation for a complete list.
26
+
27
+ **Usage Examples:**
28
+ ```python
29
+ import asyncio
30
+ import os
31
+ from google.adk.models.lite_llm import LiteLlm
32
+ from google.adk.models.llm_request import LlmRequest, LlmConfig
33
+ from google.adk.models.types import Content, Part
34
+
35
+ # Example using a Vertex AI model via litellm.
36
+ # Set environment variables required by the provider.
37
+ # os.environ["VERTEXAI_PROJECT"] = "your-gcp-project-id"
38
+ # os.environ["VERTEXAI_LOCATION"] = "your-gcp-location"
39
+
40
+ # Example using an OpenAI model via litellm.
41
+ # os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
42
+
43
+ async def main():
44
+ # Instantiate the LiteLlm client with a specific model.
45
+ # Any additional kwargs are passed to litellm's completion call.
46
+ llm = LiteLlm(
47
+ model="gpt-4-turbo",
48
+ temperature=0.5,
49
+ max_tokens=150
50
+ )
51
+
52
+ # Construct a request to the LLM
53
+ request = LlmRequest(
54
+ contents=[
55
+ Content(
56
+ role="user",
57
+ parts=[Part.from_text("Why is the sky blue?")]
58
+ )
59
+ ],
60
+ config=LlmConfig(
61
+ # The temperature set in the constructor can be overridden here
62
+ temperature=0.7
63
+ )
64
+ )
65
+
66
+ print("--- Non-streaming example ---")
67
+ # Get a single, complete response
68
+ async for response in llm.generate_content_async(request, stream=False):
69
+ if response.text:
70
+ print(response.text)
71
+ if response.usage_metadata:
72
+ print(f"Token usage: {response.usage_metadata.total_token_count}")
73
+
74
+ print("\n--- Streaming example ---")
75
+ # Get a stream of partial responses
76
+ full_response_text = ""
77
+ async for response in llm.generate_content_async(request, stream=True):
78
+ if response.text:
79
+ print(response.text, end="", flush=True)
80
+ full_response_text += response.text
81
+ if response.usage_metadata:
82
+ # Usage metadata is typically sent with the final chunk
83
+ print(f"\nToken usage: {response.usage_metadata.total_token_count}")
84
+
85
+ if __name__ == "__main__":
86
+ # To run this example, you need to have the necessary environment variables set
87
+ # for the model you choose (e.g., OPENAI_API_KEY).
88
+ # You would also need to install the required provider packages, e.g.,
89
+ # pip install litellm[openai]
90
+ #
91
+ # Since this is an async function, we run it with asyncio.
92
+ # asyncio.run(main())
93
+ pass
94
+ ```
@@ -0,0 +1,353 @@
1
+ """
2
+ Manages the asynchronous execution of the ADK Runner.
3
+ """
4
+
5
+ import asyncio
6
+ from google.adk.agents.invocation_context import LlmCallsLimitExceededError
7
+
8
+
9
+ class TaskCancelledError(Exception):
10
+ """Raised when an ADK task is cancelled via external signal."""
11
+
12
+ pass
13
+
14
+
15
+ from typing import Dict, Any, TYPE_CHECKING
16
+
17
+ from solace_ai_connector.common.log import log
18
+
19
+ from google.adk.sessions import Session as ADKSession
20
+ from google.adk.agents import RunConfig
21
+ from google.genai import types as adk_types
22
+ from google.adk.events import Event as ADKEvent
23
+ from google.adk.events.event_actions import EventActions
24
+
25
+ from ...common.types import CancelTaskRequest, TaskIdParams
26
+
27
+ if TYPE_CHECKING:
28
+ from ..sac.component import SamAgentComponent
29
+ from ..sac.task_execution_context import TaskExecutionContext
30
+
31
+
32
+ async def run_adk_async_task_thread_wrapper(
33
+ component: "SamAgentComponent",
34
+ adk_session: ADKSession,
35
+ adk_content: adk_types.Content,
36
+ run_config: RunConfig,
37
+ a2a_context: Dict[str, Any],
38
+ ):
39
+ """
40
+ Wrapper to run the async ADK task.
41
+ Calls component finalization methods upon completion or error.
42
+
43
+ Args:
44
+ component: The SamAgentComponent instance.
45
+ adk_session: The ADK session to use (from component.session_service).
46
+ adk_content: The input content for the ADK agent.
47
+ run_config: The ADK run configuration.
48
+ a2a_context: The context dictionary for this specific A2A request.
49
+ """
50
+ logical_task_id = a2a_context.get("logical_task_id", "unknown_task")
51
+ is_paused = False
52
+ exception_to_finalize_with = None
53
+ task_context = None
54
+ try:
55
+ with component.active_tasks_lock:
56
+ task_context = component.active_tasks.get(logical_task_id)
57
+
58
+ if not task_context:
59
+ log.error(
60
+ "%s TaskExecutionContext not found for task %s. Cannot start ADK runner.",
61
+ component.log_identifier,
62
+ logical_task_id,
63
+ )
64
+ return
65
+
66
+ task_context.flush_streaming_buffer()
67
+ log.debug(
68
+ "%s Cleared streaming text buffer before starting ADK task %s.",
69
+ component.log_identifier,
70
+ logical_task_id,
71
+ )
72
+
73
+ if adk_session and component.session_service:
74
+ context_setting_invocation_id = logical_task_id
75
+ context_setting_event = ADKEvent(
76
+ invocation_id=context_setting_invocation_id,
77
+ author="A2A_Host_System",
78
+ content=adk_types.Content(
79
+ parts=[
80
+ adk_types.Part(text="Initializing A2A context for task run.")
81
+ ]
82
+ ),
83
+ actions=EventActions(state_delta={"a2a_context": a2a_context}),
84
+ branch=None,
85
+ )
86
+ try:
87
+ await component.session_service.append_event(
88
+ session=adk_session, event=context_setting_event
89
+ )
90
+ log.info(
91
+ "%s Appended context-setting event to ADK session %s (via component.session_service) for task %s.",
92
+ component.log_identifier,
93
+ adk_session.id,
94
+ logical_task_id,
95
+ )
96
+ except Exception as e_append:
97
+ log.error(
98
+ "%s Failed to append context-setting event for task %s: %s. Tool scope filtering might not work if state is not persisted.",
99
+ component.log_identifier,
100
+ logical_task_id,
101
+ e_append,
102
+ exc_info=True,
103
+ )
104
+ else:
105
+ log.warning(
106
+ "%s Could not inject a2a_context into ADK session state via event for task %s (session or session_service invalid). Tool scope filtering might not work.",
107
+ component.log_identifier,
108
+ logical_task_id,
109
+ )
110
+
111
+ is_paused = await run_adk_async_task(
112
+ component,
113
+ task_context,
114
+ adk_session,
115
+ adk_content,
116
+ run_config,
117
+ a2a_context,
118
+ )
119
+
120
+ log.debug(
121
+ "%s ADK task %s awaited and completed (Paused: %s).",
122
+ component.log_identifier,
123
+ logical_task_id,
124
+ is_paused,
125
+ )
126
+
127
+ except TaskCancelledError as tce:
128
+ exception_to_finalize_with = tce
129
+ log.info(
130
+ "%s Task %s was cancelled. Propagating to peers before scheduling finalization. Message: %s",
131
+ component.log_identifier,
132
+ logical_task_id,
133
+ tce,
134
+ )
135
+ sub_tasks_to_cancel = task_context.peer_sub_tasks if task_context else []
136
+
137
+ if sub_tasks_to_cancel:
138
+ log.info(
139
+ "%s Propagating cancellation to %d peer sub-task(s) for main task %s.",
140
+ component.log_identifier,
141
+ len(sub_tasks_to_cancel),
142
+ logical_task_id,
143
+ )
144
+ for sub_task_info in sub_tasks_to_cancel:
145
+ try:
146
+ sub_task_id = sub_task_info.get("sub_task_id")
147
+ target_peer_agent_name = sub_task_info.get("peer_agent_name")
148
+ if not sub_task_id or not target_peer_agent_name:
149
+ log.warning(
150
+ "%s Incomplete sub-task info found, cannot cancel: %s",
151
+ component.log_identifier,
152
+ sub_task_info,
153
+ )
154
+ continue
155
+ peer_cancel_params = TaskIdParams(id=sub_task_id)
156
+ peer_cancel_request = CancelTaskRequest(params=peer_cancel_params)
157
+ peer_cancel_user_props = {"clientId": component.agent_name}
158
+ peer_request_topic = component._get_agent_request_topic(
159
+ target_peer_agent_name
160
+ )
161
+ component._publish_a2a_message(
162
+ payload=peer_cancel_request.model_dump(exclude_none=True),
163
+ topic=peer_request_topic,
164
+ user_properties=peer_cancel_user_props,
165
+ )
166
+ except Exception as e_peer_cancel:
167
+ log.error(
168
+ "%s Failed to send CancelTaskRequest for sub-task %s: %s",
169
+ component.log_identifier,
170
+ sub_task_info.get("sub_task_id"),
171
+ e_peer_cancel,
172
+ exc_info=True,
173
+ )
174
+ except LlmCallsLimitExceededError as llm_limit_e:
175
+ exception_to_finalize_with = llm_limit_e
176
+ log.warning(
177
+ "%s LLM call limit exceeded for task %s: %s. Scheduling finalization.",
178
+ component.log_identifier,
179
+ logical_task_id,
180
+ llm_limit_e,
181
+ )
182
+ except Exception as e:
183
+ exception_to_finalize_with = e
184
+ log.exception(
185
+ "%s Exception in ADK runner for task %s: %s. Scheduling finalization.",
186
+ component.log_identifier,
187
+ logical_task_id,
188
+ e,
189
+ )
190
+
191
+ loop = component.get_async_loop()
192
+ if loop and loop.is_running():
193
+ log.debug(
194
+ "%s Scheduling finalize_task_with_cleanup for task %s.",
195
+ component.log_identifier,
196
+ logical_task_id,
197
+ )
198
+ asyncio.run_coroutine_threadsafe(
199
+ component.finalize_task_with_cleanup(
200
+ a2a_context, is_paused, exception_to_finalize_with
201
+ ),
202
+ loop,
203
+ )
204
+ else:
205
+ log.error(
206
+ "%s Async loop not available. Cannot schedule finalization for task %s.",
207
+ component.log_identifier,
208
+ logical_task_id,
209
+ )
210
+
211
+ log.debug(
212
+ "%s ADK runner for task %s finished.",
213
+ component.log_identifier,
214
+ logical_task_id,
215
+ )
216
+
217
+
218
+ async def run_adk_async_task(
219
+ component: "SamAgentComponent",
220
+ task_context: "TaskExecutionContext",
221
+ adk_session: ADKSession,
222
+ adk_content: adk_types.Content,
223
+ run_config: RunConfig,
224
+ a2a_context: Dict[str, Any],
225
+ ) -> bool:
226
+ """
227
+ Runs the ADK Runner asynchronously and calls component methods to process
228
+ intermediate events and finalize the task.
229
+ Returns:
230
+ bool: True if the task is paused for a long-running tool, False otherwise.
231
+ """
232
+ logical_task_id = a2a_context.get("logical_task_id", "unknown_task")
233
+ event_loop_stored = False
234
+ current_loop = asyncio.get_running_loop()
235
+ is_paused = False
236
+
237
+ adk_event_generator = component.runner.run_async(
238
+ user_id=adk_session.user_id,
239
+ session_id=adk_session.id,
240
+ new_message=adk_content,
241
+ run_config=run_config,
242
+ )
243
+
244
+ try:
245
+ while True:
246
+ next_event_task = asyncio.create_task(adk_event_generator.__anext__())
247
+ cancel_wait_task = asyncio.create_task(
248
+ task_context.cancellation_event.wait()
249
+ )
250
+
251
+ done, pending = await asyncio.wait(
252
+ {next_event_task, cancel_wait_task},
253
+ return_when=asyncio.FIRST_COMPLETED,
254
+ )
255
+
256
+ if cancel_wait_task in done:
257
+ next_event_task.cancel()
258
+ try:
259
+ await next_event_task
260
+ except asyncio.CancelledError:
261
+ log.debug(
262
+ "%s Suppressed CancelledError for next_event_task after signal.",
263
+ component.log_identifier,
264
+ )
265
+ log.info(
266
+ "%s Task %s cancellation detected while awaiting ADK event.",
267
+ component.log_identifier,
268
+ logical_task_id,
269
+ )
270
+ raise TaskCancelledError(
271
+ f"Task {logical_task_id} was cancelled by signal."
272
+ )
273
+
274
+ for task in pending:
275
+ task.cancel()
276
+ try:
277
+ await task
278
+ except asyncio.CancelledError:
279
+ log.debug(
280
+ "%s Suppressed CancelledError for lingering task after event.",
281
+ component.log_identifier,
282
+ )
283
+
284
+ try:
285
+ event = await next_event_task
286
+ except StopAsyncIteration:
287
+ break
288
+
289
+ if event.long_running_tool_ids:
290
+ is_paused = True
291
+
292
+ if not event_loop_stored and event.invocation_id:
293
+ task_context.set_event_loop(current_loop)
294
+ a2a_context["invocation_id"] = event.invocation_id
295
+ event_loop_stored = True
296
+
297
+ try:
298
+ await component.process_and_publish_adk_event(event, a2a_context)
299
+ except Exception as process_err:
300
+ log.exception(
301
+ "%s Error processing intermediate ADK event %s for task %s: %s",
302
+ component.log_identifier,
303
+ event.id,
304
+ logical_task_id,
305
+ process_err,
306
+ )
307
+
308
+ if task_context.is_cancelled():
309
+ raise TaskCancelledError(
310
+ f"Task {logical_task_id} was cancelled after processing ADK event {event.id}."
311
+ )
312
+
313
+ if event.content and event.content.parts:
314
+ for part in event.content.parts:
315
+ if part.function_response:
316
+ if part.function_response.name.startswith("peer_"):
317
+ pass
318
+
319
+ except TaskCancelledError:
320
+ raise
321
+ except Exception as e:
322
+ log.exception(
323
+ "%s Unexpected error in ADK runner loop for task %s: %s",
324
+ component.log_identifier,
325
+ logical_task_id,
326
+ e,
327
+ )
328
+ raise
329
+
330
+ if task_context.is_cancelled():
331
+ log.info(
332
+ "%s Task %s cancellation detected before finalization.",
333
+ component.log_identifier,
334
+ logical_task_id,
335
+ )
336
+ raise TaskCancelledError(
337
+ f"Task {logical_task_id} was cancelled before finalization."
338
+ )
339
+
340
+ if is_paused:
341
+ log.info(
342
+ "%s ADK run completed by invoking a long-running tool. Task %s will remain open, awaiting peer response.",
343
+ component.log_identifier,
344
+ logical_task_id,
345
+ )
346
+ return True
347
+
348
+ log.debug(
349
+ "%s ADK run_async completed for task %s. Returning to wrapper for finalization.",
350
+ component.log_identifier,
351
+ logical_task_id,
352
+ )
353
+ return False
@@ -0,0 +1,240 @@
1
+ """
2
+ Initializes ADK Services based on configuration.
3
+ """
4
+
5
+ import os
6
+ import re
7
+ from typing import Dict
8
+
9
+ from solace_ai_connector.common.log import log
10
+
11
+ from google.adk.sessions import (
12
+ BaseSessionService,
13
+ InMemorySessionService,
14
+ DatabaseSessionService,
15
+ VertexAiSessionService,
16
+ )
17
+ from google.adk.artifacts import (
18
+ BaseArtifactService,
19
+ InMemoryArtifactService,
20
+ GcsArtifactService,
21
+ )
22
+ from google.adk.memory import (
23
+ BaseMemoryService,
24
+ InMemoryMemoryService,
25
+ VertexAiRagMemoryService,
26
+ )
27
+
28
+ from .filesystem_artifact_service import FilesystemArtifactService
29
+
30
+ try:
31
+ from tests.integration.infrastructure.artifact_service.service import (
32
+ TestInMemoryArtifactService,
33
+ )
34
+ except ImportError:
35
+ TestInMemoryArtifactService = None
36
+
37
+
38
+ def _sanitize_for_path(identifier: str) -> str:
39
+ """Sanitizes a string to be safe for use as a directory name."""
40
+ if not identifier:
41
+ return "_invalid_scope_"
42
+ sanitized = re.sub(r'[\\/*?:"<>|]', "_", identifier)
43
+ sanitized = re.sub(r"_+", "_", sanitized)
44
+ sanitized = sanitized.strip("_ ")
45
+ if not sanitized:
46
+ return "_empty_scope_"
47
+ return sanitized
48
+
49
+
50
+ def initialize_session_service(component) -> BaseSessionService:
51
+ """Initializes the ADK Session Service based on configuration."""
52
+ config: Dict = component.get_config("session_service", {})
53
+ service_type = config.get("type", "memory").lower()
54
+ log.info(
55
+ "%s Initializing Session Service of type: %s",
56
+ component.log_identifier,
57
+ service_type,
58
+ )
59
+
60
+ if service_type == "memory":
61
+ return InMemorySessionService()
62
+ elif service_type == "database":
63
+ db_url = config.get("db_url")
64
+ if not db_url:
65
+ raise ValueError(
66
+ f"{component.log_identifier} 'db_url' is required for database session service."
67
+ )
68
+ try:
69
+ return DatabaseSessionService(db_url=db_url)
70
+ except ImportError:
71
+ log.error(
72
+ "%s SQLAlchemy not installed. Please install 'google-adk[database]' or 'sqlalchemy'.",
73
+ component.log_identifier,
74
+ )
75
+ raise
76
+ elif service_type == "vertex":
77
+ project = os.environ.get("GOOGLE_CLOUD_PROJECT")
78
+ location = os.environ.get("GOOGLE_CLOUD_LOCATION")
79
+ if not project or not location:
80
+ raise ValueError(
81
+ f"{component.log_identifier} GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_LOCATION env vars required for vertex session service."
82
+ )
83
+ return VertexAiSessionService(project=project, location=location)
84
+ else:
85
+ raise ValueError(
86
+ f"{component.log_identifier} Unsupported session service type: {service_type}"
87
+ )
88
+
89
+
90
+ def initialize_artifact_service(component) -> BaseArtifactService:
91
+ """Initializes the ADK Artifact Service based on configuration."""
92
+ config: Dict = component.get_config("artifact_service", {"type": "memory"})
93
+ service_type = config.get("type", "memory").lower()
94
+ log.info(
95
+ "%s Initializing Artifact Service of type: %s",
96
+ component.log_identifier,
97
+ service_type,
98
+ )
99
+
100
+ if service_type == "memory":
101
+ return InMemoryArtifactService()
102
+ elif service_type == "gcs":
103
+ bucket_name = config.get("bucket_name")
104
+ if not bucket_name:
105
+ raise ValueError(
106
+ f"{component.log_identifier} 'bucket_name' is required for GCS artifact service."
107
+ )
108
+ try:
109
+ gcs_args = {
110
+ k: v for k, v in config.items() if k not in ["type", "bucket_name"]
111
+ }
112
+ return GcsArtifactService(bucket_name=bucket_name, **gcs_args)
113
+ except ImportError:
114
+ log.error(
115
+ "%s google-cloud-storage not installed. Please install 'google-adk[gcs]' or 'google-cloud-storage'.",
116
+ component.log_identifier,
117
+ )
118
+ raise
119
+ elif service_type == "filesystem":
120
+ base_path = config.get("base_path")
121
+ if not base_path:
122
+ raise ValueError(
123
+ f"{component.log_identifier} 'base_path' is required for filesystem artifact service."
124
+ )
125
+
126
+ artifact_scope = config.get("artifact_scope", "namespace").lower()
127
+ scope_identifier_raw = None
128
+
129
+ if artifact_scope == "app":
130
+ app_instance = component.get_app()
131
+ if not app_instance or not app_instance.name:
132
+ raise ValueError(
133
+ f"{component.log_identifier} Cannot determine app name for 'app' scope."
134
+ )
135
+ scope_identifier_raw = app_instance.name
136
+ log.info(
137
+ "%s Using 'app' scope for filesystem artifacts: %s",
138
+ component.log_identifier,
139
+ scope_identifier_raw,
140
+ )
141
+ elif artifact_scope == "namespace":
142
+ scope_identifier_raw = component.get_config("namespace")
143
+ log.info(
144
+ "%s Using 'namespace' scope for filesystem artifacts: %s",
145
+ component.log_identifier,
146
+ scope_identifier_raw,
147
+ )
148
+ elif artifact_scope == "custom":
149
+ scope_identifier_raw = config.get("artifact_scope_value")
150
+ if not scope_identifier_raw:
151
+ raise ValueError(
152
+ f"{component.log_identifier} 'artifact_scope_value' is required when artifact_scope is 'custom'."
153
+ )
154
+ log.info(
155
+ "%s Using 'custom' scope for filesystem artifacts: %s",
156
+ component.log_identifier,
157
+ scope_identifier_raw,
158
+ )
159
+ else:
160
+ raise ValueError(
161
+ f"{component.log_identifier} Invalid 'artifact_scope' value: {artifact_scope}"
162
+ )
163
+
164
+ if not scope_identifier_raw:
165
+ raise ValueError(
166
+ f"{component.log_identifier} Failed to determine scope identifier for filesystem artifacts."
167
+ )
168
+
169
+ scope_identifier_sanitized = _sanitize_for_path(scope_identifier_raw)
170
+ log.info(
171
+ "%s Sanitized scope identifier: %s",
172
+ component.log_identifier,
173
+ scope_identifier_sanitized,
174
+ )
175
+
176
+ try:
177
+ return FilesystemArtifactService(
178
+ base_path=base_path, scope_identifier=scope_identifier_sanitized
179
+ )
180
+ except Exception as e:
181
+ log.error(
182
+ "%s Failed to initialize FilesystemArtifactService: %s",
183
+ component.log_identifier,
184
+ e,
185
+ )
186
+ raise
187
+ elif service_type == "test_in_memory":
188
+ if TestInMemoryArtifactService is None:
189
+ log.error(
190
+ "%s TestInMemoryArtifactService is configured but could not be imported. "
191
+ "Ensure test infrastructure is in PYTHONPATH if running tests, or check configuration.",
192
+ component.log_identifier,
193
+ )
194
+ raise ImportError("TestInMemoryArtifactService not available.")
195
+ log.info(
196
+ "%s Using TestInMemoryArtifactService for testing.",
197
+ component.log_identifier,
198
+ )
199
+ return TestInMemoryArtifactService()
200
+ else:
201
+ raise ValueError(
202
+ f"{component.log_identifier} Unsupported artifact service type: {service_type}"
203
+ )
204
+
205
+
206
+ def initialize_memory_service(component) -> BaseMemoryService:
207
+ """Initializes the ADK Memory Service based on configuration."""
208
+ config: Dict = component.get_config("memory_service", {"type": "memory"})
209
+ service_type = config.get("type", "memory").lower()
210
+ log.info(
211
+ "%s Initializing Memory Service of type: %s",
212
+ component.log_identifier,
213
+ service_type,
214
+ )
215
+
216
+ if service_type == "memory":
217
+ return InMemoryMemoryService()
218
+ elif service_type == "vertex_rag":
219
+ try:
220
+ rag_args = {
221
+ k: v for k, v in config.items() if k not in ["type", "default_behavior"]
222
+ }
223
+ return VertexAiRagMemoryService(**rag_args)
224
+ except ImportError:
225
+ log.error(
226
+ "%s google-cloud-aiplatform not installed. Please install 'google-adk[vertex]' or 'google-cloud-aiplatform'.",
227
+ component.log_identifier,
228
+ )
229
+ raise
230
+ except TypeError as e:
231
+ log.error(
232
+ "%s Error initializing VertexAiRagMemoryService: %s. Check config params.",
233
+ component.log_identifier,
234
+ e,
235
+ )
236
+ raise
237
+ else:
238
+ raise ValueError(
239
+ f"{component.log_identifier} Unsupported memory service type: {service_type}"
240
+ )