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
rasa/cli/llm_fine_tuning.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import argparse
|
|
2
2
|
import asyncio
|
|
3
3
|
import sys
|
|
4
|
+
from pathlib import Path
|
|
4
5
|
from typing import Any, Dict, List, Type, cast
|
|
5
6
|
|
|
6
7
|
import structlog
|
|
@@ -14,13 +15,15 @@ from rasa.cli.arguments.default_arguments import (
|
|
|
14
15
|
add_endpoint_param,
|
|
15
16
|
add_model_param,
|
|
16
17
|
add_remote_storage_param,
|
|
18
|
+
add_sub_agents_param,
|
|
17
19
|
)
|
|
18
20
|
from rasa.cli.e2e_test import (
|
|
19
21
|
RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME,
|
|
20
22
|
read_test_cases,
|
|
21
23
|
validate_model_path,
|
|
22
24
|
)
|
|
23
|
-
from rasa.core.available_endpoints import AvailableEndpoints
|
|
25
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
26
|
+
from rasa.core.config.configuration import Configuration
|
|
24
27
|
from rasa.core.exceptions import AgentNotReady
|
|
25
28
|
from rasa.dialogue_understanding.generator.llm_based_command_generator import (
|
|
26
29
|
LLMBasedCommandGenerator,
|
|
@@ -46,7 +49,6 @@ from rasa.llm_fine_tuning.train_test_split_module import (
|
|
|
46
49
|
split_llm_fine_tuning_data,
|
|
47
50
|
)
|
|
48
51
|
from rasa.shared.constants import (
|
|
49
|
-
DEFAULT_ENDPOINTS_PATH,
|
|
50
52
|
DEFAULT_MODELS_PATH,
|
|
51
53
|
LLM_CONFIG_KEY,
|
|
52
54
|
)
|
|
@@ -137,6 +139,8 @@ def add_data_preparation_arguments(parser: argparse.ArgumentParser) -> None:
|
|
|
137
139
|
default=DEFAULT_INPUT_E2E_TEST_PATH,
|
|
138
140
|
)
|
|
139
141
|
|
|
142
|
+
add_sub_agents_param(parser)
|
|
143
|
+
|
|
140
144
|
add_remote_storage_param(parser)
|
|
141
145
|
|
|
142
146
|
rephrasing_arguments = parser.add_argument_group("Rephrasing Module")
|
|
@@ -376,6 +380,7 @@ def write_params(
|
|
|
376
380
|
"rephrase_config": rephrase_config,
|
|
377
381
|
"model": args.model,
|
|
378
382
|
"endpoints": args.endpoints,
|
|
383
|
+
"sub-agents": args.sub_agents,
|
|
379
384
|
"remote-storage": args.remote_storage,
|
|
380
385
|
"train_frac": args.train_frac,
|
|
381
386
|
"output_format": args.output_format,
|
|
@@ -393,10 +398,9 @@ def write_statistics(statistics: Dict[str, Any], output_path: str) -> None:
|
|
|
393
398
|
|
|
394
399
|
|
|
395
400
|
def get_valid_endpoints(endpoints_file: str) -> AvailableEndpoints:
|
|
396
|
-
|
|
397
|
-
endpoints_file
|
|
398
|
-
)
|
|
399
|
-
endpoints = AvailableEndpoints.get_instance(validated_endpoints_file)
|
|
401
|
+
endpoints = Configuration.initialise_endpoints(
|
|
402
|
+
endpoints_path=Path(endpoints_file)
|
|
403
|
+
).endpoints
|
|
400
404
|
|
|
401
405
|
# Ignore all endpoints apart from action server, model, nlu and nlg
|
|
402
406
|
# to ensure InMemoryTrackerStore is being used instead of production
|
|
@@ -420,6 +424,7 @@ def set_up_e2e_test_runner(args: argparse.Namespace) -> E2ETestRunner:
|
|
|
420
424
|
model_path=args.model,
|
|
421
425
|
model_server=endpoints.model,
|
|
422
426
|
endpoints=endpoints,
|
|
427
|
+
sub_agents_path=args.sub_agents,
|
|
423
428
|
)
|
|
424
429
|
except AgentNotReady as error:
|
|
425
430
|
structlogger.error(
|
|
File without changes
|
|
@@ -31,3 +31,13 @@ rest:
|
|
|
31
31
|
# for the Rasa Enterprise "channel", i.e. Talk to your bot and Share with guest testers.
|
|
32
32
|
rasa:
|
|
33
33
|
url: "http://localhost:5002/api"
|
|
34
|
+
|
|
35
|
+
# The Browser Audio channel enables voice interactions with your assistant directly in the browser.
|
|
36
|
+
# Used by the Rasa Voice Inspector, it provides speech-to-text and text-to-speech capabilities
|
|
37
|
+
# through services like Deepgram.
|
|
38
|
+
browser_audio:
|
|
39
|
+
server_url: localhost
|
|
40
|
+
asr:
|
|
41
|
+
name: deepgram
|
|
42
|
+
tts:
|
|
43
|
+
name: deepgram
|
rasa/cli/run.py
CHANGED
|
@@ -7,12 +7,12 @@ from rasa.api import run as rasa_run
|
|
|
7
7
|
from rasa.cli import SubParsersAction
|
|
8
8
|
from rasa.cli.arguments import run as arguments
|
|
9
9
|
from rasa.cli.arguments.default_arguments import SkipYamlValidation
|
|
10
|
-
from rasa.
|
|
10
|
+
from rasa.core.config.configuration import (
|
|
11
|
+
Configuration,
|
|
12
|
+
)
|
|
11
13
|
from rasa.exceptions import ModelNotFound
|
|
12
14
|
from rasa.shared.constants import (
|
|
13
15
|
DEFAULT_ACTIONS_PATH,
|
|
14
|
-
DEFAULT_CREDENTIALS_PATH,
|
|
15
|
-
DEFAULT_ENDPOINTS_PATH,
|
|
16
16
|
DEFAULT_MODELS_PATH,
|
|
17
17
|
DOCS_BASE_URL,
|
|
18
18
|
)
|
|
@@ -86,11 +86,10 @@ def run(args: argparse.Namespace) -> None:
|
|
|
86
86
|
Args:
|
|
87
87
|
args: The CLI arguments.
|
|
88
88
|
"""
|
|
89
|
-
|
|
90
|
-
args.endpoints,
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
args.credentials, "credentials", DEFAULT_CREDENTIALS_PATH, True
|
|
89
|
+
Configuration.initialise_endpoints(
|
|
90
|
+
args.endpoints,
|
|
91
|
+
).initialise_credentials(
|
|
92
|
+
args.credentials,
|
|
94
93
|
)
|
|
95
94
|
|
|
96
95
|
if SkipYamlValidation.DOMAIN.value in args.skip_yaml_validation:
|
|
@@ -109,7 +108,7 @@ def run(args: argparse.Namespace) -> None:
|
|
|
109
108
|
# configured
|
|
110
109
|
|
|
111
110
|
import rasa.model
|
|
112
|
-
from rasa.core.
|
|
111
|
+
from rasa.core.available_agents import AvailableAgents
|
|
113
112
|
|
|
114
113
|
# start server if remote storage is configured
|
|
115
114
|
if args.remote_storage is not None:
|
|
@@ -117,12 +116,15 @@ def run(args: argparse.Namespace) -> None:
|
|
|
117
116
|
return
|
|
118
117
|
|
|
119
118
|
# start server if model server is configured
|
|
120
|
-
endpoints =
|
|
119
|
+
endpoints = Configuration.get_instance().endpoints
|
|
121
120
|
model_server = endpoints.model if endpoints and endpoints.model else None
|
|
122
121
|
if model_server is not None:
|
|
123
122
|
rasa_run(**vars(args))
|
|
124
123
|
return
|
|
125
124
|
|
|
125
|
+
# load sub-agents
|
|
126
|
+
AvailableAgents.get_instance(args.sub_agents)
|
|
127
|
+
|
|
126
128
|
# start server if local model found
|
|
127
129
|
args.model = _validate_model_path(args.model, "model", DEFAULT_MODELS_PATH)
|
|
128
130
|
local_model_set = True
|
rasa/cli/scaffold.py
CHANGED
|
@@ -104,10 +104,10 @@ def print_train_or_instructions(args: argparse.Namespace) -> None:
|
|
|
104
104
|
if should_train:
|
|
105
105
|
print_success("Training an initial model...")
|
|
106
106
|
training_result = train(
|
|
107
|
-
template_domain_path[args.template],
|
|
108
|
-
DEFAULT_CONFIG_PATH,
|
|
109
|
-
DEFAULT_DATA_PATH,
|
|
110
|
-
DEFAULT_MODELS_PATH,
|
|
107
|
+
domain=template_domain_path[args.template],
|
|
108
|
+
config=DEFAULT_CONFIG_PATH,
|
|
109
|
+
training_files=DEFAULT_DATA_PATH,
|
|
110
|
+
output=DEFAULT_MODELS_PATH,
|
|
111
111
|
)
|
|
112
112
|
args.model = training_result.model
|
|
113
113
|
|
rasa/cli/shell.py
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import argparse
|
|
2
2
|
import logging
|
|
3
3
|
import uuid
|
|
4
|
+
from pathlib import Path
|
|
4
5
|
from typing import List
|
|
5
6
|
|
|
6
7
|
from rasa import telemetry
|
|
7
8
|
from rasa.cli import SubParsersAction
|
|
8
9
|
from rasa.cli.arguments import shell as arguments
|
|
9
|
-
from rasa.
|
|
10
|
+
from rasa.cli.arguments.default_arguments import add_sub_agents_param
|
|
11
|
+
from rasa.core.config.configuration import Configuration
|
|
10
12
|
from rasa.engine.storage.local_model_storage import LocalModelStorage
|
|
11
13
|
from rasa.exceptions import ModelNotFound
|
|
12
14
|
from rasa.model import get_local_model
|
|
@@ -45,6 +47,8 @@ def add_subparser(
|
|
|
45
47
|
help="Set the conversation ID.",
|
|
46
48
|
)
|
|
47
49
|
|
|
50
|
+
add_sub_agents_param(shell_parser)
|
|
51
|
+
|
|
48
52
|
run_subparsers = shell_parser.add_subparsers()
|
|
49
53
|
|
|
50
54
|
shell_nlu_subparser = run_subparsers.add_parser(
|
|
@@ -64,7 +68,7 @@ def add_subparser(
|
|
|
64
68
|
def shell_nlu(args: argparse.Namespace) -> None:
|
|
65
69
|
"""Talk with an NLU only bot though the command line."""
|
|
66
70
|
import rasa.nlu.run
|
|
67
|
-
from rasa.cli.
|
|
71
|
+
from rasa.cli.validation.config_path_validation import get_validated_path
|
|
68
72
|
from rasa.shared.constants import DEFAULT_MODELS_PATH
|
|
69
73
|
|
|
70
74
|
args.connector = "cmdline"
|
|
@@ -102,15 +106,15 @@ def shell_nlu(args: argparse.Namespace) -> None:
|
|
|
102
106
|
|
|
103
107
|
def shell(args: argparse.Namespace) -> None:
|
|
104
108
|
"""Talk with a bot though the command line."""
|
|
105
|
-
from rasa.cli.
|
|
109
|
+
from rasa.cli.validation.config_path_validation import get_validated_path
|
|
106
110
|
from rasa.shared.constants import DEFAULT_MODELS_PATH
|
|
107
111
|
|
|
108
112
|
args.connector = "cmdline"
|
|
109
113
|
# Load endpoints with proper endpoint file location
|
|
110
114
|
# This will initialise the endpoints singleton properly so that
|
|
111
115
|
# it can be used safely throughout the codebase with
|
|
112
|
-
# `
|
|
113
|
-
|
|
116
|
+
# `Configuration.get_instance().endpoints`
|
|
117
|
+
Configuration.initialise_endpoints(endpoints_path=Path(args.endpoints))
|
|
114
118
|
model = get_validated_path(args.model, "model", DEFAULT_MODELS_PATH)
|
|
115
119
|
|
|
116
120
|
try:
|
rasa/cli/studio/studio.py
CHANGED
|
@@ -12,7 +12,7 @@ import rasa.cli.studio.train
|
|
|
12
12
|
import rasa.cli.studio.upload
|
|
13
13
|
import rasa.shared.utils.cli
|
|
14
14
|
from rasa.cli import SubParsersAction
|
|
15
|
-
from rasa.cli.
|
|
15
|
+
from rasa.cli.validation.config_path_validation import get_validated_path
|
|
16
16
|
from rasa.shared.constants import DEFAULT_DOMAIN_PATH, DEFAULT_DOMAIN_PATHS
|
|
17
17
|
from rasa.studio.auth import StudioAuth
|
|
18
18
|
from rasa.studio.config import StudioConfig
|
rasa/cli/test.py
CHANGED
|
@@ -11,6 +11,13 @@ import rasa.shared.utils.io
|
|
|
11
11
|
import rasa.utils.common
|
|
12
12
|
from rasa.cli import SubParsersAction
|
|
13
13
|
from rasa.cli.arguments import test as arguments
|
|
14
|
+
from rasa.cli.validation.config_path_validation import get_validated_path
|
|
15
|
+
from rasa.core.config.configuration import (
|
|
16
|
+
Configuration,
|
|
17
|
+
CredentialsConfigPath,
|
|
18
|
+
EndpointsConfigPath,
|
|
19
|
+
MessageProcessingConfigPath,
|
|
20
|
+
)
|
|
14
21
|
from rasa.core.constants import (
|
|
15
22
|
FAILED_STORIES_FILE,
|
|
16
23
|
STORIES_WITH_WARNINGS_FILE,
|
|
@@ -100,10 +107,16 @@ async def run_core_test_async(args: argparse.Namespace) -> None:
|
|
|
100
107
|
test_core_models_in_directory,
|
|
101
108
|
)
|
|
102
109
|
|
|
103
|
-
|
|
104
|
-
|
|
110
|
+
Configuration.initialise_endpoints(
|
|
111
|
+
endpoints_path=EndpointsConfigPath.validate(),
|
|
112
|
+
).initialise_credentials(
|
|
113
|
+
credentials_path=CredentialsConfigPath.validate()
|
|
114
|
+
).initialise_message_processing(
|
|
115
|
+
message_processing_config_path=MessageProcessingConfigPath.validate()
|
|
105
116
|
)
|
|
106
117
|
|
|
118
|
+
stories = get_validated_path(args.stories, "stories", DEFAULT_DATA_PATH)
|
|
119
|
+
|
|
107
120
|
output = args.out or DEFAULT_RESULTS_PATH
|
|
108
121
|
args.errors = not args.no_errors
|
|
109
122
|
args.warnings = not args.no_warnings
|
|
@@ -121,9 +134,7 @@ async def run_core_test_async(args: argparse.Namespace) -> None:
|
|
|
121
134
|
return
|
|
122
135
|
|
|
123
136
|
if isinstance(args.model, str):
|
|
124
|
-
model_path =
|
|
125
|
-
args.model, "model", DEFAULT_MODELS_PATH
|
|
126
|
-
)
|
|
137
|
+
model_path = get_validated_path(args.model, "model", DEFAULT_MODELS_PATH)
|
|
127
138
|
|
|
128
139
|
if args.evaluate_model_directory:
|
|
129
140
|
await test_core_models_in_directory(
|
|
@@ -182,9 +193,7 @@ async def run_nlu_test_async(
|
|
|
182
193
|
test_nlu,
|
|
183
194
|
)
|
|
184
195
|
|
|
185
|
-
data_path = str(
|
|
186
|
-
rasa.cli.utils.get_validated_path(data_path, "nlu", DEFAULT_DATA_PATH)
|
|
187
|
-
)
|
|
196
|
+
data_path = str(get_validated_path(data_path, "nlu", DEFAULT_DATA_PATH))
|
|
188
197
|
test_data_importer = TrainingDataImporter.load_from_dict(
|
|
189
198
|
training_data_paths=[data_path], domain_path=domain_path
|
|
190
199
|
)
|
|
@@ -225,18 +234,29 @@ async def run_nlu_test_async(
|
|
|
225
234
|
)
|
|
226
235
|
elif cross_validation:
|
|
227
236
|
logger.info("Test model using cross validation.")
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
237
|
+
|
|
238
|
+
Configuration.initialise_endpoints(
|
|
239
|
+
endpoints_path=EndpointsConfigPath.validate(),
|
|
240
|
+
).initialise_credentials(
|
|
241
|
+
credentials_path=CredentialsConfigPath.validate()
|
|
242
|
+
).initialise_message_processing(
|
|
243
|
+
message_processing_config_path=MessageProcessingConfigPath.validate(config),
|
|
232
244
|
)
|
|
245
|
+
|
|
246
|
+
config = str(get_validated_path(config, "config", DEFAULT_CONFIG_PATH))
|
|
233
247
|
config_importer = TrainingDataImporter.load_from_dict(config_path=config)
|
|
234
248
|
|
|
235
249
|
config_dict = config_importer.get_config()
|
|
236
250
|
await perform_nlu_cross_validation(config_dict, nlu_data, output, all_args)
|
|
237
251
|
else:
|
|
238
|
-
model_path =
|
|
239
|
-
|
|
252
|
+
model_path = get_validated_path(models_path, "model", DEFAULT_MODELS_PATH)
|
|
253
|
+
|
|
254
|
+
Configuration.initialise_endpoints(
|
|
255
|
+
endpoints_path=EndpointsConfigPath.validate(),
|
|
256
|
+
).initialise_credentials(
|
|
257
|
+
credentials_path=CredentialsConfigPath.validate()
|
|
258
|
+
).initialise_message_processing(
|
|
259
|
+
message_processing_config_path=MessageProcessingConfigPath.validate(config),
|
|
240
260
|
)
|
|
241
261
|
|
|
242
262
|
await test_nlu(model_path, data_path, output, all_args, domain_path=domain_path)
|
rasa/cli/train.py
CHANGED
|
@@ -7,10 +7,13 @@ from typing import Dict, List, Optional, Text, Union
|
|
|
7
7
|
import structlog
|
|
8
8
|
|
|
9
9
|
import rasa.cli.arguments.train as train_arguments
|
|
10
|
-
import rasa.cli.utils
|
|
11
|
-
import rasa.core.utils
|
|
12
|
-
import rasa.utils.common
|
|
13
10
|
from rasa.cli import SubParsersAction
|
|
11
|
+
from rasa.cli.validation.bot_config import validate_files
|
|
12
|
+
from rasa.cli.validation.config_path_validation import (
|
|
13
|
+
get_validated_config,
|
|
14
|
+
get_validated_path,
|
|
15
|
+
)
|
|
16
|
+
from rasa.core.config.configuration import Configuration
|
|
14
17
|
from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
|
|
15
18
|
from rasa.core.nlg.generator import NaturalLanguageGenerator
|
|
16
19
|
from rasa.core.train import do_compare_training
|
|
@@ -74,7 +77,9 @@ def add_subparser(
|
|
|
74
77
|
|
|
75
78
|
def _check_nlg_endpoint_validity(endpoint: Union[Path, str]) -> None:
|
|
76
79
|
try:
|
|
77
|
-
endpoints =
|
|
80
|
+
endpoints = Configuration.initialise_endpoints(
|
|
81
|
+
endpoints_path=endpoint
|
|
82
|
+
).endpoints
|
|
78
83
|
if endpoints.nlg is not None:
|
|
79
84
|
validate_api_type_config_key_usage(
|
|
80
85
|
endpoints.nlg.kwargs,
|
|
@@ -115,21 +120,17 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
|
|
|
115
120
|
"""
|
|
116
121
|
from rasa.api import train as train_all
|
|
117
122
|
|
|
118
|
-
domain =
|
|
123
|
+
domain = get_validated_path(
|
|
119
124
|
args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
|
|
120
125
|
)
|
|
121
|
-
config =
|
|
126
|
+
config = get_validated_config(args.config, CONFIG_MANDATORY_KEYS)
|
|
122
127
|
|
|
123
128
|
# Validates and loads endpoints with proper endpoint file location
|
|
124
|
-
#
|
|
125
|
-
# it can be used safely throughout the codebase with
|
|
126
|
-
# `AvailableEndpoints.get_instance()`
|
|
129
|
+
# TODO(Radovan): this should be probably be done in Configuration
|
|
127
130
|
_check_nlg_endpoint_validity(args.endpoints)
|
|
128
131
|
|
|
129
132
|
training_files = [
|
|
130
|
-
|
|
131
|
-
f, "data", DEFAULT_DATA_PATH, none_is_valid=True
|
|
132
|
-
)
|
|
133
|
+
get_validated_path(f, "data", DEFAULT_DATA_PATH, none_is_valid=True)
|
|
133
134
|
for f in args.data
|
|
134
135
|
]
|
|
135
136
|
|
|
@@ -143,15 +144,17 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
|
|
|
143
144
|
event_info="Started validating domain and training data...",
|
|
144
145
|
)
|
|
145
146
|
|
|
146
|
-
|
|
147
|
+
validate_files(
|
|
147
148
|
args.fail_on_validation_warnings,
|
|
148
149
|
args.validation_max_history,
|
|
149
150
|
training_data_importer,
|
|
151
|
+
sub_agents=args.sub_agents,
|
|
150
152
|
)
|
|
151
153
|
|
|
152
154
|
training_result = train_all(
|
|
153
155
|
domain=domain,
|
|
154
156
|
config=config,
|
|
157
|
+
endpoints=args.endpoints,
|
|
155
158
|
training_files=training_files,
|
|
156
159
|
output=args.out,
|
|
157
160
|
dry_run=args.dry_run,
|
|
@@ -168,6 +171,7 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
|
|
|
168
171
|
file_importer=training_data_importer,
|
|
169
172
|
keep_local_model_copy=args.keep_local_model_copy,
|
|
170
173
|
remote_root_only=args.remote_root_only,
|
|
174
|
+
sub_agents=args.sub_agents,
|
|
171
175
|
)
|
|
172
176
|
if training_result.code != 0 and can_exit:
|
|
173
177
|
display_research_study_prompt()
|
|
@@ -177,13 +181,19 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
|
|
|
177
181
|
|
|
178
182
|
|
|
179
183
|
def _model_for_finetuning(args: argparse.Namespace) -> Optional[Text]:
|
|
180
|
-
if args.finetune
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
184
|
+
if args.finetune is not None:
|
|
185
|
+
structlogger.error(
|
|
186
|
+
"cli.train.incremental_training_not_supported",
|
|
187
|
+
event_info=(
|
|
188
|
+
"Incremental training (--finetune) is "
|
|
189
|
+
"not supported in Rasa 3.14.0 onwards. "
|
|
190
|
+
"Please retrain your model from scratch "
|
|
191
|
+
"if you have updated your configuration. "
|
|
192
|
+
),
|
|
193
|
+
)
|
|
194
|
+
display_research_study_prompt()
|
|
195
|
+
sys.exit(1)
|
|
196
|
+
return None
|
|
187
197
|
|
|
188
198
|
|
|
189
199
|
def run_core_training(args: argparse.Namespace) -> Optional[Text]:
|
|
@@ -197,10 +207,10 @@ def run_core_training(args: argparse.Namespace) -> Optional[Text]:
|
|
|
197
207
|
"""
|
|
198
208
|
from rasa.model_training import train_core
|
|
199
209
|
|
|
200
|
-
args.domain =
|
|
210
|
+
args.domain = get_validated_path(
|
|
201
211
|
args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
|
|
202
212
|
)
|
|
203
|
-
story_file =
|
|
213
|
+
story_file = get_validated_path(
|
|
204
214
|
args.stories, "stories", DEFAULT_DATA_PATH, none_is_valid=True
|
|
205
215
|
)
|
|
206
216
|
additional_arguments = {
|
|
@@ -213,9 +223,11 @@ def run_core_training(args: argparse.Namespace) -> Optional[Text]:
|
|
|
213
223
|
if isinstance(args.config, list):
|
|
214
224
|
args.config = args.config[0]
|
|
215
225
|
|
|
216
|
-
config =
|
|
217
|
-
|
|
218
|
-
|
|
226
|
+
config = get_validated_config(args.config, CONFIG_MANDATORY_KEYS_CORE)
|
|
227
|
+
|
|
228
|
+
Configuration.initialise_message_processing(
|
|
229
|
+
message_processing_config_path=Path(config)
|
|
230
|
+
).initialise_empty_endpoints()
|
|
219
231
|
|
|
220
232
|
return asyncio.run(
|
|
221
233
|
train_core(
|
|
@@ -231,6 +243,7 @@ def run_core_training(args: argparse.Namespace) -> Optional[Text]:
|
|
|
231
243
|
)
|
|
232
244
|
)
|
|
233
245
|
else:
|
|
246
|
+
Configuration.initialise_empty()
|
|
234
247
|
asyncio.run(do_compare_training(args, story_file, additional_arguments))
|
|
235
248
|
return None
|
|
236
249
|
|
|
@@ -246,13 +259,13 @@ def run_nlu_training(args: argparse.Namespace) -> Optional[Text]:
|
|
|
246
259
|
"""
|
|
247
260
|
from rasa.model_training import train_nlu
|
|
248
261
|
|
|
249
|
-
config =
|
|
250
|
-
nlu_data =
|
|
262
|
+
config = get_validated_config(args.config, CONFIG_MANDATORY_KEYS_NLU)
|
|
263
|
+
nlu_data = get_validated_path(
|
|
251
264
|
args.nlu, "nlu", DEFAULT_DATA_PATH, none_is_valid=True
|
|
252
265
|
)
|
|
253
266
|
|
|
254
267
|
if args.domain:
|
|
255
|
-
args.domain =
|
|
268
|
+
args.domain = get_validated_path(
|
|
256
269
|
args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
|
|
257
270
|
)
|
|
258
271
|
|