solace-agent-mesh 1.5.0__py3-none-any.whl → 1.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (326) hide show
  1. solace_agent_mesh/agent/adk/callbacks.py +14 -17
  2. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +3 -1
  3. solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +2 -1
  4. solace_agent_mesh/agent/adk/mcp_content_processor.py +2 -1
  5. solace_agent_mesh/agent/adk/models/lite_llm.py +123 -8
  6. solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +245 -0
  7. solace_agent_mesh/agent/adk/runner.py +3 -1
  8. solace_agent_mesh/agent/adk/services.py +4 -1
  9. solace_agent_mesh/agent/adk/setup.py +3 -1
  10. solace_agent_mesh/agent/adk/tool_wrapper.py +2 -2
  11. solace_agent_mesh/agent/protocol/event_handlers.py +42 -2
  12. solace_agent_mesh/agent/proxies/__init__.py +0 -0
  13. solace_agent_mesh/agent/proxies/a2a/__init__.py +3 -0
  14. solace_agent_mesh/agent/proxies/a2a/app.py +55 -0
  15. solace_agent_mesh/agent/proxies/a2a/component.py +1115 -0
  16. solace_agent_mesh/agent/proxies/a2a/config.py +140 -0
  17. solace_agent_mesh/agent/proxies/a2a/oauth_token_cache.py +104 -0
  18. solace_agent_mesh/agent/proxies/base/__init__.py +3 -0
  19. solace_agent_mesh/agent/proxies/base/app.py +99 -0
  20. solace_agent_mesh/agent/proxies/base/component.py +619 -0
  21. solace_agent_mesh/agent/proxies/base/config.py +85 -0
  22. solace_agent_mesh/agent/proxies/base/proxy_task_context.py +17 -0
  23. solace_agent_mesh/agent/sac/app.py +12 -4
  24. solace_agent_mesh/agent/sac/component.py +164 -9
  25. solace_agent_mesh/agent/tools/audio_tools.py +127 -9
  26. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +3 -1
  27. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +3 -1
  28. solace_agent_mesh/agent/tools/dynamic_tool.py +2 -1
  29. solace_agent_mesh/agent/tools/general_agent_tools.py +2 -1
  30. solace_agent_mesh/agent/tools/image_tools.py +2 -1
  31. solace_agent_mesh/agent/tools/peer_agent_tool.py +2 -1
  32. solace_agent_mesh/agent/tools/registry.py +3 -1
  33. solace_agent_mesh/agent/tools/test_tools.py +2 -1
  34. solace_agent_mesh/agent/tools/web_tools.py +12 -6
  35. solace_agent_mesh/agent/utils/artifact_helpers.py +144 -4
  36. solace_agent_mesh/agent/utils/config_parser.py +3 -1
  37. solace_agent_mesh/assets/docs/404.html +3 -3
  38. solace_agent_mesh/assets/docs/assets/js/{b7006a3a.73a79653.js → 032c2d61.f3d37824.js} +1 -1
  39. solace_agent_mesh/assets/docs/assets/js/0bcf40b7.c019ad46.js +1 -0
  40. solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +1 -0
  41. solace_agent_mesh/assets/docs/assets/js/2131ec11.5c7a1f6e.js +1 -0
  42. solace_agent_mesh/assets/docs/assets/js/{2334.622a6395.js → 2334.1cf50a20.js} +1 -1
  43. solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +1 -0
  44. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +1 -0
  45. solace_agent_mesh/assets/docs/assets/js/341393d4.0fac2613.js +1 -0
  46. solace_agent_mesh/assets/docs/assets/js/{3624.b524e433.js → 3624.0eaa1fd0.js} +1 -1
  47. solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/509e993c.4c7a1a6d.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +1 -0
  54. solace_agent_mesh/assets/docs/assets/js/6063ff4c.ef84f702.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +1 -0
  56. solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +1 -0
  57. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/6fdfefc7.99de744e.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/722f809d.965da774.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/742f027b.46c07808.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/77cf947d.48cb18a2.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/{8591.d7c16be6.js → 8591.5d015485.js} +2 -2
  68. solace_agent_mesh/assets/docs/assets/js/{8731.49e930c2.js → 8731.6c1dbf0c.js} +1 -1
  69. solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/945fb41e.6f4cdffd.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/9e9d0a82.570c057b.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e6dd091.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/ad71b5ed.af3ecfd1.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/c198a0dc.8f31f867.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/ceb2a7a6.5d92d7d0.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/db924877.e98d12a1.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/de5f4c65.e8241890.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/e3d9abda.2b916f9e.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/e6f9706b.e74a984d.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/main.20feee82.js +2 -0
  91. solace_agent_mesh/assets/docs/assets/js/runtime~main.0d198646.js +1 -0
  92. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +154 -0
  93. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/artifact-management/index.html +7 -7
  94. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/audio-tools/index.html +7 -7
  95. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/data-analysis-tools/index.html +8 -8
  96. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/embeds/index.html +6 -6
  97. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → components}/builtin-tools/index.html +11 -11
  98. solace_agent_mesh/assets/docs/docs/documentation/{concepts → components}/cli/index.html +25 -25
  99. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +91 -0
  100. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +29 -0
  101. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +55 -0
  102. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +110 -0
  103. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +262 -0
  104. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +104 -0
  105. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +85 -0
  106. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +25 -0
  107. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +59 -0
  108. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → developing}/create-agents/index.html +113 -152
  109. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → developing}/create-gateways/index.html +10 -10
  110. solace_agent_mesh/assets/docs/docs/documentation/{user-guide → developing}/creating-python-tools/index.html +12 -12
  111. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +54 -0
  112. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +135 -0
  113. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +34 -0
  114. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +55 -0
  115. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/bedrock-agents/index.html +25 -25
  116. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/custom-agent/index.html +13 -13
  117. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/event-mesh-gateway/index.html +12 -12
  118. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/mcp-integration/index.html +10 -10
  119. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/mongodb-integration/index.html +13 -13
  120. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/rag-integration/index.html +13 -13
  121. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/rest-gateway/index.html +10 -10
  122. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +72 -0
  123. solace_agent_mesh/assets/docs/docs/documentation/{tutorials → developing/tutorials}/sql-database/index.html +14 -14
  124. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +33 -0
  125. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +83 -0
  126. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +222 -0
  127. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +161 -0
  128. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +75 -0
  129. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +53 -0
  130. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +35 -100
  131. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +41 -0
  132. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +81 -0
  133. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +25 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +76 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +160 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +142 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +100 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/{Migrations/A2A Upgrade To 0.3.0/a2a-technical-migration-map/index.html → migrations/a2a-upgrade/a2a-technical-migration-map/index.html} +10 -11
  139. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  140. solace_agent_mesh/assets/docs/lunr-index-1761165361160.json +1 -0
  141. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  142. solace_agent_mesh/assets/docs/search-doc-1761165361160.json +1 -0
  143. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  144. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  145. solace_agent_mesh/cli/__init__.py +1 -1
  146. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +2 -69
  147. solace_agent_mesh/cli/commands/eval_cmd.py +11 -49
  148. solace_agent_mesh/cli/commands/init_cmd/__init__.py +0 -5
  149. solace_agent_mesh/cli/commands/init_cmd/env_step.py +10 -12
  150. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +9 -61
  151. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +9 -49
  152. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +1 -2
  153. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-DwrxZE0E.js → authCallback-BTf6dqwp.js} +1 -1
  154. solace_agent_mesh/client/webui/frontend/static/assets/{client-DarGQzyw.js → client-CaY59VuC.js} +1 -1
  155. solace_agent_mesh/client/webui/frontend/static/assets/main-BGTaW0uv.js +342 -0
  156. solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +1 -0
  157. solace_agent_mesh/client/webui/frontend/static/assets/{vendor-BKIeiHj_.js → vendor-BEmvJSYz.js} +1 -1
  158. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  159. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  160. solace_agent_mesh/common/a2a/__init__.py +24 -0
  161. solace_agent_mesh/common/a2a/artifact.py +41 -1
  162. solace_agent_mesh/common/a2a/events.py +29 -0
  163. solace_agent_mesh/common/a2a/message.py +68 -0
  164. solace_agent_mesh/common/a2a/protocol.py +76 -3
  165. solace_agent_mesh/common/a2a/translation.py +3 -1
  166. solace_agent_mesh/common/agent_registry.py +83 -3
  167. solace_agent_mesh/common/constants.py +3 -1
  168. solace_agent_mesh/common/middleware/config_resolver.py +3 -1
  169. solace_agent_mesh/common/middleware/registry.py +3 -1
  170. solace_agent_mesh/common/sac/sam_component_base.py +2 -1
  171. solace_agent_mesh/common/sam_events/event_service.py +3 -2
  172. solace_agent_mesh/common/services/employee_service.py +3 -1
  173. solace_agent_mesh/common/services/identity_service.py +2 -1
  174. solace_agent_mesh/common/services/providers/local_file_identity_service.py +2 -1
  175. solace_agent_mesh/common/utils/artifact_utils.py +3 -1
  176. solace_agent_mesh/common/utils/asyncio_macos_fix.py +3 -1
  177. solace_agent_mesh/common/utils/embeds/converter.py +3 -1
  178. solace_agent_mesh/common/utils/embeds/evaluators.py +2 -1
  179. solace_agent_mesh/common/utils/embeds/modifiers.py +3 -2
  180. solace_agent_mesh/common/utils/embeds/resolver.py +2 -1
  181. solace_agent_mesh/common/utils/initializer.py +3 -1
  182. solace_agent_mesh/common/utils/message_utils.py +2 -1
  183. solace_agent_mesh/common/utils/push_notification_auth.py +3 -2
  184. solace_agent_mesh/common/utils/pydantic_utils.py +12 -0
  185. solace_agent_mesh/config_portal/backend/common.py +1 -1
  186. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +98 -0
  187. solace_agent_mesh/config_portal/frontend/static/client/assets/{manifest-44d62be6.js → manifest-61038fc6.js} +1 -1
  188. solace_agent_mesh/config_portal/frontend/static/client/index.html +1 -1
  189. solace_agent_mesh/core_a2a/service.py +2 -2
  190. solace_agent_mesh/evaluation/evaluator.py +128 -104
  191. solace_agent_mesh/evaluation/message_organizer.py +116 -110
  192. solace_agent_mesh/evaluation/report_data_processor.py +84 -86
  193. solace_agent_mesh/evaluation/report_generator.py +73 -79
  194. solace_agent_mesh/evaluation/run.py +421 -235
  195. solace_agent_mesh/evaluation/shared/__init__.py +92 -0
  196. solace_agent_mesh/evaluation/shared/constants.py +47 -0
  197. solace_agent_mesh/evaluation/shared/exceptions.py +50 -0
  198. solace_agent_mesh/evaluation/shared/helpers.py +35 -0
  199. solace_agent_mesh/evaluation/shared/test_case_loader.py +167 -0
  200. solace_agent_mesh/evaluation/shared/test_suite_loader.py +280 -0
  201. solace_agent_mesh/evaluation/subscriber.py +111 -232
  202. solace_agent_mesh/evaluation/summary_builder.py +227 -117
  203. solace_agent_mesh/gateway/base/app.py +3 -2
  204. solace_agent_mesh/gateway/base/component.py +11 -2
  205. solace_agent_mesh/gateway/base/task_context.py +2 -1
  206. solace_agent_mesh/gateway/http_sse/alembic/versions/20251015_add_session_performance_indexes.py +70 -0
  207. solace_agent_mesh/gateway/http_sse/app.py +2 -1
  208. solace_agent_mesh/gateway/http_sse/component.py +102 -3
  209. solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +3 -2
  210. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +3 -1
  211. solace_agent_mesh/gateway/http_sse/dependencies.py +7 -5
  212. solace_agent_mesh/gateway/http_sse/main.py +5 -2
  213. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +12 -13
  214. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +15 -18
  215. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +25 -18
  216. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +30 -26
  217. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +35 -44
  218. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +7 -5
  219. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +97 -205
  220. solace_agent_mesh/gateway/http_sse/routers/auth.py +3 -1
  221. solace_agent_mesh/gateway/http_sse/routers/config.py +3 -2
  222. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +4 -3
  223. solace_agent_mesh/gateway/http_sse/routers/people.py +3 -1
  224. solace_agent_mesh/gateway/http_sse/routers/sessions.py +5 -3
  225. solace_agent_mesh/gateway/http_sse/routers/sse.py +3 -2
  226. solace_agent_mesh/gateway/http_sse/routers/tasks.py +35 -42
  227. solace_agent_mesh/gateway/http_sse/routers/users.py +3 -1
  228. solace_agent_mesh/gateway/http_sse/routers/visualization.py +19 -12
  229. solace_agent_mesh/gateway/http_sse/services/agent_card_service.py +3 -1
  230. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +6 -5
  231. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +53 -44
  232. solace_agent_mesh/gateway/http_sse/services/people_service.py +2 -2
  233. solace_agent_mesh/gateway/http_sse/services/session_service.py +23 -21
  234. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +10 -9
  235. solace_agent_mesh/gateway/http_sse/services/task_service.py +3 -2
  236. solace_agent_mesh/gateway/http_sse/session_manager.py +2 -1
  237. solace_agent_mesh/gateway/http_sse/shared/base_repository.py +45 -71
  238. solace_agent_mesh/gateway/http_sse/shared/types.py +0 -18
  239. solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +2 -1
  240. solace_agent_mesh/gateway/http_sse/sse_manager.py +2 -2
  241. solace_agent_mesh/templates/gateway_app_template.py +4 -2
  242. solace_agent_mesh/templates/gateway_component_template.py +3 -1
  243. solace_agent_mesh/templates/gateway_config_template.yaml +0 -5
  244. solace_agent_mesh/templates/logging_config_template.ini +27 -46
  245. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +0 -3
  246. solace_agent_mesh/templates/plugin_tools_template.py +2 -2
  247. solace_agent_mesh/templates/shared_config.yaml +40 -0
  248. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/METADATA +47 -21
  249. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/RECORD +254 -225
  250. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  251. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  252. solace_agent_mesh/assets/docs/assets/js/04989206.a248f00c.js +0 -1
  253. solace_agent_mesh/assets/docs/assets/js/0e682baa.d54b8668.js +0 -1
  254. solace_agent_mesh/assets/docs/assets/js/1023fc19.8a8a9309.js +0 -1
  255. solace_agent_mesh/assets/docs/assets/js/1523c6b4.2645ef68.js +0 -1
  256. solace_agent_mesh/assets/docs/assets/js/166ab619.e27886d9.js +0 -1
  257. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.e056b7e0.js +0 -1
  258. solace_agent_mesh/assets/docs/assets/js/21ceee5f.3bf39250.js +0 -1
  259. solace_agent_mesh/assets/docs/assets/js/2a9cab12.2afaee76.js +0 -1
  260. solace_agent_mesh/assets/docs/assets/js/332e10b5.f7629851.js +0 -1
  261. solace_agent_mesh/assets/docs/assets/js/3d406171.5560fdf9.js +0 -1
  262. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.508ae8db.js +0 -1
  263. solace_agent_mesh/assets/docs/assets/js/442a8107.b5c2532a.js +0 -1
  264. solace_agent_mesh/assets/docs/assets/js/453a82a6.3c6bb61d.js +0 -1
  265. solace_agent_mesh/assets/docs/assets/js/483cef9a.bf9398af.js +0 -1
  266. solace_agent_mesh/assets/docs/assets/js/4c2787c2.c1290a40.js +0 -1
  267. solace_agent_mesh/assets/docs/assets/js/55f47984.bcd00a86.js +0 -1
  268. solace_agent_mesh/assets/docs/assets/js/5b4258a4.fdfd2325.js +0 -1
  269. solace_agent_mesh/assets/docs/assets/js/664b740a.ba305a89.js +0 -1
  270. solace_agent_mesh/assets/docs/assets/js/75384d09.c19e8b51.js +0 -1
  271. solace_agent_mesh/assets/docs/assets/js/768e31b0.9abcdc48.js +0 -1
  272. solace_agent_mesh/assets/docs/assets/js/85387663.be2bc838.js +0 -1
  273. solace_agent_mesh/assets/docs/assets/js/945fb41e.16e00776.js +0 -1
  274. solace_agent_mesh/assets/docs/assets/js/9a09e75d.92de8cf5.js +0 -1
  275. solace_agent_mesh/assets/docs/assets/js/9eff14a2.d62aad71.js +0 -1
  276. solace_agent_mesh/assets/docs/assets/js/a12a4955.25fbed32.js +0 -1
  277. solace_agent_mesh/assets/docs/assets/js/a3a92b25.af35e313.js +0 -1
  278. solace_agent_mesh/assets/docs/assets/js/aba87c2f.4ddf32f2.js +0 -1
  279. solace_agent_mesh/assets/docs/assets/js/ae0e903d.5fe5203f.js +0 -1
  280. solace_agent_mesh/assets/docs/assets/js/ae4415af.16cc58d3.js +0 -1
  281. solace_agent_mesh/assets/docs/assets/js/bac0be12.17de4316.js +0 -1
  282. solace_agent_mesh/assets/docs/assets/js/c2c06897.87cb1f47.js +0 -1
  283. solace_agent_mesh/assets/docs/assets/js/c835a94d.ce21f0bf.js +0 -1
  284. solace_agent_mesh/assets/docs/assets/js/cc969b05.feef7dcc.js +0 -1
  285. solace_agent_mesh/assets/docs/assets/js/cd3d4052.a19e7d78.js +0 -1
  286. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +0 -1
  287. solace_agent_mesh/assets/docs/assets/js/cee5d587.47904f5e.js +0 -1
  288. solace_agent_mesh/assets/docs/assets/js/d6a81ee7.829198f1.js +0 -1
  289. solace_agent_mesh/assets/docs/assets/js/f284c35a.ed8dd236.js +0 -1
  290. solace_agent_mesh/assets/docs/assets/js/f897a61a.126663fe.js +0 -1
  291. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.e144b16c.js +0 -1
  292. solace_agent_mesh/assets/docs/assets/js/main.0c149855.js +0 -2
  293. solace_agent_mesh/assets/docs/assets/js/runtime~main.c66557e4.js +0 -1
  294. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/installation/index.html +0 -46
  295. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/rbac-setup-guilde/index.html +0 -201
  296. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/single-sign-on/index.html +0 -29
  297. solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-gateway-upgrade-to-0.3.0/index.html +0 -105
  298. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +0 -144
  299. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +0 -91
  300. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +0 -91
  301. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +0 -55
  302. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +0 -111
  303. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +0 -77
  304. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +0 -48
  305. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +0 -54
  306. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +0 -45
  307. solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/index.html +0 -74
  308. solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/litellm_models/index.html +0 -49
  309. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +0 -76
  310. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +0 -73
  311. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +0 -72
  312. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +0 -54
  313. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +0 -69
  314. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +0 -59
  315. solace_agent_mesh/assets/docs/lunr-index-1760032255022.json +0 -1
  316. solace_agent_mesh/assets/docs/search-doc-1760032255022.json +0 -1
  317. solace_agent_mesh/client/webui/frontend/static/assets/main-CZbpmwfA.css +0 -1
  318. solace_agent_mesh/client/webui/frontend/static/assets/main-C__uuUkB.js +0 -339
  319. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-BNuqpWDc.js +0 -98
  320. solace_agent_mesh/evaluation/config_loader.py +0 -657
  321. solace_agent_mesh/evaluation/test_case_loader.py +0 -714
  322. /solace_agent_mesh/assets/docs/assets/js/{8591.d7c16be6.js.LICENSE.txt → 8591.5d015485.js.LICENSE.txt} +0 -0
  323. /solace_agent_mesh/assets/docs/assets/js/{main.0c149855.js.LICENSE.txt → main.20feee82.js.LICENSE.txt} +0 -0
  324. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/WHEEL +0 -0
  325. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/entry_points.txt +0 -0
  326. {solace_agent_mesh-1.5.0.dist-info → solace_agent_mesh-1.6.0.dist-info}/licenses/LICENSE +0 -0
@@ -14,6 +14,8 @@ from .artifact import (
14
14
  get_artifact_id,
15
15
  get_artifact_name,
16
16
  get_parts_from_artifact,
17
+ get_text_content_from_artifact,
18
+ is_text_only_artifact,
17
19
  update_artifact_parts,
18
20
  prepare_file_part_for_publishing,
19
21
  resolve_file_part_uri,
@@ -25,6 +27,8 @@ from .events import (
25
27
  get_artifact_from_artifact_update,
26
28
  get_data_parts_from_status_update,
27
29
  get_message_from_status_update,
30
+ is_task_artifact_update,
31
+ is_task_status_update,
28
32
  )
29
33
  from .message import (
30
34
  create_agent_data_message,
@@ -51,6 +55,11 @@ from .message import (
51
55
  get_text_from_message,
52
56
  get_text_from_text_part,
53
57
  get_uri_from_file_part,
58
+ is_data_part,
59
+ is_file_part,
60
+ is_file_part_bytes,
61
+ is_file_part_uri,
62
+ is_text_part,
54
63
  )
55
64
  from .protocol import (
56
65
  create_cancel_task_request,
@@ -92,8 +101,11 @@ from .protocol import (
92
101
  get_response_result,
93
102
  get_task_id_from_cancel_request,
94
103
  extract_task_id_from_topic,
104
+ is_client_event,
105
+ is_message_object,
95
106
  subscription_to_regex,
96
107
  topic_matches_subscription,
108
+ unpack_client_event,
97
109
  )
98
110
  from .task import (
99
111
  create_final_task,
@@ -122,6 +134,8 @@ __all__ = [
122
134
  "get_artifact_id",
123
135
  "get_artifact_name",
124
136
  "get_parts_from_artifact",
137
+ "get_text_content_from_artifact",
138
+ "is_text_only_artifact",
125
139
  "update_artifact_parts",
126
140
  "prepare_file_part_for_publishing",
127
141
  "resolve_file_part_uri",
@@ -132,6 +146,8 @@ __all__ = [
132
146
  "get_artifact_from_artifact_update",
133
147
  "get_data_parts_from_status_update",
134
148
  "get_message_from_status_update",
149
+ "is_task_artifact_update",
150
+ "is_task_status_update",
135
151
  # message.py
136
152
  "create_agent_data_message",
137
153
  "create_agent_parts_message",
@@ -157,6 +173,11 @@ __all__ = [
157
173
  "get_text_from_message",
158
174
  "get_uri_from_file_part",
159
175
  "get_text_from_text_part",
176
+ "is_data_part",
177
+ "is_file_part",
178
+ "is_file_part_bytes",
179
+ "is_file_part_uri",
180
+ "is_text_part",
160
181
  # protocol.py
161
182
  "create_cancel_task_request",
162
183
  "create_error_response",
@@ -197,8 +218,11 @@ __all__ = [
197
218
  "get_response_result",
198
219
  "get_task_id_from_cancel_request",
199
220
  "extract_task_id_from_topic",
221
+ "is_client_event",
222
+ "is_message_object",
200
223
  "subscription_to_regex",
201
224
  "topic_matches_subscription",
225
+ "unpack_client_event",
202
226
  # task.py
203
227
  "create_final_task",
204
228
  "create_initial_task",
@@ -2,6 +2,7 @@
2
2
  Helpers for creating and consuming A2A Artifact objects.
3
3
  """
4
4
 
5
+ import logging
5
6
  import uuid
6
7
  import base64
7
8
  from datetime import datetime, timezone
@@ -18,12 +19,12 @@ from a2a.types import (
18
19
  Part,
19
20
  TextPart,
20
21
  )
21
- from solace_ai_connector.common.log import log
22
22
  from .. import a2a
23
23
 
24
24
  if TYPE_CHECKING:
25
25
  from google.adk.artifacts import BaseArtifactService
26
26
 
27
+ log = logging.getLogger(__name__)
27
28
 
28
29
  # --- Creation Helpers ---
29
30
 
@@ -326,3 +327,42 @@ def get_parts_from_artifact(artifact: Artifact) -> List[ContentPart]:
326
327
  A list of the unwrapped content parts.
327
328
  """
328
329
  return [part.root for part in artifact.parts]
330
+
331
+
332
+ def is_text_only_artifact(artifact: Artifact) -> bool:
333
+ """
334
+ Checks if an artifact contains only TextParts.
335
+
336
+ Args:
337
+ artifact: The Artifact object to check.
338
+
339
+ Returns:
340
+ True if all parts are TextParts, False otherwise.
341
+ """
342
+ if not artifact.parts:
343
+ return False
344
+
345
+ for part in artifact.parts:
346
+ if not isinstance(part.root, TextPart):
347
+ return False
348
+
349
+ return True
350
+
351
+
352
+ def get_text_content_from_artifact(artifact: Artifact) -> List[str]:
353
+ """
354
+ Extracts all text content from TextParts in an artifact.
355
+
356
+ Args:
357
+ artifact: The Artifact object to extract text from.
358
+
359
+ Returns:
360
+ A list of text strings from all TextParts. Returns empty list if no TextParts found.
361
+ """
362
+ text_content = []
363
+
364
+ for part in artifact.parts:
365
+ if isinstance(part.root, TextPart):
366
+ text_content.append(part.root.text)
367
+
368
+ return text_content
@@ -181,3 +181,32 @@ def get_artifact_from_artifact_update(
181
181
  if event:
182
182
  return event.artifact
183
183
  return None
184
+
185
+
186
+ # --- Type Checking Helpers ---
187
+
188
+
189
+ def is_task_status_update(obj: Any) -> bool:
190
+ """
191
+ Checks if an object is a TaskStatusUpdateEvent.
192
+
193
+ Args:
194
+ obj: The object to check.
195
+
196
+ Returns:
197
+ True if the object is a TaskStatusUpdateEvent, False otherwise.
198
+ """
199
+ return isinstance(obj, TaskStatusUpdateEvent)
200
+
201
+
202
+ def is_task_artifact_update(obj: Any) -> bool:
203
+ """
204
+ Checks if an object is a TaskArtifactUpdateEvent.
205
+
206
+ Args:
207
+ obj: The object to check.
208
+
209
+ Returns:
210
+ True if the object is a TaskArtifactUpdateEvent, False otherwise.
211
+ """
212
+ return isinstance(obj, TaskArtifactUpdateEvent)
@@ -305,3 +305,71 @@ def get_filename_from_file_part(part: FilePart) -> Optional[str]:
305
305
  def get_mimetype_from_file_part(part: FilePart) -> Optional[str]:
306
306
  """Safely retrieves the MIME type from a FilePart."""
307
307
  return part.file.mime_type
308
+
309
+
310
+ # --- Type Checking Helpers ---
311
+
312
+
313
+ def is_text_part(part: Part) -> bool:
314
+ """
315
+ Checks if a Part contains a TextPart.
316
+
317
+ Args:
318
+ part: The Part object to check.
319
+
320
+ Returns:
321
+ True if the part contains a TextPart, False otherwise.
322
+ """
323
+ return isinstance(part.root, TextPart)
324
+
325
+
326
+ def is_file_part(part: Part) -> bool:
327
+ """
328
+ Checks if a Part contains a FilePart.
329
+
330
+ Args:
331
+ part: The Part object to check.
332
+
333
+ Returns:
334
+ True if the part contains a FilePart, False otherwise.
335
+ """
336
+ return isinstance(part.root, FilePart)
337
+
338
+
339
+ def is_data_part(part: Part) -> bool:
340
+ """
341
+ Checks if a Part contains a DataPart.
342
+
343
+ Args:
344
+ part: The Part object to check.
345
+
346
+ Returns:
347
+ True if the part contains a DataPart, False otherwise.
348
+ """
349
+ return isinstance(part.root, DataPart)
350
+
351
+
352
+ def is_file_part_bytes(part: FilePart) -> bool:
353
+ """
354
+ Checks if a FilePart uses FileWithBytes (embedded content).
355
+
356
+ Args:
357
+ part: The FilePart object to check.
358
+
359
+ Returns:
360
+ True if the file content is embedded as bytes, False otherwise.
361
+ """
362
+ return isinstance(part.file, FileWithBytes)
363
+
364
+
365
+ def is_file_part_uri(part: FilePart) -> bool:
366
+ """
367
+ Checks if a FilePart uses FileWithUri (reference to external content).
368
+
369
+ Args:
370
+ part: The FilePart object to check.
371
+
372
+ Returns:
373
+ True if the file content is a URI reference, False otherwise.
374
+ """
375
+ return isinstance(part.file, FileWithUri)
@@ -2,11 +2,10 @@
2
2
  Helpers for A2A protocol-level concerns, such as topic construction and
3
3
  parsing of JSON-RPC requests and responses.
4
4
  """
5
+ import logging
5
6
  import re
6
7
  import uuid
7
- from typing import Any, Dict, Optional, Union
8
-
9
- from solace_ai_connector.common.log import log
8
+ from typing import Any, Dict, Optional, Tuple, Union
10
9
 
11
10
  from a2a.types import (
12
11
  A2ARequest,
@@ -29,6 +28,8 @@ from a2a.types import (
29
28
  TaskStatusUpdateEvent,
30
29
  )
31
30
 
31
+ log = logging.getLogger(__name__)
32
+
32
33
  # --- Topic Construction Helpers ---
33
34
 
34
35
  A2A_VERSION = "v1"
@@ -531,3 +532,75 @@ def extract_task_id_from_topic(
531
532
  subscription_pattern,
532
533
  )
533
534
  return None
535
+
536
+
537
+ # --- Client Event Helpers ---
538
+
539
+
540
+ def is_client_event(obj: Any) -> bool:
541
+ """
542
+ Checks if an object is a ClientEvent tuple (Task, UpdateEvent).
543
+
544
+ A ClientEvent is a tuple with 2 elements where the first element is a Task
545
+ and the second is either a TaskStatusUpdateEvent, TaskArtifactUpdateEvent, or None.
546
+
547
+ Args:
548
+ obj: The object to check.
549
+
550
+ Returns:
551
+ True if the object is a ClientEvent tuple, False otherwise.
552
+ """
553
+ if not isinstance(obj, tuple) or len(obj) != 2:
554
+ return False
555
+
556
+ task, update_event = obj
557
+
558
+ # First element must be a Task
559
+ if not isinstance(task, Task):
560
+ return False
561
+
562
+ # Second element must be an update event or None
563
+ if update_event is not None and not isinstance(
564
+ update_event, (TaskStatusUpdateEvent, TaskArtifactUpdateEvent)
565
+ ):
566
+ return False
567
+
568
+ return True
569
+
570
+
571
+ def is_message_object(obj: Any) -> bool:
572
+ """
573
+ Checks if an object is a Message.
574
+
575
+ Args:
576
+ obj: The object to check.
577
+
578
+ Returns:
579
+ True if the object is a Message, False otherwise.
580
+ """
581
+ return isinstance(obj, Message)
582
+
583
+
584
+ def unpack_client_event(
585
+ event: tuple,
586
+ ) -> Tuple[Task, Optional[Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent]]]:
587
+ """
588
+ Safely unpacks a ClientEvent tuple into its components.
589
+
590
+ Args:
591
+ event: A ClientEvent tuple (Task, UpdateEvent).
592
+
593
+ Returns:
594
+ A tuple of (Task, Optional[UpdateEvent]) where UpdateEvent can be
595
+ TaskStatusUpdateEvent, TaskArtifactUpdateEvent, or None.
596
+
597
+ Raises:
598
+ ValueError: If the event is not a valid ClientEvent tuple.
599
+ """
600
+ if not is_client_event(event):
601
+ raise ValueError(
602
+ f"Expected a ClientEvent tuple, got {type(event).__name__}"
603
+ )
604
+
605
+ task, update_event = event
606
+ return task, update_event
@@ -3,13 +3,13 @@ Helpers for translating between A2A protocol objects and other domains,
3
3
  such as the Google ADK.
4
4
  """
5
5
 
6
+ import logging
6
7
  from typing import Any, Dict, List, Optional, Tuple, Union, TYPE_CHECKING
7
8
  import json
8
9
  import base64
9
10
  import uuid
10
11
  from datetime import datetime, timezone
11
12
  from urllib.parse import urlparse, parse_qs
12
- from solace_ai_connector.common.log import log
13
13
  from google.genai import types as adk_types
14
14
  from google.adk.events import Event as ADKEvent
15
15
 
@@ -27,6 +27,8 @@ from a2a.types import (
27
27
  from .. import a2a
28
28
  from ...agent.utils.context_helpers import get_original_session_id
29
29
 
30
+ log = logging.getLogger(__name__)
31
+
30
32
  if TYPE_CHECKING:
31
33
  from google.adk.artifacts import BaseArtifactService
32
34
  from ...agent.sac.component import SamAgentComponent
@@ -4,26 +4,37 @@ Consolidated from src/tools/common/agent_registry.py and src/tools/a2a_cli_clien
4
4
  """
5
5
 
6
6
  import threading
7
- from typing import Dict, List, Optional
7
+ import time
8
+ from typing import Dict, List, Optional, Tuple
9
+ import logging
8
10
 
9
11
  from a2a.types import AgentCard
10
12
 
13
+ log = logging.getLogger(__name__)
11
14
 
12
15
  class AgentRegistry:
13
- """Stores and manages discovered AgentCards."""
16
+ """Stores and manages discovered AgentCards with health tracking."""
14
17
 
15
18
  def __init__(self):
16
19
  self._agents: Dict[str, AgentCard] = {}
20
+ self._last_seen: Dict[str, float] = {} # Timestamp of last agent card received
17
21
  self._lock = threading.Lock()
18
22
 
19
23
  def add_or_update_agent(self, agent_card: AgentCard):
20
24
  """Adds a new agent or updates an existing one."""
25
+
21
26
  if not agent_card or not agent_card.name:
22
- return
27
+ log.warning("Attempted to register agent with invalid agent card or missing name")
28
+ return False
23
29
 
24
30
  with self._lock:
25
31
  is_new = agent_card.name not in self._agents
32
+ current_time = time.time()
33
+
34
+ # Store the agent information
26
35
  self._agents[agent_card.name] = agent_card
36
+ self._last_seen[agent_card.name] = current_time
37
+
27
38
  return is_new
28
39
 
29
40
  def get_agent(self, agent_name: str) -> Optional[AgentCard]:
@@ -35,8 +46,77 @@ class AgentRegistry:
35
46
  """Returns a sorted list of discovered agent names."""
36
47
  with self._lock:
37
48
  return sorted(list(self._agents.keys()))
49
+
50
+ def get_last_seen(self, agent_name: str) -> Optional[float]:
51
+ """Returns the timestamp when the agent was last seen."""
52
+ with self._lock:
53
+ return self._last_seen.get(agent_name)
54
+
55
+ def check_ttl_expired(self, agent_name: str, ttl_seconds: int) -> Tuple[bool, int]:
56
+ """
57
+ Checks if an agent's TTL has expired.
58
+
59
+ Args:
60
+ agent_name: The name of the agent to check
61
+ ttl_seconds: The TTL in seconds
62
+
63
+ Returns:
64
+ A tuple of (is_expired, seconds_since_last_seen)
65
+ """
66
+
67
+ with self._lock:
68
+ if agent_name not in self._last_seen:
69
+ log.debug("Attempted to check TTL for non-existent agent '%s'", agent_name)
70
+ return False, 0
71
+
72
+ last_seen_time = self._last_seen.get(agent_name)
73
+ current_time = time.time()
74
+ time_since_last_seen = int(current_time - last_seen_time) if last_seen_time else 0
75
+
76
+ is_expired = time_since_last_seen > ttl_seconds
77
+
78
+ if is_expired:
79
+ log.warning(
80
+ "AGENT HEALTH CRITICAL: Agent '%s' TTL expired. "
81
+ "Last seen: %s seconds ago, TTL: %d seconds",
82
+ agent_name,
83
+ time_since_last_seen,
84
+ ttl_seconds
85
+ )
86
+
87
+ return is_expired, time_since_last_seen
88
+
89
+ def remove_agent(self, agent_name: str) -> bool:
90
+ """Removes an agent from the registry."""
91
+
92
+ with self._lock:
93
+ if agent_name in self._agents:
94
+ # Get agent details before removal for logging
95
+ last_seen_time = self._last_seen.get(agent_name)
96
+ current_time = time.time()
97
+ time_since_last_seen = int(current_time - last_seen_time) if last_seen_time else "unknown"
98
+
99
+ # Log detailed information about the agent being removed
100
+ log.warning(
101
+ "AGENT DE-REGISTRATION: Removing agent '%s' from registry. "
102
+ "Last seen: %s seconds ago",
103
+ agent_name,
104
+ time_since_last_seen
105
+ )
106
+
107
+ # Remove the agent from all tracking dictionaries
108
+ del self._agents[agent_name]
109
+ if agent_name in self._last_seen:
110
+ del self._last_seen[agent_name]
111
+
112
+ log.info("Agent '%s' successfully removed from registry", agent_name)
113
+ return True
114
+ else:
115
+ log.debug("Attempted to remove non-existent agent '%s' from registry", agent_name)
116
+ return False
38
117
 
39
118
  def clear(self):
40
119
  """Clears all registered agents."""
41
120
  with self._lock:
42
121
  self._agents.clear()
122
+ self._last_seen.clear()
@@ -1,4 +1,6 @@
1
1
 
2
2
  DEFAULT_COMMUNICATION_TIMEOUT = 600 # 10 minutes
3
+ HEALTH_CHECK_TTL_SECONDS = 60 # 60 seconds - time after which a health check is considered stale
4
+ HEALTH_CHECK_INTERVAL_SECONDS = 10 # 10 seconds - interval between health checks
3
5
  TEXT_ARTIFACT_CONTEXT_MAX_LENGTH_CAPACITY = 200000 # maximum number of characters that can be loaded from a text artifact
4
- TEXT_ARTIFACT_CONTEXT_DEFAULT_LENGTH = 100000 # default number of characters to load from a text artifact
6
+ TEXT_ARTIFACT_CONTEXT_DEFAULT_LENGTH = 100000 # default number of characters to load from a text artifact
@@ -6,8 +6,10 @@ and determining feature availability. The default implementation provides passth
6
6
  behavior that allows all operations.
7
7
  """
8
8
 
9
+ import logging
9
10
  from typing import Any, Dict, List
10
- from solace_ai_connector.common.log import log
11
+
12
+ log = logging.getLogger(__name__)
11
13
 
12
14
  LOG_IDENTIFIER = "[ConfigResolver]"
13
15
 
@@ -6,8 +6,10 @@ to be bound at runtime, enabling pluggable behavior for configuration resolution
6
6
  and other middleware functions.
7
7
  """
8
8
 
9
+ import logging
9
10
  from typing import Optional, Type, Dict, Any, List
10
- from solace_ai_connector.common.log import log
11
+
12
+ log = logging.getLogger(__name__)
11
13
 
12
14
  LOG_IDENTIFIER = "[MiddlewareRegistry]"
13
15
 
@@ -2,17 +2,18 @@
2
2
  Base Component class for SAM implementations in the Solace AI Connector.
3
3
  """
4
4
 
5
+ import logging
5
6
  import abc
6
7
  import asyncio
7
8
  import threading
8
9
  from typing import Any
9
10
 
10
- from solace_ai_connector.common.log import log
11
11
  from solace_ai_connector.components.component_base import ComponentBase
12
12
 
13
13
  from ..exceptions import MessageSizeExceededError
14
14
  from ..utils.message_utils import validate_message_size
15
15
 
16
+ log = logging.getLogger(__name__)
16
17
 
17
18
  class SamComponentBase(ComponentBase, abc.ABC):
18
19
  """
@@ -5,14 +5,15 @@ Provides event publishing and subscription for system events like session lifecy
5
5
  agent health, configuration changes, etc.
6
6
  """
7
7
 
8
+ import logging
8
9
  import uuid
9
10
  from datetime import datetime, timezone
10
11
  from dataclasses import dataclass, asdict
11
12
  from typing import Any, Dict, Optional, Callable, List
12
13
 
13
- from solace_ai_connector.common.log import log
14
14
  from ..a2a.protocol import get_sam_events_topic
15
15
 
16
+ log = logging.getLogger(__name__)
16
17
 
17
18
  @dataclass
18
19
  class SamEvent:
@@ -204,4 +205,4 @@ class SamEventService:
204
205
  raise ValueError(f"Invalid event_type format: {event_type}. Expected 'category.action'")
205
206
 
206
207
  category, action = parts
207
- return get_sam_events_topic(namespace, category, action)
208
+ return get_sam_events_topic(namespace, category, action)
@@ -2,15 +2,17 @@
2
2
  Defines the abstract base class and factory for creating Employee Service providers.
3
3
  """
4
4
 
5
+ import logging
5
6
  import importlib
6
7
  from abc import ABC, abstractmethod
7
8
  from typing import Any, Dict, List, Optional
8
9
  import importlib.metadata as metadata
9
10
 
10
- from solace_ai_connector.common.log import log
11
+
11
12
  from ..utils.in_memory_cache import InMemoryCache
12
13
  import pandas as pd
13
14
 
15
+ log = logging.getLogger(__name__)
14
16
 
15
17
  class BaseEmployeeService(ABC):
16
18
  """
@@ -2,15 +2,16 @@
2
2
  Defines the abstract base class and factory for creating Identity Service providers.
3
3
  """
4
4
 
5
+ import logging
5
6
  import importlib
6
7
  from abc import ABC, abstractmethod
7
8
  from typing import Any, Dict, List, Optional
8
9
  import importlib.metadata as metadata
9
10
 
10
- from solace_ai_connector.common.log import log
11
11
  from ..utils.in_memory_cache import InMemoryCache
12
12
  from ..sac.sam_component_base import SamComponentBase
13
13
 
14
+ log = logging.getLogger(__name__)
14
15
 
15
16
  class BaseIdentityService(ABC):
16
17
  """Abstract base class for all Identity Service providers."""
@@ -3,14 +3,15 @@ A simple, file-based implementation of the BaseIdentityService.
3
3
  Useful for development, testing, or small-scale deployments.
4
4
  """
5
5
 
6
+ import logging
6
7
  import json
7
8
  from typing import Any, Dict, List, Optional
8
9
 
9
- from solace_ai_connector.common.log import log
10
10
  from ..identity_service import BaseIdentityService
11
11
  from ...sac.sam_component_base import SamComponentBase
12
12
 
13
13
 
14
+ log = logging.getLogger(__name__)
14
15
 
15
16
  class LocalFileIdentityService(BaseIdentityService):
16
17
  """
@@ -2,9 +2,11 @@
2
2
  Common utility functions for working with ADK artifacts.
3
3
  """
4
4
 
5
+ import logging
5
6
  from typing import Optional
6
7
  from google.adk.artifacts import BaseArtifactService
7
- from solace_ai_connector.common.log import log
8
+
9
+ log = logging.getLogger(__name__)
8
10
 
9
11
 
10
12
  async def get_latest_artifact_version(
@@ -8,8 +8,10 @@ The issue occurs because the default event loop policy on macOS doesn't implemen
8
8
  get_child_watcher(), which is required for subprocess creation.
9
9
  """
10
10
 
11
+ import logging
11
12
  import sys
12
- from solace_ai_connector.common.log import log
13
+
14
+ log = logging.getLogger(__name__)
13
15
 
14
16
 
15
17
  def apply_macos_asyncio_fix() -> bool:
@@ -2,16 +2,18 @@
2
2
  Contains the Central Data Converter and Serializer functions.
3
3
  """
4
4
 
5
+ import logging
5
6
  import json
6
7
  import csv
7
8
  import io
8
9
  import base64
9
10
  from typing import Any, Tuple, Optional, List, Dict
10
- from solace_ai_connector.common.log import log
11
11
 
12
12
  from .types import DataFormat
13
13
  from ..mime_helpers import is_text_based_mime_type
14
14
 
15
+ log = logging.getLogger(__name__)
16
+
15
17
  try:
16
18
  import yaml
17
19