rasa-pro 3.14.0.dev20250922__py3-none-any.whl → 3.14.0rc1__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.

Files changed (290) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/__init__.py +0 -0
  3. rasa/agents/agent_factory.py +122 -0
  4. rasa/agents/agent_manager.py +211 -0
  5. rasa/agents/constants.py +43 -0
  6. rasa/agents/core/__init__.py +0 -0
  7. rasa/agents/core/agent_protocol.py +107 -0
  8. rasa/agents/core/types.py +81 -0
  9. rasa/agents/exceptions.py +38 -0
  10. rasa/agents/protocol/__init__.py +5 -0
  11. rasa/agents/protocol/a2a/__init__.py +0 -0
  12. rasa/agents/protocol/a2a/a2a_agent.py +879 -0
  13. rasa/agents/protocol/mcp/__init__.py +0 -0
  14. rasa/agents/protocol/mcp/mcp_base_agent.py +726 -0
  15. rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
  16. rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
  17. rasa/agents/schemas/__init__.py +13 -0
  18. rasa/agents/schemas/agent_input.py +38 -0
  19. rasa/agents/schemas/agent_output.py +26 -0
  20. rasa/agents/schemas/agent_tool_result.py +65 -0
  21. rasa/agents/schemas/agent_tool_schema.py +186 -0
  22. rasa/agents/templates/__init__.py +0 -0
  23. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
  24. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
  25. rasa/agents/utils.py +206 -0
  26. rasa/agents/validation.py +485 -0
  27. rasa/api.py +24 -9
  28. rasa/builder/config.py +6 -2
  29. rasa/builder/guardrails/{lakera.py → clients.py} +55 -5
  30. rasa/builder/guardrails/constants.py +3 -0
  31. rasa/builder/guardrails/models.py +45 -10
  32. rasa/builder/guardrails/policy_checker.py +324 -0
  33. rasa/builder/guardrails/utils.py +42 -276
  34. rasa/builder/llm_service.py +32 -5
  35. rasa/builder/models.py +1 -0
  36. rasa/builder/project_generator.py +6 -1
  37. rasa/builder/service.py +16 -13
  38. rasa/builder/training_service.py +18 -24
  39. rasa/builder/validation_service.py +1 -1
  40. rasa/cli/arguments/default_arguments.py +12 -0
  41. rasa/cli/arguments/run.py +2 -0
  42. rasa/cli/arguments/train.py +2 -0
  43. rasa/cli/data.py +10 -8
  44. rasa/cli/dialogue_understanding_test.py +10 -7
  45. rasa/cli/e2e_test.py +9 -6
  46. rasa/cli/evaluate.py +4 -2
  47. rasa/cli/export.py +5 -2
  48. rasa/cli/inspect.py +8 -4
  49. rasa/cli/interactive.py +5 -4
  50. rasa/cli/llm_fine_tuning.py +11 -6
  51. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  52. rasa/cli/run.py +12 -10
  53. rasa/cli/scaffold.py +4 -4
  54. rasa/cli/shell.py +9 -5
  55. rasa/cli/studio/studio.py +1 -1
  56. rasa/cli/test.py +34 -14
  57. rasa/cli/train.py +41 -28
  58. rasa/cli/utils.py +1 -393
  59. rasa/cli/validation/__init__.py +0 -0
  60. rasa/cli/validation/bot_config.py +223 -0
  61. rasa/cli/validation/config_path_validation.py +257 -0
  62. rasa/cli/x.py +8 -4
  63. rasa/constants.py +7 -1
  64. rasa/core/actions/action.py +51 -10
  65. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  66. rasa/core/agent.py +19 -2
  67. rasa/core/available_agents.py +229 -0
  68. rasa/core/channels/__init__.py +82 -35
  69. rasa/core/channels/development_inspector.py +3 -3
  70. rasa/core/channels/inspector/README.md +25 -13
  71. rasa/core/channels/inspector/dist/assets/{arc-35222594.js → arc-6177260a.js} +1 -1
  72. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-a0efbfd3.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  73. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-0584c0f2.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  74. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  75. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-39f40dbe.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  76. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-1ad755f3.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  77. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  78. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-b0f4f0fe.js → createText-2e5e7dd3-088372e2.js} +1 -1
  79. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-9039bff9.js → edges-e0da2a9e-58676240.js} +1 -1
  80. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-65c9b127.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  81. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4f08b38e.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  82. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-e95c362a.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  83. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  84. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-703c3015.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  85. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-699328ea.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  86. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-04cf4b05.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  87. rasa/core/channels/inspector/dist/assets/{graph-ee94449e.js → graph-0a6f8466.js} +1 -1
  88. rasa/core/channels/inspector/dist/assets/{index-3862675e-940162b4.js → index-3862675e-7610671a.js} +1 -1
  89. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  90. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-c79c2866.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  91. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-84489d30.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  92. rasa/core/channels/inspector/dist/assets/{layout-a9aa9858.js → layout-e7fbc2bf.js} +1 -1
  93. rasa/core/channels/inspector/dist/assets/{line-eb73cf26.js → line-a8aa457c.js} +1 -1
  94. rasa/core/channels/inspector/dist/assets/{linear-b3399f9a.js → linear-3351e0d2.js} +1 -1
  95. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-b095bf1a.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  96. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-07644b66.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  97. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-573a3f9c.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  98. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d457e1e1.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  99. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-9d26e1a2.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  100. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-3a9cde10.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  101. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-4f3e8cec.js → stateDiagram-587899a1-0e770395.js} +1 -1
  102. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-e617e5bf.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  103. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-eab30d2f.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  104. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-09994be2.js → styles-9a916d00-884a8b5b.js} +1 -1
  105. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-b7110364.js → styles-c10674c1-dc097813.js} +1 -1
  106. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-3ebc92ad.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  107. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-7d13d2f2.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  108. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-488385e1.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  109. rasa/core/channels/inspector/dist/index.html +1 -1
  110. rasa/core/channels/inspector/package.json +18 -18
  111. rasa/core/channels/inspector/src/App.tsx +29 -4
  112. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  113. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  114. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +7 -4
  115. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  116. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  117. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  118. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  119. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  120. rasa/core/channels/inspector/src/types.ts +21 -0
  121. rasa/core/channels/inspector/yarn.lock +336 -189
  122. rasa/core/channels/studio_chat.py +6 -6
  123. rasa/core/channels/telegram.py +4 -9
  124. rasa/core/channels/voice_stream/genesys.py +1 -1
  125. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  126. rasa/core/channels/voice_stream/twilio_media_streams.py +5 -1
  127. rasa/core/channels/voice_stream/voice_channel.py +3 -0
  128. rasa/core/config/__init__.py +0 -0
  129. rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
  130. rasa/core/config/configuration.py +260 -0
  131. rasa/core/config/credentials.py +19 -0
  132. rasa/core/config/message_procesing_config.py +34 -0
  133. rasa/core/constants.py +4 -0
  134. rasa/core/policies/enterprise_search_policy.py +5 -3
  135. rasa/core/policies/flow_policy.py +4 -4
  136. rasa/core/policies/flows/agent_executor.py +632 -0
  137. rasa/core/policies/flows/flow_executor.py +136 -75
  138. rasa/core/policies/flows/mcp_tool_executor.py +298 -0
  139. rasa/core/policies/intentless_policy.py +1 -1
  140. rasa/core/policies/ted_policy.py +20 -12
  141. rasa/core/policies/unexpected_intent_policy.py +6 -0
  142. rasa/core/processor.py +68 -44
  143. rasa/core/run.py +37 -8
  144. rasa/core/test.py +4 -0
  145. rasa/core/tracker_stores/tracker_store.py +3 -7
  146. rasa/core/train.py +1 -1
  147. rasa/core/training/interactive.py +20 -18
  148. rasa/core/training/story_conflict.py +5 -5
  149. rasa/core/utils.py +22 -23
  150. rasa/dialogue_understanding/commands/__init__.py +8 -0
  151. rasa/dialogue_understanding/commands/cancel_flow_command.py +19 -5
  152. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  153. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  154. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  155. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  156. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  157. rasa/dialogue_understanding/commands/start_flow_command.py +68 -7
  158. rasa/dialogue_understanding/commands/utils.py +124 -2
  159. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  160. rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
  161. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  162. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  163. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  164. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  165. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  166. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  167. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  168. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  169. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  170. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  171. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  172. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  173. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +46 -8
  174. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  175. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  176. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  177. rasa/dialogue_understanding/stack/utils.py +57 -3
  178. rasa/dialogue_understanding/utils.py +24 -4
  179. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  180. rasa/e2e_test/e2e_test_runner.py +13 -3
  181. rasa/engine/caching.py +2 -2
  182. rasa/engine/constants.py +1 -1
  183. rasa/engine/recipes/default_components.py +138 -49
  184. rasa/engine/recipes/default_recipe.py +108 -11
  185. rasa/engine/runner/dask.py +8 -5
  186. rasa/engine/validation.py +19 -6
  187. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  188. rasa/hooks.py +5 -5
  189. rasa/llm_fine_tuning/utils.py +2 -2
  190. rasa/model_training.py +60 -47
  191. rasa/nlu/classifiers/diet_classifier.py +198 -98
  192. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  193. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  194. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  195. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  196. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  197. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  198. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  199. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  200. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  201. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  202. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  203. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  204. rasa/nlu/selectors/response_selector.py +10 -2
  205. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  206. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  207. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  208. rasa/nlu/utils/mitie_utils.py +3 -0
  209. rasa/nlu/utils/spacy_utils.py +3 -2
  210. rasa/plugin.py +8 -8
  211. rasa/privacy/privacy_manager.py +12 -3
  212. rasa/server.py +15 -3
  213. rasa/shared/agents/__init__.py +0 -0
  214. rasa/shared/agents/auth/__init__.py +0 -0
  215. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  216. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  217. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  218. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  219. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  220. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  221. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +167 -0
  222. rasa/shared/agents/auth/constants.py +12 -0
  223. rasa/shared/agents/auth/types.py +12 -0
  224. rasa/shared/agents/utils.py +35 -0
  225. rasa/shared/constants.py +8 -0
  226. rasa/shared/core/constants.py +16 -1
  227. rasa/shared/core/domain.py +0 -7
  228. rasa/shared/core/events.py +327 -0
  229. rasa/shared/core/flows/constants.py +5 -0
  230. rasa/shared/core/flows/flows_list.py +21 -5
  231. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  232. rasa/shared/core/flows/steps/call.py +49 -5
  233. rasa/shared/core/flows/steps/collect.py +98 -13
  234. rasa/shared/core/flows/validation.py +372 -8
  235. rasa/shared/core/flows/yaml_flows_io.py +3 -2
  236. rasa/shared/core/slots.py +2 -2
  237. rasa/shared/core/trackers.py +5 -2
  238. rasa/shared/exceptions.py +16 -0
  239. rasa/shared/importers/rasa.py +1 -1
  240. rasa/shared/importers/utils.py +9 -3
  241. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  242. rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
  243. rasa/shared/providers/llm/llm_client.py +7 -3
  244. rasa/shared/providers/llm/llm_response.py +66 -0
  245. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  246. rasa/shared/utils/common.py +24 -0
  247. rasa/shared/utils/health_check/health_check.py +7 -3
  248. rasa/shared/utils/llm.py +39 -16
  249. rasa/shared/utils/mcp/__init__.py +0 -0
  250. rasa/shared/utils/mcp/server_connection.py +247 -0
  251. rasa/shared/utils/mcp/utils.py +20 -0
  252. rasa/shared/utils/schemas/events.py +42 -0
  253. rasa/shared/utils/yaml.py +3 -1
  254. rasa/studio/pull/pull.py +3 -2
  255. rasa/studio/train.py +8 -7
  256. rasa/studio/upload.py +3 -6
  257. rasa/telemetry.py +69 -5
  258. rasa/tracing/config.py +45 -12
  259. rasa/tracing/constants.py +14 -0
  260. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  261. rasa/tracing/instrumentation/instrumentation.py +626 -21
  262. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  263. rasa/tracing/instrumentation/metrics.py +32 -0
  264. rasa/tracing/metric_instrument_provider.py +68 -0
  265. rasa/utils/common.py +92 -1
  266. rasa/utils/endpoints.py +11 -2
  267. rasa/utils/log_utils.py +96 -5
  268. rasa/utils/ml_utils.py +1 -1
  269. rasa/utils/tensorflow/__init__.py +7 -0
  270. rasa/utils/tensorflow/callback.py +136 -101
  271. rasa/utils/tensorflow/crf.py +1 -1
  272. rasa/utils/tensorflow/data_generator.py +21 -8
  273. rasa/utils/tensorflow/layers.py +21 -11
  274. rasa/utils/tensorflow/metrics.py +7 -3
  275. rasa/utils/tensorflow/models.py +56 -8
  276. rasa/utils/tensorflow/rasa_layers.py +8 -6
  277. rasa/utils/tensorflow/transformer.py +2 -3
  278. rasa/utils/train_utils.py +54 -24
  279. rasa/validator.py +5 -5
  280. rasa/version.py +1 -1
  281. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc1.dist-info}/METADATA +46 -41
  282. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc1.dist-info}/RECORD +285 -226
  283. rasa/builder/scrape_rasa_docs.py +0 -97
  284. rasa/core/channels/inspector/dist/assets/channel-8e08bed9.js +0 -1
  285. rasa/core/channels/inspector/dist/assets/clone-78c82dea.js +0 -1
  286. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b08f601.js +0 -1
  287. rasa/core/channels/inspector/dist/assets/index-c941dcb3.js +0 -1336
  288. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc1.dist-info}/NOTICE +0 -0
  289. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc1.dist-info}/WHEEL +0 -0
  290. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc1.dist-info}/entry_points.txt +0 -0
rasa/cli/data.py CHANGED
@@ -15,6 +15,8 @@ from rasa import telemetry
15
15
  from rasa.cli import SubParsersAction
16
16
  from rasa.cli.arguments import data as arguments
17
17
  from rasa.cli.arguments import default_arguments
18
+ from rasa.cli.validation.bot_config import validate_files
19
+ from rasa.cli.validation.config_path_validation import get_validated_path
18
20
  from rasa.e2e_test.e2e_config import create_llm_e2e_test_converter_config
19
21
  from rasa.e2e_test.e2e_test_converter import E2ETestConverter
20
22
  from rasa.e2e_test.utils.e2e_yaml_utils import E2ETestYAMLWriter
@@ -137,7 +139,7 @@ def _add_data_validate_parsers(
137
139
  )
138
140
  _append_story_structure_arguments(validate_parser)
139
141
  validate_parser.set_defaults(
140
- func=lambda args: rasa.cli.utils.validate_files(
142
+ func=lambda args: validate_files(
141
143
  args.fail_on_warnings, args.max_history, _build_training_data_importer(args)
142
144
  )
143
145
  )
@@ -153,7 +155,7 @@ def _add_data_validate_parsers(
153
155
  _append_story_structure_arguments(story_structure_parser)
154
156
 
155
157
  story_structure_parser.set_defaults(
156
- func=lambda args: rasa.cli.utils.validate_files(
158
+ func=lambda args: validate_files(
157
159
  args.fail_on_warnings,
158
160
  args.max_history,
159
161
  _build_training_data_importer(args),
@@ -169,7 +171,7 @@ def _add_data_validate_parsers(
169
171
  help="Checks for inconsistencies in the flows files.",
170
172
  )
171
173
  flows_structure_parser.set_defaults(
172
- func=lambda args: rasa.cli.utils.validate_files(
174
+ func=lambda args: validate_files(
173
175
  args.fail_on_warnings,
174
176
  args.max_history,
175
177
  _build_training_data_importer(args),
@@ -185,7 +187,7 @@ def _add_data_validate_parsers(
185
187
  help="Checks for inconsistencies of the flow and response translation.",
186
188
  )
187
189
  translations_structure_parser.set_defaults(
188
- func=lambda args: rasa.cli.utils.validate_files(
190
+ func=lambda args: validate_files(
189
191
  args.fail_on_warnings,
190
192
  args.max_history,
191
193
  _build_training_data_importer(args),
@@ -196,12 +198,12 @@ def _add_data_validate_parsers(
196
198
 
197
199
 
198
200
  def _build_training_data_importer(args: argparse.Namespace) -> "TrainingDataImporter":
199
- config = rasa.cli.utils.get_validated_path(
201
+ config = get_validated_path(
200
202
  args.config, "config", DEFAULT_CONFIG_PATH, none_is_valid=True
201
203
  )
202
204
 
203
205
  # Exit the validation if the domain path is invalid
204
- domain = rasa.cli.utils.get_validated_path(
206
+ domain = get_validated_path(
205
207
  args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=False
206
208
  )
207
209
 
@@ -231,7 +233,7 @@ def split_nlu_data(args: argparse.Namespace) -> None:
231
233
  Args:
232
234
  args: Commandline arguments
233
235
  """
234
- data_path = rasa.cli.utils.get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH)
236
+ data_path = get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH)
235
237
  data_path = rasa.shared.data.get_nlu_directory(data_path)
236
238
 
237
239
  nlu_data = rasa.shared.nlu.training_data.loading.load_data(data_path)
@@ -258,7 +260,7 @@ def split_stories_data(args: argparse.Namespace) -> None:
258
260
  YAMLStoryReader,
259
261
  )
260
262
 
261
- data_path = rasa.cli.utils.get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH)
263
+ data_path = get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH)
262
264
  data_files = rasa.shared.data.get_data_files(
263
265
  data_path, YAMLStoryReader.is_stories_file
264
266
  )
@@ -3,6 +3,7 @@ import asyncio
3
3
  import datetime
4
4
  import importlib
5
5
  import sys
6
+ from pathlib import Path
6
7
  from typing import Any, Dict, List, Optional, Type, cast
7
8
 
8
9
  import structlog
@@ -14,9 +15,11 @@ 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.core.agent import Agent
19
- from rasa.core.available_endpoints import AvailableEndpoints
21
+ from rasa.core.config.available_endpoints import AvailableEndpoints
22
+ from rasa.core.config.configuration import Configuration
20
23
  from rasa.core.exceptions import AgentNotReady
21
24
  from rasa.core.processor import MessageProcessor
22
25
  from rasa.dialogue_understanding.commands import Command
@@ -47,7 +50,6 @@ from rasa.dialogue_understanding_test.validation import (
47
50
  from rasa.e2e_test.e2e_test_case import TestSuite
48
51
  from rasa.exceptions import RasaException
49
52
  from rasa.shared.constants import (
50
- DEFAULT_ENDPOINTS_PATH,
51
53
  LLM_CONFIG_KEY,
52
54
  ROUTE_TO_CALM_SLOT,
53
55
  )
@@ -174,6 +176,8 @@ def add_du_test_arguments(parser: argparse.ArgumentParser) -> None:
174
176
  ),
175
177
  )
176
178
 
179
+ add_sub_agents_param(du_arguments)
180
+
177
181
 
178
182
  def ensure_calm_only_bot(agent: Agent) -> None:
179
183
  if agent.domain is None or agent.processor is None:
@@ -218,6 +222,7 @@ def execute_dialogue_understanding_tests(args: argparse.Namespace) -> None:
218
222
  model_path=args.model,
219
223
  model_server=endpoints.model,
220
224
  remote_storage=args.remote_storage,
225
+ sub_agents_path=args.sub_agents,
221
226
  )
222
227
  except AgentNotReady as error:
223
228
  structlogger.error(
@@ -323,11 +328,9 @@ def get_valid_test_suite(
323
328
 
324
329
 
325
330
  def set_up_available_endpoints(args: argparse.Namespace) -> AvailableEndpoints:
326
- """Set up the available endpoints for the test runner."""
327
- args.endpoints = rasa.cli.utils.get_validated_path(
328
- args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
329
- )
330
- endpoints = AvailableEndpoints.get_instance(args.endpoints)
331
+ endpoints = Configuration.initialise_endpoints(
332
+ endpoints_path=Path(args.endpoints)
333
+ ).endpoints
331
334
 
332
335
  # Ignore all endpoints apart from action server, model, and nlu
333
336
  # to ensure InMemoryTrackerStore is being used instead of production
rasa/cli/e2e_test.py CHANGED
@@ -17,8 +17,9 @@ from rasa.cli.arguments.default_arguments import (
17
17
  add_endpoint_param,
18
18
  add_model_param,
19
19
  add_remote_storage_param,
20
+ add_sub_agents_param,
20
21
  )
21
- from rasa.core.available_endpoints import AvailableEndpoints
22
+ from rasa.core.config.configuration import Configuration, EndpointsConfigPath
22
23
  from rasa.core.exceptions import AgentNotReady
23
24
  from rasa.e2e_test.aggregate_test_stats_calculator import (
24
25
  AggregateTestStatsCalculator,
@@ -50,7 +51,7 @@ from rasa.e2e_test.utils.io import (
50
51
  )
51
52
  from rasa.e2e_test.utils.validation import validate_model_path
52
53
  from rasa.exceptions import RasaException
53
- from rasa.shared.constants import DEFAULT_ENDPOINTS_PATH, DEFAULT_MODELS_PATH
54
+ from rasa.shared.constants import DEFAULT_MODELS_PATH
54
55
  from rasa.utils.endpoints import EndpointConfig
55
56
 
56
57
  RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME = "RASA_PRO_BETA_FINE_TUNING_RECIPE"
@@ -147,6 +148,8 @@ def add_e2e_test_arguments(parser: argparse.ArgumentParser) -> None:
147
148
  help="Directory where to save coverage report to.",
148
149
  )
149
150
 
151
+ add_sub_agents_param(parser)
152
+
150
153
 
151
154
  def execute_e2e_tests(args: argparse.Namespace) -> None:
152
155
  """Run the end-to-end tests.
@@ -154,10 +157,9 @@ def execute_e2e_tests(args: argparse.Namespace) -> None:
154
157
  Args:
155
158
  args: Commandline arguments.
156
159
  """
157
- args.endpoints = rasa.cli.utils.get_validated_path(
158
- args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
159
- )
160
- endpoints = AvailableEndpoints.get_instance(args.endpoints)
160
+ endpoints = Configuration.initialise_endpoints(
161
+ endpoints_path=EndpointsConfigPath.validate(args.endpoints)
162
+ ).endpoints
161
163
 
162
164
  # Ignore all endpoints apart from action server, model, nlu and nlg
163
165
  # to ensure InMemoryTrackerStore is being used instead of production
@@ -192,6 +194,7 @@ def execute_e2e_tests(args: argparse.Namespace) -> None:
192
194
  model_server=endpoints.model,
193
195
  endpoints=endpoints,
194
196
  test_case_path=Path(test_case_path),
197
+ sub_agents_path=args.sub_agents,
195
198
  )
196
199
  except AgentNotReady as error:
197
200
  structlogger.error(
rasa/cli/evaluate.py CHANGED
@@ -6,7 +6,7 @@ import rasa.cli.arguments.evaluate as arguments
6
6
  import rasa.shared.utils.cli
7
7
  from rasa import telemetry
8
8
  from rasa.cli import SubParsersAction
9
- from rasa.core.available_endpoints import AvailableEndpoints
9
+ from rasa.core.config.configuration import Configuration
10
10
  from rasa.core.evaluation.marker_base import Marker, OperatorMarker
11
11
  from rasa.core.evaluation.marker_tracker_loader import MarkerTrackerLoader
12
12
  from rasa.core.tracker_stores.tracker_store import TrackerStore
@@ -217,6 +217,8 @@ def _create_tracker_loader(
217
217
  A MarkerTrackerLoader object configured with the specified strategy against
218
218
  the configured tracker store.
219
219
  """
220
- endpoints = AvailableEndpoints.get_instance(endpoint_config)
220
+ endpoints = Configuration.initialise_endpoints(
221
+ endpoints_path=Path(endpoint_config)
222
+ ).endpoints
221
223
  tracker_store = TrackerStore.create(endpoints.tracker_store, domain=domain)
222
224
  return MarkerTrackerLoader(tracker_store, strategy, count, seed)
rasa/cli/export.py CHANGED
@@ -11,13 +11,14 @@ from rasa import telemetry
11
11
  from rasa.cli import SubParsersAction
12
12
  from rasa.cli.arguments import export as arguments
13
13
  from rasa.core.brokers.pika import PikaEventBroker
14
+ from rasa.core.config.configuration import Configuration
14
15
  from rasa.exceptions import PublishingError
15
16
  from rasa.shared.constants import DOCS_URL_EVENT_BROKERS, DOCS_URL_TRACKER_STORES
16
17
  from rasa.shared.exceptions import RasaException
17
18
 
18
19
  if typing.TYPE_CHECKING:
19
- from rasa.core.available_endpoints import AvailableEndpoints
20
20
  from rasa.core.brokers.broker import EventBroker
21
+ from rasa.core.config.available_endpoints import AvailableEndpoints
21
22
  from rasa.core.exporter import Exporter
22
23
  from rasa.core.tracker_stores.tracker_store import TrackerStore
23
24
 
@@ -179,7 +180,9 @@ def export_trackers(args: argparse.Namespace) -> None:
179
180
  async def _export_trackers(args: argparse.Namespace) -> None:
180
181
  _assert_max_timestamp_is_greater_than_min_timestamp(args)
181
182
 
182
- endpoints = rasa.core.utils.read_endpoints_from_path(args.endpoints)
183
+ endpoints = Configuration.initialise_endpoints(
184
+ endpoints_path=args.endpoints
185
+ ).endpoints
183
186
  tracker_store = _get_tracker_store(endpoints)
184
187
  event_broker = await _get_event_broker(endpoints)
185
188
  _prepare_event_broker(event_broker)
rasa/cli/inspect.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import argparse
2
2
  import webbrowser
3
3
  from asyncio import AbstractEventLoop
4
+ from pathlib import Path
4
5
  from typing import List, Optional, Text
5
6
 
6
7
  from sanic import Sanic
@@ -8,8 +9,9 @@ from sanic import Sanic
8
9
  from rasa import telemetry
9
10
  from rasa.cli import SubParsersAction
10
11
  from rasa.cli.arguments import shell as arguments
12
+ from rasa.cli.arguments.default_arguments import add_sub_agents_param
11
13
  from rasa.core import constants
12
- from rasa.core.available_endpoints import AvailableEndpoints
14
+ from rasa.core.config.configuration import Configuration
13
15
  from rasa.engine.storage.local_model_storage import LocalModelStorage
14
16
  from rasa.exceptions import ModelNotFound
15
17
  from rasa.model import get_local_model
@@ -44,6 +46,8 @@ def add_subparser(
44
46
  "--voice", help="Enable voice", action="store_true", default=False
45
47
  )
46
48
 
49
+ add_sub_agents_param(inspect_parser)
50
+
47
51
  # it'd be confusing to expose those arguments to the user,
48
52
  # so we remove them
49
53
  remove_argument_from_parser(inspect_parser, "--credentials")
@@ -64,7 +68,7 @@ async def open_inspector_in_browser(
64
68
  def inspect(args: argparse.Namespace) -> None:
65
69
  """Inspect the bot using the most recent model."""
66
70
  import rasa.cli.run
67
- from rasa.cli.utils import get_validated_path
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
  async def after_start_hook_open_inspector(_: Sanic, __: AbstractEventLoop) -> None:
@@ -87,8 +91,8 @@ def inspect(args: argparse.Namespace) -> None:
87
91
  # Load endpoints with proper endpoint file location
88
92
  # This will initialise the endpoints singleton properly so that
89
93
  # it can be used safely throughout the codebase with
90
- # `AvailableEndpoints.get_instance()`
91
- AvailableEndpoints.get_instance(args.endpoints)
94
+ # `Configuration.get_instance().endpoints`
95
+ Configuration.initialise_endpoints(endpoints_path=Path(args.endpoints))
92
96
 
93
97
  try:
94
98
  model = get_local_model(model)
rasa/cli/interactive.py CHANGED
@@ -11,6 +11,8 @@ import rasa.utils.common
11
11
  from rasa import model
12
12
  from rasa.cli import SubParsersAction
13
13
  from rasa.cli.arguments import interactive as arguments
14
+ from rasa.cli.validation.config_path_validation import get_validated_path
15
+ from rasa.core.constants import DEFAULT_SUB_AGENTS
14
16
  from rasa.engine.storage.local_model_storage import LocalModelStorage
15
17
  from rasa.shared.constants import (
16
18
  ASSISTANT_ID_DEFAULT_VALUE,
@@ -109,6 +111,7 @@ def _set_not_required_args(args: argparse.Namespace) -> None:
109
111
  args.validation_max_history = None
110
112
  args.remote_storage = None
111
113
  args.keep_local_model_copy = False
114
+ args.sub_agents = DEFAULT_SUB_AGENTS # Default value for sub-agents
112
115
 
113
116
 
114
117
  def perform_interactive_learning(
@@ -133,7 +136,7 @@ def perform_interactive_learning(
133
136
  "Can not run interactive learning on an NLU-only model."
134
137
  )
135
138
 
136
- args.endpoints = rasa.cli.utils.get_validated_path(
139
+ args.endpoints = get_validated_path(
137
140
  args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
138
141
  )
139
142
 
@@ -142,9 +145,7 @@ def perform_interactive_learning(
142
145
 
143
146
  def get_provided_model(arg_model: Text) -> Optional[Union[Text, Path]]:
144
147
  """Checks model path input and selects model from it."""
145
- model_path = rasa.cli.utils.get_validated_path(
146
- arg_model, "model", DEFAULT_MODELS_PATH
147
- )
148
+ model_path = get_validated_path(arg_model, "model", DEFAULT_MODELS_PATH)
148
149
 
149
150
  return (
150
151
  model.get_latest_model(model_path) if os.path.isdir(model_path) else model_path
@@ -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
- validated_endpoints_file = rasa.cli.utils.get_validated_path(
397
- endpoints_file, "endpoints", DEFAULT_ENDPOINTS_PATH, True
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(
@@ -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.cli.utils import get_validated_path
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
- args.endpoints = get_validated_path(
90
- args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
91
- )
92
- args.credentials = get_validated_path(
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.available_endpoints import AvailableEndpoints
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 = AvailableEndpoints.get_instance(args.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.core.available_endpoints import AvailableEndpoints
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.utils import get_validated_path
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.utils import get_validated_path
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
- # `AvailableEndpoints.get_instance()`
113
- AvailableEndpoints.get_instance(args.endpoints)
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.utils import get_validated_path
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
- stories = rasa.cli.utils.get_validated_path(
104
- args.stories, "stories", DEFAULT_DATA_PATH
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 = rasa.cli.utils.get_validated_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
- # FIXME: supporting Union[Path, Text] down the chain
229
- # is the proper fix and needs more work
230
- config = str(
231
- rasa.cli.utils.get_validated_path(config, "config", DEFAULT_CONFIG_PATH)
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 = rasa.cli.utils.get_validated_path(
239
- models_path, "model", DEFAULT_MODELS_PATH
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)