rasa-pro 3.14.0.dev20250922__py3-none-any.whl → 3.14.0rc2__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 rasa-pro might be problematic. Click here for more details.
- rasa/__main__.py +15 -3
- rasa/agents/__init__.py +0 -0
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +211 -0
- rasa/agents/constants.py +43 -0
- rasa/agents/core/__init__.py +0 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +81 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/__init__.py +0 -0
- rasa/agents/protocol/a2a/a2a_agent.py +879 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +726 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
- rasa/agents/schemas/__init__.py +13 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +65 -0
- rasa/agents/schemas/agent_tool_schema.py +186 -0
- rasa/agents/templates/__init__.py +0 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
- rasa/agents/utils.py +206 -0
- rasa/agents/validation.py +485 -0
- rasa/api.py +24 -9
- rasa/builder/config.py +6 -2
- rasa/builder/copilot/constants.py +4 -1
- rasa/builder/copilot/copilot.py +155 -79
- rasa/builder/copilot/models.py +304 -108
- rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
- rasa/builder/guardrails/{lakera.py → clients.py} +55 -5
- rasa/builder/guardrails/constants.py +3 -0
- rasa/builder/guardrails/models.py +45 -10
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/utils.py +42 -276
- rasa/builder/jobs.py +182 -12
- rasa/builder/llm_service.py +32 -5
- rasa/builder/models.py +13 -3
- rasa/builder/project_generator.py +6 -1
- rasa/builder/service.py +31 -15
- rasa/builder/training_service.py +18 -24
- rasa/builder/validation_service.py +1 -1
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +10 -8
- rasa/cli/dialogue_understanding_test.py +10 -7
- rasa/cli/e2e_test.py +9 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +8 -4
- rasa/cli/interactive.py +5 -4
- rasa/cli/llm_fine_tuning.py +11 -6
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +12 -10
- rasa/cli/scaffold.py +4 -4
- rasa/cli/shell.py +9 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +41 -28
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +223 -0
- rasa/cli/validation/config_path_validation.py +257 -0
- rasa/cli/x.py +8 -4
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +51 -10
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +19 -2
- rasa/core/available_agents.py +229 -0
- rasa/core/brokers/kafka.py +5 -1
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/development_inspector.py +3 -3
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-35222594.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-a0efbfd3.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-0584c0f2.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-39f40dbe.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-1ad755f3.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-b0f4f0fe.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-9039bff9.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-65c9b127.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4f08b38e.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-e95c362a.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-703c3015.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-699328ea.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-04cf4b05.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-ee94449e.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-940162b4.js → index-3862675e-7610671a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-c79c2866.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-84489d30.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-a9aa9858.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-eb73cf26.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-b3399f9a.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-b095bf1a.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-07644b66.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-573a3f9c.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d457e1e1.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-9d26e1a2.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-3a9cde10.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-4f3e8cec.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-e617e5bf.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-eab30d2f.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-09994be2.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-b7110364.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-3ebc92ad.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-7d13d2f2.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-488385e1.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +18 -18
- rasa/core/channels/inspector/src/App.tsx +29 -4
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +7 -4
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +21 -0
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/studio_chat.py +6 -6
- rasa/core/channels/telegram.py +4 -9
- rasa/core/channels/voice_stream/genesys.py +1 -1
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +5 -1
- rasa/core/channels/voice_stream/voice_channel.py +3 -0
- rasa/core/concurrent_lock_store.py +38 -21
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
- rasa/core/config/configuration.py +260 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +10 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +69 -4
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +2 -1
- rasa/core/lock_store.py +4 -0
- rasa/core/policies/enterprise_search_policy.py +5 -3
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +632 -0
- rasa/core/policies/flows/flow_executor.py +136 -75
- rasa/core/policies/flows/mcp_tool_executor.py +298 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/ted_policy.py +20 -12
- rasa/core/policies/unexpected_intent_policy.py +6 -0
- rasa/core/processor.py +68 -44
- rasa/core/redis_connection_factory.py +7 -2
- rasa/core/run.py +37 -8
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +4 -0
- rasa/core/tracker_stores/sql_tracker_store.py +3 -1
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +20 -18
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +22 -23
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +19 -5
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/clarify_command.py +20 -2
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +68 -7
- rasa/dialogue_understanding/commands/utils.py +124 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +46 -8
- rasa/dialogue_understanding/processor/command_processor.py +136 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +57 -3
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/dialogue_understanding_test/du_test_runner.py +8 -3
- rasa/e2e_test/e2e_test_runner.py +13 -3
- rasa/engine/caching.py +2 -2
- rasa/engine/constants.py +1 -1
- rasa/engine/recipes/default_components.py +138 -49
- rasa/engine/recipes/default_recipe.py +108 -11
- rasa/engine/runner/dask.py +8 -5
- rasa/engine/validation.py +19 -6
- rasa/graph_components/validators/default_recipe_validator.py +86 -28
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_training.py +60 -47
- rasa/nlu/classifiers/diet_classifier.py +198 -98
- rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
- rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
- rasa/nlu/extractors/crf_entity_extractor.py +9 -10
- rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
- rasa/nlu/selectors/response_selector.py +10 -2
- rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
- rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
- rasa/nlu/utils/mitie_utils.py +3 -0
- rasa/nlu/utils/spacy_utils.py +3 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_manager.py +12 -3
- rasa/server.py +15 -3
- rasa/shared/agents/__init__.py +0 -0
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +105 -0
- rasa/shared/agents/auth/agent_auth_manager.py +92 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +167 -0
- rasa/shared/agents/auth/constants.py +12 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +8 -0
- rasa/shared/core/constants.py +16 -1
- rasa/shared/core/domain.py +0 -7
- rasa/shared/core/events.py +327 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +49 -5
- rasa/shared/core/flows/steps/collect.py +98 -13
- rasa/shared/core/flows/validation.py +372 -8
- rasa/shared/core/flows/yaml_flows_io.py +3 -2
- rasa/shared/core/slots.py +2 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/exceptions.py +16 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +9 -3
- rasa/shared/providers/llm/_base_litellm_client.py +41 -9
- rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/common.py +24 -0
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +39 -16
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +247 -0
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +3 -6
- rasa/telemetry.py +69 -5
- rasa/tracing/config.py +45 -12
- rasa/tracing/constants.py +14 -0
- rasa/tracing/instrumentation/attribute_extractors.py +142 -9
- rasa/tracing/instrumentation/instrumentation.py +626 -21
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/tracing/instrumentation/metrics.py +32 -0
- rasa/tracing/metric_instrument_provider.py +68 -0
- rasa/utils/common.py +92 -1
- rasa/utils/endpoints.py +11 -2
- rasa/utils/log_utils.py +96 -5
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/tensorflow/__init__.py +7 -0
- rasa/utils/tensorflow/callback.py +136 -101
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +21 -11
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +56 -8
- rasa/utils/tensorflow/rasa_layers.py +8 -6
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +54 -24
- rasa/validator.py +5 -5
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/METADATA +47 -41
- {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/RECORD +299 -238
- rasa/builder/scrape_rasa_docs.py +0 -97
- rasa/core/channels/inspector/dist/assets/channel-8e08bed9.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-78c82dea.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b08f601.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-c941dcb3.js +0 -1336
- {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import dataclasses
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Literal, Optional
|
|
6
|
+
|
|
7
|
+
import structlog
|
|
8
|
+
|
|
9
|
+
from rasa.cli.validation.config_path_validation import get_validated_path
|
|
10
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
11
|
+
from rasa.core.config.credentials import CredentialsConfig
|
|
12
|
+
from rasa.core.config.message_procesing_config import MessageProcessingConfig
|
|
13
|
+
from rasa.shared.constants import (
|
|
14
|
+
DEFAULT_CONFIG_PATH,
|
|
15
|
+
DEFAULT_CREDENTIALS_PATH,
|
|
16
|
+
DEFAULT_ENDPOINTS_PATH,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
logger = structlog.get_logger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclasses.dataclass
|
|
23
|
+
class ValidatedConfigPaths:
|
|
24
|
+
credentials_path: Optional[Path] = None
|
|
25
|
+
endpoints_path: Optional[Path] = None
|
|
26
|
+
message_processing_config_path: Optional[Path] = None
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclasses.dataclass
|
|
30
|
+
class ConfigPath:
|
|
31
|
+
target: Optional[Path] = None
|
|
32
|
+
type: Literal["credentials", "endpoints", "config"] = "endpoints"
|
|
33
|
+
alternative_targets: list[Path] = dataclasses.field(default_factory=list)
|
|
34
|
+
default_path: str = ""
|
|
35
|
+
|
|
36
|
+
@staticmethod
|
|
37
|
+
def _validate(
|
|
38
|
+
config_path: ConfigPath, can_be_missing: bool = True
|
|
39
|
+
) -> Optional[Path]:
|
|
40
|
+
validated_path = get_validated_path(
|
|
41
|
+
config_path.target,
|
|
42
|
+
config_path.type,
|
|
43
|
+
config_path.alternative_targets,
|
|
44
|
+
can_be_missing,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
if validated_path is None and can_be_missing:
|
|
48
|
+
logger.debug(
|
|
49
|
+
f"No {config_path.type} configuration file found. "
|
|
50
|
+
f"Proceeding without {config_path.type} configuration."
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
if isinstance(validated_path, str):
|
|
54
|
+
validated_path = Path(validated_path)
|
|
55
|
+
|
|
56
|
+
return validated_path
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@dataclasses.dataclass
|
|
60
|
+
class CredentialsConfigPath(ConfigPath):
|
|
61
|
+
def __init__(self, target: Optional[Path] = None):
|
|
62
|
+
super().__init__(
|
|
63
|
+
target=target,
|
|
64
|
+
type="credentials",
|
|
65
|
+
alternative_targets=[Path(DEFAULT_CREDENTIALS_PATH)],
|
|
66
|
+
default_path=DEFAULT_CREDENTIALS_PATH,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
@staticmethod
|
|
70
|
+
def validate(
|
|
71
|
+
target_config_path: Optional[Path] = None, can_be_missing: bool = True
|
|
72
|
+
) -> Optional[Path]:
|
|
73
|
+
config_path = CredentialsConfigPath(target=target_config_path)
|
|
74
|
+
return ConfigPath._validate(config_path, can_be_missing)
|
|
75
|
+
|
|
76
|
+
@staticmethod
|
|
77
|
+
def default_file_path() -> Path:
|
|
78
|
+
return Path(DEFAULT_CREDENTIALS_PATH)
|
|
79
|
+
|
|
80
|
+
@staticmethod
|
|
81
|
+
def at_path(
|
|
82
|
+
root_path: Path,
|
|
83
|
+
) -> Path:
|
|
84
|
+
return root_path / CredentialsConfigPath.default_file_path()
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@dataclasses.dataclass
|
|
88
|
+
class EndpointsConfigPath(ConfigPath):
|
|
89
|
+
def __init__(self, target: Optional[Path] = None):
|
|
90
|
+
super().__init__(
|
|
91
|
+
target=target,
|
|
92
|
+
type="endpoints",
|
|
93
|
+
alternative_targets=[Path(DEFAULT_ENDPOINTS_PATH)],
|
|
94
|
+
default_path=DEFAULT_ENDPOINTS_PATH,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
@staticmethod
|
|
98
|
+
def validate(
|
|
99
|
+
target_config_path: Optional[Path] = None, can_be_missing: bool = True
|
|
100
|
+
) -> Optional[Path]:
|
|
101
|
+
config_path = EndpointsConfigPath(target=target_config_path)
|
|
102
|
+
return ConfigPath._validate(config_path, can_be_missing)
|
|
103
|
+
|
|
104
|
+
@staticmethod
|
|
105
|
+
def default_file_path() -> Path:
|
|
106
|
+
return Path(DEFAULT_ENDPOINTS_PATH)
|
|
107
|
+
|
|
108
|
+
@staticmethod
|
|
109
|
+
def at_path(
|
|
110
|
+
root_path: Path,
|
|
111
|
+
) -> Path:
|
|
112
|
+
return root_path / EndpointsConfigPath.default_file_path()
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@dataclasses.dataclass
|
|
116
|
+
class MessageProcessingConfigPath(ConfigPath):
|
|
117
|
+
def __init__(self, target: Optional[Path] = None):
|
|
118
|
+
super().__init__(
|
|
119
|
+
target=target,
|
|
120
|
+
type="config",
|
|
121
|
+
alternative_targets=[Path(DEFAULT_CONFIG_PATH)],
|
|
122
|
+
default_path=DEFAULT_CONFIG_PATH,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
@staticmethod
|
|
126
|
+
def validate(
|
|
127
|
+
target_config_path: Optional[Path] = None, can_be_missing: bool = True
|
|
128
|
+
) -> Optional[Path]:
|
|
129
|
+
config_path = MessageProcessingConfigPath(target=target_config_path)
|
|
130
|
+
return ConfigPath._validate(config_path, can_be_missing)
|
|
131
|
+
|
|
132
|
+
@staticmethod
|
|
133
|
+
def default_file_path() -> Path:
|
|
134
|
+
return Path(DEFAULT_CONFIG_PATH)
|
|
135
|
+
|
|
136
|
+
@staticmethod
|
|
137
|
+
def at_path(
|
|
138
|
+
root_path: Path,
|
|
139
|
+
) -> Path:
|
|
140
|
+
return root_path / MessageProcessingConfigPath.default_file_path()
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class Configuration:
|
|
144
|
+
_instance: Optional[Configuration] = None
|
|
145
|
+
|
|
146
|
+
def __init__(
|
|
147
|
+
self,
|
|
148
|
+
endpoints: AvailableEndpoints,
|
|
149
|
+
credentials: Optional[CredentialsConfig] = None,
|
|
150
|
+
message_processing_config: Optional[MessageProcessingConfig] = None,
|
|
151
|
+
):
|
|
152
|
+
self.credentials = credentials
|
|
153
|
+
self.endpoints = endpoints
|
|
154
|
+
self.message_processing_config = message_processing_config
|
|
155
|
+
|
|
156
|
+
@classmethod
|
|
157
|
+
def initialise_empty(cls) -> Configuration:
|
|
158
|
+
if cls._instance is None:
|
|
159
|
+
cls._instance = Configuration(
|
|
160
|
+
credentials=None,
|
|
161
|
+
endpoints=AvailableEndpoints(),
|
|
162
|
+
message_processing_config=None,
|
|
163
|
+
)
|
|
164
|
+
return cls._instance
|
|
165
|
+
|
|
166
|
+
@classmethod
|
|
167
|
+
def initialise_endpoints(cls, endpoints_path: Path) -> Configuration:
|
|
168
|
+
logger.debug(
|
|
169
|
+
"configuration.initialise_endpoints.start", endpoints_path=endpoints_path
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
validated_endpoints_path = EndpointsConfigPath.validate(endpoints_path)
|
|
173
|
+
endpoints = (
|
|
174
|
+
AvailableEndpoints.read_endpoints(validated_endpoints_path)
|
|
175
|
+
if validated_endpoints_path
|
|
176
|
+
else AvailableEndpoints()
|
|
177
|
+
)
|
|
178
|
+
if cls._instance is None:
|
|
179
|
+
cls._instance = Configuration(
|
|
180
|
+
endpoints=endpoints, credentials=None, message_processing_config=None
|
|
181
|
+
)
|
|
182
|
+
else:
|
|
183
|
+
cls._instance.endpoints = endpoints
|
|
184
|
+
return cls._instance
|
|
185
|
+
|
|
186
|
+
@classmethod
|
|
187
|
+
def initialise_empty_endpoints(cls) -> Configuration:
|
|
188
|
+
logger.debug("configuration.initialise_empty_endpoints.start")
|
|
189
|
+
if cls._instance is None:
|
|
190
|
+
cls._instance = Configuration(
|
|
191
|
+
endpoints=AvailableEndpoints(),
|
|
192
|
+
credentials=None,
|
|
193
|
+
message_processing_config=None,
|
|
194
|
+
)
|
|
195
|
+
else:
|
|
196
|
+
cls._instance.endpoints = AvailableEndpoints()
|
|
197
|
+
return cls._instance
|
|
198
|
+
|
|
199
|
+
@classmethod
|
|
200
|
+
def initialise_message_processing(
|
|
201
|
+
cls, message_processing_config_path: Path
|
|
202
|
+
) -> Configuration:
|
|
203
|
+
logger.debug(
|
|
204
|
+
"configuration.initialise_message_processing.start",
|
|
205
|
+
message_processing_config_path=message_processing_config_path,
|
|
206
|
+
)
|
|
207
|
+
validated_message_processing_path = MessageProcessingConfigPath.validate(
|
|
208
|
+
message_processing_config_path
|
|
209
|
+
)
|
|
210
|
+
message_processing_config = (
|
|
211
|
+
MessageProcessingConfig.load_from_file(validated_message_processing_path)
|
|
212
|
+
if validated_message_processing_path
|
|
213
|
+
else None
|
|
214
|
+
)
|
|
215
|
+
if cls._instance is None:
|
|
216
|
+
cls._instance = Configuration(
|
|
217
|
+
message_processing_config=message_processing_config,
|
|
218
|
+
credentials=None,
|
|
219
|
+
endpoints=AvailableEndpoints(),
|
|
220
|
+
)
|
|
221
|
+
else:
|
|
222
|
+
cls._instance.message_processing_config = message_processing_config
|
|
223
|
+
return cls._instance
|
|
224
|
+
|
|
225
|
+
@classmethod
|
|
226
|
+
def initialise_credentials(cls, credentials_path: Path) -> Configuration:
|
|
227
|
+
logger.debug(
|
|
228
|
+
"configuration.initialise_credentials.start",
|
|
229
|
+
credentials_path=credentials_path,
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
validated_credentials_path = CredentialsConfigPath.validate(credentials_path)
|
|
233
|
+
|
|
234
|
+
credentials = (
|
|
235
|
+
CredentialsConfig.load_from_file(validated_credentials_path)
|
|
236
|
+
if validated_credentials_path
|
|
237
|
+
else None
|
|
238
|
+
)
|
|
239
|
+
if cls._instance is None:
|
|
240
|
+
cls._instance = Configuration(
|
|
241
|
+
credentials=credentials,
|
|
242
|
+
endpoints=AvailableEndpoints(),
|
|
243
|
+
message_processing_config=None,
|
|
244
|
+
)
|
|
245
|
+
else:
|
|
246
|
+
cls._instance.credentials = credentials
|
|
247
|
+
return cls._instance
|
|
248
|
+
|
|
249
|
+
@classmethod
|
|
250
|
+
def get_instance(cls) -> Configuration:
|
|
251
|
+
if cls._instance is None:
|
|
252
|
+
raise Exception(
|
|
253
|
+
"Configuration not initialized. "
|
|
254
|
+
"Call appropriate 'initialise' methods to "
|
|
255
|
+
"load the config when Rasa Pro starts: "
|
|
256
|
+
"initialise_endpoints(), "
|
|
257
|
+
"initialise_credentials(), "
|
|
258
|
+
"initialise_message_processing()"
|
|
259
|
+
)
|
|
260
|
+
return cls._instance
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any, Dict
|
|
5
|
+
|
|
6
|
+
from rasa.shared.utils.yaml import read_config_file
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CredentialsConfig:
|
|
10
|
+
def __init__(
|
|
11
|
+
self, channels: Dict[str, Dict[str, Any]], config_file_path: Path
|
|
12
|
+
) -> None:
|
|
13
|
+
self.channels = channels
|
|
14
|
+
self.config_file_path = config_file_path
|
|
15
|
+
|
|
16
|
+
@classmethod
|
|
17
|
+
def load_from_file(cls, file_path: Path) -> CredentialsConfig:
|
|
18
|
+
credentials_dict = read_config_file(file_path)
|
|
19
|
+
return cls(credentials_dict, file_path)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any, Dict, List
|
|
5
|
+
|
|
6
|
+
from rasa.shared.utils.yaml import read_config_file
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class MessageProcessingConfig:
|
|
10
|
+
def __init__(
|
|
11
|
+
self,
|
|
12
|
+
recipe: str,
|
|
13
|
+
language: str,
|
|
14
|
+
assistant_id: str,
|
|
15
|
+
pipeline: List[Dict[str, Any]],
|
|
16
|
+
policies: List[Dict[str, Any]],
|
|
17
|
+
):
|
|
18
|
+
self.recipe = recipe
|
|
19
|
+
self.language = language
|
|
20
|
+
self.assistant_id = assistant_id
|
|
21
|
+
self.pipeline = pipeline
|
|
22
|
+
self.policies = policies
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def load_from_file(cls, filepath: Path) -> MessageProcessingConfig:
|
|
26
|
+
credentials_dict = read_config_file(filepath)
|
|
27
|
+
|
|
28
|
+
recipe = credentials_dict.get("recipe", "")
|
|
29
|
+
language = credentials_dict.get("language", "")
|
|
30
|
+
assistant_id = credentials_dict.get("assistant_id", "")
|
|
31
|
+
pipeline = credentials_dict.get("pipeline", [])
|
|
32
|
+
policies = credentials_dict.get("policies", [])
|
|
33
|
+
|
|
34
|
+
return cls(recipe, language, assistant_id, pipeline, policies)
|
rasa/core/constants.py
CHANGED
|
@@ -31,6 +31,10 @@ BEARER_TOKEN_PREFIX = "Bearer "
|
|
|
31
31
|
# The lowest priority is intended to be used by machine learning policies.
|
|
32
32
|
DEFAULT_POLICY_PRIORITY = 1
|
|
33
33
|
|
|
34
|
+
DEFAULT_SUB_AGENTS = "sub_agents"
|
|
35
|
+
|
|
36
|
+
MCP_SERVERS_KEY = "mcp_servers"
|
|
37
|
+
|
|
34
38
|
# The priority of intent-prediction policies.
|
|
35
39
|
# This should be below all rule based policies but higher than ML
|
|
36
40
|
# based policies. This enables a loop inside ensemble where if none
|
|
@@ -119,3 +123,9 @@ SQL_TRACKER_STORE_SSL_ROOT_CERTIFICATE_ENV_VAR_NAME = (
|
|
|
119
123
|
"SQL_TRACKER_STORE_SSL_ROOT_CERTIFICATE"
|
|
120
124
|
)
|
|
121
125
|
AWS_ELASTICACHE_CLUSTER_NAME_ENV_VAR_NAME = "AWS_ELASTICACHE_CLUSTER_NAME"
|
|
126
|
+
RDS_SQL_DB_AWS_IAM_ENABLED_ENV_VAR_NAME = "RDS_SQL_DB_AWS_IAM_ENABLED"
|
|
127
|
+
ELASTICACHE_REDIS_AWS_IAM_ENABLED_ENV_VAR_NAME = "ELASTICACHE_REDIS_AWS_IAM_ENABLED"
|
|
128
|
+
KAFKA_MSK_AWS_IAM_ENABLED_ENV_VAR_NAME = "KAFKA_MSK_AWS_IAM_ENABLED"
|
|
129
|
+
SQL_SERVICE_NAME = "sql"
|
|
130
|
+
REDIS_SERVICE_NAME = "redis"
|
|
131
|
+
KAFKA_SERVICE_NAME = "kafka"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import threading
|
|
3
3
|
import time
|
|
4
|
-
from typing import Optional, Tuple
|
|
4
|
+
from typing import Dict, Optional, Tuple
|
|
5
5
|
from urllib.parse import ParseResult, urlencode, urlunparse
|
|
6
6
|
|
|
7
7
|
import boto3
|
|
@@ -14,6 +14,14 @@ from botocore.session import get_session
|
|
|
14
14
|
from botocore.signers import RequestSigner
|
|
15
15
|
from cachetools import TTLCache, cached
|
|
16
16
|
|
|
17
|
+
from rasa.core.constants import (
|
|
18
|
+
ELASTICACHE_REDIS_AWS_IAM_ENABLED_ENV_VAR_NAME,
|
|
19
|
+
KAFKA_MSK_AWS_IAM_ENABLED_ENV_VAR_NAME,
|
|
20
|
+
KAFKA_SERVICE_NAME,
|
|
21
|
+
RDS_SQL_DB_AWS_IAM_ENABLED_ENV_VAR_NAME,
|
|
22
|
+
REDIS_SERVICE_NAME,
|
|
23
|
+
SQL_SERVICE_NAME,
|
|
24
|
+
)
|
|
17
25
|
from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
|
|
18
26
|
IAMCredentialsProvider,
|
|
19
27
|
IAMCredentialsProviderInput,
|
|
@@ -24,6 +32,25 @@ from rasa.shared.exceptions import ConnectionException
|
|
|
24
32
|
|
|
25
33
|
structlogger = structlog.get_logger(__name__)
|
|
26
34
|
|
|
35
|
+
SERVICE_CONFIG: Dict[Tuple[SupportedServiceType, str], str] = {
|
|
36
|
+
(
|
|
37
|
+
SupportedServiceType.TRACKER_STORE,
|
|
38
|
+
SQL_SERVICE_NAME,
|
|
39
|
+
): RDS_SQL_DB_AWS_IAM_ENABLED_ENV_VAR_NAME,
|
|
40
|
+
(
|
|
41
|
+
SupportedServiceType.TRACKER_STORE,
|
|
42
|
+
REDIS_SERVICE_NAME,
|
|
43
|
+
): ELASTICACHE_REDIS_AWS_IAM_ENABLED_ENV_VAR_NAME,
|
|
44
|
+
(
|
|
45
|
+
SupportedServiceType.EVENT_BROKER,
|
|
46
|
+
KAFKA_SERVICE_NAME,
|
|
47
|
+
): KAFKA_MSK_AWS_IAM_ENABLED_ENV_VAR_NAME,
|
|
48
|
+
(
|
|
49
|
+
SupportedServiceType.LOCK_STORE,
|
|
50
|
+
REDIS_SERVICE_NAME,
|
|
51
|
+
): ELASTICACHE_REDIS_AWS_IAM_ENABLED_ENV_VAR_NAME,
|
|
52
|
+
}
|
|
53
|
+
|
|
27
54
|
|
|
28
55
|
class AWSRDSIAMCredentialsProvider(IAMCredentialsProvider):
|
|
29
56
|
"""Generates temporary credentials for AWS RDS using IAM roles."""
|
|
@@ -203,21 +230,59 @@ class AWSElasticacheRedisIAMCredentialsProvider(redis.CredentialProvider):
|
|
|
203
230
|
return TemporaryCredentials()
|
|
204
231
|
|
|
205
232
|
|
|
233
|
+
def is_iam_enabled(provider_input: "IAMCredentialsProviderInput") -> bool:
|
|
234
|
+
"""Checks if IAM authentication is enabled for the given service."""
|
|
235
|
+
service_type = provider_input.service_type
|
|
236
|
+
service_name = provider_input.service_name
|
|
237
|
+
iam_enabled_env_var_name = SERVICE_CONFIG.get((service_type, service_name))
|
|
238
|
+
|
|
239
|
+
if not iam_enabled_env_var_name:
|
|
240
|
+
structlogger.warning(
|
|
241
|
+
"rasa.core.aws_iam_credentials_providers.is_iam_enabled.unsupported_service",
|
|
242
|
+
event_info=f"IAM authentication check requested for unsupported service: "
|
|
243
|
+
f"{service_name}",
|
|
244
|
+
)
|
|
245
|
+
return False
|
|
246
|
+
|
|
247
|
+
return os.getenv(iam_enabled_env_var_name, "false").lower() == "true"
|
|
248
|
+
|
|
249
|
+
|
|
206
250
|
def create_aws_iam_credentials_provider(
|
|
207
251
|
provider_input: "IAMCredentialsProviderInput",
|
|
208
252
|
) -> Optional["IAMCredentialsProvider"]:
|
|
209
253
|
"""Factory function to create an AWS IAM credentials provider."""
|
|
210
|
-
|
|
254
|
+
iam_enabled = is_iam_enabled(provider_input)
|
|
255
|
+
if not iam_enabled:
|
|
256
|
+
structlogger.debug(
|
|
257
|
+
"rasa.core.aws_iam_credentials_providers.create_provider.iam_not_enabled",
|
|
258
|
+
event_info=f"IAM authentication not enabled for service: "
|
|
259
|
+
f"{provider_input.service_type}",
|
|
260
|
+
)
|
|
261
|
+
return None
|
|
262
|
+
|
|
263
|
+
if (
|
|
264
|
+
provider_input.service_type == SupportedServiceType.TRACKER_STORE
|
|
265
|
+
and provider_input.service_name == SQL_SERVICE_NAME
|
|
266
|
+
):
|
|
211
267
|
return AWSRDSIAMCredentialsProvider(
|
|
212
268
|
username=provider_input.username,
|
|
213
269
|
host=provider_input.host,
|
|
214
270
|
port=provider_input.port,
|
|
215
271
|
)
|
|
216
272
|
|
|
217
|
-
if
|
|
273
|
+
if (
|
|
274
|
+
provider_input.service_type == SupportedServiceType.TRACKER_STORE
|
|
275
|
+
and provider_input.service_name == REDIS_SERVICE_NAME
|
|
276
|
+
):
|
|
277
|
+
return AWSElasticacheRedisIAMCredentialsProvider(
|
|
278
|
+
username=provider_input.username,
|
|
279
|
+
cluster_name=provider_input.cluster_name,
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
if provider_input.service_type == SupportedServiceType.EVENT_BROKER:
|
|
218
283
|
return AWSMSKafkaIAMCredentialsProvider()
|
|
219
284
|
|
|
220
|
-
if provider_input.
|
|
285
|
+
if provider_input.service_type == SupportedServiceType.LOCK_STORE:
|
|
221
286
|
return AWSElasticacheRedisIAMCredentialsProvider(
|
|
222
287
|
username=provider_input.username,
|
|
223
288
|
cluster_name=provider_input.cluster_name,
|
|
@@ -47,7 +47,8 @@ class SupportedServiceType(Enum):
|
|
|
47
47
|
class IAMCredentialsProviderInput(BaseModel):
|
|
48
48
|
"""Input data for creating an IAM credentials provider."""
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
service_type: SupportedServiceType
|
|
51
|
+
service_name: str
|
|
51
52
|
username: Optional[str] = None
|
|
52
53
|
host: Optional[str] = None
|
|
53
54
|
port: Optional[int] = None
|
rasa/core/lock_store.py
CHANGED
|
@@ -18,6 +18,9 @@ from pydantic import (
|
|
|
18
18
|
|
|
19
19
|
import rasa.shared.utils.common
|
|
20
20
|
from rasa.core.constants import DEFAULT_LOCK_LIFETIME, IAM_CLOUD_PROVIDER_ENV_VAR_NAME
|
|
21
|
+
from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
|
|
22
|
+
SupportedServiceType,
|
|
23
|
+
)
|
|
21
24
|
from rasa.core.lock import TicketLock
|
|
22
25
|
from rasa.core.redis_connection_factory import (
|
|
23
26
|
DeploymentMode,
|
|
@@ -336,6 +339,7 @@ class RedisLockStore(LockStore):
|
|
|
336
339
|
redis_config = RedisConfig(
|
|
337
340
|
host=str(self.config.host),
|
|
338
341
|
port=self.config.port,
|
|
342
|
+
service_type=SupportedServiceType.LOCK_STORE,
|
|
339
343
|
db=self.config.db,
|
|
340
344
|
username=self.config.username,
|
|
341
345
|
password=self.config.password,
|
|
@@ -12,7 +12,7 @@ from jinja2 import Template
|
|
|
12
12
|
from pydantic import ValidationError
|
|
13
13
|
|
|
14
14
|
import rasa.shared.utils.io
|
|
15
|
-
from rasa.core.available_endpoints import AvailableEndpoints
|
|
15
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
16
16
|
from rasa.core.constants import (
|
|
17
17
|
UTTER_SOURCE_METADATA_KEY,
|
|
18
18
|
)
|
|
@@ -63,6 +63,8 @@ from rasa.shared.constants import (
|
|
|
63
63
|
)
|
|
64
64
|
from rasa.shared.core.constants import (
|
|
65
65
|
ACTION_CANCEL_FLOW,
|
|
66
|
+
ACTION_METADATA_MESSAGE_KEY,
|
|
67
|
+
ACTION_METADATA_TEXT_KEY,
|
|
66
68
|
ACTION_SEND_TEXT_NAME,
|
|
67
69
|
DEFAULT_SLOT_NAMES,
|
|
68
70
|
)
|
|
@@ -585,8 +587,8 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
585
587
|
return self._create_prediction_internal_error(domain, tracker)
|
|
586
588
|
|
|
587
589
|
action_metadata = {
|
|
588
|
-
|
|
589
|
-
|
|
590
|
+
ACTION_METADATA_MESSAGE_KEY: {
|
|
591
|
+
ACTION_METADATA_TEXT_KEY: response,
|
|
590
592
|
SEARCH_RESULTS_METADATA_KEY: [
|
|
591
593
|
result.text for result in documents.results
|
|
592
594
|
],
|
|
@@ -137,8 +137,8 @@ class FlowPolicy(Policy):
|
|
|
137
137
|
|
|
138
138
|
# create executor and predict next action
|
|
139
139
|
try:
|
|
140
|
-
prediction = flow_executor.advance_flows(
|
|
141
|
-
tracker, domain.action_names_or_texts, flows
|
|
140
|
+
prediction = await flow_executor.advance_flows(
|
|
141
|
+
tracker, domain.action_names_or_texts, flows, domain.slots
|
|
142
142
|
)
|
|
143
143
|
return self._create_prediction_result(
|
|
144
144
|
prediction.action_name,
|
|
@@ -164,8 +164,8 @@ class FlowPolicy(Policy):
|
|
|
164
164
|
# we retry, with the internal error frame on the stack
|
|
165
165
|
events = tracker.create_stack_updated_events(updated_stack)
|
|
166
166
|
tracker.update_with_events(events)
|
|
167
|
-
prediction = flow_executor.advance_flows(
|
|
168
|
-
tracker, domain.action_names_or_texts, flows
|
|
167
|
+
prediction = await flow_executor.advance_flows(
|
|
168
|
+
tracker, domain.action_names_or_texts, flows, domain.slots
|
|
169
169
|
)
|
|
170
170
|
collected_events = events + (prediction.events or [])
|
|
171
171
|
return self._create_prediction_result(
|