solace-agent-mesh 0.2.3__py3-none-any.whl → 1.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of solace-agent-mesh might be problematic. Click here for more details.
- solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
- solace_agent_mesh/agent/adk/callbacks.py +1694 -0
- solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
- solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
- solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
- solace_agent_mesh/agent/adk/runner.py +353 -0
- solace_agent_mesh/agent/adk/services.py +240 -0
- solace_agent_mesh/agent/adk/setup.py +751 -0
- solace_agent_mesh/agent/adk/stream_parser.py +214 -0
- solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
- solace_agent_mesh/agent/agent_llm.txt +41 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
- solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
- solace_agent_mesh/agent/sac/app.py +640 -0
- solace_agent_mesh/agent/sac/component.py +3388 -0
- solace_agent_mesh/agent/sac/patch_adk.py +111 -0
- solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
- solace_agent_mesh/agent/sac/task_execution_context.py +176 -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 +90 -0
- solace_agent_mesh/agent/tools/__init__.py +14 -0
- solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
- solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
- solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
- solace_agent_mesh/agent/tools/image_tools.py +1184 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
- solace_agent_mesh/agent/tools/registry.py +36 -0
- solace_agent_mesh/agent/tools/test_tools.py +135 -0
- solace_agent_mesh/agent/tools/tool_definition.py +45 -0
- solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
- solace_agent_mesh/agent/tools/web_tools.py +381 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
- solace_agent_mesh/agent/utils/config_parser.py +47 -0
- solace_agent_mesh/agent/utils/context_helpers.py +60 -0
- solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
- solace_agent_mesh/assets/docs/404.html +16 -0
- solace_agent_mesh/assets/docs/assets/css/styles.906a1503.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/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
- solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
- solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.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/1523c6b4.91c7bc01.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/166ab619.7d97ccaf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
- solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3624.b524e433.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/3d406171.f722eaf5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.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/4c2787c2.66ee00e9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.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/5b4258a4.bda20761.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.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/7040.cb436723.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.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/8356.8a379c04.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.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.d7c16be6.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.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.49e930c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.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/9eff14a2.1bf8f61c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
- solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -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/solace-logo.png +0 -0
- solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -0
- solace_agent_mesh/assets/docs/search-doc-1753813536522.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 -1
- 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 +659 -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 +93 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
- solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
- solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -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 +110 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
- solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
- solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
- solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
- solace_agent_mesh/cli/commands/run_cmd.py +158 -0
- solace_agent_mesh/cli/main.py +17 -294
- solace_agent_mesh/cli/utils.py +135 -204
- solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
- solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
- solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
- solace_agent_mesh/common/__init__.py +1 -0
- solace_agent_mesh/common/a2a_protocol.py +564 -0
- solace_agent_mesh/common/agent_registry.py +42 -0
- solace_agent_mesh/common/client/__init__.py +4 -0
- solace_agent_mesh/common/client/card_resolver.py +21 -0
- solace_agent_mesh/common/client/client.py +85 -0
- solace_agent_mesh/common/client/client_llm.txt +133 -0
- solace_agent_mesh/common/common_llm.txt +144 -0
- solace_agent_mesh/common/constants.py +1 -14
- solace_agent_mesh/common/middleware/__init__.py +12 -0
- solace_agent_mesh/common/middleware/config_resolver.py +130 -0
- solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
- solace_agent_mesh/common/middleware/registry.py +125 -0
- solace_agent_mesh/common/server/__init__.py +4 -0
- solace_agent_mesh/common/server/server.py +122 -0
- solace_agent_mesh/common/server/server_llm.txt +169 -0
- solace_agent_mesh/common/server/task_manager.py +291 -0
- solace_agent_mesh/common/server/utils.py +28 -0
- solace_agent_mesh/common/services/__init__.py +4 -0
- solace_agent_mesh/common/services/employee_service.py +162 -0
- solace_agent_mesh/common/services/identity_service.py +129 -0
- solace_agent_mesh/common/services/providers/__init__.py +4 -0
- solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
- solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
- solace_agent_mesh/common/services/services_llm.txt +132 -0
- solace_agent_mesh/common/types.py +411 -0
- solace_agent_mesh/common/utils/__init__.py +7 -0
- solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
- solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
- solace_agent_mesh/common/utils/embeds/constants.py +55 -0
- solace_agent_mesh/common/utils/embeds/converter.py +452 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
- solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
- solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
- solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
- solace_agent_mesh/common/utils/embeds/types.py +14 -0
- solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
- solace_agent_mesh/common/utils/log_formatters.py +44 -0
- solace_agent_mesh/common/utils/mime_helpers.py +106 -0
- solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
- solace_agent_mesh/common/utils/utils_llm.txt +67 -0
- solace_agent_mesh/config_portal/backend/common.py +66 -24
- solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
- solace_agent_mesh/config_portal/backend/server.py +550 -140
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
- solace_agent_mesh/core_a2a/__init__.py +1 -0
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
- solace_agent_mesh/core_a2a/service.py +331 -0
- solace_agent_mesh/evaluation/config_loader.py +657 -0
- solace_agent_mesh/evaluation/evaluator.py +667 -0
- solace_agent_mesh/evaluation/message_organizer.py +568 -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 +972 -0
- solace_agent_mesh/evaluation/report_generator.py +613 -0
- solace_agent_mesh/evaluation/run.py +613 -0
- solace_agent_mesh/evaluation/subscriber.py +872 -0
- solace_agent_mesh/evaluation/summary_builder.py +775 -0
- solace_agent_mesh/evaluation/test_case_loader.py +714 -0
- solace_agent_mesh/gateway/base/__init__.py +1 -0
- solace_agent_mesh/gateway/base/app.py +266 -0
- solace_agent_mesh/gateway/base/base_llm.txt +119 -0
- solace_agent_mesh/gateway/base/component.py +1542 -0
- solace_agent_mesh/gateway/base/task_context.py +74 -0
- solace_agent_mesh/gateway/gateway_llm.txt +125 -0
- solace_agent_mesh/gateway/http_sse/app.py +190 -0
- solace_agent_mesh/gateway/http_sse/component.py +1602 -0
- solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
- solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
- solace_agent_mesh/gateway/http_sse/main.py +442 -0
- solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
- solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
- solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
- solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
- solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
- solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
- solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
- solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
- solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
- solace_agent_mesh/llm.txt +228 -0
- solace_agent_mesh/llm_detail.txt +2835 -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 +73 -0
- solace_agent_mesh/templates/gateway_component_template.py +400 -0
- solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +55 -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 +63 -0
- solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
- solace_agent_mesh/templates/plugin_readme_template.md +34 -0
- solace_agent_mesh/templates/plugin_tools_template.py +224 -0
- solace_agent_mesh/templates/shared_config.yaml +66 -0
- solace_agent_mesh/templates/templates_llm.txt +147 -0
- solace_agent_mesh/templates/webui.yaml +53 -0
- solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
- solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
- solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
- {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
- solace_agent_mesh/agents/base_agent_component.py +0 -226
- solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
- solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
- solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
- solace_agent_mesh/agents/global/actions/create_file.py +0 -70
- solace_agent_mesh/agents/global/actions/error_action.py +0 -45
- solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
- solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
- solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
- solace_agent_mesh/agents/global/global_agent_component.py +0 -38
- solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
- solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
- solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
- solace_agent_mesh/agents/slack/__init__.py +0 -1
- solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
- solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
- solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
- solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
- solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
- solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
- solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
- solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
- solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
- solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
- solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
- solace_agent_mesh/assets/web-visualizer/index.html +0 -14
- solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
- solace_agent_mesh/cli/commands/add/__init__.py +0 -3
- solace_agent_mesh/cli/commands/add/add.py +0 -88
- solace_agent_mesh/cli/commands/add/agent.py +0 -110
- solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
- solace_agent_mesh/cli/commands/add/gateway.py +0 -374
- solace_agent_mesh/cli/commands/build.py +0 -670
- solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
- solace_agent_mesh/cli/commands/chat/chat.py +0 -361
- solace_agent_mesh/cli/commands/config.py +0 -29
- solace_agent_mesh/cli/commands/init/__init__.py +0 -3
- solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
- solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
- solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
- solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
- solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
- solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
- solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
- solace_agent_mesh/cli/commands/init/init.py +0 -92
- solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
- solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
- solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
- solace_agent_mesh/cli/commands/plugin/add.py +0 -100
- solace_agent_mesh/cli/commands/plugin/build.py +0 -268
- solace_agent_mesh/cli/commands/plugin/create.py +0 -117
- solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
- solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
- solace_agent_mesh/cli/commands/run.py +0 -68
- solace_agent_mesh/cli/commands/visualizer.py +0 -138
- solace_agent_mesh/cli/config.py +0 -85
- solace_agent_mesh/common/action.py +0 -91
- solace_agent_mesh/common/action_list.py +0 -37
- solace_agent_mesh/common/action_response.py +0 -340
- solace_agent_mesh/common/mysql_database.py +0 -40
- solace_agent_mesh/common/postgres_database.py +0 -85
- solace_agent_mesh/common/prompt_templates.py +0 -28
- solace_agent_mesh/common/stimulus_utils.py +0 -152
- solace_agent_mesh/common/time.py +0 -24
- solace_agent_mesh/common/utils.py +0 -712
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DMmCawWe.js +0 -42
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-dd988f05.js +0 -1
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
- solace_agent_mesh/configs/agent_global.yaml +0 -74
- solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
- solace_agent_mesh/configs/agent_slack.yaml +0 -64
- solace_agent_mesh/configs/agent_web_request.yaml +0 -75
- solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
- solace_agent_mesh/configs/error_catcher.yaml +0 -56
- solace_agent_mesh/configs/monitor.yaml +0 -0
- solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
- solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
- solace_agent_mesh/configs/orchestrator.yaml +0 -241
- solace_agent_mesh/configs/service_embedding.yaml +0 -81
- solace_agent_mesh/configs/service_llm.yaml +0 -265
- solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
- solace_agent_mesh/gateway/components/gateway_base.py +0 -47
- solace_agent_mesh/gateway/components/gateway_input.py +0 -278
- solace_agent_mesh/gateway/components/gateway_output.py +0 -298
- solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
- solace_agent_mesh/gateway/identity/identity_base.py +0 -10
- solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
- solace_agent_mesh/gateway/identity/no_identity.py +0 -9
- solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
- solace_agent_mesh/monitors/base_monitor_component.py +0 -26
- solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
- solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
- solace_agent_mesh/orchestrator/__init__.py +0 -0
- solace_agent_mesh/orchestrator/action_manager.py +0 -237
- solace_agent_mesh/orchestrator/components/__init__.py +0 -0
- solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
- solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
- solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
- solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
- solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
- solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
- solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
- solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
- solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
- solace_agent_mesh/services/common/__init__.py +0 -4
- solace_agent_mesh/services/common/auto_expiry.py +0 -45
- solace_agent_mesh/services/common/singleton.py +0 -18
- solace_agent_mesh/services/file_service/__init__.py +0 -14
- solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
- solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
- solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
- solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
- solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
- solace_agent_mesh/services/file_service/file_service.py +0 -437
- solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
- solace_agent_mesh/services/file_service/file_transformations.py +0 -141
- solace_agent_mesh/services/file_service/file_utils.py +0 -324
- solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
- solace_agent_mesh/services/history_service/__init__.py +0 -3
- solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
- solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
- solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
- solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
- solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
- solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
- solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
- solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
- solace_agent_mesh/services/history_service/history_service.py +0 -413
- solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
- solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
- solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
- solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
- solace_agent_mesh/services/middleware_service/__init__.py +0 -0
- solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
- solace_agent_mesh/templates/action.py +0 -38
- solace_agent_mesh/templates/agent.py +0 -29
- solace_agent_mesh/templates/agent.yaml +0 -70
- solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
- solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
- solace_agent_mesh/templates/gateway-flows.yaml +0 -78
- solace_agent_mesh/templates/gateway-header.yaml +0 -16
- solace_agent_mesh/templates/gateway_base.py +0 -15
- solace_agent_mesh/templates/gateway_input.py +0 -98
- solace_agent_mesh/templates/gateway_output.py +0 -71
- solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
- solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
- solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
- solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
- solace_agent_mesh/templates/slack-default-config.yaml +0 -16
- solace_agent_mesh/templates/slack-flows.yaml +0 -81
- solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
- solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
- solace_agent_mesh/templates/web-default-config.yaml +0 -10
- solace_agent_mesh/templates/web-flows.yaml +0 -76
- solace_agent_mesh/tools/__init__.py +0 -0
- solace_agent_mesh/tools/components/__init__.py +0 -0
- solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
- solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
- solace_agent_mesh/tools/config/runtime_config.py +0 -26
- solace_agent_mesh-0.2.3.dist-info/METADATA +0 -172
- solace_agent_mesh-0.2.3.dist-info/RECORD +0 -193
- solace_agent_mesh-0.2.3.dist-info/entry_points.txt +0 -3
- /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
- /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
- /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
- /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
- /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
- /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
- /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
- /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
- {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Defines types used within the embed processing system, like DataFormat.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from enum import Enum, auto
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DataFormat(Enum):
|
|
9
|
+
"""Represents internal data formats during modifier chain execution."""
|
|
10
|
+
|
|
11
|
+
BYTES = auto()
|
|
12
|
+
STRING = auto()
|
|
13
|
+
JSON_OBJECT = auto()
|
|
14
|
+
LIST_OF_DICTS = auto()
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""In Memory Cache utility."""
|
|
2
|
+
|
|
3
|
+
import threading
|
|
4
|
+
import time
|
|
5
|
+
from typing import Any, Dict, Optional
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class InMemoryCache:
|
|
9
|
+
"""A thread-safe Singleton class to manage cache data.
|
|
10
|
+
|
|
11
|
+
Ensures only one instance of the cache exists across the application.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
_instance: Optional["InMemoryCache"] = None
|
|
15
|
+
_lock: threading.Lock = threading.Lock()
|
|
16
|
+
_initialized: bool = False
|
|
17
|
+
|
|
18
|
+
def __new__(cls):
|
|
19
|
+
"""Override __new__ to control instance creation (Singleton pattern).
|
|
20
|
+
|
|
21
|
+
Uses a lock to ensure thread safety during the first instantiation.
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
The singleton instance of InMemoryCache.
|
|
25
|
+
"""
|
|
26
|
+
if cls._instance is None:
|
|
27
|
+
with cls._lock:
|
|
28
|
+
if cls._instance is None:
|
|
29
|
+
cls._instance = super().__new__(cls)
|
|
30
|
+
return cls._instance
|
|
31
|
+
|
|
32
|
+
def __init__(self):
|
|
33
|
+
"""Initialize the cache storage.
|
|
34
|
+
|
|
35
|
+
Uses a flag (_initialized) to ensure this logic runs only on the very first
|
|
36
|
+
creation of the singleton instance.
|
|
37
|
+
"""
|
|
38
|
+
if not self._initialized:
|
|
39
|
+
with self._lock:
|
|
40
|
+
if not self._initialized:
|
|
41
|
+
self._cache_data: Dict[str, Dict[str, Any]] = {}
|
|
42
|
+
self._ttl: Dict[str, float] = {}
|
|
43
|
+
self._data_lock: threading.Lock = threading.Lock()
|
|
44
|
+
self._initialized = True
|
|
45
|
+
|
|
46
|
+
def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
|
|
47
|
+
"""Set a key-value pair.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
key: The key for the data.
|
|
51
|
+
value: The data to store.
|
|
52
|
+
ttl: Time to live in seconds. If None, data will not expire.
|
|
53
|
+
"""
|
|
54
|
+
with self._data_lock:
|
|
55
|
+
self._cache_data[key] = value
|
|
56
|
+
|
|
57
|
+
if ttl is not None:
|
|
58
|
+
self._ttl[key] = time.time() + ttl
|
|
59
|
+
else:
|
|
60
|
+
if key in self._ttl:
|
|
61
|
+
del self._ttl[key]
|
|
62
|
+
|
|
63
|
+
def get(self, key: str, default: Any = None) -> Any:
|
|
64
|
+
"""Get the value associated with a key.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
key: The key for the data within the session.
|
|
68
|
+
default: The value to return if the session or key is not found.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
The cached value, or the default value if not found.
|
|
72
|
+
"""
|
|
73
|
+
with self._data_lock:
|
|
74
|
+
if key in self._ttl and time.time() > self._ttl[key]:
|
|
75
|
+
del self._cache_data[key]
|
|
76
|
+
del self._ttl[key]
|
|
77
|
+
return default
|
|
78
|
+
return self._cache_data.get(key, default)
|
|
79
|
+
|
|
80
|
+
def delete(self, key: str) -> None:
|
|
81
|
+
"""Delete a specific key-value pair from a cache.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
key: The key to delete.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
True if the key was found and deleted, False otherwise.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
with self._data_lock:
|
|
91
|
+
if key in self._cache_data:
|
|
92
|
+
del self._cache_data[key]
|
|
93
|
+
if key in self._ttl:
|
|
94
|
+
del self._ttl[key]
|
|
95
|
+
return True
|
|
96
|
+
return False
|
|
97
|
+
|
|
98
|
+
def clear(self) -> bool:
|
|
99
|
+
"""Remove all data.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
True if the data was cleared, False otherwise.
|
|
103
|
+
"""
|
|
104
|
+
with self._data_lock:
|
|
105
|
+
self._cache_data.clear()
|
|
106
|
+
self._ttl.clear()
|
|
107
|
+
return True
|
|
108
|
+
return False
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
from datetime import datetime, timezone
|
|
5
|
+
import traceback
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DatadogJsonFormatter(logging.Formatter):
|
|
9
|
+
"""
|
|
10
|
+
Custom formatter to output logs in Datadog-compatible JSON format.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
def format(self, record):
|
|
14
|
+
log_entry = {
|
|
15
|
+
"timestamp": datetime.fromtimestamp(
|
|
16
|
+
record.created, tz=timezone.utc
|
|
17
|
+
).isoformat(),
|
|
18
|
+
"level": record.levelname,
|
|
19
|
+
"message": record.getMessage(),
|
|
20
|
+
"logger.name": record.name,
|
|
21
|
+
"logger.thread_name": record.threadName,
|
|
22
|
+
"service": os.getenv("SERVICE_NAME", "solace_agent_mesh"),
|
|
23
|
+
"code.filepath": record.pathname,
|
|
24
|
+
"code.lineno": record.lineno,
|
|
25
|
+
"code.module": record.module,
|
|
26
|
+
"code.funcName": record.funcName,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
dd_trace_id = getattr(record, "dd.trace_id", None)
|
|
30
|
+
if dd_trace_id:
|
|
31
|
+
log_entry["dd.trace_id"] = dd_trace_id
|
|
32
|
+
|
|
33
|
+
dd_span_id = getattr(record, "dd.span_id", None)
|
|
34
|
+
if dd_span_id:
|
|
35
|
+
log_entry["dd.span_id"] = dd_span_id
|
|
36
|
+
|
|
37
|
+
if record.exc_info:
|
|
38
|
+
log_entry["exception.type"] = record.exc_info[0].__name__
|
|
39
|
+
log_entry["exception.message"] = str(record.exc_info[1])
|
|
40
|
+
log_entry["exception.stacktrace"] = "".join(
|
|
41
|
+
traceback.format_exception(*record.exc_info)
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
return json.dumps(log_entry)
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Utility functions for handling MIME types.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import Optional, Set
|
|
6
|
+
|
|
7
|
+
TEXT_CONTAINER_MIME_TYPES: Set[str] = {
|
|
8
|
+
"text/plain",
|
|
9
|
+
"text/markdown",
|
|
10
|
+
"text/html",
|
|
11
|
+
"application/json",
|
|
12
|
+
"application/yaml",
|
|
13
|
+
"text/yaml",
|
|
14
|
+
"application/x-yaml",
|
|
15
|
+
"text/x-yaml",
|
|
16
|
+
"application/xml",
|
|
17
|
+
"text/xml",
|
|
18
|
+
"text/csv",
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
_TEXT_BASED_PRIMARY_TYPES = {"text"}
|
|
22
|
+
_TEXT_BASED_SUBTYPE_WHOLE = {
|
|
23
|
+
"json",
|
|
24
|
+
"xml",
|
|
25
|
+
"yaml",
|
|
26
|
+
"csv",
|
|
27
|
+
"javascript",
|
|
28
|
+
"ecmascript",
|
|
29
|
+
"xhtml+xml",
|
|
30
|
+
"svg+xml",
|
|
31
|
+
"atom+xml",
|
|
32
|
+
"rss+xml",
|
|
33
|
+
"sparql-query",
|
|
34
|
+
"sparql-update",
|
|
35
|
+
"sql",
|
|
36
|
+
"graphql",
|
|
37
|
+
"markdown",
|
|
38
|
+
"html",
|
|
39
|
+
"rtf",
|
|
40
|
+
"sgml",
|
|
41
|
+
}
|
|
42
|
+
_TEXT_BASED_SUBTYPE_SUFFIXES_AFTER_PLUS = {
|
|
43
|
+
"json",
|
|
44
|
+
"xml",
|
|
45
|
+
"yaml",
|
|
46
|
+
"csv",
|
|
47
|
+
"svg",
|
|
48
|
+
"xhtml",
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
def is_text_based_mime_type(mime_type: Optional[str]) -> bool:
|
|
52
|
+
"""
|
|
53
|
+
Checks if a given MIME type is considered text-based.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
mime_type: The MIME type string (e.g., "text/plain", "application/json").
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
True if the MIME type is text-based, False otherwise.
|
|
60
|
+
"""
|
|
61
|
+
if not mime_type:
|
|
62
|
+
return False
|
|
63
|
+
|
|
64
|
+
normalized_mime_type = mime_type.lower().strip()
|
|
65
|
+
|
|
66
|
+
if normalized_mime_type.startswith("text/"):
|
|
67
|
+
return True
|
|
68
|
+
|
|
69
|
+
if normalized_mime_type in TEXT_CONTAINER_MIME_TYPES:
|
|
70
|
+
return True
|
|
71
|
+
|
|
72
|
+
return False
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def is_text_based_file(mime_type: Optional[str], content_bytes: Optional[bytes] = None) -> bool:
|
|
76
|
+
"""
|
|
77
|
+
Determines if a file is text-based based on its MIME type and content.
|
|
78
|
+
Args:
|
|
79
|
+
mime_type: The MIME type of the file.
|
|
80
|
+
content_bytes: The content of the file as bytes.
|
|
81
|
+
Returns:
|
|
82
|
+
True if the file is text-based, False otherwise.
|
|
83
|
+
"""
|
|
84
|
+
if not mime_type:
|
|
85
|
+
return False
|
|
86
|
+
|
|
87
|
+
normalized_mime_type = mime_type.lower().strip()
|
|
88
|
+
primary_type, _, subtype = normalized_mime_type.partition("/")
|
|
89
|
+
|
|
90
|
+
if primary_type in _TEXT_BASED_PRIMARY_TYPES:
|
|
91
|
+
return True
|
|
92
|
+
elif subtype in _TEXT_BASED_SUBTYPE_WHOLE:
|
|
93
|
+
return True
|
|
94
|
+
elif "+" in subtype:
|
|
95
|
+
specific_format = subtype.split("+")[-1]
|
|
96
|
+
if specific_format in _TEXT_BASED_SUBTYPE_SUFFIXES_AFTER_PLUS:
|
|
97
|
+
return True
|
|
98
|
+
elif normalized_mime_type == "application/octet-stream" and content_bytes is not None:
|
|
99
|
+
try:
|
|
100
|
+
sample_size = min(1024, len(content_bytes))
|
|
101
|
+
content_bytes[:sample_size].decode("utf-8")
|
|
102
|
+
return True
|
|
103
|
+
except UnicodeDecodeError:
|
|
104
|
+
return False
|
|
105
|
+
|
|
106
|
+
return False
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
from jwcrypto import jwk
|
|
2
|
+
import uuid
|
|
3
|
+
from starlette.responses import JSONResponse
|
|
4
|
+
from starlette.requests import Request
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import jwt
|
|
8
|
+
import time
|
|
9
|
+
import json
|
|
10
|
+
import hashlib
|
|
11
|
+
import httpx
|
|
12
|
+
|
|
13
|
+
from solace_ai_connector.common.log import log
|
|
14
|
+
|
|
15
|
+
from jwt import PyJWK, PyJWKClient
|
|
16
|
+
|
|
17
|
+
AUTH_HEADER_PREFIX = "Bearer "
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class PushNotificationAuth:
|
|
21
|
+
def _calculate_request_body_sha256(self, data: dict[str, Any]):
|
|
22
|
+
"""Calculates the SHA256 hash of a request body.
|
|
23
|
+
|
|
24
|
+
This logic needs to be same for both the agent who signs the payload and the client verifier.
|
|
25
|
+
"""
|
|
26
|
+
body_str = json.dumps(
|
|
27
|
+
data,
|
|
28
|
+
ensure_ascii=False,
|
|
29
|
+
allow_nan=False,
|
|
30
|
+
indent=None,
|
|
31
|
+
separators=(",", ":"),
|
|
32
|
+
)
|
|
33
|
+
return hashlib.sha256(body_str.encode()).hexdigest()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class PushNotificationSenderAuth(PushNotificationAuth):
|
|
37
|
+
def __init__(self):
|
|
38
|
+
self.public_keys = []
|
|
39
|
+
self.private_key_jwk: PyJWK = None
|
|
40
|
+
|
|
41
|
+
@staticmethod
|
|
42
|
+
async def verify_push_notification_url(url: str) -> bool:
|
|
43
|
+
async with httpx.AsyncClient(timeout=10) as client:
|
|
44
|
+
try:
|
|
45
|
+
validation_token = str(uuid.uuid4())
|
|
46
|
+
response = await client.get(
|
|
47
|
+
url, params={"validationToken": validation_token}
|
|
48
|
+
)
|
|
49
|
+
response.raise_for_status()
|
|
50
|
+
is_verified = response.text == validation_token
|
|
51
|
+
|
|
52
|
+
log.info("Verified push-notification URL: %s => %s", url, is_verified)
|
|
53
|
+
return is_verified
|
|
54
|
+
except Exception as e:
|
|
55
|
+
log.warning(
|
|
56
|
+
"Error during sending push-notification for URL %s: %s", url, e
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
return False
|
|
60
|
+
|
|
61
|
+
def generate_jwk(self):
|
|
62
|
+
key = jwk.JWK.generate(kty="RSA", size=2048, kid=str(uuid.uuid4()), use="sig")
|
|
63
|
+
self.public_keys.append(key.export_public(as_dict=True))
|
|
64
|
+
self.private_key_jwk = PyJWK.from_json(key.export_private())
|
|
65
|
+
|
|
66
|
+
def handle_jwks_endpoint(self, _request: Request):
|
|
67
|
+
"""Allow clients to fetch public keys."""
|
|
68
|
+
return JSONResponse({"keys": self.public_keys})
|
|
69
|
+
|
|
70
|
+
def _generate_jwt(self, data: dict[str, Any]):
|
|
71
|
+
"""JWT is generated by signing both the request payload SHA digest and time of token generation.
|
|
72
|
+
|
|
73
|
+
Payload is signed with private key and it ensures the integrity of payload for client.
|
|
74
|
+
Including iat prevents from replay attack.
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
iat = int(time.time())
|
|
78
|
+
|
|
79
|
+
return jwt.encode(
|
|
80
|
+
{
|
|
81
|
+
"iat": iat,
|
|
82
|
+
"request_body_sha256": self._calculate_request_body_sha256(data),
|
|
83
|
+
},
|
|
84
|
+
key=self.private_key_jwk,
|
|
85
|
+
headers={"kid": self.private_key_jwk.key_id},
|
|
86
|
+
algorithm="RS256",
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
async def send_push_notification(self, url: str, data: dict[str, Any]):
|
|
90
|
+
jwt_token = self._generate_jwt(data)
|
|
91
|
+
headers = {"Authorization": f"Bearer {jwt_token}"}
|
|
92
|
+
async with httpx.AsyncClient(timeout=10) as client:
|
|
93
|
+
try:
|
|
94
|
+
response = await client.post(url, json=data, headers=headers)
|
|
95
|
+
response.raise_for_status()
|
|
96
|
+
log.info("Push-notification sent for URL: %s", url)
|
|
97
|
+
except Exception as e:
|
|
98
|
+
log.warning(
|
|
99
|
+
"Error during sending push-notification for URL %s: %s", url, e
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class PushNotificationReceiverAuth(PushNotificationAuth):
|
|
104
|
+
def __init__(self):
|
|
105
|
+
self.public_keys_jwks = []
|
|
106
|
+
self.jwks_client = None
|
|
107
|
+
|
|
108
|
+
async def load_jwks(self, jwks_url: str):
|
|
109
|
+
self.jwks_client = PyJWKClient(jwks_url)
|
|
110
|
+
|
|
111
|
+
async def verify_push_notification(self, request: Request) -> bool:
|
|
112
|
+
auth_header = request.headers.get("Authorization")
|
|
113
|
+
if not auth_header or not auth_header.startswith(AUTH_HEADER_PREFIX):
|
|
114
|
+
log.warning("Invalid authorization header")
|
|
115
|
+
return False
|
|
116
|
+
|
|
117
|
+
token = auth_header[len(AUTH_HEADER_PREFIX) :]
|
|
118
|
+
signing_key = self.jwks_client.get_signing_key_from_jwt(token)
|
|
119
|
+
|
|
120
|
+
decode_token = jwt.decode(
|
|
121
|
+
token,
|
|
122
|
+
signing_key,
|
|
123
|
+
options={"require": ["iat", "request_body_sha256"]},
|
|
124
|
+
algorithms=["RS256"],
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
actual_body_sha256 = self._calculate_request_body_sha256(await request.json())
|
|
128
|
+
if actual_body_sha256 != decode_token["request_body_sha256"]:
|
|
129
|
+
raise ValueError("Invalid request body")
|
|
130
|
+
|
|
131
|
+
if time.time() - decode_token["iat"] > 60 * 5:
|
|
132
|
+
raise ValueError("Token is expired")
|
|
133
|
+
|
|
134
|
+
return True
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
Here is the comprehensive developer guide for the `utils` directory.
|
|
2
|
+
|
|
3
|
+
## Quick Summary
|
|
4
|
+
The `utils` directory provides a collection of essential, cross-cutting utilities for the Solace AI Connector. Its purpose is to offer robust, reusable solutions for common application needs, including caching, platform compatibility, secure communication, logging, and dynamic content generation.
|
|
5
|
+
|
|
6
|
+
The architecture consists of standalone utility files for specific tasks and a more complex, self-contained subdirectory for advanced functionality. Direct files provide services like a thread-safe in-memory cache (`in_memory_cache.py`), JWT-based authentication for push notifications (`push_notification_auth.py`), custom logging formatters (`log_formatters.py`), and a critical patch for asyncio on macOS (`asyncio_macos_fix.py`).
|
|
7
|
+
|
|
8
|
+
The `embeds` subdirectory provides a powerful system for finding, parsing, and resolving dynamic expressions embedded within strings. These utilities are designed to work together. For instance, a request handler might use `mime_helpers` to validate content type, use the `embeds` system to process the content, and then store the result in the `InMemoryCache` to optimize future requests.
|
|
9
|
+
|
|
10
|
+
## Files and Subdirectories Overview
|
|
11
|
+
- **Direct files:**
|
|
12
|
+
- `__init__.py`: Exposes key utility functions from the package for convenient access.
|
|
13
|
+
- `asyncio_macos_fix.py`: Automatically applies a patch to fix asyncio subprocess issues on macOS.
|
|
14
|
+
- `in_memory_cache.py`: Implements a thread-safe, singleton in-memory cache with TTL support.
|
|
15
|
+
- `log_formatters.py`: Provides custom logging formatters, such as a Datadog-compatible JSON formatter.
|
|
16
|
+
- `mime_helpers.py`: Contains helper functions to classify and identify text-based MIME types.
|
|
17
|
+
- `push_notification_auth.py`: Implements JWT-based authentication for sending and receiving push notifications.
|
|
18
|
+
|
|
19
|
+
- **Subdirectories:**
|
|
20
|
+
- `embeds/`: Provides a comprehensive system for processing embedded dynamic expressions (e.g., math, datetimes, artifact content).
|
|
21
|
+
|
|
22
|
+
## Developer API Reference
|
|
23
|
+
|
|
24
|
+
### Direct Files
|
|
25
|
+
|
|
26
|
+
#### __init__.py
|
|
27
|
+
**Purpose:** Serves as the main entry point for the `utils` package, exporting the most common utility functions for easy importing.
|
|
28
|
+
**Import:** `from solace_ai_connector.common.utils import is_text_based_mime_type`
|
|
29
|
+
|
|
30
|
+
**Classes/Functions/Constants:**
|
|
31
|
+
* `is_text_based_mime_type(mime_type: Optional[str]) -> bool`: Checks if a given MIME type is considered text-based.
|
|
32
|
+
|
|
33
|
+
#### asyncio_macos_fix.py
|
|
34
|
+
**Purpose:** Provides a targeted, automatic fix for a `NotImplementedError` that occurs when creating subprocesses with asyncio on macOS. This module is imported for its side effects and should be loaded early in the application's lifecycle.
|
|
35
|
+
**Import:** `from solace_ai_connector.common.utils import asyncio_macos_fix` (Importing the module is sufficient to apply the patch).
|
|
36
|
+
|
|
37
|
+
**Classes/Functions/Constants:**
|
|
38
|
+
* `ensure_asyncio_compatibility() -> bool`: The core function that applies the patch. It is called automatically when the module is first imported.
|
|
39
|
+
|
|
40
|
+
#### in_memory_cache.py
|
|
41
|
+
**Purpose:** Provides a simple, thread-safe, in-memory cache implemented as a singleton. It's useful for storing frequently accessed data with an optional time-to-live (TTL).
|
|
42
|
+
**Import:** `from solace_ai_connector.common.utils.in_memory_cache import InMemoryCache`
|
|
43
|
+
|
|
44
|
+
**Classes/Functions/Constants:**
|
|
45
|
+
* **`InMemoryCache`**: A singleton class for caching.
|
|
46
|
+
* `set(self, key: str, value: Any, ttl: Optional[int] = None) -> None`: Sets a key-value pair with an optional TTL in seconds.
|
|
47
|
+
* `get(self, key: str, default: Any = None) -> Any`: Retrieves a value by its key, returning a default if the key is not found or has expired.
|
|
48
|
+
* `delete(self, key: str) -> bool`: Deletes a key-value pair from the cache.
|
|
49
|
+
* `clear(self) -> bool`: Removes all items from the cache.
|
|
50
|
+
|
|
51
|
+
#### log_formatters.py
|
|
52
|
+
**Purpose:** Contains custom logging formatters to structure log output for specific platforms, such as Datadog.
|
|
53
|
+
**Import:** `from solace_ai_connector.common.utils.log_formatters import DatadogJsonFormatter`
|
|
54
|
+
|
|
55
|
+
**Classes/Functions/Constants:**
|
|
56
|
+
* **`DatadogJsonFormatter(logging.Formatter)`**: A formatter that outputs log records as a JSON string, compatible with Datadog's standard log attributes. It automatically includes tracing information (`dd.trace_id`, `dd.span_id`) if available.
|
|
57
|
+
|
|
58
|
+
#### mime_helpers.py
|
|
59
|
+
**Purpose:** Provides utilities for handling and classifying MIME types, with a focus on identifying which types represent text-based content.
|
|
60
|
+
**Import:** `from solace_ai_connector.common.utils.mime_helpers import is_text_based_mime_type, TEXT_CONTAINER_MIME_TYPES`
|
|
61
|
+
|
|
62
|
+
**Classes/Functions/Constants:**
|
|
63
|
+
* `is_text_based_mime_type(mime_type: Optional[str]) -> bool`: Returns `True` if the MIME type starts with `text/` or is in the list of known text-based application types (like `application/json`).
|
|
64
|
+
* `TEXT_CONTAINER_MIME_TYPES: Set[str]`: A set of non-`text/*` MIME types that are considered to contain text (e.g., `application/json`, `application/yaml`).
|
|
65
|
+
|
|
66
|
+
#### push_notification_auth.py
|
|
67
|
+
**Purpose:**
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
"
|
|
5
|
-
"env_file": ".env",
|
|
6
|
-
"build_dir": "build",
|
|
1
|
+
import sys
|
|
2
|
+
|
|
3
|
+
INIT_DEFAULT = {
|
|
4
|
+
"namespace": "default_namespace",
|
|
7
5
|
"broker_type": "solace",
|
|
8
6
|
"broker_url": "ws://localhost:8008",
|
|
9
7
|
"broker_vpn": "default",
|
|
@@ -13,23 +11,67 @@ default_options = {
|
|
|
13
11
|
"llm_model_name": "openai/gpt-4o",
|
|
14
12
|
"llm_endpoint_url": "https://api.openai.com/v1",
|
|
15
13
|
"llm_api_key": "",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
14
|
+
"dev_mode": False,
|
|
15
|
+
"add_webui_gateway": True,
|
|
16
|
+
"webui_frontend_welcome_message": "",
|
|
17
|
+
"webui_frontend_bot_name": "Solace Agent Mesh",
|
|
18
|
+
"webui_frontend_collect_feedback": False,
|
|
19
|
+
"webui_fastapi_host": "127.0.0.1",
|
|
20
|
+
"webui_fastapi_port": 8000,
|
|
21
|
+
"webui_enable_embed_resolution": True,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
USE_DEFAULT_SHARED_SESSION = "use_default_shared_session"
|
|
25
|
+
USE_DEFAULT_SHARED_ARTIFACT = "use_default_shared_artifact"
|
|
26
|
+
|
|
27
|
+
DEFAULT_COMMUNICATION_TIMEOUT = 600 # 10 minutes
|
|
28
|
+
|
|
29
|
+
AGENT_DEFAULTS = {
|
|
30
|
+
"supports_streaming": True,
|
|
31
|
+
"model_type": "general",
|
|
32
|
+
"instruction": "You are a helpful AI assistant named __AGENT_NAME__.",
|
|
33
|
+
"artifact_handling_mode": "embed",
|
|
34
|
+
"enable_embed_resolution": True,
|
|
35
|
+
"enable_artifact_content_instruction": True,
|
|
36
|
+
"tools": "[]",
|
|
37
|
+
"session_service_type": USE_DEFAULT_SHARED_SESSION,
|
|
38
|
+
"session_service_behavior": "PERSISTENT",
|
|
39
|
+
"artifact_service_type": USE_DEFAULT_SHARED_ARTIFACT,
|
|
40
|
+
"artifact_service_base_path": "/tmp/samv2",
|
|
41
|
+
"artifact_service_scope": "namespace",
|
|
42
|
+
"agent_card_description": "A helpful AI assistant.",
|
|
43
|
+
"agent_card_default_input_modes": ["text"],
|
|
44
|
+
"agent_card_default_output_modes": ["text", "file"],
|
|
45
|
+
"agent_card_skills_str": "[]",
|
|
46
|
+
"agent_card_publishing_interval": 10,
|
|
47
|
+
"agent_discovery_enabled": True,
|
|
48
|
+
"inter_agent_communication_allow_list": ["*"],
|
|
49
|
+
"inter_agent_communication_deny_list": [],
|
|
50
|
+
"inter_agent_communication_timeout": DEFAULT_COMMUNICATION_TIMEOUT,
|
|
51
|
+
"namespace": "${NAMESPACE}",
|
|
33
52
|
}
|
|
34
53
|
|
|
35
|
-
|
|
54
|
+
GATEWAY_DEFAULTS = {
|
|
55
|
+
"namespace": "${NAMESPACE}",
|
|
56
|
+
"gateway_id_suffix": "-gw-01",
|
|
57
|
+
"artifact_service_type": USE_DEFAULT_SHARED_ARTIFACT,
|
|
58
|
+
"artifact_service_scope": "namespace",
|
|
59
|
+
"artifact_service_base_path": "/tmp/samv2",
|
|
60
|
+
"system_purpose": (
|
|
61
|
+
"The system is an AI Chatbot with agentic capabilities.\n"
|
|
62
|
+
"It will use the agents available to provide information,\n"
|
|
63
|
+
"reasoning and general assistance for the users in this system.\n"
|
|
64
|
+
"**Always return useful artifacts and files that you create to the user.**\n"
|
|
65
|
+
"Provide a status update before each tool call.\n"
|
|
66
|
+
"Your external name is Agent Mesh."
|
|
67
|
+
),
|
|
68
|
+
"response_format": (
|
|
69
|
+
"Responses should be clear, concise, and professionally toned.\n"
|
|
70
|
+
"Format responses to the user in Markdown using appropriate formatting."
|
|
71
|
+
),
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
port_55555 = "-p 55554:55555" if sys.platform == "darwin" else "-p 55555:55555"
|
|
76
|
+
|
|
77
|
+
CONTAINER_RUN_COMMAND = f" run -d --rm -p 8080:8080 {port_55555} -p 8008:8008 -u 1004 --shm-size=2g --env username_admin_globalaccesslevel=admin --env username_admin_password=admin --name=solace-broker solace/solace-pubsub-standard"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
try:
|
|
5
|
+
from cli.utils import get_sam_cli_home_dir
|
|
6
|
+
SAM_HOME = get_sam_cli_home_dir()
|
|
7
|
+
except ImportError:
|
|
8
|
+
print(
|
|
9
|
+
"WARNING: Could not import 'get_sam_cli_home_dir' from 'cli.utils'. "
|
|
10
|
+
"Falling back to legacy ~/.sam paths for Plugin Catalog. "
|
|
11
|
+
"SAM_CLI_HOME environment variable will not be respected in this mode."
|
|
12
|
+
)
|
|
13
|
+
SAM_HOME = Path(os.path.expanduser("~/.sam"))
|
|
14
|
+
SAM_HOME.mkdir(parents=True, exist_ok=True)
|
|
15
|
+
|
|
16
|
+
DEFAULT_OFFICIAL_REGISTRY_URL = (
|
|
17
|
+
"https://github.com/SolaceLabs/solace-agent-mesh-core-plugins"
|
|
18
|
+
)
|
|
19
|
+
OFFICIAL_REGISTRY_GIT_BRANCH = "main"
|
|
20
|
+
IGNORE_OFFICIAL_FLAG_REPOS = []
|
|
21
|
+
|
|
22
|
+
USER_REGISTRIES_PATH = SAM_HOME / "plugin_catalog_registries.json"
|
|
23
|
+
PLUGIN_CATALOG_TEMP_DIR = SAM_HOME / "plugin_catalog_tmp"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from typing import List, Optional, Dict, Any
|
|
2
|
+
from pydantic import BaseModel
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class PyProjectAuthor(BaseModel):
|
|
6
|
+
name: Optional[str] = None
|
|
7
|
+
email: Optional[str] = None
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class PyProjectDetails(BaseModel):
|
|
11
|
+
name: str
|
|
12
|
+
version: str
|
|
13
|
+
description: Optional[str] = None
|
|
14
|
+
authors: Optional[List[PyProjectAuthor]] = None
|
|
15
|
+
plugin_type: Optional[str] = "custom"
|
|
16
|
+
custom_metadata: Optional[Dict[str, Any]] = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class AgentCardSkill(BaseModel):
|
|
20
|
+
name: str
|
|
21
|
+
description: Optional[str] = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class AgentCard(BaseModel):
|
|
25
|
+
displayName: Optional[str] = None
|
|
26
|
+
shortDescription: Optional[str] = None
|
|
27
|
+
Skill: Optional[List[AgentCardSkill]] = None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class PluginScrapedInfo(BaseModel):
|
|
31
|
+
id: str
|
|
32
|
+
pyproject: PyProjectDetails
|
|
33
|
+
readme_content: Optional[str] = None
|
|
34
|
+
agent_card: Optional[AgentCard] = None
|
|
35
|
+
source_registry_name: Optional[str] = None
|
|
36
|
+
source_registry_location: str
|
|
37
|
+
source_type: str
|
|
38
|
+
plugin_subpath: str
|
|
39
|
+
is_official: bool
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class Registry(BaseModel):
|
|
43
|
+
id: str
|
|
44
|
+
path_or_url: str
|
|
45
|
+
name: Optional[str] = None
|
|
46
|
+
type: str
|
|
47
|
+
is_default: bool = False
|
|
48
|
+
is_official_source: bool = False
|
|
49
|
+
git_branch: Optional[str] = None
|