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
@@ -5,27 +5,23 @@ This module extracts and processes evaluation data for HTML report generation.
5
5
 
6
6
  import json
7
7
  import logging
8
- from datetime import datetime
8
+ import random
9
+ from collections import Counter, defaultdict
9
10
  from dataclasses import dataclass, field
10
- from typing import Dict, List, Optional, Any, Set, Tuple
11
+ from datetime import datetime
11
12
  from pathlib import Path
12
- from collections import defaultdict, Counter
13
- import random
14
13
 
15
- # Import test case loader
16
- from .test_case_loader import load_test_case
14
+ from .shared import load_test_case
17
15
 
18
- # Set up logging
19
- logging.basicConfig(level=logging.INFO)
20
- logger = logging.getLogger(__name__)
16
+ log = logging.getLogger(__name__)
21
17
 
22
18
 
23
19
  @dataclass
24
20
  class EvaluationMetrics:
25
21
  """Core evaluation data structure."""
26
22
 
27
- models: List[str] = field(default_factory=list)
28
- total_execution_time: Optional[float] = None
23
+ models: list[str] = field(default_factory=list)
24
+ total_execution_time: float | None = None
29
25
  total_execution_time_formatted: str = "Not available"
30
26
  generation_time: str = field(
31
27
  default_factory=lambda: datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@@ -36,7 +32,7 @@ class EvaluationMetrics:
36
32
  runs: str = "Not available"
37
33
  total_tests: int = 0
38
34
  duration: str = "Not available"
39
- test_case_names: List[str] = field(default_factory=list)
35
+ test_case_names: list[str] = field(default_factory=list)
40
36
 
41
37
 
42
38
  @dataclass
@@ -48,7 +44,7 @@ class ModelPerformance:
48
44
  success_rate: float = 0.0
49
45
  test_count: int = 0
50
46
  estimated_cost: float = 0.0
51
- scores: List[float] = field(default_factory=list)
47
+ scores: list[float] = field(default_factory=list)
52
48
 
53
49
 
54
50
  @dataclass
@@ -58,7 +54,7 @@ class TestCaseResult:
58
54
  test_case_id: str
59
55
  category: str
60
56
  description: str = ""
61
- model_results: Dict[str, Any] = field(default_factory=dict)
57
+ model_results: dict[str, any] = field(default_factory=dict)
62
58
  average_score: float = 0.0
63
59
 
64
60
 
@@ -66,9 +62,9 @@ class TestCaseResult:
66
62
  class ChartConfiguration:
67
63
  """Chart and visualization data."""
68
64
 
69
- categories: List[str] = field(default_factory=list)
70
- datasets: List[Dict[str, Any]] = field(default_factory=list)
71
- category_scores: Dict[str, Dict[str, float]] = field(default_factory=dict)
65
+ categories: list[str] = field(default_factory=list)
66
+ datasets: list[dict[str, any]] = field(default_factory=list)
67
+ category_scores: dict[str, dict[str, float]] = field(default_factory=dict)
72
68
 
73
69
 
74
70
  @dataclass
@@ -76,27 +72,27 @@ class CategoryStatistics:
76
72
  """Category-based statistics."""
77
73
 
78
74
  category_name: str
79
- test_cases: List[str] = field(default_factory=list)
80
- model_scores: Dict[str, float] = field(default_factory=dict)
75
+ test_cases: list[str] = field(default_factory=list)
76
+ model_scores: dict[str, float] = field(default_factory=dict)
81
77
 
82
78
 
83
79
  class FileService:
84
80
  """Handles file I/O operations with proper error handling."""
85
81
 
86
82
  @staticmethod
87
- def load_json(filepath: Path) -> Any:
83
+ def load_json(filepath: Path) -> any:
88
84
  """Load JSON data from file."""
89
85
  try:
90
- with open(filepath, "r") as f:
86
+ with open(filepath) as f:
91
87
  return json.load(f)
92
88
  except FileNotFoundError:
93
- logger.warning(f"File not found: {filepath}")
89
+ log.warning(f"File not found: {filepath}")
94
90
  return None
95
91
  except json.JSONDecodeError as e:
96
- logger.error(f"Invalid JSON in file {filepath}: {e}")
92
+ log.error(f"Invalid JSON in file {filepath}: {e}")
97
93
  return None
98
94
  except Exception as e:
99
- logger.error(f"Error reading file {filepath}: {e}")
95
+ log.error(f"Error reading file {filepath}: {e}")
100
96
  return None
101
97
 
102
98
  @staticmethod
@@ -105,7 +101,7 @@ class FileService:
105
101
  return filepath.exists() and filepath.is_file()
106
102
 
107
103
  @staticmethod
108
- def list_directories(path: Path) -> List[str]:
104
+ def list_directories(path: Path) -> list[str]:
109
105
  """List directories in the given path."""
110
106
  try:
111
107
  return [
@@ -114,7 +110,7 @@ class FileService:
114
110
  if item.is_dir() and not item.name.startswith(".")
115
111
  ]
116
112
  except Exception as e:
117
- logger.error(f"Error listing directories in {path}: {e}")
113
+ log.error(f"Error listing directories in {path}: {e}")
118
114
  return []
119
115
 
120
116
 
@@ -124,7 +120,7 @@ class ResultsExtractionService:
124
120
  def __init__(self, file_service: FileService):
125
121
  self.file_service = file_service
126
122
 
127
- def extract_model_results(self, results_dir: Path) -> Dict[str, Any]:
123
+ def extract_model_results(self, results_dir: Path) -> dict[str, any]:
128
124
  """Extract results for all models."""
129
125
  model_results = {}
130
126
 
@@ -136,22 +132,22 @@ class ResultsExtractionService:
136
132
  results_data = self.file_service.load_json(results_file)
137
133
  if results_data:
138
134
  model_results[model_name] = results_data
139
- logger.debug(f"Loaded results for model: {model_name}")
135
+ log.debug(f"Loaded results for model: {model_name}")
140
136
 
141
- logger.info(f"Extracted results for {len(model_results)} models")
137
+ log.info(f"Extracted results for {len(model_results)} models")
142
138
  return model_results
143
139
 
144
- def extract_execution_stats(self, results_dir: Path) -> Optional[Dict[str, Any]]:
140
+ def extract_execution_stats(self, results_dir: Path) -> dict[str, any] | None:
145
141
  """Extract execution statistics."""
146
142
  stats_file = results_dir / "stats.json"
147
143
 
148
144
  if self.file_service.file_exists(stats_file):
149
145
  stats_data = self.file_service.load_json(stats_file)
150
146
  if stats_data:
151
- logger.debug("Loaded execution statistics")
147
+ log.debug("Loaded execution statistics")
152
148
  return stats_data
153
149
 
154
- logger.warning("No execution statistics found")
150
+ log.warning("No execution statistics found")
155
151
  return None
156
152
 
157
153
 
@@ -160,7 +156,7 @@ class MetricsCalculationService:
160
156
 
161
157
  @staticmethod
162
158
  def calculate_model_performance(
163
- model_name: str, results_data: Dict[str, Any]
159
+ model_name: str, results_data: dict[str, any]
164
160
  ) -> ModelPerformance:
165
161
  """Calculate performance metrics for a single model."""
166
162
  performance = ModelPerformance(model_name=model_name)
@@ -199,7 +195,7 @@ class MetricsCalculationService:
199
195
  return performance
200
196
 
201
197
  @staticmethod
202
- def format_execution_time(total_time: float) -> Tuple[str, str]:
198
+ def format_execution_time(total_time: float) -> tuple[str, str]:
203
199
  """Format execution time into readable strings."""
204
200
  minutes = int(total_time // 60)
205
201
  seconds = int(total_time % 60)
@@ -208,12 +204,12 @@ class MetricsCalculationService:
208
204
  return formatted, duration
209
205
 
210
206
  @staticmethod
211
- def calculate_run_statistics(model_results: Dict[str, Any]) -> Tuple[int, str]:
207
+ def calculate_run_statistics(model_results: dict[str, any]) -> tuple[int, str]:
212
208
  """Calculate run statistics from model results."""
213
209
  test_cases = set()
214
210
  all_run_counts = []
215
211
 
216
- for model_name, results in model_results.items():
212
+ for _model_name, results in model_results.items():
217
213
  if "test_cases" in results:
218
214
  for test_case in results["test_cases"]:
219
215
  test_case_id = test_case.get("test_case_id")
@@ -248,7 +244,7 @@ class ChartDataService:
248
244
  self.file_service = file_service
249
245
 
250
246
  def generate_chart_configuration(
251
- self, model_results: Dict[str, Any], test_cases: Dict[str, Dict[str, Any]]
247
+ self, model_results: dict[str, any], test_cases: dict[str, dict[str, any]]
252
248
  ) -> ChartConfiguration:
253
249
  """Generate chart configuration data."""
254
250
  chart_config = ChartConfiguration()
@@ -263,7 +259,7 @@ class ChartDataService:
263
259
 
264
260
  # Prepare chart data
265
261
  if category_scores:
266
- chart_config.categories = sorted(list(category_scores.keys()))
262
+ chart_config.categories = sorted(category_scores.keys())
267
263
  chart_config.category_scores = category_scores
268
264
  chart_config.datasets = self._generate_chart_datasets(
269
265
  category_scores, model_results
@@ -272,12 +268,12 @@ class ChartDataService:
272
268
  return chart_config
273
269
 
274
270
  def _extract_category_mapping(
275
- self, model_results: Dict[str, Any]
276
- ) -> Dict[str, Set[str]]:
271
+ self, model_results: dict[str, any]
272
+ ) -> dict[str, set[str]]:
277
273
  """Extract category to test case mapping."""
278
274
  category_test_mapping = defaultdict(set)
279
275
 
280
- for model_name, results in model_results.items():
276
+ for _model_name, results in model_results.items():
281
277
  if "test_cases" in results:
282
278
  for test_case in results["test_cases"]:
283
279
  test_id = test_case.get("test_case_id")
@@ -287,22 +283,22 @@ class ChartDataService:
287
283
 
288
284
  # Convert sets to sorted lists
289
285
  return {
290
- cat: sorted(list(tests)) for cat, tests in category_test_mapping.items()
286
+ cat: sorted(tests) for cat, tests in category_test_mapping.items()
291
287
  }
292
288
 
293
289
  def _calculate_category_scores(
294
290
  self,
295
- category_test_mapping: Dict[str, List[str]],
296
- test_cases: Dict[str, Dict[str, Any]],
297
- model_results: Dict[str, Any],
298
- ) -> Dict[str, Dict[str, float]]:
291
+ category_test_mapping: dict[str, list[str]],
292
+ test_cases: dict[str, dict[str, any]],
293
+ model_results: dict[str, any],
294
+ ) -> dict[str, dict[str, float]]:
299
295
  """Calculate average scores by category for each model."""
300
296
  category_scores = {}
301
297
 
302
298
  for category, test_names in category_test_mapping.items():
303
299
  category_scores[category] = {}
304
300
 
305
- for model_name in model_results.keys():
301
+ for model_name in model_results:
306
302
  scores = []
307
303
 
308
304
  # Collect scores for this category and model
@@ -334,9 +330,9 @@ class ChartDataService:
334
330
 
335
331
  def _generate_chart_datasets(
336
332
  self,
337
- category_scores: Dict[str, Dict[str, float]],
338
- model_results: Dict[str, Any],
339
- ) -> List[Dict[str, Any]]:
333
+ category_scores: dict[str, dict[str, float]],
334
+ model_results: dict[str, any],
335
+ ) -> list[dict[str, any]]:
340
336
  """Generate chart datasets for visualization."""
341
337
  # Enhanced model colors with better contrast
342
338
  model_colors = {
@@ -352,7 +348,7 @@ class ChartDataService:
352
348
  }
353
349
 
354
350
  chart_datasets = []
355
- categories = sorted(list(category_scores.keys()))
351
+ categories = sorted(category_scores.keys())
356
352
 
357
353
  for model_name in sorted(model_results.keys()):
358
354
  model_data = []
@@ -363,8 +359,10 @@ class ChartDataService:
363
359
  color = model_colors.get(model_name)
364
360
  if color is None:
365
361
  # Generate a random color if not in the predefined list
366
- r = lambda: random.randint(0, 255)
367
- color = f"#{r():02x}{r():02x}{r():02x}"
362
+ def generate_random_component():
363
+ return random.randint(0, 255)
364
+
365
+ color = f"#{generate_random_component():02x}{generate_random_component():02x}{generate_random_component():02x}"
368
366
 
369
367
  chart_datasets.append(
370
368
  {
@@ -388,8 +386,8 @@ class ModalDataService:
388
386
  self.file_service = file_service
389
387
 
390
388
  def generate_modal_test_data(
391
- self, test_case_id: str, model_results: Dict[str, Any]
392
- ) -> Dict[str, Any]:
389
+ self, test_case_id: str, model_results: dict[str, any]
390
+ ) -> dict[str, any]:
393
391
  """Generate test data for modal JavaScript consumption."""
394
392
  modal_data = {"model_scores": {}, "tool_scores": {}, "individual_runs": {}}
395
393
 
@@ -464,7 +462,7 @@ class TemplateDataService:
464
462
  self.modal_service = ModalDataService(file_service)
465
463
 
466
464
  def generate_performance_metrics_table(
467
- self, model_performances: Dict[str, ModelPerformance]
465
+ self, model_performances: dict[str, ModelPerformance]
468
466
  ) -> str:
469
467
  """Generate HTML table rows for performance metrics."""
470
468
  metrics_rows = []
@@ -489,9 +487,9 @@ class TemplateDataService:
489
487
 
490
488
  def generate_breakdown_content(
491
489
  self,
492
- test_case_results: List[TestCaseResult],
493
- model_performances: Dict[str, ModelPerformance],
494
- model_results: Dict[str, Any] = None,
490
+ test_case_results: list[TestCaseResult],
491
+ model_performances: dict[str, ModelPerformance],
492
+ model_results: dict[str, any] = None,
495
493
  ) -> str:
496
494
  """Generate detailed breakdown content by category with modal support."""
497
495
  # Group test cases by category
@@ -507,7 +505,7 @@ class TemplateDataService:
507
505
  for test_result in test_results:
508
506
  test_scores = []
509
507
 
510
- for model_name, performance in model_performances.items():
508
+ for model_name, _performance in model_performances.items():
511
509
  if test_result.test_case_id in test_result.model_results:
512
510
  model_data = test_result.model_results[
513
511
  test_result.test_case_id
@@ -576,7 +574,7 @@ class TemplateDataService:
576
574
 
577
575
  category_tests.append(
578
576
  f"""
579
- <div class="test-item"
577
+ <div class="test-item"
580
578
  data-test-name="{test_result.test_case_id}"
581
579
  data-test-description="{test_result.description}"
582
580
  data-test-data="{modal_data_json}">
@@ -609,7 +607,7 @@ class TemplateDataService:
609
607
 
610
608
  return "".join(breakdown_sections)
611
609
 
612
- def generate_model_execution_times(self, model_results: Dict[str, Any]) -> str:
610
+ def generate_model_execution_times(self, model_results: dict[str, any]) -> str:
613
611
  """Generate model execution times HTML."""
614
612
  execution_times_html = []
615
613
 
@@ -649,8 +647,8 @@ class TemplateDataService:
649
647
  return "".join(execution_times_html)
650
648
 
651
649
  def calculate_best_worst_tests(
652
- self, test_case_results: List[TestCaseResult]
653
- ) -> Tuple[str, str]:
650
+ self, test_case_results: list[TestCaseResult]
651
+ ) -> tuple[str, str]:
654
652
  """Calculate best and worst performing tests."""
655
653
  test_averages = {}
656
654
 
@@ -670,7 +668,7 @@ class TemplateDataService:
670
668
  return "Not available", "Not available"
671
669
 
672
670
  def calculate_average_time(
673
- self, model_performances: Dict[str, ModelPerformance]
671
+ self, model_performances: dict[str, ModelPerformance]
674
672
  ) -> str:
675
673
  """Calculate overall average time."""
676
674
  all_durations = []
@@ -703,8 +701,8 @@ class ModelResultsProcessor:
703
701
  self.file_service = file_service
704
702
 
705
703
  def organize_test_cases(
706
- self, model_results: Dict[str, Any]
707
- ) -> Dict[str, Dict[str, Any]]:
704
+ self, model_results: dict[str, any]
705
+ ) -> dict[str, dict[str, any]]:
708
706
  """Organize test cases by test case ID and model."""
709
707
  test_cases = {}
710
708
 
@@ -720,8 +718,8 @@ class ModelResultsProcessor:
720
718
  return test_cases
721
719
 
722
720
  def create_test_case_results(
723
- self, test_cases: Dict[str, Dict[str, Any]]
724
- ) -> List[TestCaseResult]:
721
+ self, test_cases: dict[str, dict[str, any]]
722
+ ) -> list[TestCaseResult]:
725
723
  """Create TestCaseResult objects from organized test cases."""
726
724
  test_case_results = []
727
725
 
@@ -778,9 +776,9 @@ class ReportDataProcessor:
778
776
  self.template_service = TemplateDataService(self.file_service)
779
777
  self.processor = ModelResultsProcessor(self.file_service)
780
778
 
781
- def get_evaluation_data(self, results_dir: Path) -> Dict[str, Any]:
779
+ def get_evaluation_data(self, results_dir: Path) -> dict[str, any]:
782
780
  """Extract and process basic evaluation data."""
783
- logger.info("Processing evaluation data...")
781
+ log.info("Processing evaluation data...")
784
782
 
785
783
  # Initialize metrics
786
784
  metrics = EvaluationMetrics()
@@ -788,7 +786,7 @@ class ReportDataProcessor:
788
786
  # Extract model results
789
787
  model_results = self.extraction_service.extract_model_results(results_dir)
790
788
  if not model_results:
791
- logger.warning("No model results found")
789
+ log.warning("No model results found")
792
790
  return self._metrics_to_dict(metrics)
793
791
 
794
792
  # Set basic model information
@@ -813,17 +811,17 @@ class ReportDataProcessor:
813
811
  metrics.total_execution_time_formatted = formatted_time
814
812
  metrics.duration = duration
815
813
 
816
- logger.info(f"Processed evaluation data for {len(metrics.models)} models")
814
+ log.info(f"Processed evaluation data for {len(metrics.models)} models")
817
815
  return self._metrics_to_dict(metrics)
818
816
 
819
- def get_detailed_evaluation_data(self, results_dir: Path) -> Dict[str, Any]:
817
+ def get_detailed_evaluation_data(self, results_dir: Path) -> dict[str, any]:
820
818
  """Extract and process detailed evaluation data for charts and breakdowns."""
821
- logger.info("Processing detailed evaluation data...")
819
+ log.info("Processing detailed evaluation data...")
822
820
 
823
821
  # Extract model results
824
822
  model_results = self.extraction_service.extract_model_results(results_dir)
825
823
  if not model_results:
826
- logger.warning("No model results found for detailed data")
824
+ log.warning("No model results found for detailed data")
827
825
  return self._empty_detailed_data()
828
826
 
829
827
  # Calculate model performances
@@ -875,10 +873,10 @@ class ReportDataProcessor:
875
873
  "model_execution_times": model_execution_times,
876
874
  }
877
875
 
878
- logger.info("Processed detailed evaluation data successfully")
876
+ log.info("Processed detailed evaluation data successfully")
879
877
  return detailed_data
880
878
 
881
- def _extract_test_case_names(self, model_results: Dict[str, Any]) -> List[str]:
879
+ def _extract_test_case_names(self, model_results: dict[str, any]) -> list[str]:
882
880
  """Extract unique test case names from model results."""
883
881
  test_case_names = set()
884
882
 
@@ -889,9 +887,9 @@ class ReportDataProcessor:
889
887
  if test_case_id:
890
888
  test_case_names.add(test_case_id)
891
889
 
892
- return sorted(list(test_case_names))
890
+ return sorted(test_case_names)
893
891
 
894
- def _metrics_to_dict(self, metrics: EvaluationMetrics) -> Dict[str, Any]:
892
+ def _metrics_to_dict(self, metrics: EvaluationMetrics) -> dict[str, any]:
895
893
  """Convert EvaluationMetrics to dictionary."""
896
894
  # Generate model tags HTML
897
895
  model_tags = ""
@@ -928,7 +926,7 @@ class ReportDataProcessor:
928
926
  "test_cases_list": test_cases_list,
929
927
  }
930
928
 
931
- def _empty_detailed_data(self) -> Dict[str, Any]:
929
+ def _empty_detailed_data(self) -> dict[str, any]:
932
930
  """Return empty detailed data structure."""
933
931
  return {
934
932
  "performance_metrics_rows": "",
@@ -957,15 +955,15 @@ def main():
957
955
 
958
956
  processor = ReportDataProcessor()
959
957
 
960
- print("Testing evaluation data extraction...")
958
+ log.info("Testing evaluation data extraction...")
961
959
  eval_data = processor.get_evaluation_data(results_dir)
962
- print(f"Found {len(eval_data.get('models', []))} models")
960
+ log.info(f"Found {len(eval_data.get('models', []))} models")
963
961
 
964
- print("Testing detailed evaluation data extraction...")
962
+ log.info("Testing detailed evaluation data extraction...")
965
963
  detailed_data = processor.get_detailed_evaluation_data(results_dir)
966
- print(f"Total evaluations: {detailed_data.get('total_evaluations', 0)}")
964
+ log.info(f"Total evaluations: {detailed_data.get('total_evaluations', 0)}")
967
965
 
968
- print("Report data processing completed successfully!")
966
+ log.info("Report data processing completed successfully!")
969
967
 
970
968
 
971
969
  if __name__ == "__main__":