solace-agent-mesh 1.11.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- solace_agent_mesh/__init__.py +0 -0
- solace_agent_mesh/agent/__init__.py +0 -0
- solace_agent_mesh/agent/adk/__init__.py +0 -0
- solace_agent_mesh/agent/adk/adk_llm.txt +226 -0
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +566 -0
- solace_agent_mesh/agent/adk/alembic/README +74 -0
- solace_agent_mesh/agent/adk/alembic/env.py +77 -0
- solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
- solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
- solace_agent_mesh/agent/adk/alembic.ini +112 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +52 -0
- solace_agent_mesh/agent/adk/artifacts/__init__.py +1 -0
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +171 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +545 -0
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +609 -0
- solace_agent_mesh/agent/adk/callbacks.py +2318 -0
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +406 -0
- solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +415 -0
- solace_agent_mesh/agent/adk/mcp_content_processor.py +666 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +1026 -0
- solace_agent_mesh/agent/adk/models/models_llm.txt +189 -0
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +132 -0
- solace_agent_mesh/agent/adk/runner.py +390 -0
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +468 -0
- solace_agent_mesh/agent/adk/setup.py +1325 -0
- solace_agent_mesh/agent/adk/stream_parser.py +415 -0
- solace_agent_mesh/agent/adk/tool_wrapper.py +165 -0
- solace_agent_mesh/agent/agent_llm.txt +369 -0
- solace_agent_mesh/agent/agent_llm_detail.txt +1702 -0
- solace_agent_mesh/agent/protocol/__init__.py +0 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +2041 -0
- solace_agent_mesh/agent/protocol/protocol_llm.txt +81 -0
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +92 -0
- solace_agent_mesh/agent/proxies/__init__.py +0 -0
- solace_agent_mesh/agent/proxies/a2a/__init__.py +3 -0
- solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +190 -0
- solace_agent_mesh/agent/proxies/a2a/app.py +56 -0
- solace_agent_mesh/agent/proxies/a2a/component.py +1585 -0
- solace_agent_mesh/agent/proxies/a2a/config.py +216 -0
- solace_agent_mesh/agent/proxies/a2a/oauth_token_cache.py +104 -0
- solace_agent_mesh/agent/proxies/base/__init__.py +3 -0
- solace_agent_mesh/agent/proxies/base/app.py +100 -0
- solace_agent_mesh/agent/proxies/base/base_llm.txt +148 -0
- solace_agent_mesh/agent/proxies/base/component.py +816 -0
- solace_agent_mesh/agent/proxies/base/config.py +85 -0
- solace_agent_mesh/agent/proxies/base/proxy_task_context.py +19 -0
- solace_agent_mesh/agent/proxies/proxies_llm.txt +283 -0
- solace_agent_mesh/agent/sac/__init__.py +0 -0
- solace_agent_mesh/agent/sac/app.py +595 -0
- solace_agent_mesh/agent/sac/component.py +3668 -0
- solace_agent_mesh/agent/sac/patch_adk.py +103 -0
- solace_agent_mesh/agent/sac/sac_llm.txt +189 -0
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +200 -0
- solace_agent_mesh/agent/sac/task_execution_context.py +415 -0
- solace_agent_mesh/agent/testing/__init__.py +3 -0
- solace_agent_mesh/agent/testing/debug_utils.py +135 -0
- solace_agent_mesh/agent/testing/testing_llm.txt +58 -0
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +68 -0
- solace_agent_mesh/agent/tools/__init__.py +16 -0
- solace_agent_mesh/agent/tools/audio_tools.py +1740 -0
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +2500 -0
- solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +244 -0
- solace_agent_mesh/agent/tools/dynamic_tool.py +396 -0
- solace_agent_mesh/agent/tools/general_agent_tools.py +572 -0
- solace_agent_mesh/agent/tools/image_tools.py +1185 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +363 -0
- solace_agent_mesh/agent/tools/registry.py +38 -0
- solace_agent_mesh/agent/tools/test_tools.py +136 -0
- solace_agent_mesh/agent/tools/time_tools.py +126 -0
- solace_agent_mesh/agent/tools/tool_config_types.py +93 -0
- solace_agent_mesh/agent/tools/tool_definition.py +53 -0
- solace_agent_mesh/agent/tools/tools_llm.txt +276 -0
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +275 -0
- solace_agent_mesh/agent/tools/web_tools.py +392 -0
- solace_agent_mesh/agent/utils/__init__.py +0 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +1353 -0
- solace_agent_mesh/agent/utils/config_parser.py +49 -0
- solace_agent_mesh/agent/utils/context_helpers.py +77 -0
- solace_agent_mesh/agent/utils/utils_llm.txt +152 -0
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +149 -0
- solace_agent_mesh/assets/docs/404.html +16 -0
- solace_agent_mesh/assets/docs/assets/css/styles.8162edfb.css +1 -0
- solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
- solace_agent_mesh/assets/docs/assets/images/sam-enterprise-credentials-b269f095349473118b2b33bdfcc40122.png +0 -0
- solace_agent_mesh/assets/docs/assets/js/032c2d61.f3d37824.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/0bcf40b7.c019ad46.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2131ec11.5c7a1f6e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js.LICENSE.txt +13 -0
- solace_agent_mesh/assets/docs/assets/js/2334.1cf50a20.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/240a0364.9ad94d1b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/341393d4.0fac2613.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3624.0eaa1fd0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.28b7c67b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2ddc75c0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/41adc471.48b12a4e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/509e993c.a1fbf45a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.90a87880.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6063ff4c.ef84f702.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.b77431fc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6fdfefc7.99de744e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/722f809d.965da774.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/742f027b.46c07808.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/77cf947d.48cb18a2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.2484b8d9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js.LICENSE.txt +61 -0
- solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8731.6c1dbf0c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/945fb41e.6f4cdffd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9bb13469.b2333011.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9e9d0a82.570c057b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad71b5ed.af3ecfd1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c198a0dc.8f31f867.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ceb2a7a6.5d92d7d0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/db924877.e98d12a1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de5f4c65.e8241890.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e04b235d.52cb25ed.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.b1068f9b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.4488e34c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.250993bf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js.LICENSE.txt +81 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.9e0813a2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +154 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +99 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +107 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +166 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +101 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +219 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +92 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +29 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +110 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +345 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +83 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +84 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +25 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +47 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +85 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +60 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +144 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +191 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +128 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +135 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +34 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +267 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +142 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +116 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +164 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +140 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +57 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +72 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +102 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +37 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +247 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +184 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +75 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +85 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +41 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +290 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +78 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +25 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +78 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +160 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +142 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +100 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +52 -0
- solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
- solace_agent_mesh/assets/docs/img/logo.png +0 -0
- solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
- solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
- solace_agent_mesh/assets/docs/img/sam-enterprise-credentials.png +0 -0
- solace_agent_mesh/assets/docs/img/solace-logo-text.svg +18 -0
- solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
- solace_agent_mesh/assets/docs/lunr-index-1765810064709.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -0
- solace_agent_mesh/assets/docs/search-doc-1765810064709.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -0
- solace_agent_mesh/assets/docs/sitemap.xml +1 -0
- solace_agent_mesh/cli/__init__.py +1 -0
- solace_agent_mesh/cli/commands/__init__.py +0 -0
- solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
- solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
- solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +729 -0
- solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +102 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +114 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +60 -0
- solace_agent_mesh/cli/commands/eval_cmd.py +46 -0
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +439 -0
- solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
- solace_agent_mesh/cli/commands/init_cmd/database_step.py +91 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +238 -0
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +464 -0
- solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
- solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +119 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +215 -0
- solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +20 -0
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +137 -0
- solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +144 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +306 -0
- solace_agent_mesh/cli/commands/plugin_cmd/install_cmd.py +283 -0
- solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
- solace_agent_mesh/cli/commands/run_cmd.py +215 -0
- solace_agent_mesh/cli/main.py +52 -0
- solace_agent_mesh/cli/utils.py +262 -0
- solace_agent_mesh/client/webui/frontend/static/assets/authCallback-Dj3JtK42.js +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/client-ZKk9kEJ5.js +25 -0
- solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-BcUaNZ-Q.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-vjch4RYc.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-BNV4kZN0.js +535 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +15 -0
- solace_agent_mesh/client/webui/frontend/static/index.html +16 -0
- solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
- solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
- solace_agent_mesh/common/__init__.py +1 -0
- solace_agent_mesh/common/a2a/__init__.py +241 -0
- solace_agent_mesh/common/a2a/a2a_llm.txt +175 -0
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +193 -0
- solace_agent_mesh/common/a2a/artifact.py +368 -0
- solace_agent_mesh/common/a2a/events.py +213 -0
- solace_agent_mesh/common/a2a/message.py +375 -0
- solace_agent_mesh/common/a2a/protocol.py +689 -0
- solace_agent_mesh/common/a2a/task.py +127 -0
- solace_agent_mesh/common/a2a/translation.py +655 -0
- solace_agent_mesh/common/a2a/types.py +55 -0
- solace_agent_mesh/common/a2a_spec/a2a.json +2576 -0
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +445 -0
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +736 -0
- solace_agent_mesh/common/a2a_spec/schemas/agent_progress_update.json +18 -0
- solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +48 -0
- solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
- solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json +41 -0
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +330 -0
- solace_agent_mesh/common/a2a_spec/schemas/tool_invocation_start.json +26 -0
- solace_agent_mesh/common/a2a_spec/schemas/tool_result.json +48 -0
- solace_agent_mesh/common/agent_registry.py +122 -0
- solace_agent_mesh/common/common_llm.txt +230 -0
- solace_agent_mesh/common/common_llm_detail.txt +2562 -0
- solace_agent_mesh/common/constants.py +6 -0
- solace_agent_mesh/common/data_parts.py +150 -0
- solace_agent_mesh/common/exceptions.py +49 -0
- solace_agent_mesh/common/middleware/__init__.py +12 -0
- solace_agent_mesh/common/middleware/config_resolver.py +132 -0
- solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +185 -0
- solace_agent_mesh/common/middleware/registry.py +127 -0
- solace_agent_mesh/common/oauth/__init__.py +17 -0
- solace_agent_mesh/common/oauth/oauth_client.py +408 -0
- solace_agent_mesh/common/oauth/utils.py +50 -0
- solace_agent_mesh/common/sac/__init__.py +0 -0
- solace_agent_mesh/common/sac/sac_llm.txt +71 -0
- solace_agent_mesh/common/sac/sac_llm_detail.txt +82 -0
- solace_agent_mesh/common/sac/sam_component_base.py +730 -0
- solace_agent_mesh/common/sam_events/__init__.py +9 -0
- solace_agent_mesh/common/sam_events/event_service.py +208 -0
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +104 -0
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +115 -0
- solace_agent_mesh/common/services/__init__.py +4 -0
- solace_agent_mesh/common/services/employee_service.py +164 -0
- solace_agent_mesh/common/services/identity_service.py +134 -0
- solace_agent_mesh/common/services/providers/__init__.py +4 -0
- solace_agent_mesh/common/services/providers/local_file_identity_service.py +151 -0
- solace_agent_mesh/common/services/providers/providers_llm.txt +81 -0
- solace_agent_mesh/common/services/services_llm.txt +368 -0
- solace_agent_mesh/common/services/services_llm_detail.txt +459 -0
- solace_agent_mesh/common/utils/__init__.py +7 -0
- solace_agent_mesh/common/utils/artifact_utils.py +31 -0
- solace_agent_mesh/common/utils/asyncio_macos_fix.py +88 -0
- solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
- solace_agent_mesh/common/utils/embeds/constants.py +56 -0
- solace_agent_mesh/common/utils/embeds/converter.py +447 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +220 -0
- solace_agent_mesh/common/utils/embeds/evaluators.py +395 -0
- solace_agent_mesh/common/utils/embeds/modifiers.py +793 -0
- solace_agent_mesh/common/utils/embeds/resolver.py +967 -0
- solace_agent_mesh/common/utils/embeds/types.py +23 -0
- solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
- solace_agent_mesh/common/utils/initializer.py +52 -0
- solace_agent_mesh/common/utils/log_formatters.py +64 -0
- solace_agent_mesh/common/utils/message_utils.py +80 -0
- solace_agent_mesh/common/utils/mime_helpers.py +172 -0
- solace_agent_mesh/common/utils/push_notification_auth.py +135 -0
- solace_agent_mesh/common/utils/pydantic_utils.py +159 -0
- solace_agent_mesh/common/utils/rbac_utils.py +69 -0
- solace_agent_mesh/common/utils/templates/__init__.py +8 -0
- solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
- solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
- solace_agent_mesh/common/utils/type_utils.py +28 -0
- solace_agent_mesh/common/utils/utils_llm.txt +335 -0
- solace_agent_mesh/common/utils/utils_llm_detail.txt +572 -0
- solace_agent_mesh/config_portal/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/common.py +77 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +166 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
- solace_agent_mesh/config_portal/backend/server.py +644 -0
- solace_agent_mesh/config_portal/frontend/static/client/Solace_community_logo.png +0 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DiOiAjzL.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-Rk0n-9cK.js +140 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/entry.client-mvZjNKiz.js +19 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-DzNKzXrc.js +68 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-ba77705e.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-B17tZKK7.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-V2BeTIUc.js +10 -0
- solace_agent_mesh/config_portal/frontend/static/client/favicon.ico +0 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +7 -0
- solace_agent_mesh/core_a2a/__init__.py +1 -0
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +90 -0
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +101 -0
- solace_agent_mesh/core_a2a/service.py +307 -0
- solace_agent_mesh/evaluation/__init__.py +0 -0
- solace_agent_mesh/evaluation/evaluator.py +691 -0
- solace_agent_mesh/evaluation/message_organizer.py +553 -0
- solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
- solace_agent_mesh/evaluation/report/chart_section.html +141 -0
- solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
- solace_agent_mesh/evaluation/report/modal.html +59 -0
- solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
- solace_agent_mesh/evaluation/report/modal_script.js +296 -0
- solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
- solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
- solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
- solace_agent_mesh/evaluation/report/templates/header.html +340 -0
- solace_agent_mesh/evaluation/report_data_processor.py +970 -0
- solace_agent_mesh/evaluation/report_generator.py +607 -0
- solace_agent_mesh/evaluation/run.py +954 -0
- solace_agent_mesh/evaluation/shared/__init__.py +92 -0
- solace_agent_mesh/evaluation/shared/constants.py +47 -0
- solace_agent_mesh/evaluation/shared/exceptions.py +50 -0
- solace_agent_mesh/evaluation/shared/helpers.py +35 -0
- solace_agent_mesh/evaluation/shared/test_case_loader.py +167 -0
- solace_agent_mesh/evaluation/shared/test_suite_loader.py +280 -0
- solace_agent_mesh/evaluation/subscriber.py +776 -0
- solace_agent_mesh/evaluation/summary_builder.py +880 -0
- solace_agent_mesh/gateway/__init__.py +0 -0
- solace_agent_mesh/gateway/adapter/__init__.py +1 -0
- solace_agent_mesh/gateway/adapter/base.py +143 -0
- solace_agent_mesh/gateway/adapter/types.py +221 -0
- solace_agent_mesh/gateway/base/__init__.py +1 -0
- solace_agent_mesh/gateway/base/app.py +345 -0
- solace_agent_mesh/gateway/base/base_llm.txt +226 -0
- solace_agent_mesh/gateway/base/base_llm_detail.txt +235 -0
- solace_agent_mesh/gateway/base/component.py +2030 -0
- solace_agent_mesh/gateway/base/task_context.py +75 -0
- solace_agent_mesh/gateway/gateway_llm.txt +369 -0
- solace_agent_mesh/gateway/gateway_llm_detail.txt +3885 -0
- solace_agent_mesh/gateway/generic/__init__.py +1 -0
- solace_agent_mesh/gateway/generic/app.py +50 -0
- solace_agent_mesh/gateway/generic/component.py +727 -0
- solace_agent_mesh/gateway/http_sse/__init__.py +0 -0
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +345 -0
- solace_agent_mesh/gateway/http_sse/alembic/env.py +87 -0
- solace_agent_mesh/gateway/http_sse/alembic/script.py.mako +28 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250910_d5b3f8f2e9a0_create_initial_database.py +58 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250911_b1c2d3e4f5g6_add_database_indexes.py +83 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250916_f6e7d8c9b0a1_convert_timestamps_to_epoch_and_align_columns.py +412 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251006_98882922fa59_add_tasks_events_feedback_chat_tasks.py +190 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251015_add_session_performance_indexes.py +70 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +161 -0
- solace_agent_mesh/gateway/http_sse/alembic.ini +109 -0
- solace_agent_mesh/gateway/http_sse/app.py +351 -0
- solace_agent_mesh/gateway/http_sse/component.py +2360 -0
- solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +105 -0
- solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +109 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +110 -0
- solace_agent_mesh/gateway/http_sse/dependencies.py +653 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +299 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +3278 -0
- solace_agent_mesh/gateway/http_sse/main.py +789 -0
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +46 -0
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +102 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/__init__.py +11 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/chat_task.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +221 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/feedback.py +20 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +66 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session_history.py +0 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +32 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/task_event.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +125 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +239 -0
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +34 -0
- solace_agent_mesh/gateway/http_sse/repository/models/base.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/models/chat_task_model.py +31 -0
- solace_agent_mesh/gateway/http_sse/repository/models/feedback_model.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +257 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +53 -0
- solace_agent_mesh/gateway/http_sse/repository/models/task_event_model.py +25 -0
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +39 -0
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +308 -0
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +268 -0
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +248 -0
- solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +74 -0
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +1137 -0
- solace_agent_mesh/gateway/http_sse/routers/auth.py +311 -0
- solace_agent_mesh/gateway/http_sse/routers/config.py +371 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/__init__.py +10 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +450 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/__init__.py +15 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +133 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +33 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/task_requests.py +58 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/__init__.py +18 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +42 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +123 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +33 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/task_responses.py +30 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +168 -0
- solace_agent_mesh/gateway/http_sse/routers/people.py +38 -0
- solace_agent_mesh/gateway/http_sse/routers/projects.py +767 -0
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1415 -0
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +312 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +634 -0
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +230 -0
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +1089 -0
- solace_agent_mesh/gateway/http_sse/routers/users.py +83 -0
- solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +1220 -0
- solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/services/agent_card_service.py +71 -0
- solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
- solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
- solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +273 -0
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +250 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +78 -0
- solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
- solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +303 -0
- solace_agent_mesh/gateway/http_sse/services/session_service.py +702 -0
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +593 -0
- solace_agent_mesh/gateway/http_sse/services/task_service.py +119 -0
- solace_agent_mesh/gateway/http_sse/session_manager.py +219 -0
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +146 -0
- solace_agent_mesh/gateway/http_sse/shared/auth_utils.py +29 -0
- solace_agent_mesh/gateway/http_sse/shared/base_repository.py +252 -0
- solace_agent_mesh/gateway/http_sse/shared/database_exceptions.py +274 -0
- solace_agent_mesh/gateway/http_sse/shared/database_helpers.py +43 -0
- solace_agent_mesh/gateway/http_sse/shared/enums.py +40 -0
- solace_agent_mesh/gateway/http_sse/shared/error_dto.py +107 -0
- solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +217 -0
- solace_agent_mesh/gateway/http_sse/shared/exceptions.py +192 -0
- solace_agent_mesh/gateway/http_sse/shared/pagination.py +138 -0
- solace_agent_mesh/gateway/http_sse/shared/response_utils.py +134 -0
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +319 -0
- solace_agent_mesh/gateway/http_sse/shared/timestamp_utils.py +97 -0
- solace_agent_mesh/gateway/http_sse/shared/types.py +50 -0
- solace_agent_mesh/gateway/http_sse/shared/utils.py +22 -0
- solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +88 -0
- solace_agent_mesh/gateway/http_sse/sse_manager.py +491 -0
- solace_agent_mesh/gateway/http_sse/utils/__init__.py +1 -0
- solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
- solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +72 -0
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +47 -0
- solace_agent_mesh/llm.txt +228 -0
- solace_agent_mesh/llm_detail.txt +2835 -0
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/platform/__init__.py +18 -0
- solace_agent_mesh/services/platform/alembic/env.py +85 -0
- solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
- solace_agent_mesh/services/platform/alembic.ini +109 -0
- solace_agent_mesh/services/platform/api/__init__.py +3 -0
- solace_agent_mesh/services/platform/api/dependencies.py +147 -0
- solace_agent_mesh/services/platform/api/main.py +280 -0
- solace_agent_mesh/services/platform/api/middleware.py +51 -0
- solace_agent_mesh/services/platform/api/routers/__init__.py +24 -0
- solace_agent_mesh/services/platform/app.py +114 -0
- solace_agent_mesh/services/platform/component.py +235 -0
- solace_agent_mesh/solace_agent_mesh_llm.txt +362 -0
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +8599 -0
- solace_agent_mesh/templates/agent_template.yaml +53 -0
- solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
- solace_agent_mesh/templates/gateway_app_template.py +75 -0
- solace_agent_mesh/templates/gateway_component_template.py +484 -0
- solace_agent_mesh/templates/gateway_config_template.yaml +38 -0
- solace_agent_mesh/templates/logging_config_template.yaml +48 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +66 -0
- solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
- solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
- solace_agent_mesh/templates/plugin_custom_template.py +10 -0
- solace_agent_mesh/templates/plugin_gateway_config_template.yaml +60 -0
- solace_agent_mesh/templates/plugin_pyproject_template.toml +32 -0
- solace_agent_mesh/templates/plugin_readme_template.md +12 -0
- solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
- solace_agent_mesh/templates/plugin_tools_template.py +224 -0
- solace_agent_mesh/templates/shared_config.yaml +112 -0
- solace_agent_mesh/templates/templates_llm.txt +147 -0
- solace_agent_mesh/templates/webui.yaml +177 -0
- solace_agent_mesh-1.11.2.dist-info/METADATA +504 -0
- solace_agent_mesh-1.11.2.dist-info/RECORD +624 -0
- solace_agent_mesh-1.11.2.dist-info/WHEEL +4 -0
- solace_agent_mesh-1.11.2.dist-info/entry_points.txt +3 -0
- solace_agent_mesh-1.11.2.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,553 @@
|
|
|
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 logging
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
from .shared import (
|
|
12
|
+
CategorizationError,
|
|
13
|
+
InvalidDataError,
|
|
14
|
+
MissingFileError,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
log = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class TaskMessage:
|
|
22
|
+
"""Represents a categorized task message with extracted metadata."""
|
|
23
|
+
|
|
24
|
+
topic: str
|
|
25
|
+
payload: dict[str, any]
|
|
26
|
+
task_id: str | None = None
|
|
27
|
+
parent_task_id: str | None = None
|
|
28
|
+
|
|
29
|
+
@classmethod
|
|
30
|
+
def from_dict(cls, message_dict: dict[str, any]) -> "TaskMessage":
|
|
31
|
+
"""Create TaskMessage from dictionary representation."""
|
|
32
|
+
return cls(
|
|
33
|
+
topic=message_dict.get("topic", ""), payload=message_dict.get("payload", {})
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
def to_dict(self) -> dict[str, any]:
|
|
37
|
+
"""Convert TaskMessage back to dictionary format."""
|
|
38
|
+
return {"topic": self.topic, "payload": self.payload}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass
|
|
42
|
+
class TaskMapping:
|
|
43
|
+
"""Represents task ID to directory mappings with validation."""
|
|
44
|
+
|
|
45
|
+
mappings: dict[str, str]
|
|
46
|
+
|
|
47
|
+
def get_run_directory(self, task_id: str) -> str | None:
|
|
48
|
+
"""Get the run directory for a given task ID."""
|
|
49
|
+
return self.mappings.get(task_id)
|
|
50
|
+
|
|
51
|
+
def add_mapping(self, task_id: str, run_directory: str) -> None:
|
|
52
|
+
"""Add a new task ID to directory mapping."""
|
|
53
|
+
self.mappings[task_id] = run_directory
|
|
54
|
+
|
|
55
|
+
def has_task(self, task_id: str) -> bool:
|
|
56
|
+
"""Check if a task ID exists in the mappings."""
|
|
57
|
+
return task_id in self.mappings
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@dataclass
|
|
61
|
+
class CategorizationResult:
|
|
62
|
+
"""Results of the message categorization process."""
|
|
63
|
+
|
|
64
|
+
total_messages: int
|
|
65
|
+
categorized_messages: int
|
|
66
|
+
uncategorized_messages: int
|
|
67
|
+
updated_mappings_count: int
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def success_rate(self) -> float:
|
|
71
|
+
"""Calculate the success rate of categorization."""
|
|
72
|
+
if self.total_messages == 0:
|
|
73
|
+
return 0.0
|
|
74
|
+
return self.categorized_messages / self.total_messages
|
|
75
|
+
|
|
76
|
+
def __str__(self) -> str:
|
|
77
|
+
"""Human-readable summary of categorization results."""
|
|
78
|
+
return (
|
|
79
|
+
f"Categorization Results: {self.categorized_messages}/{self.total_messages} "
|
|
80
|
+
f"messages categorized ({self.success_rate:.1%} success rate), "
|
|
81
|
+
f"{self.updated_mappings_count} new mappings added"
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class TaskIdExtractor:
|
|
86
|
+
"""Handles extraction of task IDs from messages using multiple strategies."""
|
|
87
|
+
|
|
88
|
+
def extract_task_id(
|
|
89
|
+
self, message: TaskMessage
|
|
90
|
+
) -> tuple[str | None, str | None]:
|
|
91
|
+
"""
|
|
92
|
+
Extract task ID using multiple strategies in order of preference.
|
|
93
|
+
Returns (parent_task_id, sub_task_id) tuple.
|
|
94
|
+
"""
|
|
95
|
+
if not isinstance(message.payload, dict):
|
|
96
|
+
return None, None
|
|
97
|
+
|
|
98
|
+
strategies = [
|
|
99
|
+
self._extract_from_subtask_delegation,
|
|
100
|
+
self._extract_from_toplevel_id,
|
|
101
|
+
self._extract_from_result_object,
|
|
102
|
+
self._extract_from_topic,
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
for strategy in strategies:
|
|
106
|
+
try:
|
|
107
|
+
if strategy.__name__ == "_extract_from_topic":
|
|
108
|
+
task_id, sub_task_id = strategy(message)
|
|
109
|
+
else:
|
|
110
|
+
task_id, sub_task_id = strategy(message.payload)
|
|
111
|
+
if task_id:
|
|
112
|
+
return task_id, sub_task_id
|
|
113
|
+
except Exception as e:
|
|
114
|
+
log.debug(f"Task ID extraction strategy failed: {e}")
|
|
115
|
+
continue
|
|
116
|
+
|
|
117
|
+
return None, None
|
|
118
|
+
|
|
119
|
+
def _extract_from_subtask_delegation(
|
|
120
|
+
self, payload: dict
|
|
121
|
+
) -> tuple[str | None, str | None]:
|
|
122
|
+
"""Strategy 1: Check for sub-task delegation (agent-to-agent calls)."""
|
|
123
|
+
params = payload.get("params", {})
|
|
124
|
+
if isinstance(params, dict):
|
|
125
|
+
message_param = params.get("message", {})
|
|
126
|
+
if isinstance(message_param, dict):
|
|
127
|
+
metadata = message_param.get("metadata", {})
|
|
128
|
+
if isinstance(metadata, dict):
|
|
129
|
+
parent_task_id = metadata.get("parentTaskId")
|
|
130
|
+
sub_task_id = payload.get("id")
|
|
131
|
+
if parent_task_id and sub_task_id:
|
|
132
|
+
return parent_task_id, sub_task_id
|
|
133
|
+
return None, None
|
|
134
|
+
|
|
135
|
+
def _extract_from_toplevel_id(
|
|
136
|
+
self, payload: dict
|
|
137
|
+
) -> tuple[str | None, str | None]:
|
|
138
|
+
"""Strategy 2: Get the primary task ID from the top-level 'id' field."""
|
|
139
|
+
task_id = payload.get("id")
|
|
140
|
+
if task_id and isinstance(task_id, str):
|
|
141
|
+
return task_id, None
|
|
142
|
+
return None, None
|
|
143
|
+
|
|
144
|
+
def _extract_from_result_object(
|
|
145
|
+
self, payload: dict
|
|
146
|
+
) -> tuple[str | None, str | None]:
|
|
147
|
+
"""Strategy 3: Fallback for status updates which also have taskId nested."""
|
|
148
|
+
result = payload.get("result", {})
|
|
149
|
+
if isinstance(result, dict):
|
|
150
|
+
task_id = result.get("taskId")
|
|
151
|
+
if task_id and isinstance(task_id, str):
|
|
152
|
+
return task_id, None
|
|
153
|
+
return None, None
|
|
154
|
+
|
|
155
|
+
def _extract_from_topic(
|
|
156
|
+
self, message: TaskMessage
|
|
157
|
+
) -> tuple[str | None, str | None]:
|
|
158
|
+
"""Strategy 4: Extract from topic path (fallback method)."""
|
|
159
|
+
topic = message.topic
|
|
160
|
+
if not topic:
|
|
161
|
+
return None, None
|
|
162
|
+
|
|
163
|
+
# Extract the last part of the topic path
|
|
164
|
+
task_id = topic.split("/")[-1]
|
|
165
|
+
if task_id.startswith("gdk-task-"):
|
|
166
|
+
return task_id, None
|
|
167
|
+
|
|
168
|
+
return None, None
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class FileOperations:
|
|
172
|
+
"""Handles file I/O operations with comprehensive error handling."""
|
|
173
|
+
|
|
174
|
+
@staticmethod
|
|
175
|
+
def load_json(filepath: Path) -> any:
|
|
176
|
+
"""Load JSON file with error handling and validation."""
|
|
177
|
+
try:
|
|
178
|
+
if not filepath.exists():
|
|
179
|
+
raise MissingFileError(f"File not found: {filepath}")
|
|
180
|
+
|
|
181
|
+
with filepath.open() as f:
|
|
182
|
+
data = json.load(f)
|
|
183
|
+
|
|
184
|
+
log.debug(f"Successfully loaded JSON from {filepath}")
|
|
185
|
+
return data
|
|
186
|
+
|
|
187
|
+
except json.JSONDecodeError as e:
|
|
188
|
+
raise InvalidDataError(f"Invalid JSON in file {filepath}: {e}") from e
|
|
189
|
+
except Exception as e:
|
|
190
|
+
raise CategorizationError(f"Error loading file {filepath}: {e}") from e
|
|
191
|
+
|
|
192
|
+
@staticmethod
|
|
193
|
+
def save_json(data: any, filepath: Path) -> None:
|
|
194
|
+
"""Save data as JSON with error handling."""
|
|
195
|
+
try:
|
|
196
|
+
# Ensure directory exists
|
|
197
|
+
filepath.parent.mkdir(parents=True, exist_ok=True)
|
|
198
|
+
|
|
199
|
+
with filepath.open("w") as f:
|
|
200
|
+
json.dump(data, f, indent=4)
|
|
201
|
+
|
|
202
|
+
log.debug(f"Successfully saved JSON to {filepath}")
|
|
203
|
+
|
|
204
|
+
except Exception as e:
|
|
205
|
+
raise CategorizationError(f"Error saving file {filepath}: {e}") from e
|
|
206
|
+
|
|
207
|
+
@staticmethod
|
|
208
|
+
def file_exists(filepath: Path) -> bool:
|
|
209
|
+
"""Check if file exists."""
|
|
210
|
+
return filepath.exists()
|
|
211
|
+
|
|
212
|
+
@staticmethod
|
|
213
|
+
def is_directory(path: Path) -> bool:
|
|
214
|
+
"""Check if path is a directory."""
|
|
215
|
+
return path.is_dir()
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class MessageCategorizer:
|
|
219
|
+
"""Handles categorization of messages into run directories."""
|
|
220
|
+
|
|
221
|
+
def __init__(self, task_extractor: TaskIdExtractor, file_ops: FileOperations):
|
|
222
|
+
self.task_extractor = task_extractor
|
|
223
|
+
self.file_ops = file_ops
|
|
224
|
+
|
|
225
|
+
def categorize_messages_for_model(
|
|
226
|
+
self, model_path: Path, model_name: str
|
|
227
|
+
) -> CategorizationResult:
|
|
228
|
+
"""Categorize messages for a single model with comprehensive error handling."""
|
|
229
|
+
log.info(f"Starting message categorization for model: {model_name}")
|
|
230
|
+
|
|
231
|
+
try:
|
|
232
|
+
# Validate required files exist
|
|
233
|
+
self._validate_required_files(model_path, model_name)
|
|
234
|
+
|
|
235
|
+
# Load task mappings and messages
|
|
236
|
+
task_mappings = self._load_task_mappings(model_path)
|
|
237
|
+
messages = self._load_messages(model_path)
|
|
238
|
+
|
|
239
|
+
log.info(
|
|
240
|
+
f"Loaded {len(messages)} messages and {len(task_mappings.mappings)} task mappings"
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
# Extract task IDs from messages
|
|
244
|
+
self._extract_task_ids_from_messages(messages)
|
|
245
|
+
|
|
246
|
+
# Update task mappings with sub-task relationships
|
|
247
|
+
updated_mappings_count = self._update_task_mappings(messages, task_mappings)
|
|
248
|
+
|
|
249
|
+
# Categorize messages by run directory
|
|
250
|
+
categorized_messages = self._categorize_by_task_id(messages, task_mappings)
|
|
251
|
+
|
|
252
|
+
# Save categorized messages
|
|
253
|
+
categorized_count = self._save_categorized_messages(categorized_messages)
|
|
254
|
+
|
|
255
|
+
# Save updated task mappings
|
|
256
|
+
self._save_task_mappings(task_mappings, model_path)
|
|
257
|
+
|
|
258
|
+
# Calculate results
|
|
259
|
+
uncategorized_count = len(messages) - categorized_count
|
|
260
|
+
|
|
261
|
+
result = CategorizationResult(
|
|
262
|
+
total_messages=len(messages),
|
|
263
|
+
categorized_messages=categorized_count,
|
|
264
|
+
uncategorized_messages=uncategorized_count,
|
|
265
|
+
updated_mappings_count=updated_mappings_count,
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
log.info(f"Categorization completed for {model_name}: {result}")
|
|
269
|
+
return result
|
|
270
|
+
|
|
271
|
+
except Exception as e:
|
|
272
|
+
log.error(f"Error categorizing messages for model {model_name}: {e}")
|
|
273
|
+
raise
|
|
274
|
+
|
|
275
|
+
def _validate_required_files(self, model_path: Path, model_name: str) -> None:
|
|
276
|
+
"""Validate that required files exist for processing."""
|
|
277
|
+
mappings_file = model_path / "task_mappings.json"
|
|
278
|
+
messages_file = model_path / "full_messages.json"
|
|
279
|
+
|
|
280
|
+
if not self.file_ops.file_exists(mappings_file):
|
|
281
|
+
raise MissingFileError(
|
|
282
|
+
f"Missing task mappings file for model {model_name}: {mappings_file}"
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
if not self.file_ops.file_exists(messages_file):
|
|
286
|
+
raise MissingFileError(
|
|
287
|
+
f"Missing messages file for model {model_name}: {messages_file}"
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
def _load_task_mappings(self, model_path: Path) -> TaskMapping:
|
|
291
|
+
"""Load task mappings from file with validation."""
|
|
292
|
+
mappings_file = model_path / "task_mappings.json"
|
|
293
|
+
mappings_data = self.file_ops.load_json(mappings_file)
|
|
294
|
+
|
|
295
|
+
if not isinstance(mappings_data, dict):
|
|
296
|
+
raise InvalidDataError(
|
|
297
|
+
f"Task mappings must be a dictionary, got {type(mappings_data)}"
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
return TaskMapping(mappings=mappings_data)
|
|
301
|
+
|
|
302
|
+
def _load_messages(self, model_path: Path) -> list[TaskMessage]:
|
|
303
|
+
"""Load and parse messages from file with validation."""
|
|
304
|
+
messages_file = model_path / "full_messages.json"
|
|
305
|
+
messages_data = self.file_ops.load_json(messages_file)
|
|
306
|
+
|
|
307
|
+
if not isinstance(messages_data, list):
|
|
308
|
+
raise InvalidDataError(
|
|
309
|
+
f"Messages must be a list, got {type(messages_data)}"
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
messages = []
|
|
313
|
+
for i, message_dict in enumerate(messages_data):
|
|
314
|
+
try:
|
|
315
|
+
message = TaskMessage.from_dict(message_dict)
|
|
316
|
+
messages.append(message)
|
|
317
|
+
except Exception as e:
|
|
318
|
+
log.warning(f"Skipping invalid message at index {i}: {e}")
|
|
319
|
+
continue
|
|
320
|
+
|
|
321
|
+
return messages
|
|
322
|
+
|
|
323
|
+
def _extract_task_ids_from_messages(self, messages: list[TaskMessage]) -> None:
|
|
324
|
+
"""Extract task IDs from all messages and update the message objects."""
|
|
325
|
+
for message in messages:
|
|
326
|
+
task_id, sub_task_id = self.task_extractor.extract_task_id(message)
|
|
327
|
+
message.task_id = task_id or sub_task_id
|
|
328
|
+
message.parent_task_id = task_id if sub_task_id else None
|
|
329
|
+
|
|
330
|
+
def _update_task_mappings(
|
|
331
|
+
self, messages: list[TaskMessage], task_mappings: TaskMapping
|
|
332
|
+
) -> int:
|
|
333
|
+
"""Update task mappings with sub-task relationships."""
|
|
334
|
+
updated_count = 0
|
|
335
|
+
|
|
336
|
+
for message in messages:
|
|
337
|
+
if (
|
|
338
|
+
message.parent_task_id
|
|
339
|
+
and message.task_id
|
|
340
|
+
and task_mappings.has_task(message.parent_task_id)
|
|
341
|
+
and not task_mappings.has_task(message.task_id)
|
|
342
|
+
):
|
|
343
|
+
|
|
344
|
+
# Map sub-task to same directory as parent task
|
|
345
|
+
parent_directory = task_mappings.get_run_directory(
|
|
346
|
+
message.parent_task_id
|
|
347
|
+
)
|
|
348
|
+
task_mappings.add_mapping(message.task_id, parent_directory)
|
|
349
|
+
updated_count += 1
|
|
350
|
+
|
|
351
|
+
log.debug(
|
|
352
|
+
f"Mapped sub-task {message.task_id} to parent directory: {parent_directory}"
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
return updated_count
|
|
356
|
+
|
|
357
|
+
def _categorize_by_task_id(
|
|
358
|
+
self, messages: list[TaskMessage], task_mappings: TaskMapping
|
|
359
|
+
) -> dict[str, list[TaskMessage]]:
|
|
360
|
+
"""Group messages by their target run directory."""
|
|
361
|
+
categorized = {}
|
|
362
|
+
|
|
363
|
+
for message in messages:
|
|
364
|
+
if not message.task_id:
|
|
365
|
+
continue
|
|
366
|
+
|
|
367
|
+
run_directory = task_mappings.get_run_directory(message.task_id)
|
|
368
|
+
if not run_directory:
|
|
369
|
+
continue
|
|
370
|
+
|
|
371
|
+
if run_directory not in categorized:
|
|
372
|
+
categorized[run_directory] = []
|
|
373
|
+
|
|
374
|
+
categorized[run_directory].append(message)
|
|
375
|
+
|
|
376
|
+
return categorized
|
|
377
|
+
|
|
378
|
+
def _save_categorized_messages(
|
|
379
|
+
self, categorized_messages: dict[str, list[TaskMessage]]
|
|
380
|
+
) -> int:
|
|
381
|
+
"""Save categorized messages to their respective directories."""
|
|
382
|
+
total_saved = 0
|
|
383
|
+
|
|
384
|
+
for run_directory, messages in categorized_messages.items():
|
|
385
|
+
try:
|
|
386
|
+
output_file = Path(run_directory) / "messages.json"
|
|
387
|
+
|
|
388
|
+
# Convert TaskMessage objects back to dictionaries
|
|
389
|
+
message_dicts = [msg.to_dict() for msg in messages]
|
|
390
|
+
|
|
391
|
+
self.file_ops.save_json(message_dicts, output_file)
|
|
392
|
+
total_saved += len(messages)
|
|
393
|
+
|
|
394
|
+
log.info(f"Saved {len(messages)} messages to {output_file}")
|
|
395
|
+
|
|
396
|
+
except Exception as e:
|
|
397
|
+
log.error(f"Error saving messages to {run_directory}: {e}")
|
|
398
|
+
continue
|
|
399
|
+
|
|
400
|
+
return total_saved
|
|
401
|
+
|
|
402
|
+
def _save_task_mappings(self, task_mappings: TaskMapping, model_path: Path) -> None:
|
|
403
|
+
"""Save updated task mappings back to file."""
|
|
404
|
+
mappings_file = model_path / "task_mappings.json"
|
|
405
|
+
self.file_ops.save_json(task_mappings.mappings, mappings_file)
|
|
406
|
+
log.info(f"Updated task mappings saved to {mappings_file}")
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
class MessageOrganizer:
|
|
410
|
+
"""Main organizer for the message categorization process."""
|
|
411
|
+
|
|
412
|
+
def __init__(self):
|
|
413
|
+
self.task_extractor = TaskIdExtractor()
|
|
414
|
+
self.file_ops = FileOperations()
|
|
415
|
+
self.categorizer = MessageCategorizer(self.task_extractor, self.file_ops)
|
|
416
|
+
|
|
417
|
+
def categorize_all_messages(
|
|
418
|
+
self, base_results_path: str
|
|
419
|
+
) -> dict[str, CategorizationResult]:
|
|
420
|
+
"""
|
|
421
|
+
Main entry point for categorizing all messages across all models.
|
|
422
|
+
Returns a dictionary mapping model names to their categorization results.
|
|
423
|
+
"""
|
|
424
|
+
base_results_path = Path(base_results_path)
|
|
425
|
+
log.info(
|
|
426
|
+
f"Starting message categorization for all models in: {base_results_path}"
|
|
427
|
+
)
|
|
428
|
+
|
|
429
|
+
if not self.file_ops.is_directory(base_results_path):
|
|
430
|
+
raise MissingFileError(f"Results directory not found: {base_results_path}")
|
|
431
|
+
|
|
432
|
+
results = {}
|
|
433
|
+
processed_models = 0
|
|
434
|
+
|
|
435
|
+
try:
|
|
436
|
+
for model_path in base_results_path.iterdir():
|
|
437
|
+
if not self.file_ops.is_directory(model_path):
|
|
438
|
+
log.debug(f"Skipping non-directory: {model_path.name}")
|
|
439
|
+
continue
|
|
440
|
+
|
|
441
|
+
model_name = model_path.name
|
|
442
|
+
|
|
443
|
+
try:
|
|
444
|
+
result = self._process_model_directory(model_path, model_name)
|
|
445
|
+
results[model_name] = result
|
|
446
|
+
processed_models += 1
|
|
447
|
+
|
|
448
|
+
except (MissingFileError, InvalidDataError) as e:
|
|
449
|
+
log.warning(f"Skipping model {model_name}: {e}")
|
|
450
|
+
continue
|
|
451
|
+
except Exception as e:
|
|
452
|
+
log.error(f"Error processing model {model_name}: {e}")
|
|
453
|
+
continue
|
|
454
|
+
|
|
455
|
+
log.info(
|
|
456
|
+
f"Message categorization completed. Processed {processed_models} models."
|
|
457
|
+
)
|
|
458
|
+
self._log_summary_statistics(results)
|
|
459
|
+
|
|
460
|
+
return results
|
|
461
|
+
|
|
462
|
+
except Exception as e:
|
|
463
|
+
log.error(f"Error during message categorization: {e}")
|
|
464
|
+
raise
|
|
465
|
+
|
|
466
|
+
def _process_model_directory(
|
|
467
|
+
self, model_path: Path, model_name: str
|
|
468
|
+
) -> CategorizationResult:
|
|
469
|
+
"""Process a single model directory and return categorization results."""
|
|
470
|
+
log.info(f"Processing model directory: {model_name}")
|
|
471
|
+
|
|
472
|
+
try:
|
|
473
|
+
result = self.categorizer.categorize_messages_for_model(
|
|
474
|
+
model_path, model_name
|
|
475
|
+
)
|
|
476
|
+
log.info(f"Successfully processed model {model_name}: {result}")
|
|
477
|
+
return result
|
|
478
|
+
|
|
479
|
+
except Exception as e:
|
|
480
|
+
log.error(f"Failed to process model {model_name}: {e}")
|
|
481
|
+
raise
|
|
482
|
+
|
|
483
|
+
def _log_summary_statistics(self, results: dict[str, CategorizationResult]) -> None:
|
|
484
|
+
"""Log summary statistics for all processed models."""
|
|
485
|
+
if not results:
|
|
486
|
+
log.warning("No models were successfully processed")
|
|
487
|
+
return
|
|
488
|
+
|
|
489
|
+
total_messages = sum(result.total_messages for result in results.values())
|
|
490
|
+
total_categorized = sum(
|
|
491
|
+
result.categorized_messages for result in results.values()
|
|
492
|
+
)
|
|
493
|
+
total_mappings_added = sum(
|
|
494
|
+
result.updated_mappings_count for result in results.values()
|
|
495
|
+
)
|
|
496
|
+
|
|
497
|
+
overall_success_rate = (
|
|
498
|
+
total_categorized / total_messages if total_messages > 0 else 0.0
|
|
499
|
+
)
|
|
500
|
+
|
|
501
|
+
log.info("=== CATEGORIZATION SUMMARY ===")
|
|
502
|
+
log.info(f"Models processed: {len(results)}")
|
|
503
|
+
log.info(f"Total messages: {total_messages}")
|
|
504
|
+
log.info(f"Messages categorized: {total_categorized}")
|
|
505
|
+
log.info(f"Overall success rate: {overall_success_rate:.1%}")
|
|
506
|
+
log.info(f"New task mappings added: {total_mappings_added}")
|
|
507
|
+
log.info("==============================")
|
|
508
|
+
|
|
509
|
+
|
|
510
|
+
def main(config_path: str = None):
|
|
511
|
+
"""Main entry point when running the script directly."""
|
|
512
|
+
try:
|
|
513
|
+
# Import here to avoid circular imports
|
|
514
|
+
from evaluation.shared import EvaluationConfigLoader
|
|
515
|
+
|
|
516
|
+
# Use default config path if none provided
|
|
517
|
+
if config_path is None:
|
|
518
|
+
# This default path is for standalone testing purposes
|
|
519
|
+
config_path = Path.cwd() / "tests" / "evaluation" / "config.json"
|
|
520
|
+
if not config_path.exists():
|
|
521
|
+
log.error(f"Default test config not found at {config_path}")
|
|
522
|
+
return
|
|
523
|
+
|
|
524
|
+
config_loader = EvaluationConfigLoader(config_path)
|
|
525
|
+
config = config_loader.load_configuration()
|
|
526
|
+
results_dir_name = config.results_directory
|
|
527
|
+
|
|
528
|
+
# Results path should be based on the current working directory
|
|
529
|
+
base_results_path = Path.cwd() / "results" / results_dir_name
|
|
530
|
+
|
|
531
|
+
orchestrator = MessageOrganizer()
|
|
532
|
+
results = orchestrator.categorize_all_messages(str(base_results_path))
|
|
533
|
+
|
|
534
|
+
log.info("Message categorization completed successfully!")
|
|
535
|
+
log.info(f"Processed {len(results)} models")
|
|
536
|
+
|
|
537
|
+
except Exception as e:
|
|
538
|
+
log.error(f"Script execution failed: {e}")
|
|
539
|
+
raise
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
if __name__ == "__main__":
|
|
543
|
+
import argparse
|
|
544
|
+
|
|
545
|
+
parser = argparse.ArgumentParser(description="Categorize evaluation messages.")
|
|
546
|
+
parser.add_argument(
|
|
547
|
+
"--config",
|
|
548
|
+
type=str,
|
|
549
|
+
help="Path to the evaluation config.json file. If not provided, uses default test config.",
|
|
550
|
+
)
|
|
551
|
+
args = parser.parse_args()
|
|
552
|
+
|
|
553
|
+
main(args.config)
|
|
@@ -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>
|