solace-agent-mesh 0.2.4__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 -181
- 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.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
- solace_agent_mesh/agents/base_agent_component.py +0 -256
- 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-a-zJ6rLx.js +0 -46
- 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-44c41103.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.4.dist-info/METADATA +0 -176
- solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
- solace_agent_mesh-0.2.4.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.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,569 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Collection of Python tools that can be configured for general purpose agents.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import inspect
|
|
7
|
+
import json
|
|
8
|
+
import os
|
|
9
|
+
import tempfile
|
|
10
|
+
import uuid
|
|
11
|
+
from datetime import datetime, timezone
|
|
12
|
+
from typing import Any, Dict, Optional, Tuple
|
|
13
|
+
from playwright.async_api import async_playwright
|
|
14
|
+
|
|
15
|
+
from google.adk.tools import ToolContext
|
|
16
|
+
from solace_ai_connector.common.log import log
|
|
17
|
+
|
|
18
|
+
from markitdown import MarkItDown, UnsupportedFormatException
|
|
19
|
+
from mermaid_cli import render_mermaid
|
|
20
|
+
|
|
21
|
+
from ...agent.utils.artifact_helpers import (
|
|
22
|
+
ensure_correct_extension,
|
|
23
|
+
save_artifact_with_metadata,
|
|
24
|
+
METADATA_SUFFIX,
|
|
25
|
+
DEFAULT_SCHEMA_MAX_KEYS,
|
|
26
|
+
)
|
|
27
|
+
from ...agent.utils.context_helpers import get_original_session_id
|
|
28
|
+
|
|
29
|
+
from google.genai import types as adk_types
|
|
30
|
+
from .tool_definition import BuiltinTool
|
|
31
|
+
from .registry import tool_registry
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _simple_truncate_text(text: str, max_bytes: int = 2048) -> Tuple[str, bool]:
|
|
35
|
+
"""Truncates text to a maximum number of bytes for preview."""
|
|
36
|
+
truncated = False
|
|
37
|
+
preview_text = text
|
|
38
|
+
if not isinstance(text, str):
|
|
39
|
+
return "", False
|
|
40
|
+
if len(text.encode("utf-8")) > max_bytes:
|
|
41
|
+
encoded = text.encode("utf-8")
|
|
42
|
+
preview_text = encoded[:max_bytes].decode("utf-8", errors="ignore") + "..."
|
|
43
|
+
truncated = True
|
|
44
|
+
return preview_text, truncated
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
async def convert_file_to_markdown(
|
|
48
|
+
input_filename: str,
|
|
49
|
+
tool_context: ToolContext = None,
|
|
50
|
+
tool_config: Optional[Dict[str, Any]] = None,
|
|
51
|
+
) -> Dict[str, Any]:
|
|
52
|
+
"""
|
|
53
|
+
Converts an input file artifact to Markdown using the MarkItDown library.
|
|
54
|
+
The supported input types are those supported by MarkItDown (e.g., PDF, DOCX, XLSX, HTML, CSV, PPTX, ZIP).
|
|
55
|
+
The output is a new Markdown artifact.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
input_filename: The filename (and optional :version) of the input artifact.
|
|
59
|
+
tool_context: The context provided by the ADK framework.
|
|
60
|
+
tool_config: Optional dictionary for tool-specific configuration (unused by this tool).
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
A dictionary with status, output artifact details, and a preview of the result.
|
|
64
|
+
"""
|
|
65
|
+
if not tool_context:
|
|
66
|
+
return {"status": "error", "message": "ToolContext is missing."}
|
|
67
|
+
|
|
68
|
+
log_identifier = f"[GeneralTool:convert_to_markdown:{input_filename}]"
|
|
69
|
+
log.info("%s Processing request.", log_identifier)
|
|
70
|
+
|
|
71
|
+
temp_input_file = None
|
|
72
|
+
original_input_basename = "unknown_input"
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
inv_context = tool_context._invocation_context
|
|
76
|
+
app_name = inv_context.app_name
|
|
77
|
+
user_id = inv_context.user_id
|
|
78
|
+
session_id = get_original_session_id(inv_context)
|
|
79
|
+
artifact_service = inv_context.artifact_service
|
|
80
|
+
if not artifact_service:
|
|
81
|
+
raise ValueError("ArtifactService is not available in the context.")
|
|
82
|
+
|
|
83
|
+
parts = input_filename.split(":", 1)
|
|
84
|
+
filename_base_for_load = parts[0]
|
|
85
|
+
version_str = parts[1] if len(parts) > 1 else None
|
|
86
|
+
version_to_load = int(version_str) if version_str else None
|
|
87
|
+
|
|
88
|
+
if version_to_load is None:
|
|
89
|
+
list_versions_method = getattr(artifact_service, "list_versions")
|
|
90
|
+
if inspect.iscoroutinefunction(list_versions_method):
|
|
91
|
+
versions = await list_versions_method(
|
|
92
|
+
app_name=app_name,
|
|
93
|
+
user_id=user_id,
|
|
94
|
+
session_id=session_id,
|
|
95
|
+
filename=filename_base_for_load,
|
|
96
|
+
)
|
|
97
|
+
else:
|
|
98
|
+
versions = await asyncio.to_thread(
|
|
99
|
+
list_versions_method,
|
|
100
|
+
app_name=app_name,
|
|
101
|
+
user_id=user_id,
|
|
102
|
+
session_id=session_id,
|
|
103
|
+
filename=filename_base_for_load,
|
|
104
|
+
)
|
|
105
|
+
if not versions:
|
|
106
|
+
raise FileNotFoundError(
|
|
107
|
+
f"Artifact '{filename_base_for_load}' not found."
|
|
108
|
+
)
|
|
109
|
+
version_to_load = max(versions)
|
|
110
|
+
log.debug(
|
|
111
|
+
"%s Using latest version for input: %d", log_identifier, version_to_load
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
metadata_filename_to_load = f"{filename_base_for_load}{METADATA_SUFFIX}"
|
|
115
|
+
try:
|
|
116
|
+
load_meta_method = getattr(artifact_service, "load_artifact")
|
|
117
|
+
if inspect.iscoroutinefunction(load_meta_method):
|
|
118
|
+
metadata_part = await load_meta_method(
|
|
119
|
+
app_name=app_name,
|
|
120
|
+
user_id=user_id,
|
|
121
|
+
session_id=session_id,
|
|
122
|
+
filename=metadata_filename_to_load,
|
|
123
|
+
version=version_to_load,
|
|
124
|
+
)
|
|
125
|
+
else:
|
|
126
|
+
metadata_part = await asyncio.to_thread(
|
|
127
|
+
load_meta_method,
|
|
128
|
+
app_name=app_name,
|
|
129
|
+
user_id=user_id,
|
|
130
|
+
session_id=session_id,
|
|
131
|
+
filename=metadata_filename_to_load,
|
|
132
|
+
version=version_to_load,
|
|
133
|
+
)
|
|
134
|
+
if not metadata_part or not metadata_part.inline_data:
|
|
135
|
+
raise FileNotFoundError(
|
|
136
|
+
f"Metadata for '{filename_base_for_load}' v{version_to_load} not found."
|
|
137
|
+
)
|
|
138
|
+
input_metadata = json.loads(metadata_part.inline_data.data.decode("utf-8"))
|
|
139
|
+
original_input_filename_from_meta = input_metadata.get(
|
|
140
|
+
"filename", filename_base_for_load
|
|
141
|
+
)
|
|
142
|
+
original_input_basename, original_input_ext = os.path.splitext(
|
|
143
|
+
original_input_filename_from_meta
|
|
144
|
+
)
|
|
145
|
+
except Exception as meta_err:
|
|
146
|
+
log.warning(
|
|
147
|
+
"%s Could not load metadata for '%s' v%s: %s. Using input filename for naming.",
|
|
148
|
+
log_identifier,
|
|
149
|
+
filename_base_for_load,
|
|
150
|
+
version_to_load,
|
|
151
|
+
meta_err,
|
|
152
|
+
)
|
|
153
|
+
original_input_basename, original_input_ext = os.path.splitext(
|
|
154
|
+
filename_base_for_load
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
load_artifact_method = getattr(artifact_service, "load_artifact")
|
|
158
|
+
if inspect.iscoroutinefunction(load_artifact_method):
|
|
159
|
+
input_artifact_part = await load_artifact_method(
|
|
160
|
+
app_name=app_name,
|
|
161
|
+
user_id=user_id,
|
|
162
|
+
session_id=session_id,
|
|
163
|
+
filename=filename_base_for_load,
|
|
164
|
+
version=version_to_load,
|
|
165
|
+
)
|
|
166
|
+
else:
|
|
167
|
+
input_artifact_part = await asyncio.to_thread(
|
|
168
|
+
load_artifact_method,
|
|
169
|
+
app_name=app_name,
|
|
170
|
+
user_id=user_id,
|
|
171
|
+
session_id=session_id,
|
|
172
|
+
filename=filename_base_for_load,
|
|
173
|
+
version=version_to_load,
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
if not input_artifact_part or not input_artifact_part.inline_data:
|
|
177
|
+
raise FileNotFoundError(
|
|
178
|
+
f"Content for artifact '{filename_base_for_load}' v{version_to_load} not found."
|
|
179
|
+
)
|
|
180
|
+
input_bytes = input_artifact_part.inline_data.data
|
|
181
|
+
|
|
182
|
+
temp_suffix = original_input_ext if original_input_ext else None
|
|
183
|
+
temp_input_file = tempfile.NamedTemporaryFile(delete=False, suffix=temp_suffix)
|
|
184
|
+
temp_input_file.write(input_bytes)
|
|
185
|
+
temp_input_file.close()
|
|
186
|
+
log.debug(
|
|
187
|
+
"%s Input artifact content written to temporary file: %s",
|
|
188
|
+
log_identifier,
|
|
189
|
+
temp_input_file.name,
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
md_converter = MarkItDown()
|
|
193
|
+
log.debug(
|
|
194
|
+
"%s Calling MarkItDown.convert() on %s",
|
|
195
|
+
log_identifier,
|
|
196
|
+
temp_input_file.name,
|
|
197
|
+
)
|
|
198
|
+
conversion_result = await asyncio.to_thread(
|
|
199
|
+
md_converter.convert, temp_input_file.name
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
markdown_text_content = (
|
|
203
|
+
conversion_result.text_content
|
|
204
|
+
if conversion_result and conversion_result.text_content
|
|
205
|
+
else ""
|
|
206
|
+
)
|
|
207
|
+
if not markdown_text_content:
|
|
208
|
+
log.warning(
|
|
209
|
+
"%s MarkItDown conversion resulted in empty content for %s.",
|
|
210
|
+
log_identifier,
|
|
211
|
+
input_filename,
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
markdown_content_bytes = markdown_text_content.encode("utf-8")
|
|
215
|
+
|
|
216
|
+
output_filename = f"{original_input_basename}_converted.md"
|
|
217
|
+
output_mime_type = "text/markdown"
|
|
218
|
+
|
|
219
|
+
host_component = getattr(inv_context.agent, "host_component", None)
|
|
220
|
+
schema_max_keys = DEFAULT_SCHEMA_MAX_KEYS
|
|
221
|
+
|
|
222
|
+
save_metadata_dict = {
|
|
223
|
+
"description": f"Markdown conversion of '{original_input_basename}{original_input_ext}'",
|
|
224
|
+
"source_artifact": input_filename,
|
|
225
|
+
"source_artifact_version": version_to_load,
|
|
226
|
+
"conversion_tool": "MarkItDown",
|
|
227
|
+
}
|
|
228
|
+
save_result = await save_artifact_with_metadata(
|
|
229
|
+
artifact_service=artifact_service,
|
|
230
|
+
app_name=app_name,
|
|
231
|
+
user_id=user_id,
|
|
232
|
+
session_id=session_id,
|
|
233
|
+
filename=output_filename,
|
|
234
|
+
content_bytes=markdown_content_bytes,
|
|
235
|
+
mime_type=output_mime_type,
|
|
236
|
+
metadata_dict=save_metadata_dict,
|
|
237
|
+
timestamp=datetime.now(timezone.utc),
|
|
238
|
+
schema_max_keys=schema_max_keys,
|
|
239
|
+
tool_context=tool_context,
|
|
240
|
+
)
|
|
241
|
+
if save_result["status"] == "error":
|
|
242
|
+
raise IOError(
|
|
243
|
+
f"Failed to save Markdown artifact: {save_result.get('message', 'Unknown error')}"
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
preview_data, truncated = _simple_truncate_text(markdown_text_content)
|
|
247
|
+
preview_message = f"File converted to Markdown successfully. Full result saved as '{output_filename}' v{save_result['data_version']}."
|
|
248
|
+
if truncated:
|
|
249
|
+
preview_message += f" Preview shows first portion."
|
|
250
|
+
|
|
251
|
+
return {
|
|
252
|
+
"status": "success",
|
|
253
|
+
"message": preview_message,
|
|
254
|
+
"output_filename": output_filename,
|
|
255
|
+
"output_version": save_result["data_version"],
|
|
256
|
+
"result_preview": preview_data,
|
|
257
|
+
"result_truncated": truncated,
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
except FileNotFoundError as e:
|
|
261
|
+
log.warning("%s File not found error: %s", log_identifier, e)
|
|
262
|
+
return {"status": "error", "message": str(e)}
|
|
263
|
+
except UnsupportedFormatException as e:
|
|
264
|
+
log.warning("%s MarkItDown unsupported format: %s", log_identifier, e)
|
|
265
|
+
return {
|
|
266
|
+
"status": "error",
|
|
267
|
+
"message": f"Unsupported file format for MarkItDown: {e}",
|
|
268
|
+
}
|
|
269
|
+
except ValueError as e:
|
|
270
|
+
log.warning("%s Value error: %s", log_identifier, e)
|
|
271
|
+
return {"status": "error", "message": str(e)}
|
|
272
|
+
except Exception as e:
|
|
273
|
+
log.exception(
|
|
274
|
+
"%s Unexpected error in convert_file_to_markdown: %s", log_identifier, e
|
|
275
|
+
)
|
|
276
|
+
return {"status": "error", "message": f"An unexpected error occurred: {e}"}
|
|
277
|
+
finally:
|
|
278
|
+
if (
|
|
279
|
+
temp_input_file
|
|
280
|
+
and temp_input_file.name
|
|
281
|
+
and os.path.exists(temp_input_file.name)
|
|
282
|
+
):
|
|
283
|
+
try:
|
|
284
|
+
os.remove(temp_input_file.name)
|
|
285
|
+
log.debug(
|
|
286
|
+
"%s Removed temporary input file: %s",
|
|
287
|
+
log_identifier,
|
|
288
|
+
temp_input_file.name,
|
|
289
|
+
)
|
|
290
|
+
except OSError as e_remove:
|
|
291
|
+
log.error(
|
|
292
|
+
"%s Failed to remove temporary input file %s: %s",
|
|
293
|
+
log_identifier,
|
|
294
|
+
temp_input_file.name,
|
|
295
|
+
e_remove,
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
async def _convert_svg_to_png_with_playwright(svg_data: str, scale: int = 2) -> bytes:
|
|
299
|
+
"""
|
|
300
|
+
Converts SVG data to a PNG image using Playwright.
|
|
301
|
+
|
|
302
|
+
Args:
|
|
303
|
+
svg_data (str): The SVG data to be converted.
|
|
304
|
+
scale (int, optional): The scale factor for the PNG image. Defaults to 2.
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
bytes: The PNG image data as a byte array.
|
|
308
|
+
|
|
309
|
+
Raises:
|
|
310
|
+
ValueError: If the SVG bounding box cannot be determined.
|
|
311
|
+
|
|
312
|
+
"""
|
|
313
|
+
async with async_playwright() as p:
|
|
314
|
+
browser = await p.chromium.launch()
|
|
315
|
+
context = await browser.new_context(device_scale_factor=scale)
|
|
316
|
+
page = await context.new_page()
|
|
317
|
+
|
|
318
|
+
html_content = f"""
|
|
319
|
+
<html>
|
|
320
|
+
<body style="margin: 0; padding: 0; background: white;">
|
|
321
|
+
<div id="container">{svg_data}</div>
|
|
322
|
+
</body>
|
|
323
|
+
</html>
|
|
324
|
+
"""
|
|
325
|
+
await page.set_content(html_content, wait_until="load")
|
|
326
|
+
await page.wait_for_timeout(50)
|
|
327
|
+
|
|
328
|
+
svg = page.locator("svg")
|
|
329
|
+
box = await svg.bounding_box()
|
|
330
|
+
if not box:
|
|
331
|
+
raise ValueError("Could not determine SVG bounding box.")
|
|
332
|
+
|
|
333
|
+
width = int(box["width"])
|
|
334
|
+
height = int(box["height"])
|
|
335
|
+
|
|
336
|
+
await page.set_viewport_size({"width": width, "height": height})
|
|
337
|
+
|
|
338
|
+
image_data = await svg.screenshot(type="png")
|
|
339
|
+
|
|
340
|
+
await browser.close()
|
|
341
|
+
return image_data
|
|
342
|
+
|
|
343
|
+
async def mermaid_diagram_generator(
|
|
344
|
+
mermaid_syntax: str,
|
|
345
|
+
output_filename: Optional[str] = None,
|
|
346
|
+
tool_context: ToolContext = None,
|
|
347
|
+
tool_config: Optional[Dict[str, Any]] = None,
|
|
348
|
+
) -> Dict[str, Any]:
|
|
349
|
+
"""
|
|
350
|
+
Generates a PNG image from Mermaid diagram syntax and saves it as an artifact.
|
|
351
|
+
The diagram must be detailed.
|
|
352
|
+
|
|
353
|
+
Args:
|
|
354
|
+
mermaid_syntax: The Mermaid diagram syntax (string).
|
|
355
|
+
output_filename: Optional desired name for the output PNG file.
|
|
356
|
+
If not provided, a unique name will be generated.
|
|
357
|
+
tool_context: The context provided by the ADK framework.
|
|
358
|
+
tool_config: Optional dictionary for tool-specific configuration (unused by this tool).
|
|
359
|
+
|
|
360
|
+
Returns:
|
|
361
|
+
A dictionary with status, output artifact details, and a preview message.
|
|
362
|
+
"""
|
|
363
|
+
if not tool_context:
|
|
364
|
+
return {"status": "error", "message": "ToolContext is missing."}
|
|
365
|
+
|
|
366
|
+
log_identifier = f"[GeneralTool:mermaid_diagram_generator]"
|
|
367
|
+
if output_filename:
|
|
368
|
+
log_identifier += f":{output_filename}"
|
|
369
|
+
log.info("%s Processing request.", log_identifier)
|
|
370
|
+
|
|
371
|
+
try:
|
|
372
|
+
inv_context = tool_context._invocation_context
|
|
373
|
+
app_name = inv_context.app_name
|
|
374
|
+
user_id = inv_context.user_id
|
|
375
|
+
session_id = get_original_session_id(inv_context)
|
|
376
|
+
artifact_service = inv_context.artifact_service
|
|
377
|
+
|
|
378
|
+
if not artifact_service:
|
|
379
|
+
raise ValueError("ArtifactService is not available in the context.")
|
|
380
|
+
|
|
381
|
+
log.debug(
|
|
382
|
+
"%s Calling render_mermaid for syntax: %s",
|
|
383
|
+
log_identifier,
|
|
384
|
+
mermaid_syntax[:100] + "...",
|
|
385
|
+
)
|
|
386
|
+
title, desc, svg_image_data = await render_mermaid(
|
|
387
|
+
mermaid_syntax, output_format="svg", background_color="white"
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
if not svg_image_data:
|
|
391
|
+
log.error(
|
|
392
|
+
"%s Failed to render Mermaid diagram. No image data returned.",
|
|
393
|
+
log_identifier,
|
|
394
|
+
)
|
|
395
|
+
return {
|
|
396
|
+
"status": "error",
|
|
397
|
+
"message": "Failed to render Mermaid diagram. No image data returned.",
|
|
398
|
+
}
|
|
399
|
+
try:
|
|
400
|
+
image_data = await _convert_svg_to_png_with_playwright(svg_image_data.decode("utf-8"))
|
|
401
|
+
except Exception as e:
|
|
402
|
+
log.error(
|
|
403
|
+
"%s Failed to convert SVG to PNG with Playwright: %s",
|
|
404
|
+
log_identifier,
|
|
405
|
+
e,
|
|
406
|
+
)
|
|
407
|
+
return {
|
|
408
|
+
"status": "error",
|
|
409
|
+
"message": f"Failed to convert SVG to PNG: {e}",
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
log.debug(
|
|
413
|
+
"%s Mermaid diagram rendered successfully, image_data length: %d bytes",
|
|
414
|
+
log_identifier,
|
|
415
|
+
len(image_data),
|
|
416
|
+
)
|
|
417
|
+
|
|
418
|
+
if output_filename:
|
|
419
|
+
final_output_filename = ensure_correct_extension(output_filename, "png")
|
|
420
|
+
else:
|
|
421
|
+
final_output_filename = f"mermaid_diagram_{uuid.uuid4()}.png"
|
|
422
|
+
|
|
423
|
+
log.debug(
|
|
424
|
+
"%s Determined final output filename: %s",
|
|
425
|
+
log_identifier,
|
|
426
|
+
final_output_filename,
|
|
427
|
+
)
|
|
428
|
+
|
|
429
|
+
output_mime_type = "image/png"
|
|
430
|
+
schema_max_keys = DEFAULT_SCHEMA_MAX_KEYS
|
|
431
|
+
|
|
432
|
+
save_metadata_dict = {
|
|
433
|
+
"description": f"PNG image generated from Mermaid syntax. Original requested filename: {output_filename if output_filename else 'N/A'}",
|
|
434
|
+
"source_format": "mermaid_syntax",
|
|
435
|
+
"generation_tool": "mermaid_diagram_generator (mermaid-cli)",
|
|
436
|
+
"mermaid_title": title if title else "N/A",
|
|
437
|
+
"mermaid_description": desc if desc else "N/A",
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
save_result = await save_artifact_with_metadata(
|
|
441
|
+
artifact_service=artifact_service,
|
|
442
|
+
app_name=app_name,
|
|
443
|
+
user_id=user_id,
|
|
444
|
+
session_id=session_id,
|
|
445
|
+
filename=final_output_filename,
|
|
446
|
+
content_bytes=image_data,
|
|
447
|
+
mime_type=output_mime_type,
|
|
448
|
+
metadata_dict=save_metadata_dict,
|
|
449
|
+
timestamp=datetime.now(timezone.utc),
|
|
450
|
+
schema_max_keys=schema_max_keys,
|
|
451
|
+
tool_context=tool_context,
|
|
452
|
+
)
|
|
453
|
+
|
|
454
|
+
if save_result["status"] == "error":
|
|
455
|
+
log.error(
|
|
456
|
+
"%s Failed to save PNG artifact: %s",
|
|
457
|
+
log_identifier,
|
|
458
|
+
save_result.get("message", "Unknown error"),
|
|
459
|
+
)
|
|
460
|
+
raise IOError(
|
|
461
|
+
f"Failed to save PNG artifact: {save_result.get('message', 'Unknown error')}"
|
|
462
|
+
)
|
|
463
|
+
|
|
464
|
+
log.info(
|
|
465
|
+
"%s PNG artifact saved successfully: %s v%d",
|
|
466
|
+
log_identifier,
|
|
467
|
+
final_output_filename,
|
|
468
|
+
save_result["data_version"],
|
|
469
|
+
)
|
|
470
|
+
|
|
471
|
+
preview_message = f"Mermaid diagram rendered and saved as artifact '{final_output_filename}' v{save_result['data_version']}."
|
|
472
|
+
|
|
473
|
+
return {
|
|
474
|
+
"status": "success",
|
|
475
|
+
"message": preview_message,
|
|
476
|
+
"output_filename": final_output_filename,
|
|
477
|
+
"output_version": save_result["data_version"],
|
|
478
|
+
"result_preview": f"Artifact '{final_output_filename}' (v{save_result['data_version']}) created successfully.",
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
except ValueError as e:
|
|
482
|
+
log.warning(
|
|
483
|
+
"%s Value error in mermaid_diagram_generator: %s", log_identifier, e
|
|
484
|
+
)
|
|
485
|
+
return {"status": "error", "message": str(e)}
|
|
486
|
+
except IOError as e:
|
|
487
|
+
log.warning("%s IO error in mermaid_diagram_generator: %s", log_identifier, e)
|
|
488
|
+
return {"status": "error", "message": str(e)}
|
|
489
|
+
except Exception as e:
|
|
490
|
+
log.exception(
|
|
491
|
+
"%s Unexpected error in mermaid_diagram_generator: %s", log_identifier, e
|
|
492
|
+
)
|
|
493
|
+
return {"status": "error", "message": f"An unexpected error occurred: {e}"}
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
async def _continue_generation() -> Dict[str, Any]:
|
|
497
|
+
"""
|
|
498
|
+
Internal tool to signal the LLM to continue a response that was interrupted.
|
|
499
|
+
This tool is not intended to be called directly by the LLM.
|
|
500
|
+
"""
|
|
501
|
+
return {
|
|
502
|
+
"status": "continue",
|
|
503
|
+
"message": "You were interrupted due to a token limit. Please review your last output and continue *exactly where you left off with no other commentary*. \nTake care with newlines. If the last output did not finish with a newline, should the next character be a newline? This is especially important for files like csv or yaml files, where a missing newline will break the parser. \nFrom the user's point of view, this continuation needs to be seamless. This function (_continue_generation()) is an internal function that you must not call - it is just here to facilitate providing this message to you.\nIn the unlikely case you have nothing additional to output, then just return nothing.",
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
# --- Tool Definitions ---
|
|
508
|
+
|
|
509
|
+
_continue_generation_tool_def = BuiltinTool(
|
|
510
|
+
name="_continue_generation",
|
|
511
|
+
implementation=_continue_generation,
|
|
512
|
+
description="INTERNAL TOOL. This tool is used by the system to continue a response that was interrupted. You MUST NOT call this tool directly.",
|
|
513
|
+
category="internal",
|
|
514
|
+
required_scopes=[],
|
|
515
|
+
parameters=adk_types.Schema(
|
|
516
|
+
type=adk_types.Type.OBJECT,
|
|
517
|
+
properties={},
|
|
518
|
+
required=[],
|
|
519
|
+
),
|
|
520
|
+
examples=[],
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
convert_file_to_markdown_tool_def = BuiltinTool(
|
|
524
|
+
name="convert_file_to_markdown",
|
|
525
|
+
implementation=convert_file_to_markdown,
|
|
526
|
+
description="Converts an input file artifact to Markdown using the MarkItDown library. The supported input types are those supported by MarkItDown (e.g., PDF, DOCX, XLSX, HTML, CSV, PPTX, ZIP). The output is a new Markdown artifact.",
|
|
527
|
+
category="general",
|
|
528
|
+
required_scopes=["tool:general:convert_file"],
|
|
529
|
+
parameters=adk_types.Schema(
|
|
530
|
+
type=adk_types.Type.OBJECT,
|
|
531
|
+
properties={
|
|
532
|
+
"input_filename": adk_types.Schema(
|
|
533
|
+
type=adk_types.Type.STRING,
|
|
534
|
+
description="The filename (and optional :version) of the input artifact.",
|
|
535
|
+
),
|
|
536
|
+
},
|
|
537
|
+
required=["input_filename"],
|
|
538
|
+
),
|
|
539
|
+
examples=[],
|
|
540
|
+
)
|
|
541
|
+
|
|
542
|
+
mermaid_diagram_generator_tool_def = BuiltinTool(
|
|
543
|
+
name="mermaid_diagram_generator",
|
|
544
|
+
implementation=mermaid_diagram_generator,
|
|
545
|
+
description="Generates a PNG image from Mermaid diagram syntax and saves it as an artifact.",
|
|
546
|
+
category="general",
|
|
547
|
+
required_scopes=["tool:general:mermaid"],
|
|
548
|
+
parameters=adk_types.Schema(
|
|
549
|
+
type=adk_types.Type.OBJECT,
|
|
550
|
+
properties={
|
|
551
|
+
"mermaid_syntax": adk_types.Schema(
|
|
552
|
+
type=adk_types.Type.STRING,
|
|
553
|
+
description="The Mermaid diagram syntax (string).",
|
|
554
|
+
),
|
|
555
|
+
"output_filename": adk_types.Schema(
|
|
556
|
+
type=adk_types.Type.STRING,
|
|
557
|
+
description="Optional desired name for the output PNG file. If not provided, a unique name will be generated.",
|
|
558
|
+
nullable=True,
|
|
559
|
+
),
|
|
560
|
+
},
|
|
561
|
+
required=["mermaid_syntax"],
|
|
562
|
+
),
|
|
563
|
+
examples=[],
|
|
564
|
+
)
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
tool_registry.register(_continue_generation_tool_def)
|
|
568
|
+
tool_registry.register(convert_file_to_markdown_tool_def)
|
|
569
|
+
tool_registry.register(mermaid_diagram_generator_tool_def)
|