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,141 +0,0 @@
|
|
|
1
|
-
import re
|
|
2
|
-
import json
|
|
3
|
-
import base64
|
|
4
|
-
import zipfile
|
|
5
|
-
import gzip
|
|
6
|
-
import io
|
|
7
|
-
|
|
8
|
-
from solace_ai_connector.common.log import log
|
|
9
|
-
from .transformers import TRANSFORMERS
|
|
10
|
-
|
|
11
|
-
QUERY_OPTIONS = {
|
|
12
|
-
"encoding": ["zip", "gzip", "base64", "datauri"],
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
for tr in TRANSFORMERS:
|
|
16
|
-
for key, value in tr.queries.items():
|
|
17
|
-
QUERY_OPTIONS[key] = value.get("type")
|
|
18
|
-
|
|
19
|
-
LLM_QUERY_OPTIONS = {
|
|
20
|
-
**QUERY_OPTIONS,
|
|
21
|
-
"resolve": "bool",
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def encode_file(file: bytes, encoding: str, mime_type: str, file_name=str) -> bytes:
|
|
26
|
-
"""
|
|
27
|
-
Encode a file using the specified encoding.
|
|
28
|
-
|
|
29
|
-
Parameters:
|
|
30
|
-
- file (bytes): The file content as bytes.
|
|
31
|
-
- encoding (str): The encoding to use ('zip', 'gzip', 'base64', 'datauri').
|
|
32
|
-
|
|
33
|
-
Returns:
|
|
34
|
-
- bytes: The encoded file content.
|
|
35
|
-
"""
|
|
36
|
-
try:
|
|
37
|
-
if encoding == "zip":
|
|
38
|
-
# Create a BytesIO buffer to hold the zip file
|
|
39
|
-
zip_buffer = io.BytesIO()
|
|
40
|
-
# Create a zip file in the buffer
|
|
41
|
-
with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED) as zip_file:
|
|
42
|
-
# Add the file to the ZIP archive
|
|
43
|
-
zip_file.writestr(file_name, file)
|
|
44
|
-
# Get the byte buffer of the zip file
|
|
45
|
-
zip_buffer.seek(0) # Move to the beginning of the buffer
|
|
46
|
-
return zip_buffer.read()
|
|
47
|
-
|
|
48
|
-
elif encoding == "gzip":
|
|
49
|
-
# Create a BytesIO buffer to hold the gzip file
|
|
50
|
-
gzip_buffer = io.BytesIO()
|
|
51
|
-
# Create a gzip file in the buffer
|
|
52
|
-
with gzip.GzipFile(fileobj=gzip_buffer, mode="wb") as gzip_file:
|
|
53
|
-
# Write the file content to the gzip archive
|
|
54
|
-
gzip_file.write(file)
|
|
55
|
-
return gzip_buffer.getvalue()
|
|
56
|
-
|
|
57
|
-
elif encoding == "base64":
|
|
58
|
-
return base64.b64encode(file).decode("utf-8")
|
|
59
|
-
|
|
60
|
-
elif encoding == "datauri":
|
|
61
|
-
return f"data:{mime_type};base64,{base64.b64encode(file).decode('utf-8')}"
|
|
62
|
-
|
|
63
|
-
except Exception as e:
|
|
64
|
-
log.error("Failed to encode file: %s", e)
|
|
65
|
-
return file
|
|
66
|
-
|
|
67
|
-
return file
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
def apply_file_transformations(
|
|
71
|
-
file: bytes, metadata: dict, transformations: dict = {}
|
|
72
|
-
) -> bytes | str:
|
|
73
|
-
"""
|
|
74
|
-
Apply transformations to a file.
|
|
75
|
-
|
|
76
|
-
Parameters:
|
|
77
|
-
- file (bytes): The file content as bytes.
|
|
78
|
-
- metadata (dict): The file metadata.
|
|
79
|
-
- transformations (dict): The transformations to apply.
|
|
80
|
-
"""
|
|
81
|
-
if not transformations:
|
|
82
|
-
return file
|
|
83
|
-
text_mime_type_regex = r"text/.*|.*csv|.*json|.*xml|.*yaml|.*x-yaml|.*txt"
|
|
84
|
-
mime_type = metadata.get("mime_type", "")
|
|
85
|
-
if mime_type is None:
|
|
86
|
-
mime_type = ""
|
|
87
|
-
name = metadata.get("name", "unknown")
|
|
88
|
-
other = {
|
|
89
|
-
"mime_type": mime_type,
|
|
90
|
-
"name": name,
|
|
91
|
-
}
|
|
92
|
-
data = file
|
|
93
|
-
if not re.match(text_mime_type_regex, mime_type):
|
|
94
|
-
for transformer in TRANSFORMERS:
|
|
95
|
-
if transformer.is_binary_transformer:
|
|
96
|
-
data = transformer.transform(file, data, transformations, other)
|
|
97
|
-
|
|
98
|
-
# Should be last transformation
|
|
99
|
-
if transformations.get("encoding"):
|
|
100
|
-
try:
|
|
101
|
-
byte_data = data if isinstance(data, bytes) else data.encode("utf-8")
|
|
102
|
-
return encode_file(
|
|
103
|
-
byte_data, transformations.get("encoding"), mime_type, name
|
|
104
|
-
)
|
|
105
|
-
except Exception as e:
|
|
106
|
-
log.error("Failed to encode to base64: %s", e)
|
|
107
|
-
return file
|
|
108
|
-
return data
|
|
109
|
-
else:
|
|
110
|
-
# File is text-based
|
|
111
|
-
# Convert bytes to string if of type bytes
|
|
112
|
-
decoded_data = file.decode("utf-8") if isinstance(file, bytes) else file
|
|
113
|
-
data = decoded_data
|
|
114
|
-
|
|
115
|
-
for transformer in TRANSFORMERS:
|
|
116
|
-
if transformer.is_text_transformer:
|
|
117
|
-
data = transformer.transform(file, data, transformations, other)
|
|
118
|
-
|
|
119
|
-
# Should be last transformation
|
|
120
|
-
if transformations.get("encoding"):
|
|
121
|
-
try:
|
|
122
|
-
byte_data = data if isinstance(data, bytes) else data.encode("utf-8")
|
|
123
|
-
return encode_file(
|
|
124
|
-
byte_data, transformations["encoding"], mime_type, name
|
|
125
|
-
)
|
|
126
|
-
except Exception as e:
|
|
127
|
-
log.error("Failed to encode to base64: %s", e)
|
|
128
|
-
return file
|
|
129
|
-
|
|
130
|
-
if not isinstance(data, str):
|
|
131
|
-
# Convert bytes to string
|
|
132
|
-
if isinstance(data, bytes):
|
|
133
|
-
try:
|
|
134
|
-
data = data.decode("utf-8")
|
|
135
|
-
except UnicodeDecodeError:
|
|
136
|
-
data = base64.b64encode(data).decode("utf-8")
|
|
137
|
-
data = f"data:{mime_type};base64,{data}"
|
|
138
|
-
else:
|
|
139
|
-
data = json.dumps(data)
|
|
140
|
-
|
|
141
|
-
return data
|
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
# Add utility functions for upload CSV that automatically creates the number of row and data types
|
|
2
|
-
import csv
|
|
3
|
-
from typing import Tuple, Union
|
|
4
|
-
import json
|
|
5
|
-
|
|
6
|
-
from .file_service_constants import FS_PROTOCOL, INDENT_SIZE
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class Types:
|
|
10
|
-
"""
|
|
11
|
-
Type constants definition to be used when representing the schema.
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
INT = "int"
|
|
15
|
-
FLOAT = "float"
|
|
16
|
-
BOOL = "bool"
|
|
17
|
-
STR = "str"
|
|
18
|
-
ARRAY = "array"
|
|
19
|
-
OBJECT = "object"
|
|
20
|
-
NULL = "null"
|
|
21
|
-
|
|
22
|
-
@property
|
|
23
|
-
def PRIMITIVES():
|
|
24
|
-
return [Types.INT, Types.FLOAT, Types.BOOL, Types.STR]
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def get_str_type(value: str) -> str:
|
|
28
|
-
"""
|
|
29
|
-
Get the type of a string value.
|
|
30
|
-
|
|
31
|
-
Parameters:
|
|
32
|
-
- value (str): The string value.
|
|
33
|
-
|
|
34
|
-
Returns:
|
|
35
|
-
- str: The type of the value.
|
|
36
|
-
"""
|
|
37
|
-
if not value:
|
|
38
|
-
return Types.NULL
|
|
39
|
-
if value.isdigit():
|
|
40
|
-
return Types.INT
|
|
41
|
-
elif value.replace(".", "", 1).isdigit():
|
|
42
|
-
return Types.FLOAT
|
|
43
|
-
else:
|
|
44
|
-
return Types.STR
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
def convert_dict_to_yaml(schema: dict, indent_size=INDENT_SIZE, _level=0) -> str:
|
|
48
|
-
"""
|
|
49
|
-
Convert a dictionary schema to a YAML string.
|
|
50
|
-
|
|
51
|
-
Parameters:
|
|
52
|
-
- schema (dict): The dictionary schema.
|
|
53
|
-
|
|
54
|
-
Returns:
|
|
55
|
-
- str: The YAML string.
|
|
56
|
-
"""
|
|
57
|
-
yaml_str = ""
|
|
58
|
-
indent = indent_size * _level
|
|
59
|
-
|
|
60
|
-
for key, value in schema.items():
|
|
61
|
-
if isinstance(value, dict):
|
|
62
|
-
value_str = convert_dict_to_yaml(value, indent_size, _level + 1)
|
|
63
|
-
yaml_str += f"{space(indent)}{key}:\n{value_str}\n"
|
|
64
|
-
else:
|
|
65
|
-
yaml_str += f"{space(indent)}{key}: {value}\n"
|
|
66
|
-
return yaml_str.rstrip()
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def space(size=INDENT_SIZE):
|
|
70
|
-
"""
|
|
71
|
-
Get a string of spaces.
|
|
72
|
-
"""
|
|
73
|
-
if size == 0:
|
|
74
|
-
return ""
|
|
75
|
-
return " " * size
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
def extract_csv_schema_and_shape(csv_file: Union[str, bytes]) -> Tuple[dict, Tuple[int, int]]:
|
|
79
|
-
"""
|
|
80
|
-
Get the schema and shape of a CSV file.
|
|
81
|
-
|
|
82
|
-
Parameters:
|
|
83
|
-
- csv_file (str): The CSV file content.
|
|
84
|
-
- header_row (str): The header row of the CSV file.
|
|
85
|
-
|
|
86
|
-
Returns:
|
|
87
|
-
- str: The schema of the CSV file.
|
|
88
|
-
- st: The shape of the CSV file.
|
|
89
|
-
"""
|
|
90
|
-
if type(csv_file) == bytes:
|
|
91
|
-
csv_file = csv_file.decode("utf-8")
|
|
92
|
-
|
|
93
|
-
# Parse the CSV string
|
|
94
|
-
csv_lines = csv_file.splitlines()
|
|
95
|
-
csv_reader = csv.DictReader(csv_lines)
|
|
96
|
-
columns = csv_reader.fieldnames
|
|
97
|
-
listed_csv = list(csv_reader)
|
|
98
|
-
shape = (len(listed_csv), len(columns))
|
|
99
|
-
schema = {}
|
|
100
|
-
for col in columns:
|
|
101
|
-
# deriving type from the top 10 rows
|
|
102
|
-
col_type = None
|
|
103
|
-
for i, row in enumerate(listed_csv):
|
|
104
|
-
if i >= 10:
|
|
105
|
-
break
|
|
106
|
-
curr_type = get_str_type(row[col])
|
|
107
|
-
if col_type is None:
|
|
108
|
-
col_type = curr_type
|
|
109
|
-
elif col_type != curr_type:
|
|
110
|
-
# multiple types, set as str
|
|
111
|
-
col_type = Types.STR
|
|
112
|
-
break
|
|
113
|
-
schema[col] = {"type": col_type}
|
|
114
|
-
|
|
115
|
-
return schema, shape
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
def dict_to_schema(input_dict: dict) -> dict:
|
|
119
|
-
"""
|
|
120
|
-
Convert a dictionary to a JSON schema.
|
|
121
|
-
|
|
122
|
-
Parameters:
|
|
123
|
-
- input_dict (dict): The input dictionary.
|
|
124
|
-
|
|
125
|
-
Returns:
|
|
126
|
-
- dict: The JSON schema.
|
|
127
|
-
"""
|
|
128
|
-
|
|
129
|
-
def infer_type(value):
|
|
130
|
-
if isinstance(value, str):
|
|
131
|
-
return Types.STR
|
|
132
|
-
elif isinstance(value, int):
|
|
133
|
-
return Types.INT
|
|
134
|
-
elif isinstance(value, float):
|
|
135
|
-
return Types.FLOAT
|
|
136
|
-
elif isinstance(value, bool):
|
|
137
|
-
return Types.BOOL
|
|
138
|
-
elif isinstance(value, list):
|
|
139
|
-
if len(value) > 0:
|
|
140
|
-
return {"type": Types.ARRAY, "items": infer_type(value[0])}
|
|
141
|
-
else:
|
|
142
|
-
return {"type": Types.ARRAY, "items": {}}
|
|
143
|
-
elif isinstance(value, dict):
|
|
144
|
-
return {"type": Types.OBJECT, "properties": infer_properties(value)}
|
|
145
|
-
else:
|
|
146
|
-
return Types.NULL
|
|
147
|
-
|
|
148
|
-
def infer_properties(input_dict):
|
|
149
|
-
return {
|
|
150
|
-
key: (
|
|
151
|
-
{"type": infer_type(value)}
|
|
152
|
-
if isinstance(infer_type(value), str)
|
|
153
|
-
else infer_type(value)
|
|
154
|
-
)
|
|
155
|
-
for key, value in input_dict.items()
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
if type(input_dict) is list:
|
|
159
|
-
input_dict = input_dict[0]
|
|
160
|
-
json_schema = {
|
|
161
|
-
"type": Types.ARRAY,
|
|
162
|
-
"items": {"type": Types.OBJECT, "properties": infer_properties(input_dict)},
|
|
163
|
-
}
|
|
164
|
-
else:
|
|
165
|
-
json_schema = {"type": Types.OBJECT, "properties": infer_properties(input_dict)}
|
|
166
|
-
|
|
167
|
-
return json_schema
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
def get_dict_array_shape(
|
|
171
|
-
data: Union[dict, list], max_level=2, _path="", _result=None, _level=0
|
|
172
|
-
):
|
|
173
|
-
"""
|
|
174
|
-
Get the count of each array in a dictionary schema.
|
|
175
|
-
"""
|
|
176
|
-
if _result is None:
|
|
177
|
-
_result = []
|
|
178
|
-
|
|
179
|
-
# If it's a list, record its length and traverse each element
|
|
180
|
-
if isinstance(data, list):
|
|
181
|
-
if _path:
|
|
182
|
-
_result.append([_path, len(data)])
|
|
183
|
-
else:
|
|
184
|
-
_result.append(["top level", len(data)])
|
|
185
|
-
if _level < max_level:
|
|
186
|
-
get_dict_array_shape(data[0], max_level, f"{_path}[*]", _result, _level + 1)
|
|
187
|
-
|
|
188
|
-
# If it's a dictionary, traverse each key-value pair
|
|
189
|
-
elif isinstance(data, dict):
|
|
190
|
-
for key, value in data.items():
|
|
191
|
-
new_path = f"{_path}.{key}" if _path else key
|
|
192
|
-
if _level < max_level:
|
|
193
|
-
get_dict_array_shape(value, max_level, new_path, _result, _level + 1)
|
|
194
|
-
|
|
195
|
-
return _result
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
def get_csv_schema_and_shape(schema: dict, shape: Tuple[int, int]) -> Tuple[str, str]:
|
|
199
|
-
"""
|
|
200
|
-
Get the formatted schema and shape of a CSV file.
|
|
201
|
-
|
|
202
|
-
Parameters:
|
|
203
|
-
- schema (dict): The schema of the CSV file.
|
|
204
|
-
- shape (Tuple[int, int]): The shape of the CSV file.
|
|
205
|
-
|
|
206
|
-
Returns:
|
|
207
|
-
- str: The formatted schema of the CSV file.
|
|
208
|
-
- Tuple[int, int]: The shape of the CSV file.
|
|
209
|
-
"""
|
|
210
|
-
shape_str = f"{shape[0]} rows x {shape[1]} columns"
|
|
211
|
-
schema_dict = {
|
|
212
|
-
"type": Types.ARRAY,
|
|
213
|
-
"items": {"type": Types.OBJECT, "properties": schema},
|
|
214
|
-
}
|
|
215
|
-
schema_str = convert_dict_to_yaml(schema_dict)
|
|
216
|
-
return schema_str, shape_str
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
def get_json_schema_and_shape(file: Union[bytes, str]) -> Tuple[str, str]:
|
|
220
|
-
try:
|
|
221
|
-
if type(file) == bytes:
|
|
222
|
-
file = file.decode("utf-8")
|
|
223
|
-
json_data = json.loads(file)
|
|
224
|
-
schema = dict_to_schema(json_data)
|
|
225
|
-
schema_str = convert_dict_to_yaml(schema)
|
|
226
|
-
shape_str = None
|
|
227
|
-
|
|
228
|
-
def get_row_text(count):
|
|
229
|
-
return f"{count} elements" if count > 1 else f"{count} element"
|
|
230
|
-
|
|
231
|
-
array_lengths = get_dict_array_shape(json_data)
|
|
232
|
-
if array_lengths:
|
|
233
|
-
shape_str = "\n".join(
|
|
234
|
-
[f"{key}: {get_row_text(val)}" for key, val in array_lengths]
|
|
235
|
-
)
|
|
236
|
-
return schema_str, shape_str
|
|
237
|
-
except Exception as e:
|
|
238
|
-
return None, None
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
def get_file_schema_and_shape(file: bytes, metadata: dict) -> Tuple[str, str]:
|
|
242
|
-
"""
|
|
243
|
-
Get the schema and shape of a file.
|
|
244
|
-
|
|
245
|
-
Parameters:
|
|
246
|
-
- file (bytes): The file content as bytes.
|
|
247
|
-
- metadata (dict): The file metadata.
|
|
248
|
-
|
|
249
|
-
Returns:
|
|
250
|
-
- str: The schema of the file. None if cannot be determined.
|
|
251
|
-
- str: The shape of the file. None if cannot be determined.
|
|
252
|
-
"""
|
|
253
|
-
if metadata.get("mime_type") == "text/csv":
|
|
254
|
-
schema, shape = extract_csv_schema_and_shape(file)
|
|
255
|
-
schema_str, shape_str = get_csv_schema_and_shape(schema, shape)
|
|
256
|
-
return schema_str, shape_str
|
|
257
|
-
elif metadata.get("mime_type") == "application/json":
|
|
258
|
-
schema, shape = get_json_schema_and_shape(file)
|
|
259
|
-
return schema, shape
|
|
260
|
-
else:
|
|
261
|
-
return None, None
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
def recursive_file_resolver(
|
|
265
|
-
obj: Union[dict, str, list],
|
|
266
|
-
resolver: callable,
|
|
267
|
-
session_id: str,
|
|
268
|
-
force_resolve: bool = False,
|
|
269
|
-
):
|
|
270
|
-
"""
|
|
271
|
-
Recursively resolve all the file URLs in the input data.
|
|
272
|
-
|
|
273
|
-
Parameters:
|
|
274
|
-
- obj (dict|str|list): The input data.
|
|
275
|
-
- resolver (callable): The resolver function.
|
|
276
|
-
- session_id (str): The session ID.
|
|
277
|
-
- force_resolve (bool): Resolve all the URLs regardless of the 'resolve' query parameter.
|
|
278
|
-
|
|
279
|
-
Returns:
|
|
280
|
-
- dict|str|list: The object with resolved URLs.
|
|
281
|
-
"""
|
|
282
|
-
if type(obj) == str:
|
|
283
|
-
return resolver(obj, session_id, force_resolve)
|
|
284
|
-
|
|
285
|
-
keys = []
|
|
286
|
-
if type(obj) == list:
|
|
287
|
-
keys = range(len(obj))
|
|
288
|
-
elif type(obj) == dict:
|
|
289
|
-
keys = obj.keys()
|
|
290
|
-
|
|
291
|
-
for key in keys:
|
|
292
|
-
if isinstance(obj[key], dict):
|
|
293
|
-
obj[key] = recursive_file_resolver(
|
|
294
|
-
obj[key], resolver, session_id, force_resolve
|
|
295
|
-
)
|
|
296
|
-
elif isinstance(obj[key], list):
|
|
297
|
-
obj[key] = [
|
|
298
|
-
(
|
|
299
|
-
recursive_file_resolver(item, resolver, session_id, force_resolve)
|
|
300
|
-
if isinstance(item, dict)
|
|
301
|
-
else item
|
|
302
|
-
)
|
|
303
|
-
for item in obj[key]
|
|
304
|
-
]
|
|
305
|
-
elif isinstance(obj[key], str):
|
|
306
|
-
obj[key] = resolver(obj[key], session_id, force_resolve)
|
|
307
|
-
return obj
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
def starts_with_fs_url(url: str) -> bool:
|
|
311
|
-
"""
|
|
312
|
-
Check if the URL starts with the file service protocol.
|
|
313
|
-
|
|
314
|
-
Parameters:
|
|
315
|
-
- url (str): The URL.
|
|
316
|
-
|
|
317
|
-
Returns:
|
|
318
|
-
- bool: True if the URL starts with the file service protocol.
|
|
319
|
-
"""
|
|
320
|
-
return (
|
|
321
|
-
url.startswith(f"{FS_PROTOCOL}://")
|
|
322
|
-
or url.startswith(f"<url>{FS_PROTOCOL}://")
|
|
323
|
-
or url.startswith(f"<url> {FS_PROTOCOL}://")
|
|
324
|
-
)
|
|
File without changes
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
from abc import ABC, abstractmethod
|
|
2
|
-
|
|
3
|
-
class BaseHistoryProvider(ABC):
|
|
4
|
-
|
|
5
|
-
def __init__(self, config=None):
|
|
6
|
-
self.config = config or {}
|
|
7
|
-
|
|
8
|
-
@abstractmethod
|
|
9
|
-
def get_all_sessions(self) -> list[str]:
|
|
10
|
-
"""
|
|
11
|
-
Retrieve all session identifiers.
|
|
12
|
-
"""
|
|
13
|
-
raise NotImplementedError("Method not implemented")
|
|
14
|
-
|
|
15
|
-
@abstractmethod
|
|
16
|
-
def get_session(self, session_id: str)->dict:
|
|
17
|
-
"""
|
|
18
|
-
Retrieve the session .
|
|
19
|
-
|
|
20
|
-
:param session_id: The session identifier.
|
|
21
|
-
:return: The session metadata.
|
|
22
|
-
"""
|
|
23
|
-
raise NotImplementedError("Method not implemented")
|
|
24
|
-
|
|
25
|
-
@abstractmethod
|
|
26
|
-
def delete_session(self, session_id: str):
|
|
27
|
-
"""
|
|
28
|
-
Delete the session.
|
|
29
|
-
|
|
30
|
-
:param session_id: The session identifier.
|
|
31
|
-
"""
|
|
32
|
-
raise NotImplementedError("Method not implemented")
|
|
33
|
-
|
|
34
|
-
@abstractmethod
|
|
35
|
-
def store_session(self, session_id: str, data: dict):
|
|
36
|
-
"""
|
|
37
|
-
Store the session metadata.
|
|
38
|
-
|
|
39
|
-
:param session_id: The session identifier.
|
|
40
|
-
:param data: The session data to be stored.
|
|
41
|
-
"""
|
|
42
|
-
raise NotImplementedError("Method not implemented")
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def update_session(self, session_id: str, data: dict):
|
|
46
|
-
"""
|
|
47
|
-
Update data in the store using the partial data provided.
|
|
48
|
-
|
|
49
|
-
:param key: The key to update the data under.
|
|
50
|
-
:param data: The data to update.
|
|
51
|
-
"""
|
|
52
|
-
history = self.get_session(session_id).copy()
|
|
53
|
-
history.update(data)
|
|
54
|
-
self.store_session(session_id, history)
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import os
|
|
3
|
-
from .base_history_provider import BaseHistoryProvider
|
|
4
|
-
|
|
5
|
-
class FileHistoryProvider(BaseHistoryProvider):
|
|
6
|
-
"""
|
|
7
|
-
A simple file-based history provider for storing session data.
|
|
8
|
-
"""
|
|
9
|
-
def __init__(self, config=None):
|
|
10
|
-
super().__init__(config)
|
|
11
|
-
|
|
12
|
-
if not self.config.get("path"):
|
|
13
|
-
raise ValueError("Missing required configuration for FileHistoryProvider, Missing 'path' in configs.")
|
|
14
|
-
|
|
15
|
-
self.path = self.config.get("path")
|
|
16
|
-
|
|
17
|
-
if not self._exists(self.path):
|
|
18
|
-
os.makedirs(self.path, exist_ok=True)
|
|
19
|
-
|
|
20
|
-
def _get_key(self, session_id):
|
|
21
|
-
"""
|
|
22
|
-
Generate a file path for a session.
|
|
23
|
-
|
|
24
|
-
:param session_id: The session identifier.
|
|
25
|
-
:return: A formatted file path.
|
|
26
|
-
"""
|
|
27
|
-
return os.path.join(self.path, f"sessions_{session_id}_history.json")
|
|
28
|
-
|
|
29
|
-
def store_session(self, session_id: str, data: dict):
|
|
30
|
-
"""
|
|
31
|
-
Store the session metadata.
|
|
32
|
-
|
|
33
|
-
:param session_id: The session identifier.
|
|
34
|
-
:param data: The session data to be stored.
|
|
35
|
-
"""
|
|
36
|
-
file_path = self._get_key(session_id)
|
|
37
|
-
with open(file_path, "w", encoding="utf-8") as f:
|
|
38
|
-
f.write(json.dumps(data))
|
|
39
|
-
|
|
40
|
-
def get_session(self, session_id: str)->dict:
|
|
41
|
-
"""
|
|
42
|
-
Retrieve the session.
|
|
43
|
-
|
|
44
|
-
:param session_id: The session identifier.
|
|
45
|
-
:return: The session metadata as a dictionary.
|
|
46
|
-
"""
|
|
47
|
-
file_path = self._get_key(session_id)
|
|
48
|
-
if not self._exists(file_path):
|
|
49
|
-
return {}
|
|
50
|
-
|
|
51
|
-
try:
|
|
52
|
-
with open(file_path, "r", encoding="utf-8") as f:
|
|
53
|
-
return json.load(f)
|
|
54
|
-
except json.JSONDecodeError:
|
|
55
|
-
return {}
|
|
56
|
-
|
|
57
|
-
def get_all_sessions(self) -> list[str]:
|
|
58
|
-
"""
|
|
59
|
-
Retrieve all session identifiers.
|
|
60
|
-
"""
|
|
61
|
-
return [f[9:-13] for f in os.listdir(self.path) if f.startswith("sessions_") and f.endswith("_history.json")]
|
|
62
|
-
|
|
63
|
-
def delete_session(self, session_id: str):
|
|
64
|
-
"""
|
|
65
|
-
Delete the session.
|
|
66
|
-
|
|
67
|
-
:param session_id: The session identifier.
|
|
68
|
-
"""
|
|
69
|
-
file_path = self._get_key(session_id)
|
|
70
|
-
if self._exists(file_path):
|
|
71
|
-
os.remove(file_path)
|
|
72
|
-
|
|
73
|
-
def _exists(self, path: str):
|
|
74
|
-
return os.path.exists(path)
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
class HistoryProviderFactory:
|
|
4
|
-
"""
|
|
5
|
-
Factory class for creating history provider instances.
|
|
6
|
-
"""
|
|
7
|
-
HISTORY_PROVIDERS = ["redis", "memory", "file", "mongodb", "sql"]
|
|
8
|
-
|
|
9
|
-
@staticmethod
|
|
10
|
-
def has_provider(class_name):
|
|
11
|
-
"""
|
|
12
|
-
Check if the history provider is supported.
|
|
13
|
-
"""
|
|
14
|
-
return class_name in HistoryProviderFactory.HISTORY_PROVIDERS
|
|
15
|
-
|
|
16
|
-
@staticmethod
|
|
17
|
-
def get_provider_class(class_name):
|
|
18
|
-
"""
|
|
19
|
-
Get the history provider class based on the class name.
|
|
20
|
-
"""
|
|
21
|
-
if class_name not in HistoryProviderFactory.HISTORY_PROVIDERS:
|
|
22
|
-
raise ValueError(f"Unsupported history provider: {class_name}")
|
|
23
|
-
if class_name == "redis":
|
|
24
|
-
from .redis_history_provider import RedisHistoryProvider
|
|
25
|
-
return RedisHistoryProvider
|
|
26
|
-
elif class_name == "memory":
|
|
27
|
-
from .memory_history_provider import MemoryHistoryProvider
|
|
28
|
-
return MemoryHistoryProvider
|
|
29
|
-
elif class_name == "file":
|
|
30
|
-
from .file_history_provider import FileHistoryProvider
|
|
31
|
-
return FileHistoryProvider
|
|
32
|
-
elif class_name == "mongodb":
|
|
33
|
-
from .mongodb_history_provider import MongoDBHistoryProvider
|
|
34
|
-
return MongoDBHistoryProvider
|
|
35
|
-
elif class_name == "sql":
|
|
36
|
-
from .sql_history_provider import SQLHistoryProvider
|
|
37
|
-
return SQLHistoryProvider
|
|
38
|
-
else:
|
|
39
|
-
raise ValueError(f"Unsupported history provider: {class_name}")
|
|
40
|
-
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Memory history provider
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from .base_history_provider import BaseHistoryProvider
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class MemoryHistoryProvider(BaseHistoryProvider):
|
|
9
|
-
"""
|
|
10
|
-
A history provider that stores history in memory.
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
def __init__(self, config=None):
|
|
14
|
-
super().__init__(config)
|
|
15
|
-
self.history = {}
|
|
16
|
-
|
|
17
|
-
def store_session(self, session_id, data):
|
|
18
|
-
if session_id not in self.history:
|
|
19
|
-
self.history[session_id] = {}
|
|
20
|
-
|
|
21
|
-
self.history[session_id].update(data)
|
|
22
|
-
|
|
23
|
-
def get_session(self, session_id):
|
|
24
|
-
if session_id not in self.history:
|
|
25
|
-
return {}
|
|
26
|
-
return self.history[session_id]
|
|
27
|
-
|
|
28
|
-
def get_all_sessions(self) -> list[str]:
|
|
29
|
-
return list(self.history.keys())
|
|
30
|
-
|
|
31
|
-
def delete_session(self, session_id):
|
|
32
|
-
if session_id in self.history:
|
|
33
|
-
del self.history[session_id]
|