rasa-pro 3.14.0a20__py3-none-any.whl → 3.14.0a23__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 (331) 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/finance/actions/general/__init__.py +0 -0
  52. rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
  53. rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
  54. rasa/cli/project_templates/finance/data/general/goodbye.yml +1 -1
  55. rasa/cli/project_templates/finance/data/general/human_handoff.yml +1 -1
  56. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +1 -1
  57. rasa/cli/project_templates/finance/domain/general/_shared.yml +0 -14
  58. rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
  59. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  60. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +3 -6
  61. rasa/cli/project_templates/finance/domain/general/welcome.yml +29 -1
  62. rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/check_balance.yml +9 -0
  63. rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/download_statements.yml +43 -0
  64. rasa/cli/project_templates/finance/tests/e2e_test_cases/cards/block_card.yml +55 -0
  65. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  66. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/feedback.yml +46 -0
  67. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/goodbye.yml +9 -0
  68. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/hello.yml +8 -0
  69. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  70. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/patterns.yml +22 -0
  71. rasa/cli/project_templates/finance/tests/e2e_test_cases/transfers/transfer_money.yml +56 -0
  72. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +1 -1
  73. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +1 -1
  74. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +1 -1
  75. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +1 -1
  76. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  77. rasa/cli/run.py +12 -10
  78. rasa/cli/scaffold.py +4 -4
  79. rasa/cli/shell.py +9 -5
  80. rasa/cli/studio/studio.py +1 -1
  81. rasa/cli/test.py +34 -14
  82. rasa/cli/train.py +41 -28
  83. rasa/cli/utils.py +1 -393
  84. rasa/cli/validation/__init__.py +0 -0
  85. rasa/cli/validation/bot_config.py +223 -0
  86. rasa/cli/validation/config_path_validation.py +257 -0
  87. rasa/cli/x.py +8 -4
  88. rasa/constants.py +7 -1
  89. rasa/core/actions/action.py +51 -10
  90. rasa/core/actions/action_run_slot_rejections.py +1 -1
  91. rasa/core/actions/direct_custom_actions_executor.py +9 -2
  92. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  93. rasa/core/agent.py +19 -2
  94. rasa/core/available_agents.py +229 -0
  95. rasa/core/brokers/kafka.py +1 -1
  96. rasa/core/channels/__init__.py +82 -35
  97. rasa/core/channels/development_inspector.py +3 -3
  98. rasa/core/channels/inspector/README.md +25 -13
  99. rasa/core/channels/inspector/dist/assets/{arc-35222594.js → arc-6177260a.js} +1 -1
  100. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-a0efbfd3.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  101. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-0584c0f2.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  102. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  103. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-39f40dbe.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  104. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-1ad755f3.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  105. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  106. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-b0f4f0fe.js → createText-2e5e7dd3-088372e2.js} +1 -1
  107. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-9039bff9.js → edges-e0da2a9e-58676240.js} +1 -1
  108. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-65c9b127.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  109. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4f08b38e.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  110. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-e95c362a.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  111. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  112. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-703c3015.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  113. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-699328ea.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  114. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-04cf4b05.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  115. rasa/core/channels/inspector/dist/assets/{graph-ee94449e.js → graph-0a6f8466.js} +1 -1
  116. rasa/core/channels/inspector/dist/assets/{index-3862675e-940162b4.js → index-3862675e-7610671a.js} +1 -1
  117. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  118. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-c79c2866.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  119. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-84489d30.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  120. rasa/core/channels/inspector/dist/assets/{layout-a9aa9858.js → layout-e7fbc2bf.js} +1 -1
  121. rasa/core/channels/inspector/dist/assets/{line-eb73cf26.js → line-a8aa457c.js} +1 -1
  122. rasa/core/channels/inspector/dist/assets/{linear-b3399f9a.js → linear-3351e0d2.js} +1 -1
  123. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-b095bf1a.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  124. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-07644b66.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  125. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-573a3f9c.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  126. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d457e1e1.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  127. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-9d26e1a2.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  128. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-3a9cde10.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  129. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-4f3e8cec.js → stateDiagram-587899a1-0e770395.js} +1 -1
  130. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-e617e5bf.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  131. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-eab30d2f.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  132. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-09994be2.js → styles-9a916d00-884a8b5b.js} +1 -1
  133. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-b7110364.js → styles-c10674c1-dc097813.js} +1 -1
  134. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-3ebc92ad.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  135. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-7d13d2f2.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  136. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-488385e1.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  137. rasa/core/channels/inspector/dist/index.html +1 -1
  138. rasa/core/channels/inspector/package.json +18 -18
  139. rasa/core/channels/inspector/src/App.tsx +29 -4
  140. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  141. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  142. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +7 -4
  143. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  144. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  145. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  146. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  147. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  148. rasa/core/channels/inspector/src/types.ts +21 -0
  149. rasa/core/channels/inspector/yarn.lock +336 -189
  150. rasa/core/channels/studio_chat.py +6 -6
  151. rasa/core/channels/telegram.py +4 -9
  152. rasa/core/channels/voice_stream/browser_audio.py +2 -0
  153. rasa/core/channels/voice_stream/genesys.py +1 -1
  154. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  155. rasa/core/channels/voice_stream/twilio_media_streams.py +5 -1
  156. rasa/core/channels/voice_stream/voice_channel.py +3 -0
  157. rasa/core/config/__init__.py +0 -0
  158. rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
  159. rasa/core/config/configuration.py +260 -0
  160. rasa/core/config/credentials.py +19 -0
  161. rasa/core/config/message_procesing_config.py +34 -0
  162. rasa/core/constants.py +5 -0
  163. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +88 -3
  164. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +2 -1
  165. rasa/core/lock_store.py +6 -4
  166. rasa/core/nlg/generator.py +1 -1
  167. rasa/core/policies/enterprise_search_policy.py +5 -3
  168. rasa/core/policies/flow_policy.py +4 -4
  169. rasa/core/policies/flows/agent_executor.py +632 -0
  170. rasa/core/policies/flows/flow_executor.py +137 -76
  171. rasa/core/policies/flows/mcp_tool_executor.py +298 -0
  172. rasa/core/policies/intentless_policy.py +1 -1
  173. rasa/core/policies/ted_policy.py +20 -12
  174. rasa/core/policies/unexpected_intent_policy.py +6 -0
  175. rasa/core/processor.py +68 -44
  176. rasa/core/redis_connection_factory.py +78 -20
  177. rasa/core/run.py +37 -8
  178. rasa/core/test.py +4 -0
  179. rasa/core/tracker_stores/sql_tracker_store.py +1 -1
  180. rasa/core/tracker_stores/tracker_store.py +3 -7
  181. rasa/core/train.py +1 -1
  182. rasa/core/training/interactive.py +20 -18
  183. rasa/core/training/story_conflict.py +5 -5
  184. rasa/core/utils.py +22 -23
  185. rasa/dialogue_understanding/commands/__init__.py +8 -0
  186. rasa/dialogue_understanding/commands/cancel_flow_command.py +19 -5
  187. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  188. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  189. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  190. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  191. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  192. rasa/dialogue_understanding/commands/start_flow_command.py +68 -7
  193. rasa/dialogue_understanding/commands/utils.py +124 -2
  194. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  195. rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
  196. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  197. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  198. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  199. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  200. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  201. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  202. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  203. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  204. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  205. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  206. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  207. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  208. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +46 -8
  209. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  210. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  211. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  212. rasa/dialogue_understanding/stack/utils.py +57 -3
  213. rasa/dialogue_understanding/utils.py +24 -4
  214. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  215. rasa/e2e_test/e2e_test_runner.py +13 -3
  216. rasa/engine/caching.py +2 -2
  217. rasa/engine/constants.py +1 -1
  218. rasa/engine/loader.py +12 -0
  219. rasa/engine/recipes/default_components.py +138 -49
  220. rasa/engine/recipes/default_recipe.py +108 -11
  221. rasa/engine/runner/dask.py +8 -5
  222. rasa/engine/validation.py +19 -6
  223. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  224. rasa/hooks.py +5 -5
  225. rasa/llm_fine_tuning/utils.py +2 -2
  226. rasa/model_training.py +60 -47
  227. rasa/nlu/classifiers/diet_classifier.py +198 -98
  228. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  229. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  230. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  231. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  232. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  233. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  234. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  235. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  236. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  237. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  238. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  239. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  240. rasa/nlu/selectors/response_selector.py +10 -2
  241. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  242. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  243. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  244. rasa/nlu/utils/mitie_utils.py +3 -0
  245. rasa/nlu/utils/spacy_utils.py +3 -2
  246. rasa/plugin.py +8 -8
  247. rasa/privacy/privacy_manager.py +12 -3
  248. rasa/server.py +15 -3
  249. rasa/shared/agents/__init__.py +0 -0
  250. rasa/shared/agents/auth/__init__.py +0 -0
  251. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  252. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  253. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  254. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  255. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  256. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  257. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +167 -0
  258. rasa/shared/agents/auth/constants.py +12 -0
  259. rasa/shared/agents/auth/types.py +12 -0
  260. rasa/shared/agents/utils.py +35 -0
  261. rasa/shared/constants.py +8 -0
  262. rasa/shared/core/constants.py +16 -1
  263. rasa/shared/core/domain.py +0 -7
  264. rasa/shared/core/events.py +327 -0
  265. rasa/shared/core/flows/constants.py +5 -0
  266. rasa/shared/core/flows/flow.py +1 -1
  267. rasa/shared/core/flows/flows_list.py +21 -5
  268. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  269. rasa/shared/core/flows/steps/call.py +49 -5
  270. rasa/shared/core/flows/steps/collect.py +98 -13
  271. rasa/shared/core/flows/validation.py +372 -8
  272. rasa/shared/core/flows/yaml_flows_io.py +3 -2
  273. rasa/shared/core/slots.py +2 -2
  274. rasa/shared/core/trackers.py +5 -2
  275. rasa/shared/exceptions.py +16 -0
  276. rasa/shared/importers/rasa.py +1 -1
  277. rasa/shared/importers/utils.py +9 -3
  278. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  279. rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
  280. rasa/shared/providers/llm/llm_client.py +7 -3
  281. rasa/shared/providers/llm/llm_response.py +66 -0
  282. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  283. rasa/shared/utils/common.py +24 -0
  284. rasa/shared/utils/health_check/health_check.py +7 -3
  285. rasa/shared/utils/llm.py +39 -16
  286. rasa/shared/utils/mcp/__init__.py +0 -0
  287. rasa/shared/utils/mcp/server_connection.py +247 -0
  288. rasa/shared/utils/mcp/utils.py +20 -0
  289. rasa/shared/utils/schemas/events.py +42 -0
  290. rasa/shared/utils/yaml.py +3 -1
  291. rasa/studio/pull/pull.py +3 -2
  292. rasa/studio/train.py +8 -7
  293. rasa/studio/upload.py +3 -6
  294. rasa/telemetry.py +69 -5
  295. rasa/tracing/config.py +45 -12
  296. rasa/tracing/constants.py +14 -0
  297. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  298. rasa/tracing/instrumentation/instrumentation.py +626 -21
  299. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  300. rasa/tracing/instrumentation/metrics.py +32 -0
  301. rasa/tracing/metric_instrument_provider.py +68 -0
  302. rasa/utils/common.py +92 -1
  303. rasa/utils/endpoints.py +11 -2
  304. rasa/utils/log_utils.py +96 -5
  305. rasa/utils/ml_utils.py +1 -1
  306. rasa/utils/pypred.py +38 -0
  307. rasa/utils/tensorflow/__init__.py +7 -0
  308. rasa/utils/tensorflow/callback.py +136 -101
  309. rasa/utils/tensorflow/crf.py +1 -1
  310. rasa/utils/tensorflow/data_generator.py +21 -8
  311. rasa/utils/tensorflow/layers.py +21 -11
  312. rasa/utils/tensorflow/metrics.py +7 -3
  313. rasa/utils/tensorflow/models.py +56 -8
  314. rasa/utils/tensorflow/rasa_layers.py +8 -6
  315. rasa/utils/tensorflow/transformer.py +2 -3
  316. rasa/utils/train_utils.py +54 -24
  317. rasa/validator.py +17 -13
  318. rasa/version.py +1 -1
  319. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/METADATA +48 -42
  320. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/RECORD +323 -251
  321. rasa/builder/scrape_rasa_docs.py +0 -97
  322. rasa/cli/project_templates/finance/data/general/agent_details.yml +0 -6
  323. rasa/cli/project_templates/finance/domain/_system/patterns/pattern_session_start.yml +0 -11
  324. rasa/cli/project_templates/finance/domain/general/agent_details.yml +0 -31
  325. rasa/core/channels/inspector/dist/assets/channel-8e08bed9.js +0 -1
  326. rasa/core/channels/inspector/dist/assets/clone-78c82dea.js +0 -1
  327. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b08f601.js +0 -1
  328. rasa/core/channels/inspector/dist/assets/index-c941dcb3.js +0 -1336
  329. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/NOTICE +0 -0
  330. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/WHEEL +0 -0
  331. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,55 @@
1
+ test_cases:
2
+ - test_case: block card (happy path)
3
+ steps:
4
+ - user: "Temporarily block my Visa."
5
+ assertions:
6
+ - slot_was_set:
7
+ - name: "card_block_type"
8
+ value: "temporary"
9
+ - flow_started: "block_card"
10
+ - bot_uttered:
11
+ utter_name: "utter_start_block_card"
12
+ - bot_uttered:
13
+ utter_name: "utter_ask_bank_card_number"
14
+ - user: "1234 5678 9012 3456"
15
+ assertions:
16
+ - slot_was_set:
17
+ - name: "bank_card_number"
18
+ value: "1234 5678 9012 3456"
19
+ - action_executed: "check_that_card_exists"
20
+ - bot_uttered:
21
+ utter_name: "utter_ask_block_card_confirmation"
22
+ - user: "/SetSlots(confirmation=true)"
23
+ assertions:
24
+ - slot_was_set:
25
+ - name: "confirmation"
26
+ value: true
27
+ - bot_uttered:
28
+ utter_name: "utter_freeze_card_successful"
29
+ - test_case: block card (unhappy path)
30
+ steps:
31
+ - user: "Temporarily block my Visa."
32
+ assertions:
33
+ - slot_was_set:
34
+ - name: "card_block_type"
35
+ value: "temporary"
36
+ - flow_started: "block_card"
37
+ - bot_uttered:
38
+ utter_name: "utter_start_block_card"
39
+ - bot_uttered:
40
+ utter_name: "utter_ask_bank_card_number"
41
+ - user: "1234 5678 9012 3456"
42
+ assertions:
43
+ - slot_was_set:
44
+ - name: "bank_card_number"
45
+ value: "1234 5678 9012 3456"
46
+ - action_executed: "check_that_card_exists"
47
+ - bot_uttered:
48
+ utter_name: "utter_ask_block_card_confirmation"
49
+ - user: "/SetSlots(confirmation=false)"
50
+ assertions:
51
+ - slot_was_set:
52
+ - name: "confirmation"
53
+ value: false
54
+ - bot_uttered:
55
+ utter_name: "utter_block_card_cancelled"
@@ -0,0 +1,8 @@
1
+ test_cases:
2
+ - test_case: bot challenge
3
+ steps:
4
+ - user: "are you a bot?"
5
+ assertions:
6
+ - flow_started: "bot_challenge"
7
+ - bot_uttered:
8
+ utter_name: "utter_bot_challenge"
@@ -0,0 +1,46 @@
1
+ test_cases:
2
+ - test_case: positive feedback
3
+ steps:
4
+ - user: "goodbye"
5
+ assertions:
6
+ - flow_started: "goodbye"
7
+ - bot_uttered:
8
+ utter_name: "utter_goodbye"
9
+ - flow_started: "leave_feedback"
10
+ - bot_uttered:
11
+ utter_name: "utter_ask_feedback_rating"
12
+ buttons:
13
+ - title: "👍 Great"
14
+ payload: "/SetSlots(feedback_rating=thumbs_up)"
15
+ - title: "👎 Could be better"
16
+ payload: "/SetSlots(feedback_rating=thumbs_down)"
17
+ - user: "/SetSlots(feedback_rating=thumbs_up)"
18
+ assertions:
19
+ - slot_was_set:
20
+ - name: "feedback_rating"
21
+ value: "thumbs_up"
22
+ - bot_uttered:
23
+ utter_name: "utter_thankyou_positive"
24
+ #
25
+ - test_case: negative feedback
26
+ steps:
27
+ - user: "goodbye"
28
+ assertions:
29
+ - flow_started: "goodbye"
30
+ - bot_uttered:
31
+ utter_name: "utter_goodbye"
32
+ - flow_started: "leave_feedback"
33
+ - bot_uttered:
34
+ utter_name: "utter_ask_feedback_rating"
35
+ buttons:
36
+ - title: "👍 Great"
37
+ payload: "/SetSlots(feedback_rating=thumbs_up)"
38
+ - title: "👎 Could be better"
39
+ payload: "/SetSlots(feedback_rating=thumbs_down)"
40
+ - user: "/SetSlots(feedback_rating=thumbs_down)"
41
+ assertions:
42
+ - slot_was_set:
43
+ - name: "feedback_rating"
44
+ value: "thumbs_down"
45
+ - bot_uttered:
46
+ utter_name: "utter_thankyou_negative"
@@ -0,0 +1,9 @@
1
+ test_cases:
2
+ - test_case: goodbye
3
+ steps:
4
+ - user: "goodbye"
5
+ assertions:
6
+ - flow_started: "goodbye"
7
+ - bot_uttered:
8
+ utter_name: "utter_goodbye"
9
+ - flow_started: "leave_feedback"
@@ -0,0 +1,8 @@
1
+ test_cases:
2
+ - test_case: hello
3
+ steps:
4
+ - user: "hello"
5
+ assertions:
6
+ - flow_started: "hello"
7
+ - bot_uttered:
8
+ utter_name: "utter_hello"
@@ -0,0 +1,35 @@
1
+ test_cases:
2
+ - test_case: human handoff happy path
3
+ steps:
4
+ - user: "I would like to speak with a human"
5
+ assertions:
6
+ - flow_started: "human_handoff"
7
+ - bot_uttered:
8
+ utter_name: "utter_ask_confirm_human_handoff"
9
+ buttons:
10
+ - payload: "/SetSlots(confirm_human_handoff=True)"
11
+ title: "Yes"
12
+ - payload: "/SetSlots(confirm_human_handoff=False)"
13
+ title: "No"
14
+ - user: "Yes"
15
+ assertions:
16
+ - bot_uttered:
17
+ utter_name: "utter_transferring_to_human"
18
+ - action_executed: action_human_handoff
19
+ # ====================================================>
20
+ - test_case: human handoff unhappy path
21
+ steps:
22
+ - user: "I would like to speak with a human"
23
+ assertions:
24
+ - flow_started: "human_handoff"
25
+ - bot_uttered:
26
+ utter_name: "utter_ask_confirm_human_handoff"
27
+ buttons:
28
+ - payload: "/SetSlots(confirm_human_handoff=True)"
29
+ title: "Yes"
30
+ - payload: "/SetSlots(confirm_human_handoff=False)"
31
+ title: "No"
32
+ - user: "No"
33
+ assertions:
34
+ - bot_uttered:
35
+ utter_name: "utter_human_handoff_cancelled"
@@ -0,0 +1,22 @@
1
+ test_cases:
2
+ - test_case: test pattern search
3
+ steps:
4
+ - user: "How secure are my online payments?"
5
+ assertions:
6
+ - generative_response_is_grounded:
7
+ threshold: 0.8
8
+ ground_truth: "Online payments are protected by 3D Secure which redirects to the Fenlo app for approval, real-time transaction notifications, merchant verification, secure card tokens (no real card details shared), and virtual card numbers for online shopping."
9
+ - user: "How do I upgrade to Premium or Metal?"
10
+ assertions:
11
+ - flow_completed:
12
+ flow_id: "pattern_search"
13
+ - generative_response_is_grounded:
14
+ threshold: 0.8
15
+ ground_truth: "Go to 'Account' in the Fenlo app, select 'Upgrade to Premium/Metal', choose your preferred plan, and confirm your payment details. Premium and Metal features are active immediately upon subscription."
16
+ - test_case: test pattern session start
17
+ steps:
18
+ - user: "/session_start"
19
+ assertions:
20
+ - flow_started: "pattern_session_start"
21
+ - bot_uttered:
22
+ utter_name: "utter_greeting"
@@ -0,0 +1,56 @@
1
+ test_cases:
2
+ - test_case: transfer money (happy path)
3
+ steps:
4
+ - user: "Transfer $50 to Alice today."
5
+ assertions:
6
+ - slot_was_set:
7
+ - name: "transfer_timing_type"
8
+ value: "immediate"
9
+ - name: "recipient_account"
10
+ value: "Alice"
11
+ - name: "amount_of_money"
12
+ value: 50
13
+ - name: "transfer_type"
14
+ value: "third party"
15
+ - name: "has_sufficient_funds"
16
+ value: true
17
+ - flow_started: "transfer_money"
18
+ - flow_started: "transfer_money_to_a_third_party"
19
+ - action_executed: check_transfer_funds
20
+ - bot_uttered:
21
+ utter_name: "utter_ask_immediate_transfer_confirmation"
22
+ - user: "/SetSlots(confirmation=true)"
23
+ assertions:
24
+ - slot_was_set:
25
+ - name: "confirmation"
26
+ value: true
27
+ - action_executed: execute_transfer
28
+ - bot_uttered:
29
+ utter_name: "utter_transfer_completed"
30
+ - test_case: transfer money (unhappy path)
31
+ steps:
32
+ - user: "Transfer $50 to Alice today."
33
+ assertions:
34
+ - slot_was_set:
35
+ - name: "transfer_timing_type"
36
+ value: "immediate"
37
+ - name: "recipient_account"
38
+ value: "Alice"
39
+ - name: "amount_of_money"
40
+ value: 50
41
+ - name: "transfer_type"
42
+ value: "third party"
43
+ - name: "has_sufficient_funds"
44
+ value: true
45
+ - flow_started: "transfer_money"
46
+ - flow_started: "transfer_money_to_a_third_party"
47
+ - action_executed: check_transfer_funds
48
+ - bot_uttered:
49
+ utter_name: "utter_ask_immediate_transfer_confirmation"
50
+ - user: "/SetSlots(confirmation=false)"
51
+ assertions:
52
+ - slot_was_set:
53
+ - name: "confirmation"
54
+ value: false
55
+ - bot_uttered:
56
+ utter_name: "utter_transfer_cancelled"
@@ -43,4 +43,4 @@ test_cases:
43
43
  - name: "feedback_rating"
44
44
  value: "thumbs_down"
45
45
  - bot_uttered:
46
- utter_name: "utter_thankyou_negative"
46
+ utter_name: "utter_thankyou_negative"
@@ -5,4 +5,4 @@ test_cases:
5
5
  assertions:
6
6
  - flow_started: "hello"
7
7
  - bot_uttered:
8
- utter_name: "utter_hello"
8
+ utter_name: "utter_hello"
@@ -32,4 +32,4 @@ test_cases:
32
32
  - user: "No"
33
33
  assertions:
34
34
  - bot_uttered:
35
- utter_name: "utter_human_handoff_cancelled"
35
+ utter_name: "utter_human_handoff_cancelled"
@@ -20,4 +20,4 @@ test_cases:
20
20
  assertions:
21
21
  - flow_started: "pattern_session_start"
22
22
  - bot_uttered:
23
- utter_name: "utter_greeting"
23
+ utter_name: "utter_greeting"
@@ -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)