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
@@ -1,8 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
3
4
  from dataclasses import dataclass
4
5
  from typing import Any, Dict, List
5
- from rasa.dialogue_understanding.commands import Command
6
+
7
+ from rasa.dialogue_understanding.commands.command import Command
6
8
  from rasa.dialogue_understanding.patterns.repeat import (
7
9
  RepeatBotMessagesPatternFlowStackFrame,
8
10
  )
@@ -54,7 +56,17 @@ class RepeatBotMessagesCommand(Command):
54
56
  return hash(self.command())
55
57
 
56
58
  def __eq__(self, other: object) -> bool:
57
- if not isinstance(other, RepeatBotMessagesCommand):
58
- return False
59
+ return isinstance(other, RepeatBotMessagesCommand)
60
+
61
+ def to_dsl(self) -> str:
62
+ """Converts the command to a DSL string."""
63
+ return "RepeatLastBotMessages()"
64
+
65
+ @classmethod
66
+ def from_dsl(cls, match: re.Match, **kwargs: Any) -> RepeatBotMessagesCommand:
67
+ """Converts the DSL string to a command."""
68
+ return RepeatBotMessagesCommand()
59
69
 
60
- return True
70
+ @staticmethod
71
+ def regex_pattern() -> str:
72
+ return r"RepeatLastBotMessages\(\)"
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from dataclasses import dataclass
4
4
  from typing import Any, Dict, List
5
5
 
6
- from rasa.dialogue_understanding.commands import Command
6
+ from rasa.dialogue_understanding.commands.command import Command
7
7
  from rasa.dialogue_understanding.patterns.restart import RestartPatternFlowStackFrame
8
8
  from rasa.shared.core.events import Event
9
9
  from rasa.shared.core.flows import FlowsList
@@ -52,7 +52,4 @@ class RestartCommand(Command):
52
52
  return hash(self.command())
53
53
 
54
54
  def __eq__(self, other: object) -> bool:
55
- if not isinstance(other, RestartCommand):
56
- return False
57
-
58
- return True
55
+ return isinstance(other, RestartCommand)
@@ -2,7 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from typing import Any, Dict, List
5
- from rasa.dialogue_understanding.commands import Command
5
+
6
+ from rasa.dialogue_understanding.commands.command import Command
6
7
  from rasa.shared.core.events import Event, SessionEnded
7
8
  from rasa.shared.core.flows import FlowsList
8
9
  from rasa.shared.core.trackers import DialogueStateTracker
@@ -55,7 +56,4 @@ class SessionEndCommand(Command):
55
56
  return hash(self.command())
56
57
 
57
58
  def __eq__(self, other: object) -> bool:
58
- if not isinstance(other, SessionEndCommand):
59
- return False
60
-
61
- return True
59
+ return isinstance(other, SessionEndCommand)
@@ -2,7 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from typing import Any, Dict, List
5
- from rasa.dialogue_understanding.commands import Command
5
+
6
+ from rasa.dialogue_understanding.commands.command import Command
6
7
  from rasa.dialogue_understanding.patterns.session_start import (
7
8
  SessionStartPatternFlowStackFrame,
8
9
  )
@@ -53,7 +54,4 @@ class SessionStartCommand(Command):
53
54
  return hash(self.command())
54
55
 
55
56
  def __eq__(self, other: object) -> bool:
56
- if not isinstance(other, SessionStartCommand):
57
- return False
58
-
59
- return True
57
+ return isinstance(other, SessionStartCommand)
@@ -1,11 +1,17 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
3
4
  from dataclasses import dataclass
4
5
  from enum import Enum
5
6
  from typing import Any, Dict, List
6
7
 
7
8
  import structlog
8
- from rasa.dialogue_understanding.commands import Command
9
+
10
+ from rasa.dialogue_understanding.commands.command import Command
11
+ from rasa.dialogue_understanding.commands.utils import (
12
+ clean_extracted_value,
13
+ get_nullable_slot_value,
14
+ )
9
15
  from rasa.dialogue_understanding.patterns.collect_information import (
10
16
  CollectInformationPatternFlowStackFrame,
11
17
  )
@@ -44,8 +50,8 @@ def get_flows_predicted_to_start_from_tracker(
44
50
  The flows that are predicted to start from the current state.
45
51
  """
46
52
  from rasa.dialogue_understanding.processor.command_processor import (
47
- get_commands_from_tracker,
48
53
  filter_start_flow_commands,
54
+ get_commands_from_tracker,
49
55
  )
50
56
 
51
57
  commands = get_commands_from_tracker(tracker)
@@ -157,4 +163,22 @@ class SetSlotCommand(Command):
157
163
  if not isinstance(other, SetSlotCommand):
158
164
  return False
159
165
 
160
- return other.value == self.value and other.name == self.name
166
+ return (
167
+ str(other.value).lower() == str(self.value).lower()
168
+ and other.name == self.name
169
+ )
170
+
171
+ def to_dsl(self) -> str:
172
+ """Converts the command to a DSL string."""
173
+ return f"SetSlot({self.name}, {self.value})"
174
+
175
+ @classmethod
176
+ def from_dsl(cls, match: re.Match, **kwargs: Any) -> SetSlotCommand:
177
+ """Converts the DSL string to a command."""
178
+ slot_name = str(match.group(1).strip())
179
+ slot_value = clean_extracted_value(match.group(2))
180
+ return SetSlotCommand(name=slot_name, value=get_nullable_slot_value(slot_value))
181
+
182
+ @staticmethod
183
+ def regex_pattern() -> str:
184
+ return r"""SetSlot\(['"]?([a-zA-Z_][a-zA-Z0-9_-]*)['"]?, ?['"]?(.*)['"]?\)"""
@@ -1,10 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
3
4
  from dataclasses import dataclass
4
5
  from typing import Any, Dict, List
5
6
 
6
7
  import structlog
7
- from rasa.dialogue_understanding.commands import Command
8
+
9
+ from rasa.dialogue_understanding.commands.command import Command
8
10
  from rasa.dialogue_understanding.patterns.skip_question import (
9
11
  SkipQuestionPatternFlowStackFrame,
10
12
  )
@@ -69,7 +71,17 @@ class SkipQuestionCommand(Command):
69
71
  return hash(self.command())
70
72
 
71
73
  def __eq__(self, other: object) -> bool:
72
- if not isinstance(other, SkipQuestionCommand):
73
- return False
74
+ return isinstance(other, SkipQuestionCommand)
75
+
76
+ def to_dsl(self) -> str:
77
+ """Converts the command to a DSL string."""
78
+ return "SkipQuestion()"
79
+
80
+ @classmethod
81
+ def from_dsl(cls, match: re.Match, **kwargs: Any) -> SkipQuestionCommand:
82
+ """Converts the DSL string to a command."""
83
+ return SkipQuestionCommand()
74
84
 
75
- return True
85
+ @staticmethod
86
+ def regex_pattern() -> str:
87
+ return r"SkipQuestion\(\)"
@@ -1,10 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import re
3
4
  from dataclasses import dataclass
4
- from typing import Any, Dict, List
5
+ from typing import Any, Dict, List, Optional
5
6
 
6
7
  import structlog
7
- from rasa.dialogue_understanding.commands import Command
8
+
9
+ from rasa.dialogue_understanding.commands.command import Command
8
10
  from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
9
11
  FlowStackFrameType,
10
12
  UserFlowStackFrame,
@@ -105,3 +107,16 @@ class StartFlowCommand(Command):
105
107
  return False
106
108
 
107
109
  return other.flow == self.flow
110
+
111
+ def to_dsl(self) -> str:
112
+ """Converts the command to a DSL string."""
113
+ return f"StartFlow({self.flow})"
114
+
115
+ @classmethod
116
+ def from_dsl(cls, match: re.Match, **kwargs: Any) -> Optional[StartFlowCommand]:
117
+ """Converts the DSL string to a command."""
118
+ return StartFlowCommand(flow=str(match.group(1).strip()))
119
+
120
+ @staticmethod
121
+ def regex_pattern() -> str:
122
+ return r"StartFlow\(['\"]?([a-zA-Z0-9_-]+)['\"]?\)"
@@ -2,7 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from typing import Any, Dict, List
5
- from rasa.dialogue_understanding.commands import Command
5
+
6
+ from rasa.dialogue_understanding.commands.command import Command
6
7
  from rasa.dialogue_understanding.patterns.user_silence import (
7
8
  UserSilencePatternFlowStackFrame,
8
9
  )
@@ -53,7 +54,4 @@ class UserSilenceCommand(Command):
53
54
  return hash(self.command())
54
55
 
55
56
  def __eq__(self, other: object) -> bool:
56
- if not isinstance(other, UserSilenceCommand):
57
- return False
58
-
59
- return True
57
+ return isinstance(other, UserSilenceCommand)
@@ -1,45 +1,64 @@
1
- from typing import Dict, Type
2
-
3
- from rasa.dialogue_understanding.commands import (
4
- CancelFlowCommand,
5
- CannotHandleCommand,
6
- ChitChatAnswerCommand,
7
- Command,
8
- HumanHandoffCommand,
9
- KnowledgeAnswerCommand,
10
- SessionStartCommand,
11
- SkipQuestionCommand,
12
- RestartCommand,
13
- )
14
- from rasa.dialogue_understanding.commands.user_silence_command import UserSilenceCommand
15
- from rasa.dialogue_understanding.patterns.cancel import CancelPatternFlowStackFrame
16
- from rasa.dialogue_understanding.patterns.cannot_handle import (
17
- CannotHandlePatternFlowStackFrame,
18
- )
19
- from rasa.dialogue_understanding.patterns.chitchat import ChitchatPatternFlowStackFrame
20
- from rasa.dialogue_understanding.patterns.human_handoff import (
21
- HumanHandoffPatternFlowStackFrame,
22
- )
23
- from rasa.dialogue_understanding.patterns.restart import RestartPatternFlowStackFrame
24
- from rasa.dialogue_understanding.patterns.search import SearchPatternFlowStackFrame
25
- from rasa.dialogue_understanding.patterns.session_start import (
26
- SessionStartPatternFlowStackFrame,
27
- )
28
- from rasa.dialogue_understanding.patterns.skip_question import (
29
- SkipQuestionPatternFlowStackFrame,
30
- )
31
- from rasa.dialogue_understanding.patterns.user_silence import (
32
- UserSilencePatternFlowStackFrame,
33
- )
34
-
35
- triggerable_pattern_to_command_class: Dict[str, Type[Command]] = {
36
- SessionStartPatternFlowStackFrame.flow_id: SessionStartCommand,
37
- UserSilencePatternFlowStackFrame.flow_id: UserSilenceCommand,
38
- CancelPatternFlowStackFrame.flow_id: CancelFlowCommand,
39
- ChitchatPatternFlowStackFrame.flow_id: ChitChatAnswerCommand,
40
- HumanHandoffPatternFlowStackFrame.flow_id: HumanHandoffCommand,
41
- SearchPatternFlowStackFrame.flow_id: KnowledgeAnswerCommand,
42
- SkipQuestionPatternFlowStackFrame.flow_id: SkipQuestionCommand,
43
- CannotHandlePatternFlowStackFrame.flow_id: CannotHandleCommand,
44
- RestartPatternFlowStackFrame.flow_id: RestartCommand,
45
- }
1
+ from typing import TYPE_CHECKING, List, Optional, Union
2
+
3
+ import structlog
4
+
5
+ if TYPE_CHECKING:
6
+ from rasa.dialogue_understanding.commands import StartFlowCommand
7
+ from rasa.shared.core.flows import FlowsList
8
+
9
+ structlogger = structlog.get_logger()
10
+
11
+
12
+ def start_flow_by_name(
13
+ flow_name: str, flows: "FlowsList"
14
+ ) -> Optional["StartFlowCommand"]:
15
+ from rasa.dialogue_understanding.commands import StartFlowCommand
16
+
17
+ if flow_name in flows.user_flow_ids:
18
+ return StartFlowCommand(flow=flow_name)
19
+ else:
20
+ structlogger.debug(
21
+ "command_parser.start_flow_by_name.invalid_flow_id", flow=flow_name
22
+ )
23
+ return None
24
+
25
+
26
+ def extract_cleaned_options(options_str: str) -> List[str]:
27
+ """Extract and clean options from a string."""
28
+ return sorted(
29
+ opt.strip().strip('"').strip("'")
30
+ for opt in options_str.split(",")
31
+ if opt.strip()
32
+ )
33
+
34
+
35
+ def is_none_value(value: str) -> bool:
36
+ """Check if the value is a none value."""
37
+ if not value:
38
+ return True
39
+ return value in {
40
+ "[missing information]",
41
+ "[missing]",
42
+ "None",
43
+ "undefined",
44
+ "null",
45
+ }
46
+
47
+
48
+ def clean_extracted_value(value: str) -> str:
49
+ """Clean up the extracted value from the llm."""
50
+ # replace any combination of single quotes, double quotes, and spaces
51
+ # from the beginning and end of the string
52
+ return value.strip("'\" ")
53
+
54
+
55
+ def get_nullable_slot_value(slot_value: str) -> Union[str, None]:
56
+ """Get the slot value or None if the value is a none value.
57
+
58
+ Args:
59
+ slot_value: the value to coerce
60
+
61
+ Returns:
62
+ The slot value or None if the value is a none value.
63
+ """
64
+ return slot_value if not is_none_value(slot_value) else None
@@ -0,0 +1 @@
1
+ RASA_RECORD_COMMANDS_AND_PROMPTS_ENV_VAR_NAME = "RASA_RECORD_COMMANDS_AND_PROMPTS"
@@ -5,14 +5,14 @@ import structlog
5
5
 
6
6
  from rasa.dialogue_understanding.commands import (
7
7
  Command,
8
+ ErrorCommand,
8
9
  SetSlotCommand,
9
10
  StartFlowCommand,
10
- ErrorCommand,
11
11
  )
12
12
  from rasa.dialogue_understanding.commands.set_slot_command import SetSlotExtractor
13
13
  from rasa.shared.constants import (
14
- RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG,
15
14
  RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_EMPTY,
15
+ RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG,
16
16
  )
17
17
  from rasa.shared.core.constants import SlotMappingType
18
18
  from rasa.shared.core.domain import Domain
@@ -22,10 +22,6 @@ from rasa.shared.core.trackers import DialogueStateTracker
22
22
  from rasa.shared.nlu.constants import (
23
23
  COMMANDS,
24
24
  TEXT,
25
- PREDICTED_COMMANDS,
26
- PROMPTS,
27
- KEY_USER_PROMPT,
28
- KEY_SYSTEM_PROMPT,
29
25
  )
30
26
  from rasa.shared.nlu.training_data.message import Message
31
27
  from rasa.shared.utils.llm import DEFAULT_MAX_USER_INPUT_CHARACTERS
@@ -349,116 +345,3 @@ class CommandGenerator:
349
345
  ]
350
346
 
351
347
  return filtered_commands
352
-
353
- @staticmethod
354
- def _add_commands_to_message_parse_data(
355
- message: Message, component_name: str, commands: List[Command]
356
- ) -> None:
357
- """Add commands to the message parse data.
358
-
359
- Commands are only added in case the flag 'record_commands_and_prompts' is set.
360
- Example of predicted commands in the message parse data:
361
- Message(data={
362
- PREDICTED_COMMANDS: {
363
- "MultiStepLLMCommandGenerator": [
364
- {"command": "set_slot", "name": "slot_name", "value": "slot_value"},
365
- ],
366
- "NLUCommandAdapter": [
367
- {"command": "start_flow", "name": "test_flow"},
368
- ]
369
- }
370
- })
371
- """
372
- from rasa.dialogue_understanding.utils import record_commands_and_prompts
373
-
374
- # only set commands if the flag "record_commands_and_prompts" is set to True
375
- if not record_commands_and_prompts:
376
- return
377
-
378
- commands_as_dict = [command.as_dict() for command in commands]
379
-
380
- if message.get(PREDICTED_COMMANDS) is not None:
381
- predicted_commands = message.get(PREDICTED_COMMANDS)
382
- if component_name in predicted_commands:
383
- predicted_commands[component_name].extend(commands_as_dict)
384
- else:
385
- predicted_commands[component_name] = commands_as_dict
386
- else:
387
- predicted_commands = {component_name: commands_as_dict}
388
-
389
- message.set(
390
- PREDICTED_COMMANDS,
391
- predicted_commands,
392
- add_to_output=True,
393
- )
394
-
395
- @staticmethod
396
- def _add_prompt_to_message_parse_data(
397
- message: Message,
398
- component_name: str,
399
- prompt_name: str,
400
- user_prompt: str,
401
- system_prompt: Optional[str] = None,
402
- ) -> None:
403
- """Add prompt to the message parse data.
404
-
405
- Prompt is only added in case the flag 'record_commands_and_prompts' is set.
406
- Example of prompts in the message parse data:
407
- Message(data={
408
- PROMPTS: {
409
- "MultiStepLLMCommandGenerator": [
410
- (
411
- "fill_slots_prompt",
412
- {
413
- "user_prompt": <prompt content>",
414
- "system_prompt": <prompt content>"
415
- }
416
- ),
417
- (
418
- "handle_flows_prompt",
419
- {
420
- "user_prompt": <prompt content>",
421
- "system_prompt": <prompt content>"
422
- }
423
- ),
424
- ],
425
- "SingleStepLLMCommandGenerator": [
426
- (
427
- "prompt_template",
428
- {
429
- "user_prompt": <prompt content>",
430
- "system_prompt": <prompt content>"
431
- }
432
- ),
433
- ]
434
- }
435
- })
436
- """
437
- from rasa.dialogue_understanding.utils import record_commands_and_prompts
438
-
439
- # only set prompt if the flag "record_commands_and_prompts" is set to True
440
- if not record_commands_and_prompts:
441
- return
442
-
443
- prompt_tuple = (
444
- prompt_name,
445
- {
446
- KEY_USER_PROMPT: user_prompt,
447
- **({KEY_SYSTEM_PROMPT: system_prompt} if system_prompt else {}),
448
- },
449
- )
450
-
451
- if message.get(PROMPTS) is not None:
452
- prompts = message.get(PROMPTS)
453
- if component_name in prompts:
454
- prompts[component_name].append(prompt_tuple)
455
- else:
456
- prompts[component_name] = [prompt_tuple]
457
- else:
458
- prompts = {component_name: [prompt_tuple]}
459
-
460
- message.set(
461
- PROMPTS,
462
- prompts,
463
- add_to_output=True,
464
- )