rasa-pro 3.12.0.dev1__py3-none-any.whl → 3.12.0.dev3__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 (499) hide show
  1. rasa/__main__.py +7 -7
  2. rasa/anonymization/anonymisation_rule_yaml_reader.py +1 -1
  3. rasa/anonymization/anonymization_pipeline.py +3 -3
  4. rasa/anonymization/anonymization_rule_executor.py +1 -1
  5. rasa/anonymization/anonymization_rule_orchestrator.py +2 -3
  6. rasa/cli/arguments/data.py +2 -2
  7. rasa/cli/arguments/evaluate.py +2 -1
  8. rasa/cli/arguments/interactive.py +1 -1
  9. rasa/cli/arguments/run.py +1 -1
  10. rasa/cli/arguments/test.py +7 -5
  11. rasa/cli/arguments/train.py +3 -3
  12. rasa/cli/arguments/visualize.py +2 -2
  13. rasa/cli/arguments/x.py +1 -0
  14. rasa/cli/data.py +4 -3
  15. rasa/cli/dialogue_understanding_test.py +116 -18
  16. rasa/cli/evaluate.py +1 -1
  17. rasa/cli/export.py +6 -6
  18. rasa/cli/interactive.py +4 -5
  19. rasa/cli/llm_fine_tuning.py +5 -5
  20. rasa/cli/markers.py +1 -2
  21. rasa/cli/project_templates/calm/actions/add_contact.py +1 -1
  22. rasa/cli/project_templates/tutorial/actions/actions.py +3 -2
  23. rasa/cli/shell.py +2 -3
  24. rasa/cli/studio/download.py +1 -2
  25. rasa/cli/studio/studio.py +2 -3
  26. rasa/cli/studio/train.py +0 -1
  27. rasa/cli/telemetry.py +2 -2
  28. rasa/cli/test.py +11 -11
  29. rasa/cli/utils.py +7 -5
  30. rasa/core/__init__.py +0 -1
  31. rasa/core/actions/action.py +42 -21
  32. rasa/core/actions/action_hangup.py +1 -1
  33. rasa/core/actions/action_repeat_bot_messages.py +2 -2
  34. rasa/core/actions/action_run_slot_rejections.py +2 -2
  35. rasa/core/actions/action_trigger_chitchat.py +1 -1
  36. rasa/core/actions/action_trigger_flow.py +5 -5
  37. rasa/core/actions/action_trigger_search.py +1 -1
  38. rasa/core/actions/forms.py +14 -12
  39. rasa/core/actions/http_custom_action_executor.py +8 -1
  40. rasa/core/actions/loops.py +3 -3
  41. rasa/core/actions/two_stage_fallback.py +13 -13
  42. rasa/core/auth_retry_tracker_store.py +1 -2
  43. rasa/core/brokers/broker.py +2 -1
  44. rasa/core/brokers/file.py +1 -1
  45. rasa/core/brokers/kafka.py +8 -8
  46. rasa/core/brokers/pika.py +8 -9
  47. rasa/core/brokers/sql.py +4 -3
  48. rasa/core/channels/__init__.py +3 -0
  49. rasa/core/channels/botframework.py +2 -2
  50. rasa/core/channels/callback.py +4 -4
  51. rasa/core/channels/channel.py +11 -11
  52. rasa/core/channels/console.py +0 -1
  53. rasa/core/channels/development_inspector.py +6 -6
  54. rasa/core/channels/facebook.py +5 -5
  55. rasa/core/channels/hangouts.py +7 -8
  56. rasa/core/channels/inspector/dist/assets/{arc-861ddd57.js → arc-632a63ec.js} +1 -1
  57. rasa/core/channels/inspector/dist/assets/{c4Diagram-d0fbc5ce-921f02db.js → c4Diagram-d0fbc5ce-081e0df4.js} +1 -1
  58. rasa/core/channels/inspector/dist/assets/{classDiagram-936ed81e-b436c4f8.js → classDiagram-936ed81e-3df0afc2.js} +1 -1
  59. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-c3cb15f1-511a23cb.js → classDiagram-v2-c3cb15f1-8c5ed31e.js} +1 -1
  60. rasa/core/channels/inspector/dist/assets/{createText-62fc7601-ef476ecd.js → createText-62fc7601-89c73b31.js} +1 -1
  61. rasa/core/channels/inspector/dist/assets/{edges-f2ad444c-f1878e0a.js → edges-f2ad444c-4fc48c3e.js} +1 -1
  62. rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-fac75185.js → erDiagram-9d236eb7-907e0440.js} +1 -1
  63. rasa/core/channels/inspector/dist/assets/{flowDb-1972c806-201c5bbc.js → flowDb-1972c806-9ec53a3c.js} +1 -1
  64. rasa/core/channels/inspector/dist/assets/{flowDiagram-7ea5b25a-f904ae41.js → flowDiagram-7ea5b25a-41da787a.js} +1 -1
  65. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-8bea338b.js +1 -0
  66. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-abe16c3d-1813da66.js → flowchart-elk-definition-abe16c3d-ce370633.js} +1 -1
  67. rasa/core/channels/inspector/dist/assets/{ganttDiagram-9b5ea136-872af172.js → ganttDiagram-9b5ea136-90a36523.js} +1 -1
  68. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-99d0ae7c-34a0af5a.js → gitGraphDiagram-99d0ae7c-41e1aa3f.js} +1 -1
  69. rasa/core/channels/inspector/dist/assets/{index-2c4b9a3b-42ba3e3d.js → index-2c4b9a3b-e6f2af62.js} +1 -1
  70. rasa/core/channels/inspector/dist/assets/{index-37817b51.js → index-e793d777.js} +3 -3
  71. rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-6b731386.js → infoDiagram-736b4530-8ceba4db.js} +1 -1
  72. rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-e8579ac6.js → journeyDiagram-df861f2b-960d3809.js} +1 -1
  73. rasa/core/channels/inspector/dist/assets/{layout-89e6403a.js → layout-498807d8.js} +1 -1
  74. rasa/core/channels/inspector/dist/assets/{line-dc73d3fc.js → line-eeccc4e2.js} +1 -1
  75. rasa/core/channels/inspector/dist/assets/{linear-f5b1d2bc.js → linear-8a078617.js} +1 -1
  76. rasa/core/channels/inspector/dist/assets/{mindmap-definition-beec6740-82cb74fa.js → mindmap-definition-beec6740-396d17dd.js} +1 -1
  77. rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-bdf5f29b.js → pieDiagram-dbbf0591-dc9b5e1b.js} +1 -1
  78. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-c7a0cbe4.js → quadrantDiagram-4d7f4fd6-a08cba6d.js} +1 -1
  79. rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-7ec5410f.js → requirementDiagram-6fc4c22a-87242b9e.js} +1 -1
  80. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-8f13d901-caee5554.js → sankeyDiagram-8f13d901-53f6f391.js} +1 -1
  81. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-b655622a-2935f8db.js → sequenceDiagram-b655622a-715c9c20.js} +1 -1
  82. rasa/core/channels/inspector/dist/assets/{stateDiagram-59f0c015-8f5d9693.js → stateDiagram-59f0c015-2e8fb31f.js} +1 -1
  83. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-2b26beab-d565d1de.js → stateDiagram-v2-2b26beab-7e2d2aa0.js} +1 -1
  84. rasa/core/channels/inspector/dist/assets/{styles-080da4f6-75ad421d.js → styles-080da4f6-4420cea6.js} +1 -1
  85. rasa/core/channels/inspector/dist/assets/{styles-3dcbcfbf-7e764226.js → styles-3dcbcfbf-28676cf4.js} +1 -1
  86. rasa/core/channels/inspector/dist/assets/{styles-9c745c82-7a4e0e61.js → styles-9c745c82-cef936a6.js} +1 -1
  87. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-4835440b-4019d1bf.js → svgDrawCommon-4835440b-151251e9.js} +1 -1
  88. rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-01ea12df.js → timeline-definition-5b62e21b-0d39bdb2.js} +1 -1
  89. rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-89407137.js → xychartDiagram-2b33534f-a03fa445.js} +1 -1
  90. rasa/core/channels/inspector/dist/index.html +3 -1
  91. rasa/core/channels/inspector/index.html +2 -0
  92. rasa/core/channels/inspector/src/App.tsx +1 -4
  93. rasa/core/channels/mattermost.py +4 -4
  94. rasa/core/channels/rasa_chat.py +4 -4
  95. rasa/core/channels/rest.py +11 -12
  96. rasa/core/channels/rocketchat.py +4 -3
  97. rasa/core/channels/slack.py +6 -5
  98. rasa/core/channels/socketio.py +7 -28
  99. rasa/core/channels/studio_chat.py +193 -0
  100. rasa/core/channels/telegram.py +73 -41
  101. rasa/core/channels/twilio.py +3 -3
  102. rasa/core/channels/vier_cvg.py +2 -2
  103. rasa/core/channels/voice_ready/audiocodes.py +8 -8
  104. rasa/core/channels/voice_ready/jambonz.py +5 -5
  105. rasa/core/channels/voice_ready/jambonz_protocol.py +3 -4
  106. rasa/core/channels/voice_ready/twilio_voice.py +9 -8
  107. rasa/core/channels/voice_ready/utils.py +1 -1
  108. rasa/core/channels/voice_stream/asr/asr_engine.py +2 -2
  109. rasa/core/channels/voice_stream/asr/azure.py +2 -2
  110. rasa/core/channels/voice_stream/asr/deepgram.py +57 -16
  111. rasa/core/channels/voice_stream/browser_audio.py +9 -6
  112. rasa/core/channels/voice_stream/call_state.py +2 -1
  113. rasa/core/channels/voice_stream/tts/azure.py +1 -2
  114. rasa/core/channels/voice_stream/tts/cartesia.py +5 -4
  115. rasa/core/channels/voice_stream/tts/tts_cache.py +3 -2
  116. rasa/core/channels/voice_stream/tts/tts_engine.py +1 -1
  117. rasa/core/channels/voice_stream/twilio_media_streams.py +10 -7
  118. rasa/core/channels/voice_stream/util.py +1 -1
  119. rasa/core/channels/voice_stream/voice_channel.py +15 -15
  120. rasa/core/channels/webexteams.py +3 -4
  121. rasa/core/evaluation/marker.py +7 -6
  122. rasa/core/evaluation/marker_base.py +15 -16
  123. rasa/core/evaluation/marker_stats.py +3 -4
  124. rasa/core/evaluation/marker_tracker_loader.py +5 -4
  125. rasa/core/exporter.py +4 -4
  126. rasa/core/featurizers/precomputation.py +8 -8
  127. rasa/core/featurizers/single_state_featurizer.py +7 -7
  128. rasa/core/featurizers/tracker_featurizers.py +13 -13
  129. rasa/core/http_interpreter.py +3 -4
  130. rasa/core/information_retrieval/__init__.py +1 -1
  131. rasa/core/information_retrieval/faiss.py +4 -4
  132. rasa/core/information_retrieval/information_retrieval.py +2 -2
  133. rasa/core/information_retrieval/milvus.py +3 -3
  134. rasa/core/information_retrieval/qdrant.py +3 -3
  135. rasa/core/jobs.py +1 -0
  136. rasa/core/lock.py +2 -3
  137. rasa/core/lock_store.py +3 -3
  138. rasa/core/migrate.py +11 -8
  139. rasa/core/nlg/__init__.py +1 -1
  140. rasa/core/nlg/callback.py +2 -3
  141. rasa/core/nlg/contextual_response_rephraser.py +63 -13
  142. rasa/core/nlg/generator.py +2 -2
  143. rasa/core/nlg/interpolator.py +4 -3
  144. rasa/core/nlg/response.py +3 -4
  145. rasa/core/nlg/summarize.py +1 -0
  146. rasa/core/persistor.py +3 -3
  147. rasa/core/policies/ensemble.py +10 -9
  148. rasa/core/policies/enterprise_search_policy.py +86 -21
  149. rasa/core/policies/flow_policy.py +13 -14
  150. rasa/core/policies/flows/flow_executor.py +35 -11
  151. rasa/core/policies/intentless_policy.py +6 -7
  152. rasa/core/policies/memoization.py +22 -20
  153. rasa/core/policies/policy.py +24 -22
  154. rasa/core/policies/rule_policy.py +37 -36
  155. rasa/core/policies/ted_policy.py +87 -85
  156. rasa/core/policies/unexpected_intent_policy.py +77 -75
  157. rasa/core/processor.py +96 -65
  158. rasa/core/run.py +1 -1
  159. rasa/core/secrets_manager/endpoints.py +2 -3
  160. rasa/core/secrets_manager/factory.py +2 -3
  161. rasa/core/secrets_manager/secret_manager.py +2 -3
  162. rasa/core/secrets_manager/vault.py +2 -2
  163. rasa/core/test.py +30 -30
  164. rasa/core/tracker_store.py +15 -15
  165. rasa/core/train.py +1 -1
  166. rasa/core/training/__init__.py +2 -2
  167. rasa/core/training/converters/responses_prefix_converter.py +1 -2
  168. rasa/core/training/interactive.py +13 -13
  169. rasa/core/training/story_conflict.py +4 -5
  170. rasa/core/training/training.py +3 -5
  171. rasa/core/utils.py +5 -5
  172. rasa/core/visualize.py +1 -1
  173. rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -2
  174. rasa/dialogue_understanding/coexistence/llm_based_router.py +5 -5
  175. rasa/dialogue_understanding/commands/__init__.py +22 -22
  176. rasa/dialogue_understanding/commands/can_not_handle_command.py +20 -1
  177. rasa/dialogue_understanding/commands/cancel_flow_command.py +18 -7
  178. rasa/dialogue_understanding/commands/change_flow_command.py +18 -2
  179. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +18 -4
  180. rasa/dialogue_understanding/commands/clarify_command.py +19 -3
  181. rasa/dialogue_understanding/commands/command.py +19 -3
  182. rasa/dialogue_understanding/commands/correct_slots_command.py +3 -3
  183. rasa/dialogue_understanding/commands/error_command.py +1 -1
  184. rasa/dialogue_understanding/commands/free_form_answer_command.py +2 -1
  185. rasa/dialogue_understanding/commands/handle_code_change_command.py +2 -2
  186. rasa/dialogue_understanding/commands/human_handoff_command.py +16 -4
  187. rasa/dialogue_understanding/commands/knowledge_answer_command.py +18 -4
  188. rasa/dialogue_understanding/commands/noop_command.py +2 -1
  189. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +16 -4
  190. rasa/dialogue_understanding/commands/restart_command.py +2 -5
  191. rasa/dialogue_understanding/commands/session_end_command.py +3 -5
  192. rasa/dialogue_understanding/commands/session_start_command.py +3 -5
  193. rasa/dialogue_understanding/commands/set_slot_command.py +27 -3
  194. rasa/dialogue_understanding/commands/skip_question_command.py +16 -4
  195. rasa/dialogue_understanding/commands/start_flow_command.py +17 -2
  196. rasa/dialogue_understanding/commands/user_silence_command.py +3 -5
  197. rasa/dialogue_understanding/commands/utils.py +64 -45
  198. rasa/dialogue_understanding/constants.py +1 -0
  199. rasa/dialogue_understanding/generator/command_generator.py +2 -119
  200. rasa/dialogue_understanding/generator/command_parser.py +201 -0
  201. rasa/dialogue_understanding/generator/constants.py +2 -2
  202. rasa/dialogue_understanding/generator/flow_retrieval.py +7 -7
  203. rasa/dialogue_understanding/generator/llm_based_command_generator.py +11 -57
  204. rasa/dialogue_understanding/generator/llm_command_generator.py +2 -1
  205. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +67 -120
  206. rasa/dialogue_understanding/generator/nlu_command_adapter.py +8 -10
  207. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +32 -93
  208. rasa/dialogue_understanding/generator/utils.py +45 -0
  209. rasa/dialogue_understanding/patterns/cancel.py +2 -1
  210. rasa/dialogue_understanding/patterns/cannot_handle.py +1 -0
  211. rasa/dialogue_understanding/patterns/chitchat.py +1 -1
  212. rasa/dialogue_understanding/patterns/clarify.py +2 -1
  213. rasa/dialogue_understanding/patterns/code_change.py +2 -0
  214. rasa/dialogue_understanding/patterns/collect_information.py +6 -3
  215. rasa/dialogue_understanding/patterns/completed.py +1 -1
  216. rasa/dialogue_understanding/patterns/continue_interrupted.py +10 -1
  217. rasa/dialogue_understanding/patterns/correction.py +4 -2
  218. rasa/dialogue_understanding/patterns/human_handoff.py +1 -1
  219. rasa/dialogue_understanding/patterns/internal_error.py +1 -0
  220. rasa/dialogue_understanding/patterns/search.py +1 -1
  221. rasa/dialogue_understanding/patterns/session_start.py +1 -1
  222. rasa/dialogue_understanding/patterns/skip_question.py +1 -0
  223. rasa/dialogue_understanding/patterns/user_silence.py +1 -1
  224. rasa/dialogue_understanding/processor/command_processor.py +13 -9
  225. rasa/dialogue_understanding/processor/command_processor_component.py +1 -1
  226. rasa/dialogue_understanding/stack/dialogue_stack.py +4 -3
  227. rasa/dialogue_understanding/stack/frames/__init__.py +2 -2
  228. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +4 -1
  229. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +2 -3
  230. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +5 -2
  231. rasa/dialogue_understanding/stack/frames/search_frame.py +4 -1
  232. rasa/dialogue_understanding/stack/utils.py +8 -4
  233. rasa/dialogue_understanding/utils.py +121 -2
  234. rasa/dialogue_understanding_test/README.md +379 -0
  235. rasa/dialogue_understanding_test/command_comparison.py +60 -0
  236. rasa/dialogue_understanding_test/command_metric_calculation.py +110 -4
  237. rasa/dialogue_understanding_test/constants.py +6 -1
  238. rasa/dialogue_understanding_test/du_test_case.py +252 -38
  239. rasa/dialogue_understanding_test/du_test_result.py +281 -2
  240. rasa/dialogue_understanding_test/du_test_runner.py +239 -10
  241. rasa/dialogue_understanding_test/du_test_schema.yml +161 -0
  242. rasa/dialogue_understanding_test/io.py +338 -20
  243. rasa/dialogue_understanding_test/test_case_simulation/__init__.py +0 -0
  244. rasa/dialogue_understanding_test/test_case_simulation/exception.py +28 -0
  245. rasa/dialogue_understanding_test/test_case_simulation/test_case_tracker_simulator.py +336 -0
  246. rasa/dialogue_understanding_test/utils.py +70 -0
  247. rasa/dialogue_understanding_test/validation.py +59 -4
  248. rasa/e2e_test/aggregate_test_stats_calculator.py +1 -1
  249. rasa/e2e_test/assertions.py +1 -1
  250. rasa/e2e_test/e2e_config.py +1 -1
  251. rasa/e2e_test/e2e_test_case.py +3 -4
  252. rasa/e2e_test/e2e_test_converter.py +2 -3
  253. rasa/e2e_test/e2e_test_coverage_report.py +6 -6
  254. rasa/e2e_test/e2e_test_result.py +1 -1
  255. rasa/e2e_test/e2e_test_runner.py +134 -31
  256. rasa/e2e_test/stub_custom_action.py +1 -1
  257. rasa/e2e_test/utils/e2e_yaml_utils.py +1 -1
  258. rasa/e2e_test/utils/io.py +132 -65
  259. rasa/e2e_test/utils/validation.py +1 -1
  260. rasa/engine/caching.py +5 -7
  261. rasa/engine/constants.py +1 -1
  262. rasa/engine/graph.py +2 -2
  263. rasa/engine/recipes/default_components.py +13 -15
  264. rasa/engine/recipes/recipe.py +2 -2
  265. rasa/engine/runner/dask.py +2 -2
  266. rasa/engine/runner/interface.py +1 -0
  267. rasa/engine/storage/local_model_storage.py +5 -4
  268. rasa/engine/storage/resource.py +2 -1
  269. rasa/engine/storage/storage.py +5 -3
  270. rasa/engine/training/components.py +2 -1
  271. rasa/engine/training/fingerprinting.py +4 -2
  272. rasa/engine/training/graph_trainer.py +4 -4
  273. rasa/engine/training/hooks.py +2 -2
  274. rasa/engine/validation.py +34 -33
  275. rasa/exceptions.py +3 -2
  276. rasa/graph_components/converters/nlu_message_converter.py +3 -3
  277. rasa/graph_components/providers/domain_for_core_training_provider.py +3 -3
  278. rasa/graph_components/providers/domain_provider.py +3 -2
  279. rasa/graph_components/providers/flows_provider.py +2 -3
  280. rasa/graph_components/providers/forms_provider.py +4 -4
  281. rasa/graph_components/providers/nlu_training_data_provider.py +5 -3
  282. rasa/graph_components/providers/responses_provider.py +4 -4
  283. rasa/graph_components/providers/rule_only_provider.py +3 -2
  284. rasa/graph_components/providers/story_graph_provider.py +8 -8
  285. rasa/graph_components/providers/training_tracker_provider.py +3 -2
  286. rasa/graph_components/validators/default_recipe_validator.py +16 -16
  287. rasa/graph_components/validators/finetuning_validator.py +10 -8
  288. rasa/hooks.py +18 -12
  289. rasa/jupyter.py +2 -2
  290. rasa/llm_fine_tuning/annotation_module.py +4 -4
  291. rasa/llm_fine_tuning/conversations.py +6 -6
  292. rasa/llm_fine_tuning/llm_data_preparation_module.py +1 -1
  293. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -4
  294. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +1 -1
  295. rasa/llm_fine_tuning/paraphrasing_module.py +1 -1
  296. rasa/llm_fine_tuning/storage.py +3 -3
  297. rasa/markers/marker.py +2 -3
  298. rasa/markers/marker_base.py +1 -2
  299. rasa/markers/upload.py +2 -2
  300. rasa/markers/validate.py +2 -3
  301. rasa/model.py +3 -5
  302. rasa/model_manager/config.py +1 -1
  303. rasa/model_manager/model_api.py +5 -4
  304. rasa/model_manager/runner_service.py +6 -6
  305. rasa/model_manager/socket_bridge.py +8 -3
  306. rasa/model_manager/studio_jwt_auth.py +1 -0
  307. rasa/model_manager/trainer_service.py +9 -7
  308. rasa/model_manager/utils.py +1 -1
  309. rasa/model_manager/warm_rasa_process.py +14 -8
  310. rasa/model_service.py +5 -6
  311. rasa/model_testing.py +13 -15
  312. rasa/nlu/classifiers/diet_classifier.py +72 -73
  313. rasa/nlu/classifiers/fallback_classifier.py +9 -8
  314. rasa/nlu/classifiers/keyword_intent_classifier.py +7 -6
  315. rasa/nlu/classifiers/logistic_regression_classifier.py +3 -3
  316. rasa/nlu/classifiers/mitie_intent_classifier.py +5 -4
  317. rasa/nlu/classifiers/regex_message_handler.py +3 -2
  318. rasa/nlu/classifiers/sklearn_intent_classifier.py +2 -2
  319. rasa/nlu/convert.py +2 -2
  320. rasa/nlu/emulators/dialogflow.py +3 -3
  321. rasa/nlu/emulators/luis.py +5 -5
  322. rasa/nlu/emulators/no_emulator.py +1 -0
  323. rasa/nlu/emulators/wit.py +4 -4
  324. rasa/nlu/extractors/crf_entity_extractor.py +11 -11
  325. rasa/nlu/extractors/duckling_entity_extractor.py +7 -6
  326. rasa/nlu/extractors/entity_synonyms.py +10 -9
  327. rasa/nlu/extractors/extractor.py +16 -16
  328. rasa/nlu/extractors/mitie_entity_extractor.py +10 -9
  329. rasa/nlu/extractors/regex_entity_extractor.py +11 -10
  330. rasa/nlu/extractors/spacy_entity_extractor.py +2 -2
  331. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +15 -14
  332. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +2 -1
  333. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +10 -9
  334. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +9 -7
  335. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +13 -12
  336. rasa/nlu/featurizers/featurizer.py +5 -4
  337. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +6 -6
  338. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -4
  339. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +4 -4
  340. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +2 -0
  341. rasa/nlu/model.py +0 -1
  342. rasa/nlu/selectors/response_selector.py +67 -68
  343. rasa/nlu/test.py +38 -38
  344. rasa/nlu/tokenizers/jieba_tokenizer.py +1 -2
  345. rasa/nlu/tokenizers/mitie_tokenizer.py +2 -2
  346. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -3
  347. rasa/nlu/tokenizers/tokenizer.py +6 -7
  348. rasa/nlu/tokenizers/whitespace_tokenizer.py +1 -1
  349. rasa/nlu/utils/bilou_utils.py +7 -7
  350. rasa/nlu/utils/hugging_face/registry.py +22 -22
  351. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +2 -1
  352. rasa/nlu/utils/mitie_utils.py +2 -1
  353. rasa/nlu/utils/pattern_utils.py +1 -1
  354. rasa/nlu/utils/spacy_utils.py +3 -3
  355. rasa/plugin.py +12 -1
  356. rasa/server.py +37 -1
  357. rasa/shared/constants.py +22 -2
  358. rasa/shared/core/command_payload_reader.py +15 -7
  359. rasa/shared/core/constants.py +4 -1
  360. rasa/shared/core/conversation.py +1 -2
  361. rasa/shared/core/events.py +47 -37
  362. rasa/shared/core/flows/__init__.py +0 -1
  363. rasa/shared/core/flows/flow.py +11 -11
  364. rasa/shared/core/flows/flow_step.py +19 -13
  365. rasa/shared/core/flows/flow_step_links.py +21 -14
  366. rasa/shared/core/flows/flow_step_sequence.py +6 -4
  367. rasa/shared/core/flows/flows_list.py +3 -3
  368. rasa/shared/core/flows/nlu_trigger.py +1 -1
  369. rasa/shared/core/flows/steps/__init__.py +2 -2
  370. rasa/shared/core/flows/steps/action.py +4 -3
  371. rasa/shared/core/flows/steps/call.py +4 -4
  372. rasa/shared/core/flows/steps/collect.py +7 -4
  373. rasa/shared/core/flows/steps/continuation.py +3 -1
  374. rasa/shared/core/flows/steps/end.py +3 -1
  375. rasa/shared/core/flows/steps/internal.py +3 -2
  376. rasa/shared/core/flows/steps/link.py +6 -4
  377. rasa/shared/core/flows/steps/no_operation.py +7 -5
  378. rasa/shared/core/flows/steps/set_slots.py +4 -3
  379. rasa/shared/core/flows/steps/start.py +3 -1
  380. rasa/shared/core/flows/utils.py +1 -0
  381. rasa/shared/core/flows/validation.py +3 -5
  382. rasa/shared/core/generator.py +20 -21
  383. rasa/shared/core/slot_mappings.py +15 -15
  384. rasa/shared/core/slots.py +3 -3
  385. rasa/shared/core/trackers.py +31 -31
  386. rasa/shared/core/training_data/loading.py +1 -1
  387. rasa/shared/core/training_data/story_reader/story_reader.py +3 -3
  388. rasa/shared/core/training_data/story_reader/story_step_builder.py +4 -4
  389. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +29 -31
  390. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +22 -24
  391. rasa/shared/core/training_data/structures.py +11 -12
  392. rasa/shared/core/training_data/visualization.py +10 -10
  393. rasa/shared/data.py +6 -6
  394. rasa/shared/engine/caching.py +0 -1
  395. rasa/shared/exceptions.py +2 -2
  396. rasa/shared/importers/rasa.py +5 -6
  397. rasa/shared/importers/utils.py +1 -1
  398. rasa/shared/nlu/constants.py +3 -0
  399. rasa/shared/nlu/training_data/entities_parser.py +6 -6
  400. rasa/shared/nlu/training_data/features.py +3 -3
  401. rasa/shared/nlu/training_data/formats/__init__.py +1 -1
  402. rasa/shared/nlu/training_data/formats/dialogflow.py +4 -5
  403. rasa/shared/nlu/training_data/formats/luis.py +7 -8
  404. rasa/shared/nlu/training_data/formats/rasa.py +4 -5
  405. rasa/shared/nlu/training_data/formats/rasa_yaml.py +17 -16
  406. rasa/shared/nlu/training_data/formats/readerwriter.py +8 -11
  407. rasa/shared/nlu/training_data/formats/wit.py +3 -4
  408. rasa/shared/nlu/training_data/loading.py +4 -4
  409. rasa/shared/nlu/training_data/lookup_tables_parser.py +1 -1
  410. rasa/shared/nlu/training_data/message.py +13 -14
  411. rasa/shared/nlu/training_data/schemas/data_schema.py +1 -1
  412. rasa/shared/nlu/training_data/schemas/responses.yml +1 -0
  413. rasa/shared/nlu/training_data/synonyms_parser.py +3 -3
  414. rasa/shared/nlu/training_data/training_data.py +12 -13
  415. rasa/shared/nlu/training_data/util.py +11 -10
  416. rasa/shared/providers/_configs/azure_openai_client_config.py +3 -497
  417. rasa/shared/providers/_configs/client_config.py +1 -3
  418. rasa/shared/providers/_configs/default_litellm_client_config.py +1 -3
  419. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +1 -3
  420. rasa/shared/providers/_configs/litellm_router_client_config.py +1 -3
  421. rasa/shared/providers/_configs/model_group_config.py +2 -7
  422. rasa/shared/providers/_configs/openai_client_config.py +1 -3
  423. rasa/shared/providers/_configs/rasa_llm_client_config.py +1 -3
  424. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +1 -3
  425. rasa/shared/providers/_configs/utils.py +1 -0
  426. rasa/shared/providers/_ssl_verification_utils.py +5 -6
  427. rasa/shared/providers/_utils.py +5 -5
  428. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +1 -1
  429. rasa/shared/providers/embedding/azure_openai_embedding_client.py +3 -28
  430. rasa/shared/providers/embedding/embedding_client.py +1 -1
  431. rasa/shared/providers/embedding/litellm_router_embedding_client.py +1 -3
  432. rasa/shared/providers/llm/_base_litellm_client.py +1 -3
  433. rasa/shared/providers/llm/azure_openai_llm_client.py +25 -81
  434. rasa/shared/providers/llm/default_litellm_llm_client.py +1 -3
  435. rasa/shared/providers/llm/litellm_router_llm_client.py +2 -21
  436. rasa/shared/providers/llm/llm_client.py +1 -3
  437. rasa/shared/providers/llm/llm_response.py +41 -2
  438. rasa/shared/providers/llm/openai_llm_client.py +3 -9
  439. rasa/shared/providers/llm/rasa_llm_client.py +6 -20
  440. rasa/shared/providers/llm/self_hosted_llm_client.py +3 -9
  441. rasa/shared/providers/mappings.py +18 -19
  442. rasa/shared/providers/router/_base_litellm_router_client.py +1 -3
  443. rasa/shared/providers/router/router_client.py +1 -3
  444. rasa/shared/utils/cli.py +1 -1
  445. rasa/shared/utils/common.py +1 -1
  446. rasa/shared/utils/health_check/embeddings_health_check_mixin.py +1 -1
  447. rasa/shared/utils/health_check/health_check.py +3 -3
  448. rasa/shared/utils/health_check/llm_health_check_mixin.py +1 -1
  449. rasa/shared/utils/io.py +1 -1
  450. rasa/shared/utils/llm.py +5 -9
  451. rasa/shared/utils/pykwalify_extensions.py +1 -1
  452. rasa/shared/utils/schemas/events.py +1 -1
  453. rasa/shared/utils/yaml.py +29 -26
  454. rasa/studio/auth.py +3 -3
  455. rasa/studio/config.py +1 -2
  456. rasa/studio/data_handler.py +3 -3
  457. rasa/studio/download.py +1 -1
  458. rasa/studio/results_logger.py +3 -3
  459. rasa/studio/upload.py +2 -0
  460. rasa/telemetry.py +31 -0
  461. rasa/tracing/config.py +3 -3
  462. rasa/tracing/instrumentation/attribute_extractors.py +2 -0
  463. rasa/tracing/instrumentation/instrumentation.py +4 -4
  464. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -1
  465. rasa/tracing/instrumentation/metrics.py +11 -11
  466. rasa/tracing/metric_instrument_provider.py +14 -14
  467. rasa/utils/common.py +12 -9
  468. rasa/utils/endpoints.py +1 -1
  469. rasa/utils/io.py +7 -7
  470. rasa/utils/licensing.py +3 -4
  471. rasa/utils/log_utils.py +7 -6
  472. rasa/utils/ml_utils.py +1 -0
  473. rasa/utils/plotting.py +3 -3
  474. rasa/utils/sanic_error_handler.py +1 -1
  475. rasa/utils/tensorflow/callback.py +2 -2
  476. rasa/utils/tensorflow/crf.py +2 -2
  477. rasa/utils/tensorflow/data_generator.py +5 -5
  478. rasa/utils/tensorflow/environment.py +3 -3
  479. rasa/utils/tensorflow/feature_array.py +2 -3
  480. rasa/utils/tensorflow/layers.py +18 -12
  481. rasa/utils/tensorflow/layers_utils.py +2 -1
  482. rasa/utils/tensorflow/metrics.py +2 -2
  483. rasa/utils/tensorflow/model_data.py +7 -7
  484. rasa/utils/tensorflow/model_data_utils.py +10 -9
  485. rasa/utils/tensorflow/models.py +31 -32
  486. rasa/utils/tensorflow/rasa_layers.py +20 -19
  487. rasa/utils/tensorflow/types.py +2 -1
  488. rasa/utils/train_utils.py +23 -21
  489. rasa/utils/url_tools.py +1 -1
  490. rasa/validator.py +17 -1
  491. rasa/version.py +1 -1
  492. {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/METADATA +8 -9
  493. rasa_pro-3.12.0.dev3.dist-info/RECORD +800 -0
  494. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +0 -1
  495. rasa/shared/providers/constants.py +0 -7
  496. rasa_pro-3.12.0.dev1.dist-info/RECORD +0 -790
  497. {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/NOTICE +0 -0
  498. {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/WHEEL +0 -0
  499. {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/entry_points.txt +0 -0
rasa/__main__.py CHANGED
@@ -1,13 +1,11 @@
1
1
  import argparse
2
- from typing import Optional, List
3
- import structlog
4
2
  import os
5
3
  import platform
6
4
  import sys
5
+ from typing import List, Optional
7
6
 
7
+ import structlog
8
8
  from rasa_sdk import __version__ as rasa_sdk_version
9
- from rasa.constants import MINIMUM_COMPATIBLE_VERSION
10
- from rasa.utils.log_utils import configure_structlog
11
9
 
12
10
  import rasa.telemetry
13
11
  import rasa.utils.io
@@ -15,8 +13,10 @@ import rasa.utils.tensorflow.environment as tf_env
15
13
  from rasa import version
16
14
  from rasa.cli import (
17
15
  data,
16
+ evaluate,
18
17
  export,
19
18
  interactive,
19
+ llm_fine_tuning,
20
20
  run,
21
21
  scaffold,
22
22
  shell,
@@ -25,18 +25,18 @@ from rasa.cli import (
25
25
  train,
26
26
  visualize,
27
27
  x,
28
- evaluate,
29
- llm_fine_tuning,
30
28
  )
31
29
  from rasa.cli.arguments.default_arguments import add_logging_options
32
30
  from rasa.cli.utils import (
31
+ check_if_studio_command,
33
32
  parse_last_positional_argument_as_model_path,
34
33
  warn_if_rasa_plus_package_installed,
35
- check_if_studio_command,
36
34
  )
35
+ from rasa.constants import MINIMUM_COMPATIBLE_VERSION
37
36
  from rasa.plugin import plugin_manager
38
37
  from rasa.shared.exceptions import RasaException
39
38
  from rasa.utils.common import configure_logging_and_warnings
39
+ from rasa.utils.log_utils import configure_structlog
40
40
 
41
41
  structlogger = structlog.get_logger()
42
42
 
@@ -1,7 +1,6 @@
1
1
  from typing import List, Optional, Text
2
2
 
3
3
  import pycountry
4
- from rasa.shared.exceptions import RasaException
5
4
 
6
5
  from rasa.anonymization.anonymization_rule_executor import (
7
6
  AnonymizationRule,
@@ -11,6 +10,7 @@ from rasa.anonymization.utils import (
11
10
  read_endpoint_config,
12
11
  validate_anonymization_yaml,
13
12
  )
13
+ from rasa.shared.exceptions import RasaException
14
14
 
15
15
  KEY_ANONYMIZATION_RULES = "anonymization"
16
16
 
@@ -7,9 +7,6 @@ import queue
7
7
  from typing import Any, Dict, List, Optional, Text
8
8
 
9
9
  from apscheduler.schedulers.background import BackgroundScheduler
10
- from rasa.core.brokers.kafka import KafkaEventBroker
11
- from rasa.shared.core.events import Event
12
- from rasa.utils.endpoints import EndpointConfig, read_endpoint_config
13
10
 
14
11
  from rasa.anonymization.anonymisation_rule_yaml_reader import (
15
12
  AnonymizationRulesYamlReader,
@@ -18,6 +15,9 @@ from rasa.anonymization.anonymization_rule_executor import AnonymizationRuleList
18
15
  from rasa.anonymization.anonymization_rule_orchestrator import (
19
16
  AnonymizationRuleOrchestrator,
20
17
  )
18
+ from rasa.core.brokers.kafka import KafkaEventBroker
19
+ from rasa.shared.core.events import Event
20
+ from rasa.utils.endpoints import EndpointConfig, read_endpoint_config
21
21
  from rasa.utils.singleton import Singleton
22
22
 
23
23
  logger = logging.getLogger(__name__)
@@ -12,8 +12,8 @@ from presidio_analyzer.nlp_engine import (
12
12
  )
13
13
  from presidio_anonymizer import AnonymizerEngine
14
14
  from presidio_anonymizer.entities import OperatorConfig
15
- from rasa.shared.exceptions import RasaException
16
15
 
16
+ from rasa.shared.exceptions import RasaException
17
17
  from rasa.utils.singleton import Singleton
18
18
 
19
19
  if typing.TYPE_CHECKING:
@@ -3,13 +3,12 @@ import json
3
3
  import logging
4
4
  from typing import Any, Dict, List, Optional, Text
5
5
 
6
- from rasa.core.brokers.broker import EventBroker
7
- from rasa.core.brokers.kafka import KafkaEventBroker
8
-
9
6
  from rasa.anonymization.anonymization_rule_executor import (
10
7
  AnonymizationRuleExecutor,
11
8
  AnonymizationRuleList,
12
9
  )
10
+ from rasa.core.brokers.broker import EventBroker
11
+ from rasa.core.brokers.kafka import KafkaEventBroker
13
12
 
14
13
  logger = logging.getLogger(__name__)
15
14
 
@@ -2,10 +2,10 @@ import argparse
2
2
  from typing import Text
3
3
 
4
4
  from rasa.cli.arguments.default_arguments import (
5
- add_nlu_data_param,
6
- add_out_param,
7
5
  add_data_param,
8
6
  add_domain_param,
7
+ add_nlu_data_param,
8
+ add_out_param,
9
9
  )
10
10
  from rasa.shared.constants import DEFAULT_CONVERTED_DATA_PATH
11
11
 
@@ -1,6 +1,7 @@
1
1
  import argparse
2
2
  from pathlib import Path
3
- from rasa.cli.arguments.default_arguments import add_endpoint_param, add_domain_param
3
+
4
+ from rasa.cli.arguments.default_arguments import add_domain_param, add_endpoint_param
4
5
 
5
6
 
6
7
  def set_markers_arguments(parser: argparse.ArgumentParser) -> None:
@@ -2,8 +2,8 @@ import argparse
2
2
  import uuid
3
3
 
4
4
  import rasa.cli.arguments.default_arguments
5
- import rasa.cli.arguments.train
6
5
  import rasa.cli.arguments.run
6
+ import rasa.cli.arguments.train
7
7
 
8
8
 
9
9
  def set_interactive_arguments(parser: argparse.ArgumentParser) -> None:
rasa/cli/arguments/run.py CHANGED
@@ -5,8 +5,8 @@ from typing import Union
5
5
  from rasa.cli.arguments.default_arguments import (
6
6
  add_endpoint_param,
7
7
  add_model_param,
8
- add_skip_validation_flag,
9
8
  add_remote_storage_param,
9
+ add_skip_validation_flag,
10
10
  )
11
11
  from rasa.core import constants
12
12
  from rasa.env import (
@@ -1,17 +1,19 @@
1
1
  import argparse
2
2
  from typing import Union
3
3
 
4
- from rasa.shared.constants import DEFAULT_MODELS_PATH, DEFAULT_RESULTS_PATH
5
-
6
4
  from rasa.cli.arguments.default_arguments import (
7
- add_stories_param,
5
+ add_endpoint_param,
8
6
  add_model_param,
9
7
  add_nlu_data_param,
10
- add_endpoint_param,
11
8
  add_out_param,
9
+ add_stories_param,
12
10
  )
13
11
  from rasa.model import get_latest_model
14
- from rasa.shared.constants import DEFAULT_DOMAIN_PATH
12
+ from rasa.shared.constants import (
13
+ DEFAULT_DOMAIN_PATH,
14
+ DEFAULT_MODELS_PATH,
15
+ DEFAULT_RESULTS_PATH,
16
+ )
15
17
 
16
18
 
17
19
  def set_test_arguments(parser: argparse.ArgumentParser) -> None:
@@ -3,12 +3,12 @@ from typing import Union
3
3
 
4
4
  from rasa.cli.arguments.default_arguments import (
5
5
  add_config_param,
6
- add_stories_param,
7
- add_nlu_data_param,
8
- add_out_param,
9
6
  add_domain_param,
10
7
  add_endpoint_param,
8
+ add_nlu_data_param,
9
+ add_out_param,
11
10
  add_remote_storage_param,
11
+ add_stories_param,
12
12
  )
13
13
  from rasa.graph_components.providers.training_tracker_provider import (
14
14
  TrainingTrackerProvider,
@@ -2,9 +2,9 @@ import argparse
2
2
 
3
3
  from rasa.cli.arguments.default_arguments import (
4
4
  add_domain_param,
5
- add_stories_param,
6
- add_out_param,
7
5
  add_nlu_data_param,
6
+ add_out_param,
7
+ add_stories_param,
8
8
  )
9
9
 
10
10
 
rasa/cli/arguments/x.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import argparse
2
+
2
3
  from rasa.cli.arguments import default_arguments
3
4
  from rasa.cli.arguments.run import add_server_arguments
4
5
 
rasa/cli/data.py CHANGED
@@ -19,8 +19,8 @@ from rasa.e2e_test.e2e_config import create_llm_e2e_test_converter_config
19
19
  from rasa.e2e_test.e2e_test_converter import E2ETestConverter
20
20
  from rasa.e2e_test.utils.e2e_yaml_utils import E2ETestYAMLWriter
21
21
  from rasa.shared.constants import (
22
- DEFAULT_DATA_PATH,
23
22
  DEFAULT_CONFIG_PATH,
23
+ DEFAULT_DATA_PATH,
24
24
  DEFAULT_DOMAIN_PATHS,
25
25
  )
26
26
  from rasa.shared.exceptions import RasaException
@@ -230,11 +230,12 @@ def split_stories_data(args: argparse.Namespace) -> None:
230
230
  Args:
231
231
  args: Commandline arguments
232
232
  """
233
+ from sklearn.model_selection import train_test_split
234
+
233
235
  from rasa.shared.core.training_data.story_reader.yaml_story_reader import (
234
- YAMLStoryReader,
235
236
  KEY_STORIES,
237
+ YAMLStoryReader,
236
238
  )
237
- from sklearn.model_selection import train_test_split
238
239
 
239
240
  data_path = rasa.cli.utils.get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH)
240
241
  data_files = rasa.shared.data.get_data_files(
@@ -1,20 +1,25 @@
1
1
  import argparse
2
2
  import asyncio
3
3
  import datetime
4
+ import importlib
4
5
  import sys
5
- from typing import List
6
+ from typing import List, Optional
6
7
 
7
8
  import structlog
8
9
 
9
10
  import rasa.cli.utils
11
+ import rasa.shared.utils.cli
10
12
  from rasa.cli import SubParsersAction
11
13
  from rasa.cli.arguments.default_arguments import (
12
14
  add_endpoint_param,
13
15
  add_model_param,
14
16
  add_remote_storage_param,
15
17
  )
18
+ from rasa.core.agent import Agent
16
19
  from rasa.core.exceptions import AgentNotReady
17
20
  from rasa.core.utils import AvailableEndpoints
21
+ from rasa.dialogue_understanding.commands import Command
22
+ from rasa.dialogue_understanding.generator.command_parser import DEFAULT_COMMANDS
18
23
  from rasa.dialogue_understanding_test.command_metric_calculation import (
19
24
  calculate_command_metrics,
20
25
  )
@@ -24,14 +29,15 @@ from rasa.dialogue_understanding_test.constants import (
24
29
  )
25
30
  from rasa.dialogue_understanding_test.du_test_result import (
26
31
  DialogueUnderstandingTestResult,
32
+ DialogueUnderstandingTestSuiteResult,
27
33
  )
28
34
  from rasa.dialogue_understanding_test.du_test_runner import (
29
35
  DialogueUnderstandingTestRunner,
30
36
  )
31
37
  from rasa.dialogue_understanding_test.io import (
38
+ print_test_results,
32
39
  read_test_suite,
33
40
  write_test_results_to_file,
34
- print_test_results,
35
41
  )
36
42
  from rasa.dialogue_understanding_test.validation import (
37
43
  validate_cli_arguments,
@@ -39,7 +45,9 @@ from rasa.dialogue_understanding_test.validation import (
39
45
  )
40
46
  from rasa.e2e_test.e2e_test_case import TestSuite
41
47
  from rasa.exceptions import RasaException
42
- from rasa.shared.constants import DEFAULT_ENDPOINTS_PATH
48
+ from rasa.shared.constants import DEFAULT_ENDPOINTS_PATH, ROUTE_TO_CALM_SLOT
49
+ from rasa.shared.core.domain import Domain
50
+ from rasa.shared.core.flows import FlowsList
43
51
  from rasa.utils.beta import ensure_beta_feature_is_enabled
44
52
  from rasa.utils.endpoints import EndpointConfig
45
53
 
@@ -136,6 +144,45 @@ def add_du_test_arguments(parser: argparse.ArgumentParser) -> None:
136
144
  help="If set, the dialogue understanding test output will contain "
137
145
  "prompts for each failure.",
138
146
  )
147
+ du_arguments.add_argument(
148
+ "--additional-commands",
149
+ type=str,
150
+ nargs="*",
151
+ help=(
152
+ "List of additional custom command classes to add, separated by spaces. "
153
+ "For example: --additional-commands my_module.MyCustomCommand"
154
+ ),
155
+ )
156
+ du_arguments.add_argument(
157
+ "--remove-default-commands",
158
+ type=str,
159
+ nargs="*",
160
+ help=(
161
+ f"List of default commands to remove, separated by spaces. "
162
+ f"Default commands include: "
163
+ f"{', '.join([command.__name__ for command in DEFAULT_COMMANDS])}. "
164
+ f"For example: --remove-default-commands ClarifyCommand HumanHandoffCommand"
165
+ ),
166
+ )
167
+
168
+
169
+ def ensure_calm_only_bot(agent: Agent) -> None:
170
+ if agent.domain is None or agent.processor is None:
171
+ return
172
+
173
+ if ROUTE_TO_CALM_SLOT in [slot.name for slot in agent.domain.slots]:
174
+ rasa.shared.utils.cli.print_error(
175
+ "You are using coexistence. Dialogue Understanding Tests do only work for "
176
+ "CALM only assistants."
177
+ )
178
+ sys.exit(0)
179
+
180
+ if not agent.processor.is_calm_assistant:
181
+ rasa.shared.utils.cli.print_error(
182
+ "Dialogue Understanding Tests do only work for CALM assistants. "
183
+ "Your assistant does not use CALM."
184
+ )
185
+ sys.exit(0)
139
186
 
140
187
 
141
188
  def execute_dialogue_understanding_tests(args: argparse.Namespace) -> None:
@@ -155,12 +202,6 @@ def execute_dialogue_understanding_tests(args: argparse.Namespace) -> None:
155
202
  # initialization of endpoints
156
203
  endpoints = set_up_available_endpoints(args)
157
204
 
158
- # read test cases from the given path
159
- test_suite = get_valid_test_suite(args)
160
-
161
- # setup stub custom actions if they are used
162
- set_up_stub_custom_actions(test_suite, endpoints)
163
-
164
205
  # set up the test runner, e.g. start the agent
165
206
  try:
166
207
  test_runner = DialogueUnderstandingTestRunner(
@@ -175,34 +216,91 @@ def execute_dialogue_understanding_tests(args: argparse.Namespace) -> None:
175
216
  )
176
217
  sys.exit(1)
177
218
 
219
+ # Exit if the bot is not calm only
220
+ ensure_calm_only_bot(test_runner.agent)
221
+
222
+ # Get flows from the agent
223
+ # we need them to parse the commands when reading the test cases
224
+ if test_runner.agent.processor is None:
225
+ rasa.shared.utils.cli.print_error(
226
+ "No processor: Not able to retrieve flows and config from trained model."
227
+ )
228
+ sys.exit(0)
229
+ flows = asyncio.run(test_runner.agent.processor.get_flows())
230
+
231
+ # read test cases from the given path
232
+ test_suite: TestSuite = get_valid_test_suite(args, flows, test_runner.agent.domain)
233
+
234
+ # setup stub custom actions if they are used
235
+ set_up_stub_custom_actions(test_suite, endpoints)
236
+
178
237
  # run the actual test cases
179
238
  test_results = asyncio.run(
180
- test_runner.run_tests(
239
+ test_runner.run_test_cases(
181
240
  test_suite.test_cases, test_suite.fixtures, test_suite.metadata
182
241
  )
183
242
  )
184
243
 
185
244
  # evaluate test results
186
- failed_tests, passed_tests = split_test_results(test_results)
245
+ passing_test_results, failing_test_results = split_test_results(test_results)
187
246
  command_metrics = calculate_command_metrics(test_results)
188
247
 
248
+ test_suite_result = DialogueUnderstandingTestSuiteResult.from_results(
249
+ failing_test_results, passing_test_results, command_metrics
250
+ )
251
+
189
252
  # write results to console and file
190
- print_test_results(failed_tests, passed_tests, command_metrics, args.output_prompt)
253
+ print_test_results(test_suite_result, output_prompt=args.output_prompt)
191
254
  if not args.no_output:
192
255
  write_test_results_to_file(
193
- failed_tests,
194
- passed_tests,
195
- command_metrics,
256
+ test_suite_result,
196
257
  args.output_file,
197
258
  args.output_prompt,
198
259
  )
199
260
 
200
261
 
201
- def get_valid_test_suite(args: argparse.Namespace) -> TestSuite:
262
+ def _import_custom_command_class(class_path: str) -> Command:
263
+ """Dynamically import a command class from a string path."""
264
+ try:
265
+ module_name, class_name = class_path.rsplit(".", 1)
266
+ module = importlib.import_module(module_name)
267
+ clz = getattr(module, class_name)
268
+ except (ImportError, AttributeError, ValueError) as e:
269
+ raise ValueError(f"Failed to import class '{class_path}': {e}")
270
+ if not issubclass(clz, Command):
271
+ structlogger.error(
272
+ "rasa.dialogue_understanding_test.invalid_additional_command",
273
+ event_info="The custom command class must be a subclass of Command.",
274
+ class_path=class_path,
275
+ )
276
+ sys.exit(1)
277
+ return clz
278
+
279
+
280
+ def _extract_additional_command_classes_from_cli_args(
281
+ args: argparse.Namespace,
282
+ ) -> List[Command]:
283
+ """Extract additional command classes from the CLI arguments."""
284
+ additional_commands = getattr(args, "additional_commands", [])
285
+ if not additional_commands:
286
+ return []
287
+ return [
288
+ _import_custom_command_class(command_module)
289
+ for command_module in additional_commands
290
+ ]
291
+
292
+
293
+ def get_valid_test_suite(
294
+ args: argparse.Namespace, flows: FlowsList, domain: Optional[Domain]
295
+ ) -> TestSuite:
202
296
  """Read the test cases from the given test case path and validate them."""
203
297
  path_to_test_cases = getattr(args, "path-to-test-cases", DEFAULT_INPUT_TESTS_PATH)
204
- test_suite = read_test_suite(path_to_test_cases)
205
- validate_test_cases(test_suite.test_cases)
298
+ remove_default_commands = getattr(args, "remove_default_commands", [])
299
+ custom_command_classes = _extract_additional_command_classes_from_cli_args(args)
300
+ test_suite = read_test_suite(
301
+ path_to_test_cases, flows, custom_command_classes, remove_default_commands
302
+ )
303
+ validate_test_cases(test_suite.test_cases, domain)
206
304
  return test_suite
207
305
 
208
306
 
rasa/cli/evaluate.py CHANGED
@@ -1,6 +1,6 @@
1
1
  import argparse
2
2
  from pathlib import Path
3
- from typing import List, Text, Optional
3
+ from typing import List, Optional, Text
4
4
 
5
5
  import rasa.cli.arguments.evaluate as arguments
6
6
  import rasa.shared.utils.cli
rasa/cli/export.py CHANGED
@@ -2,23 +2,23 @@ import argparse
2
2
  import asyncio
3
3
  import logging
4
4
  import typing
5
- from typing import List, Text, Optional
5
+ from typing import List, Optional, Text
6
6
 
7
- from rasa import telemetry
8
- from rasa.cli import SubParsersAction
9
7
  import rasa.core.utils
10
8
  import rasa.shared.utils.cli
11
9
  import rasa.utils.common
10
+ from rasa import telemetry
11
+ from rasa.cli import SubParsersAction
12
12
  from rasa.cli.arguments import export as arguments
13
- from rasa.shared.constants import DOCS_URL_EVENT_BROKERS, DOCS_URL_TRACKER_STORES
13
+ from rasa.core.brokers.pika import PikaEventBroker
14
14
  from rasa.exceptions import PublishingError
15
+ from rasa.shared.constants import DOCS_URL_EVENT_BROKERS, DOCS_URL_TRACKER_STORES
15
16
  from rasa.shared.exceptions import RasaException
16
- from rasa.core.brokers.pika import PikaEventBroker
17
17
 
18
18
  if typing.TYPE_CHECKING:
19
19
  from rasa.core.brokers.broker import EventBroker
20
- from rasa.core.tracker_store import TrackerStore
21
20
  from rasa.core.exporter import Exporter
21
+ from rasa.core.tracker_store import TrackerStore
22
22
  from rasa.core.utils import AvailableEndpoints
23
23
 
24
24
  logger = logging.getLogger(__name__)
rasa/cli/interactive.py CHANGED
@@ -4,11 +4,13 @@ import os
4
4
  from pathlib import Path
5
5
  from typing import List, Optional, Text, Union
6
6
 
7
+ import rasa.cli.train as train
8
+ import rasa.cli.utils
9
+ import rasa.shared.utils.cli
10
+ import rasa.utils.common
7
11
  from rasa import model
8
12
  from rasa.cli import SubParsersAction
9
13
  from rasa.cli.arguments import interactive as arguments
10
- import rasa.cli.train as train
11
- import rasa.cli.utils
12
14
  from rasa.engine.storage.local_model_storage import LocalModelStorage
13
15
  from rasa.shared.constants import (
14
16
  ASSISTANT_ID_DEFAULT_VALUE,
@@ -18,9 +20,6 @@ from rasa.shared.constants import (
18
20
  )
19
21
  from rasa.shared.data import TrainingType
20
22
  from rasa.shared.importers.importer import TrainingDataImporter
21
- import rasa.shared.utils.cli
22
- import rasa.utils.common
23
-
24
23
 
25
24
  logger = logging.getLogger(__name__)
26
25
 
@@ -1,7 +1,7 @@
1
1
  import argparse
2
2
  import asyncio
3
3
  import sys
4
- from typing import List, Any, Dict
4
+ from typing import Any, Dict, List
5
5
 
6
6
  import structlog
7
7
 
@@ -16,9 +16,9 @@ from rasa.cli.arguments.default_arguments import (
16
16
  add_remote_storage_param,
17
17
  )
18
18
  from rasa.cli.e2e_test import (
19
+ RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME,
19
20
  read_test_cases,
20
21
  validate_model_path,
21
- RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME,
22
22
  )
23
23
  from rasa.core.exceptions import AgentNotReady
24
24
  from rasa.core.utils import AvailableEndpoints
@@ -31,14 +31,14 @@ from rasa.llm_fine_tuning.paraphrasing.conversation_rephraser import (
31
31
  )
32
32
  from rasa.llm_fine_tuning.paraphrasing_module import create_paraphrased_conversations
33
33
  from rasa.llm_fine_tuning.storage import (
34
+ FileStorageStrategy,
34
35
  StorageContext,
35
36
  StorageType,
36
- FileStorageStrategy,
37
37
  )
38
38
  from rasa.llm_fine_tuning.train_test_split_module import (
39
- split_llm_fine_tuning_data,
40
- INSTRUCTION_DATA_FORMAT,
41
39
  CONVERSATIONAL_DATA_FORMAT,
40
+ INSTRUCTION_DATA_FORMAT,
41
+ split_llm_fine_tuning_data,
42
42
  )
43
43
  from rasa.shared.constants import (
44
44
  DEFAULT_ENDPOINTS_PATH,
rasa/cli/markers.py CHANGED
@@ -4,11 +4,10 @@ from typing import List, Text
4
4
 
5
5
  from rasa.cli import SubParsersAction
6
6
  from rasa.cli.arguments.default_arguments import add_domain_param
7
+ from rasa.markers.upload import upload
7
8
  from rasa.shared.core.domain import Domain
8
9
  from rasa.shared.utils.cli import print_error_and_exit
9
10
 
10
- from rasa.markers.upload import upload
11
-
12
11
 
13
12
  def add_subparser(
14
13
  subparsers: SubParsersAction, parents: List[argparse.ArgumentParser]
@@ -4,7 +4,7 @@ from rasa_sdk import Action, Tracker
4
4
  from rasa_sdk.events import SlotSet
5
5
  from rasa_sdk.executor import CollectingDispatcher
6
6
 
7
- from actions.db import add_contact, get_contacts, Contact
7
+ from actions.db import Contact, add_contact, get_contacts
8
8
 
9
9
 
10
10
  class AddContact(Action):
@@ -1,7 +1,8 @@
1
- from typing import Any, Text, Dict, List
1
+ from typing import Any, Dict, List, Text
2
+
2
3
  from rasa_sdk import Action, Tracker
3
- from rasa_sdk.executor import CollectingDispatcher
4
4
  from rasa_sdk.events import SlotSet
5
+ from rasa_sdk.executor import CollectingDispatcher
5
6
 
6
7
 
7
8
  class ActionCheckSufficientFunds(Action):
rasa/cli/shell.py CHANGED
@@ -1,18 +1,17 @@
1
1
  import argparse
2
2
  import logging
3
3
  import uuid
4
-
5
4
  from typing import List
6
5
 
7
6
  from rasa import telemetry
8
7
  from rasa.cli import SubParsersAction
9
8
  from rasa.cli.arguments import shell as arguments
10
9
  from rasa.engine.storage.local_model_storage import LocalModelStorage
10
+ from rasa.exceptions import ModelNotFound
11
11
  from rasa.model import get_local_model
12
12
  from rasa.shared.constants import ASSISTANT_ID_KEY
13
13
  from rasa.shared.data import TrainingType
14
14
  from rasa.shared.utils.cli import print_error
15
- from rasa.exceptions import ModelNotFound
16
15
 
17
16
  logger = logging.getLogger(__name__)
18
17
 
@@ -63,9 +62,9 @@ def add_subparser(
63
62
 
64
63
  def shell_nlu(args: argparse.Namespace) -> None:
65
64
  """Talk with an NLU only bot though the command line."""
65
+ import rasa.nlu.run
66
66
  from rasa.cli.utils import get_validated_path
67
67
  from rasa.shared.constants import DEFAULT_MODELS_PATH
68
- import rasa.nlu.run
69
68
 
70
69
  args.connector = "cmdline"
71
70
 
@@ -7,8 +7,7 @@ from rasa.cli.arguments.default_arguments import (
7
7
  add_endpoint_param,
8
8
  )
9
9
  from rasa.cli.arguments.train import add_data_param, add_domain_param
10
- from rasa.shared.constants import DEFAULT_ENDPOINTS_PATH, DEFAULT_CONFIG_PATH
11
-
10
+ from rasa.shared.constants import DEFAULT_CONFIG_PATH, DEFAULT_ENDPOINTS_PATH
12
11
  from rasa.studio.download import handle_download
13
12
 
14
13
 
rasa/cli/studio/studio.py CHANGED
@@ -3,16 +3,15 @@ from typing import List, Optional, Tuple
3
3
  from urllib.parse import ParseResult, urlparse
4
4
 
5
5
  import questionary
6
- from rasa.cli import SubParsersAction
7
6
 
8
- import rasa.shared.utils.cli
9
7
  import rasa.cli.studio.download
10
8
  import rasa.cli.studio.train
11
9
  import rasa.cli.studio.upload
10
+ import rasa.shared.utils.cli
11
+ from rasa.cli import SubParsersAction
12
12
  from rasa.studio.auth import StudioAuth
13
13
  from rasa.studio.config import StudioConfig
14
14
 
15
-
16
15
  DEFAULT_REALM_NAME = "rasa-studio"
17
16
 
18
17
  DEFAULT_CLIENT_ID = "admin-cli"
rasa/cli/studio/train.py CHANGED
@@ -3,7 +3,6 @@ from typing import List
3
3
 
4
4
  from rasa.cli import SubParsersAction
5
5
  from rasa.cli.arguments.train import set_train_arguments
6
-
7
6
  from rasa.studio.train import handle_train
8
7
 
9
8