solace-agent-mesh 0.2.3__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 -140
  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.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
  344. solace_agent_mesh/agents/base_agent_component.py +0 -226
  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-DMmCawWe.js +0 -42
  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-dd988f05.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.3.dist-info/METADATA +0 -172
  508. solace_agent_mesh-0.2.3.dist-info/RECORD +0 -193
  509. solace_agent_mesh-0.2.3.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.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,568 @@
1
+ """
2
+ Refactored message categorization module with improved structure and readability.
3
+ This module categorizes evaluation messages into appropriate run directories.
4
+ """
5
+
6
+ import json
7
+ import os
8
+ from dataclasses import dataclass
9
+ from typing import Dict, List, Optional, Tuple, Any
10
+ import logging
11
+
12
+ logging.basicConfig(level=logging.INFO)
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class CategorizationError(Exception):
17
+ """Base exception for categorization errors."""
18
+
19
+ pass
20
+
21
+
22
+ class MissingFileError(CategorizationError):
23
+ """Raised when required files are missing."""
24
+
25
+ pass
26
+
27
+
28
+ class InvalidDataError(CategorizationError):
29
+ """Raised when data format is invalid."""
30
+
31
+ pass
32
+
33
+
34
+ @dataclass
35
+ class TaskMessage:
36
+ """Represents a categorized task message with extracted metadata."""
37
+
38
+ topic: str
39
+ payload: Dict[str, Any]
40
+ task_id: Optional[str] = None
41
+ parent_task_id: Optional[str] = None
42
+
43
+ @classmethod
44
+ def from_dict(cls, message_dict: Dict[str, Any]) -> "TaskMessage":
45
+ """Create TaskMessage from dictionary representation."""
46
+ return cls(
47
+ topic=message_dict.get("topic", ""), payload=message_dict.get("payload", {})
48
+ )
49
+
50
+ def to_dict(self) -> Dict[str, Any]:
51
+ """Convert TaskMessage back to dictionary format."""
52
+ return {"topic": self.topic, "payload": self.payload}
53
+
54
+
55
+ @dataclass
56
+ class TaskMapping:
57
+ """Represents task ID to directory mappings with validation."""
58
+
59
+ mappings: Dict[str, str]
60
+
61
+ def get_run_directory(self, task_id: str) -> Optional[str]:
62
+ """Get the run directory for a given task ID."""
63
+ return self.mappings.get(task_id)
64
+
65
+ def add_mapping(self, task_id: str, run_directory: str) -> None:
66
+ """Add a new task ID to directory mapping."""
67
+ self.mappings[task_id] = run_directory
68
+
69
+ def has_task(self, task_id: str) -> bool:
70
+ """Check if a task ID exists in the mappings."""
71
+ return task_id in self.mappings
72
+
73
+
74
+ @dataclass
75
+ class CategorizationResult:
76
+ """Results of the message categorization process."""
77
+
78
+ total_messages: int
79
+ categorized_messages: int
80
+ uncategorized_messages: int
81
+ updated_mappings_count: int
82
+
83
+ @property
84
+ def success_rate(self) -> float:
85
+ """Calculate the success rate of categorization."""
86
+ if self.total_messages == 0:
87
+ return 0.0
88
+ return self.categorized_messages / self.total_messages
89
+
90
+ def __str__(self) -> str:
91
+ """Human-readable summary of categorization results."""
92
+ return (
93
+ f"Categorization Results: {self.categorized_messages}/{self.total_messages} "
94
+ f"messages categorized ({self.success_rate:.1%} success rate), "
95
+ f"{self.updated_mappings_count} new mappings added"
96
+ )
97
+
98
+
99
+ class TaskIdExtractor:
100
+ """Handles extraction of task IDs from messages using multiple strategies."""
101
+
102
+ def extract_task_id(
103
+ self, message: TaskMessage
104
+ ) -> Tuple[Optional[str], Optional[str]]:
105
+ """
106
+ Extract task ID using multiple strategies in order of preference.
107
+ Returns (parent_task_id, sub_task_id) tuple.
108
+ """
109
+ strategies = [
110
+ self._extract_from_payload_metadata,
111
+ self._extract_from_payload_params,
112
+ self._extract_from_payload_result,
113
+ self._extract_from_topic,
114
+ ]
115
+
116
+ for strategy in strategies:
117
+ try:
118
+ task_id, sub_task_id = strategy(message)
119
+ if task_id:
120
+ return task_id, sub_task_id
121
+ except Exception as e:
122
+ logger.debug(f"Task ID extraction strategy failed: {e}")
123
+ continue
124
+
125
+ return None, None
126
+
127
+ def _extract_from_payload_metadata(
128
+ self, message: TaskMessage
129
+ ) -> Tuple[Optional[str], Optional[str]]:
130
+ """Strategy 1: Extract from payload metadata (parent-child relationship)."""
131
+ payload = message.payload
132
+
133
+ if not isinstance(payload, dict):
134
+ return None, None
135
+
136
+ params = payload.get("params", {})
137
+ if not isinstance(params, dict):
138
+ return None, None
139
+
140
+ metadata = params.get("metadata", {})
141
+ if not isinstance(metadata, dict):
142
+ return None, None
143
+
144
+ parent_task_id = metadata.get("parentTaskId")
145
+ sub_task_id = params.get("id")
146
+
147
+ if parent_task_id and sub_task_id:
148
+ return parent_task_id, sub_task_id
149
+
150
+ return None, None
151
+
152
+ def _extract_from_payload_params(
153
+ self, message: TaskMessage
154
+ ) -> Tuple[Optional[str], Optional[str]]:
155
+ """Strategy 2: Extract from payload params (direct task ID)."""
156
+ payload = message.payload
157
+
158
+ if not isinstance(payload, dict):
159
+ return None, None
160
+
161
+ params = payload.get("params", {})
162
+ if not isinstance(params, dict):
163
+ return None, None
164
+
165
+ task_id = params.get("id")
166
+ if task_id and isinstance(task_id, str) and task_id.startswith("task-"):
167
+ return task_id, None
168
+
169
+ return None, None
170
+
171
+ def _extract_from_payload_result(
172
+ self, message: TaskMessage
173
+ ) -> Tuple[Optional[str], Optional[str]]:
174
+ """Strategy 3: Extract from payload result."""
175
+ payload = message.payload
176
+
177
+ if not isinstance(payload, dict):
178
+ return None, None
179
+
180
+ result = payload.get("result", {})
181
+ if not isinstance(result, dict):
182
+ return None, None
183
+
184
+ task_id = result.get("id")
185
+ if task_id and isinstance(task_id, str) and task_id.startswith("task-"):
186
+ return task_id, None
187
+
188
+ return None, None
189
+
190
+ def _extract_from_topic(
191
+ self, message: TaskMessage
192
+ ) -> Tuple[Optional[str], Optional[str]]:
193
+ """Strategy 4: Extract from topic path (fallback method)."""
194
+ topic = message.topic
195
+ if not topic:
196
+ return None, None
197
+
198
+ # Extract the last part of the topic path
199
+ task_id = topic.split("/")[-1]
200
+ if task_id.startswith("task-"):
201
+ return task_id, None
202
+
203
+ return None, None
204
+
205
+
206
+ class FileOperations:
207
+ """Handles file I/O operations with comprehensive error handling."""
208
+
209
+ @staticmethod
210
+ def load_json(filepath: str) -> Any:
211
+ """Load JSON file with error handling and validation."""
212
+ try:
213
+ if not os.path.exists(filepath):
214
+ raise MissingFileError(f"File not found: {filepath}")
215
+
216
+ with open(filepath, "r") as f:
217
+ data = json.load(f)
218
+
219
+ logger.debug(f"Successfully loaded JSON from {filepath}")
220
+ return data
221
+
222
+ except json.JSONDecodeError as e:
223
+ raise InvalidDataError(f"Invalid JSON in file {filepath}: {e}")
224
+ except Exception as e:
225
+ raise CategorizationError(f"Error loading file {filepath}: {e}")
226
+
227
+ @staticmethod
228
+ def save_json(data: Any, filepath: str) -> None:
229
+ """Save data as JSON with error handling."""
230
+ try:
231
+ # Ensure directory exists
232
+ os.makedirs(os.path.dirname(filepath), exist_ok=True)
233
+
234
+ with open(filepath, "w") as f:
235
+ json.dump(data, f, indent=4)
236
+
237
+ logger.debug(f"Successfully saved JSON to {filepath}")
238
+
239
+ except Exception as e:
240
+ raise CategorizationError(f"Error saving file {filepath}: {e}")
241
+
242
+ @staticmethod
243
+ def file_exists(filepath: str) -> bool:
244
+ """Check if file exists."""
245
+ return os.path.exists(filepath)
246
+
247
+ @staticmethod
248
+ def is_directory(path: str) -> bool:
249
+ """Check if path is a directory."""
250
+ return os.path.isdir(path)
251
+
252
+
253
+ class MessageCategorizer:
254
+ """Handles categorization of messages into run directories."""
255
+
256
+ def __init__(self, task_extractor: TaskIdExtractor, file_ops: FileOperations):
257
+ self.task_extractor = task_extractor
258
+ self.file_ops = file_ops
259
+
260
+ def categorize_messages_for_model(
261
+ self, model_path: str, model_name: str
262
+ ) -> CategorizationResult:
263
+ """Categorize messages for a single model with comprehensive error handling."""
264
+ logger.info(f"Starting message categorization for model: {model_name}")
265
+
266
+ try:
267
+ # Validate required files exist
268
+ self._validate_required_files(model_path, model_name)
269
+
270
+ # Load task mappings and messages
271
+ task_mappings = self._load_task_mappings(model_path)
272
+ messages = self._load_messages(model_path)
273
+
274
+ logger.info(
275
+ f"Loaded {len(messages)} messages and {len(task_mappings.mappings)} task mappings"
276
+ )
277
+
278
+ # Extract task IDs from messages
279
+ self._extract_task_ids_from_messages(messages)
280
+
281
+ # Update task mappings with sub-task relationships
282
+ updated_mappings_count = self._update_task_mappings(messages, task_mappings)
283
+
284
+ # Categorize messages by run directory
285
+ categorized_messages = self._categorize_by_task_id(messages, task_mappings)
286
+
287
+ # Save categorized messages
288
+ categorized_count = self._save_categorized_messages(categorized_messages)
289
+
290
+ # Save updated task mappings
291
+ self._save_task_mappings(task_mappings, model_path)
292
+
293
+ # Calculate results
294
+ uncategorized_count = len(messages) - categorized_count
295
+
296
+ result = CategorizationResult(
297
+ total_messages=len(messages),
298
+ categorized_messages=categorized_count,
299
+ uncategorized_messages=uncategorized_count,
300
+ updated_mappings_count=updated_mappings_count,
301
+ )
302
+
303
+ logger.info(f"Categorization completed for {model_name}: {result}")
304
+ return result
305
+
306
+ except Exception as e:
307
+ logger.error(f"Error categorizing messages for model {model_name}: {e}")
308
+ raise
309
+
310
+ def _validate_required_files(self, model_path: str, model_name: str) -> None:
311
+ """Validate that required files exist for processing."""
312
+ mappings_file = os.path.join(model_path, "task_mappings.json")
313
+ messages_file = os.path.join(model_path, "full_messages.json")
314
+
315
+ if not self.file_ops.file_exists(mappings_file):
316
+ raise MissingFileError(
317
+ f"Missing task mappings file for model {model_name}: {mappings_file}"
318
+ )
319
+
320
+ if not self.file_ops.file_exists(messages_file):
321
+ raise MissingFileError(
322
+ f"Missing messages file for model {model_name}: {messages_file}"
323
+ )
324
+
325
+ def _load_task_mappings(self, model_path: str) -> TaskMapping:
326
+ """Load task mappings from file with validation."""
327
+ mappings_file = os.path.join(model_path, "task_mappings.json")
328
+ mappings_data = self.file_ops.load_json(mappings_file)
329
+
330
+ if not isinstance(mappings_data, dict):
331
+ raise InvalidDataError(
332
+ f"Task mappings must be a dictionary, got {type(mappings_data)}"
333
+ )
334
+
335
+ return TaskMapping(mappings=mappings_data)
336
+
337
+ def _load_messages(self, model_path: str) -> List[TaskMessage]:
338
+ """Load and parse messages from file with validation."""
339
+ messages_file = os.path.join(model_path, "full_messages.json")
340
+ messages_data = self.file_ops.load_json(messages_file)
341
+
342
+ if not isinstance(messages_data, list):
343
+ raise InvalidDataError(
344
+ f"Messages must be a list, got {type(messages_data)}"
345
+ )
346
+
347
+ messages = []
348
+ for i, message_dict in enumerate(messages_data):
349
+ try:
350
+ message = TaskMessage.from_dict(message_dict)
351
+ messages.append(message)
352
+ except Exception as e:
353
+ logger.warning(f"Skipping invalid message at index {i}: {e}")
354
+ continue
355
+
356
+ return messages
357
+
358
+ def _extract_task_ids_from_messages(self, messages: List[TaskMessage]) -> None:
359
+ """Extract task IDs from all messages and update the message objects."""
360
+ for message in messages:
361
+ task_id, sub_task_id = self.task_extractor.extract_task_id(message)
362
+ message.task_id = task_id or sub_task_id
363
+ message.parent_task_id = task_id if sub_task_id else None
364
+
365
+ def _update_task_mappings(
366
+ self, messages: List[TaskMessage], task_mappings: TaskMapping
367
+ ) -> int:
368
+ """Update task mappings with sub-task relationships."""
369
+ updated_count = 0
370
+
371
+ for message in messages:
372
+ if (
373
+ message.parent_task_id
374
+ and message.task_id
375
+ and task_mappings.has_task(message.parent_task_id)
376
+ and not task_mappings.has_task(message.task_id)
377
+ ):
378
+
379
+ # Map sub-task to same directory as parent task
380
+ parent_directory = task_mappings.get_run_directory(
381
+ message.parent_task_id
382
+ )
383
+ task_mappings.add_mapping(message.task_id, parent_directory)
384
+ updated_count += 1
385
+
386
+ logger.debug(
387
+ f"Mapped sub-task {message.task_id} to parent directory: {parent_directory}"
388
+ )
389
+
390
+ return updated_count
391
+
392
+ def _categorize_by_task_id(
393
+ self, messages: List[TaskMessage], task_mappings: TaskMapping
394
+ ) -> Dict[str, List[TaskMessage]]:
395
+ """Group messages by their target run directory."""
396
+ categorized = {}
397
+
398
+ for message in messages:
399
+ if not message.task_id:
400
+ continue
401
+
402
+ run_directory = task_mappings.get_run_directory(message.task_id)
403
+ if not run_directory:
404
+ continue
405
+
406
+ if run_directory not in categorized:
407
+ categorized[run_directory] = []
408
+
409
+ categorized[run_directory].append(message)
410
+
411
+ return categorized
412
+
413
+ def _save_categorized_messages(
414
+ self, categorized_messages: Dict[str, List[TaskMessage]]
415
+ ) -> int:
416
+ """Save categorized messages to their respective directories."""
417
+ total_saved = 0
418
+
419
+ for run_directory, messages in categorized_messages.items():
420
+ try:
421
+ output_file = os.path.join(run_directory, "messages.json")
422
+
423
+ # Convert TaskMessage objects back to dictionaries
424
+ message_dicts = [msg.to_dict() for msg in messages]
425
+
426
+ self.file_ops.save_json(message_dicts, output_file)
427
+ total_saved += len(messages)
428
+
429
+ logger.info(f"Saved {len(messages)} messages to {output_file}")
430
+
431
+ except Exception as e:
432
+ logger.error(f"Error saving messages to {run_directory}: {e}")
433
+ continue
434
+
435
+ return total_saved
436
+
437
+ def _save_task_mappings(self, task_mappings: TaskMapping, model_path: str) -> None:
438
+ """Save updated task mappings back to file."""
439
+ mappings_file = os.path.join(model_path, "task_mappings.json")
440
+ self.file_ops.save_json(task_mappings.mappings, mappings_file)
441
+ logger.info(f"Updated task mappings saved to {mappings_file}")
442
+
443
+
444
+ class MessageOrganizer:
445
+ """Main organizer for the message categorization process."""
446
+
447
+ def __init__(self):
448
+ self.task_extractor = TaskIdExtractor()
449
+ self.file_ops = FileOperations()
450
+ self.categorizer = MessageCategorizer(self.task_extractor, self.file_ops)
451
+
452
+ def categorize_all_messages(
453
+ self, base_results_path: str
454
+ ) -> Dict[str, CategorizationResult]:
455
+ """
456
+ Main entry point for categorizing all messages across all models.
457
+ Returns a dictionary mapping model names to their categorization results.
458
+ """
459
+ logger.info(
460
+ f"Starting message categorization for all models in: {base_results_path}"
461
+ )
462
+
463
+ if not self.file_ops.is_directory(base_results_path):
464
+ raise MissingFileError(f"Results directory not found: {base_results_path}")
465
+
466
+ results = {}
467
+ processed_models = 0
468
+
469
+ try:
470
+ for model_name in os.listdir(base_results_path):
471
+ model_path = os.path.join(base_results_path, model_name)
472
+
473
+ if not self.file_ops.is_directory(model_path):
474
+ logger.debug(f"Skipping non-directory: {model_name}")
475
+ continue
476
+
477
+ try:
478
+ result = self._process_model_directory(model_path, model_name)
479
+ results[model_name] = result
480
+ processed_models += 1
481
+
482
+ except (MissingFileError, InvalidDataError) as e:
483
+ logger.warning(f"Skipping model {model_name}: {e}")
484
+ continue
485
+ except Exception as e:
486
+ logger.error(f"Error processing model {model_name}: {e}")
487
+ continue
488
+
489
+ logger.info(
490
+ f"Message categorization completed. Processed {processed_models} models."
491
+ )
492
+ self._log_summary_statistics(results)
493
+
494
+ return results
495
+
496
+ except Exception as e:
497
+ logger.error(f"Error during message categorization: {e}")
498
+ raise
499
+
500
+ def _process_model_directory(
501
+ self, model_path: str, model_name: str
502
+ ) -> CategorizationResult:
503
+ """Process a single model directory and return categorization results."""
504
+ logger.info(f"Processing model directory: {model_name}")
505
+
506
+ try:
507
+ result = self.categorizer.categorize_messages_for_model(
508
+ model_path, model_name
509
+ )
510
+ logger.info(f"Successfully processed model {model_name}: {result}")
511
+ return result
512
+
513
+ except Exception as e:
514
+ logger.error(f"Failed to process model {model_name}: {e}")
515
+ raise
516
+
517
+ def _log_summary_statistics(self, results: Dict[str, CategorizationResult]) -> None:
518
+ """Log summary statistics for all processed models."""
519
+ if not results:
520
+ logger.warning("No models were successfully processed")
521
+ return
522
+
523
+ total_messages = sum(result.total_messages for result in results.values())
524
+ total_categorized = sum(
525
+ result.categorized_messages for result in results.values()
526
+ )
527
+ total_mappings_added = sum(
528
+ result.updated_mappings_count for result in results.values()
529
+ )
530
+
531
+ overall_success_rate = (
532
+ total_categorized / total_messages if total_messages > 0 else 0.0
533
+ )
534
+
535
+ logger.info("=== CATEGORIZATION SUMMARY ===")
536
+ logger.info(f"Models processed: {len(results)}")
537
+ logger.info(f"Total messages: {total_messages}")
538
+ logger.info(f"Messages categorized: {total_categorized}")
539
+ logger.info(f"Overall success rate: {overall_success_rate:.1%}")
540
+ logger.info(f"New task mappings added: {total_mappings_added}")
541
+ logger.info("==============================")
542
+
543
+
544
+ def main():
545
+ """Main entry point when running the script directly."""
546
+ try:
547
+ # Import here to avoid circular imports
548
+ from evaluation.config_loader import ConfigLoader
549
+
550
+ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
551
+ config_loader = ConfigLoader()
552
+ config = config_loader.load_config()
553
+ results_dir_name = config["results_dir_name"]
554
+ base_results_path = os.path.join(SCRIPT_DIR, "results", results_dir_name)
555
+
556
+ orchestrator = MessageOrganizer()
557
+ results = orchestrator.categorize_all_messages(base_results_path)
558
+
559
+ print("Message categorization completed successfully!")
560
+ print(f"Processed {len(results)} models")
561
+
562
+ except Exception as e:
563
+ logger.error(f"Script execution failed: {e}")
564
+ raise
565
+
566
+
567
+ if __name__ == "__main__":
568
+ main()
@@ -0,0 +1,35 @@
1
+ <div class="section">
2
+ <h2>📊 Benchmark Run Information</h2>
3
+ <div class="info-grid">
4
+ <div class="info-item">
5
+ <strong>Time of Execution</strong>
6
+ {{TIMESTAMP}}
7
+ </div>
8
+ <div class="info-item">
9
+ <strong>Number of Runs</strong>
10
+ {{RUNS}}
11
+ </div>
12
+ <div class="info-item">
13
+ <strong>Total Test Cases</strong>
14
+ {{TOTAL_TESTS}}
15
+ </div>
16
+ <div class="info-item">
17
+ <strong>Evaluation Duration</strong>
18
+ {{DURATION}}
19
+ </div>
20
+ </div>
21
+
22
+ <div class="info-item">
23
+ <strong>Tested Models ({{TOTAL_MODELS}})</strong>
24
+ <div class="model-list">
25
+ {{MODEL_TAGS}}
26
+ </div>
27
+ </div>
28
+
29
+ <div class="test-files">
30
+ <strong>Test Cases Executed:</strong>
31
+ <ul>
32
+ {{TEST_CASES_LIST}}
33
+ </ul>
34
+ </div>
35
+ </div>