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
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"""Retrieve File content action"""
|
|
2
|
-
|
|
3
|
-
from solace_ai_connector.common.log import log
|
|
4
|
-
import re
|
|
5
|
-
import json
|
|
6
|
-
|
|
7
|
-
from ....common.action import Action
|
|
8
|
-
from ....common.action_response import ActionResponse, InlineFile
|
|
9
|
-
from ....services.file_service import FS_PROTOCOL, FS_URL_REGEX, FileService
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class RetrieveFile(Action):
|
|
13
|
-
def __init__(self, **kwargs):
|
|
14
|
-
super().__init__(
|
|
15
|
-
{
|
|
16
|
-
"name": "retrieve_file",
|
|
17
|
-
"prompt_directive": f"Retrieve the content of a text based file form a {FS_PROTOCOL} URL",
|
|
18
|
-
"params": [
|
|
19
|
-
{
|
|
20
|
-
"name": "url",
|
|
21
|
-
"desc": f'The "{FS_PROTOCOL}://" url of the file (Optionally with query parameters - Without "resolve" parameter)',
|
|
22
|
-
"type": "string",
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
|
-
"required_scopes": ["global:retrieve_file:read"],
|
|
26
|
-
},
|
|
27
|
-
**kwargs,
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
def invoke(self, params, meta={}) -> ActionResponse:
|
|
31
|
-
# Extract the URL from the text
|
|
32
|
-
url = params.get("url")
|
|
33
|
-
# validate the URL
|
|
34
|
-
if not url or not re.match(FS_URL_REGEX, url):
|
|
35
|
-
return ActionResponse(message=f"Invalid {FS_PROTOCOL} URL provided.")
|
|
36
|
-
|
|
37
|
-
try:
|
|
38
|
-
# Download the file
|
|
39
|
-
file_service = FileService()
|
|
40
|
-
file, _, file_meta = file_service.resolve_url(url, meta.get("session_id"), return_extra=True)
|
|
41
|
-
file = file.decode("utf-8", errors="ignore") if type(file) == bytes else file
|
|
42
|
-
except Exception as e:
|
|
43
|
-
log.error("Failed to download file from the url %s: %s", url, str(e))
|
|
44
|
-
return ActionResponse(message=f"Failed to download the file from the URL: {url}")
|
|
45
|
-
|
|
46
|
-
max_allowed_size = self.get_config("max_allowed_file_retrieve_size", None)
|
|
47
|
-
if max_allowed_size and len(file) > max_allowed_size:
|
|
48
|
-
return ActionResponse(message=f"Error: File too large. File size exceeds the maximum allowed size of {max_allowed_size} bytes.")
|
|
49
|
-
|
|
50
|
-
inline_file = InlineFile(content=file, name=file_meta.get("name", "unknown.txt"))
|
|
51
|
-
return ActionResponse(message=f"Returning content of the file {url}.", inline_files=[inline_file])
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"""The agent component for the global actions"""
|
|
2
|
-
|
|
3
|
-
import copy
|
|
4
|
-
|
|
5
|
-
from ..base_agent_component import (
|
|
6
|
-
agent_info,
|
|
7
|
-
BaseAgentComponent,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
from .actions.agent_state_change import AgentStateChangeAction
|
|
11
|
-
from .actions.clear_history import ClearHistory
|
|
12
|
-
from .actions.error_action import ErrorAction
|
|
13
|
-
from .actions.plantuml_diagram import PlantUmlDiagram
|
|
14
|
-
from .actions.plotly_graph import PlotlyGraph
|
|
15
|
-
from .actions.retrieve_file import RetrieveFile
|
|
16
|
-
from .actions.create_file import CreateFile
|
|
17
|
-
from .actions.convert_file_to_markdown import ConvertFileToMarkdown
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
info = copy.deepcopy(agent_info)
|
|
21
|
-
info["agent_name"] = "global"
|
|
22
|
-
info["class_name"] = "GlobalAgentComponent"
|
|
23
|
-
info["description"] = "Global agent."
|
|
24
|
-
info["always_open"] = True
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class GlobalAgentComponent(BaseAgentComponent):
|
|
28
|
-
info = info
|
|
29
|
-
actions = [
|
|
30
|
-
AgentStateChangeAction,
|
|
31
|
-
ClearHistory,
|
|
32
|
-
ErrorAction,
|
|
33
|
-
PlantUmlDiagram,
|
|
34
|
-
PlotlyGraph,
|
|
35
|
-
RetrieveFile,
|
|
36
|
-
CreateFile,
|
|
37
|
-
ConvertFileToMarkdown
|
|
38
|
-
]
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"""Image Creation action"""
|
|
2
|
-
|
|
3
|
-
from solace_ai_connector.common.log import log
|
|
4
|
-
import random
|
|
5
|
-
import requests
|
|
6
|
-
import base64
|
|
7
|
-
|
|
8
|
-
from litellm import image_generation
|
|
9
|
-
|
|
10
|
-
from ....common.action import Action
|
|
11
|
-
from ....common.action_response import ActionResponse
|
|
12
|
-
from ....services.file_service import FileService
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class ImageCreation(Action):
|
|
16
|
-
|
|
17
|
-
def __init__(self, **kwargs):
|
|
18
|
-
super().__init__(
|
|
19
|
-
{
|
|
20
|
-
"name": "create_image",
|
|
21
|
-
"prompt_directive": "Create an image",
|
|
22
|
-
"params": [
|
|
23
|
-
{
|
|
24
|
-
"name": "image_description",
|
|
25
|
-
"desc": "The prompt to use to create the image",
|
|
26
|
-
"type": "string",
|
|
27
|
-
}
|
|
28
|
-
],
|
|
29
|
-
"required_scopes": ["image_processing:create_image:create"],
|
|
30
|
-
},
|
|
31
|
-
**kwargs,
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
def _get_image_content(self, image_data):
|
|
35
|
-
"""Helper function to extract image content from response data"""
|
|
36
|
-
if 'url' in image_data and image_data['url'] is not None:
|
|
37
|
-
return requests.get(image_data['url'], timeout=10).content
|
|
38
|
-
elif 'b64_json' in image_data and image_data['b64_json'] is not None:
|
|
39
|
-
return base64.b64decode(image_data['b64_json'])
|
|
40
|
-
else:
|
|
41
|
-
raise ValueError("No valid image data found in response")
|
|
42
|
-
|
|
43
|
-
def invoke(self, params, meta={}) -> ActionResponse:
|
|
44
|
-
prompt = params.get("image_description")
|
|
45
|
-
if not prompt:
|
|
46
|
-
return ActionResponse(message="Image description is required")
|
|
47
|
-
try:
|
|
48
|
-
response = image_generation(
|
|
49
|
-
model=self.get_config("image_gen_model") or None,
|
|
50
|
-
api_base=self.get_config("image_gen_endpoint") or None,
|
|
51
|
-
api_key=self.get_config("image_gen_api_key") or None,
|
|
52
|
-
prompt=prompt,
|
|
53
|
-
n=1,
|
|
54
|
-
**self.get_config("image_gen_litellm_config", {}),
|
|
55
|
-
)
|
|
56
|
-
except Exception as e:
|
|
57
|
-
log.error(f"Error generating image:", e)
|
|
58
|
-
return ActionResponse(message=f"Error generating image, {str(e)}")
|
|
59
|
-
|
|
60
|
-
try:
|
|
61
|
-
generated_image = self._get_image_content(response.get("data")[0])
|
|
62
|
-
except Exception as e:
|
|
63
|
-
log.error(f"Error retrieving image content:", e)
|
|
64
|
-
return ActionResponse(message=f"Error retrieving image content: {str(e)}")
|
|
65
|
-
|
|
66
|
-
file_service = FileService()
|
|
67
|
-
image_name = "generated_image_" + str(random.randint(100000, 999999)) + ".png"
|
|
68
|
-
image_meta = file_service.upload_from_buffer(
|
|
69
|
-
generated_image,
|
|
70
|
-
image_name,
|
|
71
|
-
meta.get("session_id"),
|
|
72
|
-
data_source="Image Processing Agent - Image Creation Action",
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
return ActionResponse(files=[image_meta])
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"""Image Description action"""
|
|
2
|
-
|
|
3
|
-
from solace_ai_connector.common.log import log
|
|
4
|
-
import re
|
|
5
|
-
import random
|
|
6
|
-
import requests
|
|
7
|
-
from io import BytesIO
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
from ....common.action import Action
|
|
11
|
-
from ....common.action_response import ActionResponse
|
|
12
|
-
from ....services.file_service import FS_PROTOCOL, FileService
|
|
13
|
-
from ....services.file_service.file_utils import starts_with_fs_url
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class DescribeImage(Action):
|
|
17
|
-
|
|
18
|
-
def __init__(self, **kwargs):
|
|
19
|
-
super().__init__(
|
|
20
|
-
{
|
|
21
|
-
"name": "describe_image",
|
|
22
|
-
"prompt_directive": "Describe an image",
|
|
23
|
-
"params": [
|
|
24
|
-
{
|
|
25
|
-
"name": "image_url",
|
|
26
|
-
"desc": f'The "{FS_PROTOCOL}://" or "https://" url of the image to describe',
|
|
27
|
-
"type": "string",
|
|
28
|
-
}
|
|
29
|
-
],
|
|
30
|
-
"required_scopes": ["image_processing:describe_image:create"],
|
|
31
|
-
},
|
|
32
|
-
**kwargs,
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
def extract_url_from_text(self, text: str) -> str:
|
|
36
|
-
"""
|
|
37
|
-
Extracts the first URL from a given text.
|
|
38
|
-
"""
|
|
39
|
-
url = None
|
|
40
|
-
# URL Regex pattern
|
|
41
|
-
# Starts with https:// or http:// or FS_PROTOCOL://
|
|
42
|
-
# ends with space or newline or end of string
|
|
43
|
-
url_pattern = r"(https?|{}):\/\/\S+".format(FS_PROTOCOL)
|
|
44
|
-
match = re.search(url_pattern, text)
|
|
45
|
-
if match:
|
|
46
|
-
url = match.group()
|
|
47
|
-
return url
|
|
48
|
-
|
|
49
|
-
def download_image(self, image_url: str, session_id: str) -> str:
|
|
50
|
-
"""
|
|
51
|
-
Download the image using the provided image URL.
|
|
52
|
-
"""
|
|
53
|
-
url = image_url
|
|
54
|
-
if not starts_with_fs_url(url):
|
|
55
|
-
# Download the image and upload to the file service
|
|
56
|
-
file_service = FileService()
|
|
57
|
-
byte_buffer = BytesIO(requests.get(image_url).content)
|
|
58
|
-
metadata = file_service.upload_from_buffer(
|
|
59
|
-
byte_buffer.read(),
|
|
60
|
-
str(random.randint(100000, 999999)) + "_image.png",
|
|
61
|
-
session_id,
|
|
62
|
-
data_source="Image Processing Agent - Describe Image Action",
|
|
63
|
-
)
|
|
64
|
-
url = metadata.get("url")
|
|
65
|
-
|
|
66
|
-
base64_image_url = f"{url}?encoding=datauri&resolve=true"
|
|
67
|
-
return base64_image_url
|
|
68
|
-
|
|
69
|
-
def get_image_description(self, base64_image_url: str) -> str:
|
|
70
|
-
"""
|
|
71
|
-
Get the description of the image using the provided image URL.
|
|
72
|
-
"""
|
|
73
|
-
agent = self.get_agent()
|
|
74
|
-
content = agent.do_llm_service_request(
|
|
75
|
-
[
|
|
76
|
-
{
|
|
77
|
-
"role": "user",
|
|
78
|
-
"content": [
|
|
79
|
-
{
|
|
80
|
-
"type": "text",
|
|
81
|
-
"text": "describe the content of this image in detail",
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
"type": "image_url",
|
|
85
|
-
"image_url": {"url": base64_image_url},
|
|
86
|
-
},
|
|
87
|
-
],
|
|
88
|
-
}
|
|
89
|
-
],
|
|
90
|
-
resolve_files=True,
|
|
91
|
-
).get("content")
|
|
92
|
-
|
|
93
|
-
return content
|
|
94
|
-
|
|
95
|
-
def invoke(self, params, meta={}) -> ActionResponse:
|
|
96
|
-
log.debug("Describing image: %s", params.get("image_url"))
|
|
97
|
-
# Extract the URL from the text
|
|
98
|
-
url = self.extract_url_from_text(params.get("image_url", ""))
|
|
99
|
-
if not url:
|
|
100
|
-
return ActionResponse(message="No image URL found in the query.")
|
|
101
|
-
|
|
102
|
-
try:
|
|
103
|
-
# Download the image
|
|
104
|
-
image_url = self.download_image(url, meta.get("session_id"))
|
|
105
|
-
except Exception as e:
|
|
106
|
-
log.error("Failed to download image from the url %s: %s", url, str(e))
|
|
107
|
-
return ActionResponse(message=f"Failed to download the image from the URL: {url}")
|
|
108
|
-
|
|
109
|
-
try:
|
|
110
|
-
# Get the image description
|
|
111
|
-
description = self.get_image_description(image_url)
|
|
112
|
-
return ActionResponse(message=description)
|
|
113
|
-
except Exception as e:
|
|
114
|
-
log.error("Failed to describe image in %s: %s", url, str(e))
|
|
115
|
-
return ActionResponse(message=f"Failed to describe the image in {url}.")
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"""Responsible for processing the actions from the Image Processing Agent"""
|
|
2
|
-
|
|
3
|
-
import copy
|
|
4
|
-
|
|
5
|
-
from ..base_agent_component import (
|
|
6
|
-
agent_info,
|
|
7
|
-
BaseAgentComponent,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
from .actions.create_image import ImageCreation
|
|
11
|
-
from .actions.describe_image import DescribeImage
|
|
12
|
-
|
|
13
|
-
info = copy.deepcopy(agent_info)
|
|
14
|
-
info["agent_name"] = "image_processing"
|
|
15
|
-
info["class_name"] = "ImageProcessingAgentComponent"
|
|
16
|
-
info["description"] = "Image Processing agent. This can generate images from text or describe images to text"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class ImageProcessingAgentComponent(
|
|
20
|
-
BaseAgentComponent
|
|
21
|
-
):
|
|
22
|
-
info = info
|
|
23
|
-
actions = [ImageCreation, DescribeImage]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"""Slack agent package."""
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"""Slack agent actions."""
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
"""Slack Post Message action."""
|
|
2
|
-
|
|
3
|
-
from typing import Dict, List, Union
|
|
4
|
-
|
|
5
|
-
from solace_ai_connector.common.log import log
|
|
6
|
-
from ....common.action import Action
|
|
7
|
-
from ....common.time import FIVE_MINUTES
|
|
8
|
-
from ....common.action_response import ActionResponse
|
|
9
|
-
from ....services.file_service import FileService, FS_PROTOCOL
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class PostMessage(Action):
|
|
13
|
-
"""Action for posting messages to Slack channels."""
|
|
14
|
-
|
|
15
|
-
def __init__(self, **kwargs):
|
|
16
|
-
"""Initialize the action with its configuration."""
|
|
17
|
-
super().__init__(
|
|
18
|
-
{
|
|
19
|
-
"name": "post_message",
|
|
20
|
-
"prompt_directive": "Post a message to a Slack channel",
|
|
21
|
-
"params": [
|
|
22
|
-
{
|
|
23
|
-
"name": "channel",
|
|
24
|
-
"desc": "The Slack channel to post to (include # prefix)",
|
|
25
|
-
"type": "string",
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"name": "thread_correlation_id",
|
|
29
|
-
"desc": "Optional correlation ID to group messages in a thread",
|
|
30
|
-
"type": "string",
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"name": "text",
|
|
34
|
-
"desc": "Text message to post",
|
|
35
|
-
"type": "string",
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"name": "blocks",
|
|
39
|
-
"desc": "Slack blocks for formatted message",
|
|
40
|
-
"type": "array",
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"name": "files",
|
|
44
|
-
"desc": f"Array of file URLs ({FS_PROTOCOL}:// or inline files with <file><data/></file> tags)",
|
|
45
|
-
"type": "array",
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"name": "last_post_to_thread",
|
|
49
|
-
"desc": "If True, clears the thread correlation cache after posting",
|
|
50
|
-
"type": "bool",
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
"required_scopes": ["slack:post_message:create"],
|
|
54
|
-
},
|
|
55
|
-
**kwargs,
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
def _process_files(
|
|
59
|
-
self, files: List[str], session_id: str
|
|
60
|
-
) -> List[Dict[str, Union[str, bytes]]]:
|
|
61
|
-
"""Process file URLs into uploadable content.
|
|
62
|
-
|
|
63
|
-
Args:
|
|
64
|
-
files: List of file URLs to process
|
|
65
|
-
session_id: Current session ID for file service
|
|
66
|
-
|
|
67
|
-
Returns:
|
|
68
|
-
List of dicts containing file data and titles
|
|
69
|
-
"""
|
|
70
|
-
if not files:
|
|
71
|
-
return []
|
|
72
|
-
|
|
73
|
-
file_service = FileService()
|
|
74
|
-
processed_files = []
|
|
75
|
-
|
|
76
|
-
for file_url in files:
|
|
77
|
-
try:
|
|
78
|
-
# Download file content
|
|
79
|
-
content = file_service.download_to_buffer(file_url, session_id)
|
|
80
|
-
|
|
81
|
-
# Extract filename from URL
|
|
82
|
-
filename = file_url.split("/")[-1]
|
|
83
|
-
processed_files.append(
|
|
84
|
-
{
|
|
85
|
-
"content": content,
|
|
86
|
-
"title": filename,
|
|
87
|
-
}
|
|
88
|
-
)
|
|
89
|
-
except Exception as e:
|
|
90
|
-
log.error("Failed to process file %s: %s", file_url, str(e))
|
|
91
|
-
|
|
92
|
-
return processed_files
|
|
93
|
-
|
|
94
|
-
def invoke(self, params: Dict, meta: Dict = {}) -> ActionResponse:
|
|
95
|
-
"""Post message to Slack channel.
|
|
96
|
-
|
|
97
|
-
Args:
|
|
98
|
-
params: Action parameters including channel, message, etc.
|
|
99
|
-
meta: Additional metadata including session_id
|
|
100
|
-
|
|
101
|
-
Returns:
|
|
102
|
-
ActionResponse with success/error message
|
|
103
|
-
"""
|
|
104
|
-
try:
|
|
105
|
-
# Get Slack client from agent
|
|
106
|
-
slack_client = self.get_agent().slack_client
|
|
107
|
-
|
|
108
|
-
channel = params.get("channel", "").strip()
|
|
109
|
-
|
|
110
|
-
# Remove the # prefix if present
|
|
111
|
-
if channel.startswith("#"):
|
|
112
|
-
channel = channel[1:]
|
|
113
|
-
|
|
114
|
-
# Get thread_ts from correlation id if provided
|
|
115
|
-
thread_correlation_id = params.get("thread_correlation_id")
|
|
116
|
-
thread_ts = None
|
|
117
|
-
if thread_correlation_id:
|
|
118
|
-
cache_key = f"slack_agent:thread_correlation:{thread_correlation_id}"
|
|
119
|
-
thread_ts = self.get_agent().cache_service.get_data(cache_key)
|
|
120
|
-
|
|
121
|
-
# Prepare message arguments
|
|
122
|
-
msg_args = {
|
|
123
|
-
"channel": channel,
|
|
124
|
-
"text": params.get("text", ""),
|
|
125
|
-
"blocks": params.get("blocks"),
|
|
126
|
-
"thread_ts": thread_ts,
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
# Send message
|
|
130
|
-
response = slack_client.chat_postMessage(**msg_args)
|
|
131
|
-
|
|
132
|
-
# Handle thread correlation caching
|
|
133
|
-
if thread_correlation_id:
|
|
134
|
-
cache_key = f"slack_agent:thread_correlation:{thread_correlation_id}"
|
|
135
|
-
|
|
136
|
-
# Clear cache if this is the last post
|
|
137
|
-
if params.get("last_post_to_thread"):
|
|
138
|
-
self.get_agent().cache_service.remove_data(cache_key)
|
|
139
|
-
# Store thread_ts if this is a new thread
|
|
140
|
-
elif not thread_ts:
|
|
141
|
-
thread_cache_ttl = self.get_agent().get_config("thread_cache_ttl")
|
|
142
|
-
self.get_agent().cache_service.add_data(
|
|
143
|
-
cache_key,
|
|
144
|
-
response["ts"],
|
|
145
|
-
expiry=thread_cache_ttl,
|
|
146
|
-
component=self.get_agent(),
|
|
147
|
-
)
|
|
148
|
-
msg_args["thread_ts"] = response["ts"]
|
|
149
|
-
|
|
150
|
-
# Process any files
|
|
151
|
-
files = params.get("files", [])
|
|
152
|
-
if files:
|
|
153
|
-
processed_files = self._process_files(files, meta.get("session_id"))
|
|
154
|
-
for file_data in processed_files:
|
|
155
|
-
slack_client.files_upload_v2(
|
|
156
|
-
channel=channel,
|
|
157
|
-
content=file_data["content"],
|
|
158
|
-
title=file_data["title"],
|
|
159
|
-
thread_ts=msg_args["thread_ts"],
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
# Return thread_correlation_id in message for reference
|
|
163
|
-
return ActionResponse(
|
|
164
|
-
message=(
|
|
165
|
-
f"Successfully posted message to {channel}. "
|
|
166
|
-
f"Thread correlation ID: {thread_correlation_id or 'none'}"
|
|
167
|
-
+ (
|
|
168
|
-
f" (thread_ts: {response['ts']})"
|
|
169
|
-
if not thread_ts
|
|
170
|
-
else f" (replied to existing thread)"
|
|
171
|
-
)
|
|
172
|
-
)
|
|
173
|
-
)
|
|
174
|
-
|
|
175
|
-
except Exception as e:
|
|
176
|
-
log.error("Failed to post Slack message: %s", str(e))
|
|
177
|
-
return ActionResponse(message=f"Failed to post message to Slack: {str(e)}")
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"""Slack agent for posting messages to Slack channels."""
|
|
2
|
-
|
|
3
|
-
import copy
|
|
4
|
-
from slack_sdk import WebClient
|
|
5
|
-
|
|
6
|
-
from ..base_agent_component import agent_info, BaseAgentComponent
|
|
7
|
-
from .actions.post_message import PostMessage
|
|
8
|
-
from ...common.time import FIVE_MINUTES
|
|
9
|
-
|
|
10
|
-
info = copy.deepcopy(agent_info)
|
|
11
|
-
info.update(
|
|
12
|
-
{
|
|
13
|
-
"agent_name": "slack",
|
|
14
|
-
"class_name": "SlackAgentComponent",
|
|
15
|
-
"description": "Slack messaging agent for posting messages and files to channels",
|
|
16
|
-
"config_parameters": [
|
|
17
|
-
{
|
|
18
|
-
"name": "slack_bot_token",
|
|
19
|
-
"required": True,
|
|
20
|
-
"description": "Slack bot user OAuth token",
|
|
21
|
-
"type": "string",
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"name": "thread_cache_ttl",
|
|
25
|
-
"required": False,
|
|
26
|
-
"description": f"Time-to-live in seconds for thread correlation cache (default: {FIVE_MINUTES} seconds)",
|
|
27
|
-
"type": "integer",
|
|
28
|
-
"default": FIVE_MINUTES,
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
}
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class SlackAgentComponent(BaseAgentComponent):
|
|
36
|
-
"""Component for handling Slack messaging operations."""
|
|
37
|
-
|
|
38
|
-
info = info
|
|
39
|
-
actions = [PostMessage]
|
|
40
|
-
|
|
41
|
-
def __init__(self, module_info={}, **kwargs):
|
|
42
|
-
"""Initialize the Slack agent component.
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
module_info: Optional module configuration.
|
|
46
|
-
**kwargs: Additional keyword arguments.
|
|
47
|
-
|
|
48
|
-
Raises:
|
|
49
|
-
ValueError: If required Slack configuration is missing.
|
|
50
|
-
"""
|
|
51
|
-
super().__init__(module_info, **kwargs)
|
|
52
|
-
|
|
53
|
-
# Get Slack configuration
|
|
54
|
-
self.slack_bot_token = self.get_config("slack_bot_token")
|
|
55
|
-
if not self.slack_bot_token:
|
|
56
|
-
raise ValueError("Slack bot token is required")
|
|
57
|
-
|
|
58
|
-
# Initialize Slack client
|
|
59
|
-
self.slack_client = WebClient(token=self.slack_bot_token)
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"""Web Search action"""
|
|
2
|
-
|
|
3
|
-
from solace_ai_connector.common.log import log
|
|
4
|
-
import requests
|
|
5
|
-
from duckduckgo_search import DDGS
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
from ....common.action import Action
|
|
9
|
-
from ....common.action_response import ActionResponse
|
|
10
|
-
from ....services.file_service import FileService
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class DoImageSearch(Action):
|
|
14
|
-
def __init__(self, **kwargs):
|
|
15
|
-
super().__init__(
|
|
16
|
-
{
|
|
17
|
-
"name": "do_image_search",
|
|
18
|
-
"prompt_directive": "Search the web for images using a search engine.",
|
|
19
|
-
"params": [
|
|
20
|
-
{
|
|
21
|
-
"name": "query",
|
|
22
|
-
"desc": "The search query to use",
|
|
23
|
-
"type": "string",
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"name": "max_results",
|
|
27
|
-
"desc": "Maximum number of results to show, defaults to 3 if not present",
|
|
28
|
-
"type": "int",
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"name": "size",
|
|
32
|
-
"desc": (
|
|
33
|
-
"Size of the image to search for. ",
|
|
34
|
-
"Can be one of: small, medium, large, wallpaper or None. Defaults to None if not present",
|
|
35
|
-
),
|
|
36
|
-
"type": "string",
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
"required_scopes": ["web_request:do_image_search:read"],
|
|
40
|
-
},
|
|
41
|
-
**kwargs,
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
def image_search(self, keyword, size, max_results) -> list:
|
|
45
|
-
"""
|
|
46
|
-
Returns a list of dictionaries that represent image results
|
|
47
|
-
"""
|
|
48
|
-
return DDGS().images(
|
|
49
|
-
keywords=keyword,
|
|
50
|
-
region="wt-wt",
|
|
51
|
-
safesearch="off",
|
|
52
|
-
size=str(size) or None,
|
|
53
|
-
color=None,
|
|
54
|
-
type_image=None,
|
|
55
|
-
layout=None,
|
|
56
|
-
license_image=None,
|
|
57
|
-
max_results=int(max_results),
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
def invoke(self, params, meta={}) -> ActionResponse:
|
|
61
|
-
query = params.get("query")
|
|
62
|
-
max_results = params.get("max_results", 3)
|
|
63
|
-
size = params.get("size")
|
|
64
|
-
results = []
|
|
65
|
-
if not query:
|
|
66
|
-
return ActionResponse(message="ERROR: Query not found!")
|
|
67
|
-
results = self.image_search(query, size, max_results) # append text results to results
|
|
68
|
-
file_service = FileService()
|
|
69
|
-
image_metas = []
|
|
70
|
-
for result in results:
|
|
71
|
-
try:
|
|
72
|
-
received_image = requests.get(result.get("image"), timeout=10).content
|
|
73
|
-
log.debug(f"Received image: {result.get('image')}")
|
|
74
|
-
image_metas.append(
|
|
75
|
-
file_service.upload_from_buffer(
|
|
76
|
-
received_image,
|
|
77
|
-
result.get("title"),
|
|
78
|
-
meta.get("session_id"),
|
|
79
|
-
data_source="Web Request Agent - Image Search Action",
|
|
80
|
-
)
|
|
81
|
-
)
|
|
82
|
-
except Exception as e:
|
|
83
|
-
log.error(f"Failed to download image: {result.get('image')} because {e}")
|
|
84
|
-
return ActionResponse(files=image_metas)
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"""Web Search action"""
|
|
2
|
-
|
|
3
|
-
from duckduckgo_search import DDGS
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
from ....common.action import Action
|
|
7
|
-
from ....common.action_response import ActionResponse
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class DoNewsSearch(Action):
|
|
11
|
-
def __init__(self, **kwargs):
|
|
12
|
-
super().__init__(
|
|
13
|
-
{
|
|
14
|
-
"name": "do_news_search",
|
|
15
|
-
"prompt_directive": "Search the web for news and current events using a search engine.",
|
|
16
|
-
"params": [
|
|
17
|
-
{
|
|
18
|
-
"name": "query",
|
|
19
|
-
"desc": "The search query to use",
|
|
20
|
-
"type": "string",
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"name": "max_results",
|
|
24
|
-
"desc": "Maximum number of results to show, defaults to 5 if not present",
|
|
25
|
-
"type": "int",
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
"required_scopes": ["web_request:do_news_search:read"],
|
|
29
|
-
},
|
|
30
|
-
**kwargs,
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
def news_search(self, keyword, max_results) -> list:
|
|
34
|
-
"""
|
|
35
|
-
Returns a list of dictionaries that represent news results
|
|
36
|
-
"""
|
|
37
|
-
return DDGS().news(keywords=keyword, region="wt-wt", max_results=int(max_results))
|
|
38
|
-
|
|
39
|
-
def invoke(self, params, meta={}) -> ActionResponse:
|
|
40
|
-
query = params.get("query")
|
|
41
|
-
max_results = params.get("max_results", 5)
|
|
42
|
-
results = []
|
|
43
|
-
if not query:
|
|
44
|
-
return ActionResponse(message="ERROR: Query not found!")
|
|
45
|
-
results = self.news_search(query, max_results) # append text results to results
|
|
46
|
-
|
|
47
|
-
return ActionResponse(message=results)
|