rasa-pro 3.11.4__py3-none-any.whl → 3.12.0__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 (580) hide show
  1. README.md +10 -13
  2. rasa/__main__.py +7 -7
  3. rasa/anonymization/anonymisation_rule_yaml_reader.py +1 -1
  4. rasa/anonymization/anonymization_pipeline.py +3 -3
  5. rasa/anonymization/anonymization_rule_executor.py +17 -11
  6. rasa/anonymization/anonymization_rule_orchestrator.py +2 -3
  7. rasa/cli/arguments/data.py +2 -2
  8. rasa/cli/arguments/default_arguments.py +1 -1
  9. rasa/cli/arguments/evaluate.py +2 -1
  10. rasa/cli/arguments/interactive.py +1 -1
  11. rasa/cli/arguments/run.py +1 -1
  12. rasa/cli/arguments/test.py +7 -5
  13. rasa/cli/arguments/train.py +3 -3
  14. rasa/cli/arguments/visualize.py +2 -2
  15. rasa/cli/arguments/x.py +1 -0
  16. rasa/cli/data.py +20 -3
  17. rasa/cli/dialogue_understanding_test.py +386 -0
  18. rasa/cli/evaluate.py +1 -1
  19. rasa/cli/export.py +6 -6
  20. rasa/cli/inspect.py +20 -1
  21. rasa/cli/interactive.py +4 -5
  22. rasa/cli/llm_fine_tuning.py +51 -16
  23. rasa/cli/markers.py +1 -2
  24. rasa/cli/project_templates/calm/actions/add_contact.py +1 -1
  25. rasa/cli/project_templates/calm/config.yml +2 -2
  26. rasa/cli/project_templates/calm/domain/list_contacts.yml +1 -2
  27. rasa/cli/project_templates/calm/domain/remove_contact.yml +1 -2
  28. rasa/cli/project_templates/calm/domain/shared.yml +1 -4
  29. rasa/cli/project_templates/calm/endpoints.yml +2 -2
  30. rasa/cli/project_templates/tutorial/actions/actions.py +3 -2
  31. rasa/cli/shell.py +5 -6
  32. rasa/cli/studio/download.py +1 -2
  33. rasa/cli/studio/studio.py +2 -3
  34. rasa/cli/studio/train.py +0 -1
  35. rasa/cli/telemetry.py +2 -2
  36. rasa/cli/test.py +11 -11
  37. rasa/cli/train.py +3 -0
  38. rasa/cli/utils.py +25 -5
  39. rasa/constants.py +0 -1
  40. rasa/core/__init__.py +0 -1
  41. rasa/core/actions/action.py +137 -208
  42. rasa/core/actions/action_handle_digressions.py +164 -0
  43. rasa/core/actions/action_hangup.py +1 -1
  44. rasa/core/actions/action_repeat_bot_messages.py +2 -2
  45. rasa/core/actions/action_run_slot_rejections.py +18 -6
  46. rasa/core/actions/action_trigger_chitchat.py +1 -1
  47. rasa/core/actions/action_trigger_flow.py +5 -5
  48. rasa/core/actions/action_trigger_search.py +1 -1
  49. rasa/core/actions/custom_action_executor.py +1 -1
  50. rasa/core/actions/direct_custom_actions_executor.py +1 -0
  51. rasa/core/actions/forms.py +22 -15
  52. rasa/core/actions/http_custom_action_executor.py +8 -1
  53. rasa/core/actions/loops.py +3 -3
  54. rasa/core/actions/two_stage_fallback.py +13 -13
  55. rasa/core/auth_retry_tracker_store.py +1 -2
  56. rasa/core/brokers/broker.py +2 -1
  57. rasa/core/brokers/file.py +1 -1
  58. rasa/core/brokers/kafka.py +8 -8
  59. rasa/core/brokers/pika.py +8 -9
  60. rasa/core/brokers/sql.py +4 -3
  61. rasa/core/channels/__init__.py +7 -0
  62. rasa/core/channels/botframework.py +2 -2
  63. rasa/core/channels/callback.py +4 -4
  64. rasa/core/channels/channel.py +11 -11
  65. rasa/core/channels/console.py +0 -1
  66. rasa/core/channels/development_inspector.py +80 -24
  67. rasa/core/channels/facebook.py +5 -5
  68. rasa/core/channels/hangouts.py +7 -8
  69. rasa/core/channels/inspector/dist/assets/Tableau10-1b767f5e.js +1 -0
  70. rasa/core/channels/inspector/dist/assets/arc-9f1365dc.js +1 -0
  71. rasa/core/channels/inspector/dist/assets/blockDiagram-38ab4fdb-e0f81b12.js +118 -0
  72. rasa/core/channels/inspector/dist/assets/c4Diagram-3d4e48cf-9deaee1c.js +10 -0
  73. rasa/core/channels/inspector/dist/assets/channel-44956714.js +1 -0
  74. rasa/core/channels/inspector/dist/assets/classDiagram-70f12bd4-20450a96.js +2 -0
  75. rasa/core/channels/inspector/dist/assets/classDiagram-v2-f2320105-749d2abf.js +2 -0
  76. rasa/core/channels/inspector/dist/assets/clone-a9475142.js +1 -0
  77. rasa/core/channels/inspector/dist/assets/{createText-62fc7601-89c73b31.js → createText-2e5e7dd3-bef0b38c.js} +1 -1
  78. rasa/core/channels/inspector/dist/assets/edges-e0da2a9e-943801a7.js +4 -0
  79. rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-907e0440.js → erDiagram-9861fffd-d523a948.js} +4 -4
  80. rasa/core/channels/inspector/dist/assets/flowDb-956e92f1-54e4cf19.js +10 -0
  81. rasa/core/channels/inspector/dist/assets/flowDiagram-66a62f08-48bfbbe8.js +4 -0
  82. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-43fa749a.js +1 -0
  83. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-4a651766-17c30827.js +139 -0
  84. rasa/core/channels/inspector/dist/assets/ganttDiagram-c361ad54-43086f2d.js +257 -0
  85. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-72cf32ee-5c8b693e.js +70 -0
  86. rasa/core/channels/inspector/dist/assets/graph-41a90d26.js +1 -0
  87. rasa/core/channels/inspector/dist/assets/index-3862675e-b43eeae9.js +1 -0
  88. rasa/core/channels/inspector/dist/assets/{index-e793d777.js → index-e8affe45.js} +201 -196
  89. rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-8ceba4db.js → infoDiagram-f8f76790-0b20676b.js} +1 -1
  90. rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-960d3809.js → journeyDiagram-49397b02-39bce7b5.js} +4 -4
  91. rasa/core/channels/inspector/dist/assets/katex-498eb57e.js +261 -0
  92. rasa/core/channels/inspector/dist/assets/layout-dc8eeea4.js +1 -0
  93. rasa/core/channels/inspector/dist/assets/{line-eeccc4e2.js → line-c4d2e756.js} +1 -1
  94. rasa/core/channels/inspector/dist/assets/linear-86f6f2d9.js +1 -0
  95. rasa/core/channels/inspector/dist/assets/mindmap-definition-fc14e90a-4216f771.js +312 -0
  96. rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-dc9b5e1b.js → pieDiagram-8a3498a8-1a0cfa96.js} +7 -7
  97. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-a08cba6d.js → quadrantDiagram-120e2f19-f91e67cf.js} +1 -1
  98. rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-87242b9e.js → requirementDiagram-deff3bca-d4046bed.js} +2 -2
  99. rasa/core/channels/inspector/dist/assets/sankeyDiagram-04a897e0-2cf6d1d7.js +8 -0
  100. rasa/core/channels/inspector/dist/assets/sequenceDiagram-704730f1-751ac4f5.js +122 -0
  101. rasa/core/channels/inspector/dist/assets/stateDiagram-587899a1-f734f4d4.js +1 -0
  102. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-d93cdb3a-91c65710.js +1 -0
  103. rasa/core/channels/inspector/dist/assets/{styles-9c745c82-cef936a6.js → styles-6aaf32cf-e0cff7be.js} +1 -1
  104. rasa/core/channels/inspector/dist/assets/styles-9a916d00-c8029e5d.js +160 -0
  105. rasa/core/channels/inspector/dist/assets/styles-c10674c1-114f312a.js +116 -0
  106. rasa/core/channels/inspector/dist/assets/svgDrawCommon-08f97a94-b7b9dc00.js +1 -0
  107. rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-0d39bdb2.js → timeline-definition-85554ec2-9536d189.js} +3 -3
  108. rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-a03fa445.js → xychartDiagram-e933f94c-bf3b0f36.js} +3 -3
  109. rasa/core/channels/inspector/dist/index.html +1 -1
  110. rasa/core/channels/inspector/package.json +11 -3
  111. rasa/core/channels/inspector/src/App.tsx +15 -2
  112. rasa/core/channels/inspector/src/components/RasaLogo.tsx +31 -0
  113. rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +68 -0
  114. rasa/core/channels/inspector/src/components/Welcome.tsx +19 -13
  115. rasa/core/channels/inspector/yarn.lock +94 -99
  116. rasa/core/channels/mattermost.py +4 -4
  117. rasa/core/channels/rasa_chat.py +4 -4
  118. rasa/core/channels/rest.py +11 -12
  119. rasa/core/channels/rocketchat.py +4 -3
  120. rasa/core/channels/slack.py +6 -5
  121. rasa/core/channels/socketio.py +8 -28
  122. rasa/core/channels/studio_chat.py +212 -0
  123. rasa/core/channels/telegram.py +105 -55
  124. rasa/core/channels/twilio.py +3 -3
  125. rasa/core/channels/vier_cvg.py +2 -2
  126. rasa/core/channels/voice_ready/audiocodes.py +51 -32
  127. rasa/core/channels/voice_ready/jambonz.py +5 -5
  128. rasa/core/channels/voice_ready/jambonz_protocol.py +3 -4
  129. rasa/core/channels/voice_ready/twilio_voice.py +9 -8
  130. rasa/core/channels/voice_ready/utils.py +2 -2
  131. rasa/core/channels/voice_stream/asr/asr_engine.py +12 -6
  132. rasa/core/channels/voice_stream/asr/asr_event.py +5 -0
  133. rasa/core/channels/voice_stream/asr/azure.py +16 -3
  134. rasa/core/channels/voice_stream/asr/deepgram.py +76 -19
  135. rasa/core/channels/voice_stream/audiocodes.py +292 -0
  136. rasa/core/channels/voice_stream/browser_audio.py +14 -7
  137. rasa/core/channels/voice_stream/call_state.py +6 -2
  138. rasa/core/channels/voice_stream/genesys.py +320 -0
  139. rasa/core/channels/voice_stream/tts/azure.py +13 -5
  140. rasa/core/channels/voice_stream/tts/cartesia.py +34 -14
  141. rasa/core/channels/voice_stream/tts/tts_cache.py +3 -2
  142. rasa/core/channels/voice_stream/tts/tts_engine.py +1 -1
  143. rasa/core/channels/voice_stream/twilio_media_streams.py +12 -8
  144. rasa/core/channels/voice_stream/util.py +1 -1
  145. rasa/core/channels/voice_stream/voice_channel.py +100 -56
  146. rasa/core/channels/webexteams.py +3 -4
  147. rasa/core/constants.py +2 -0
  148. rasa/core/evaluation/marker.py +7 -6
  149. rasa/core/evaluation/marker_base.py +15 -16
  150. rasa/core/evaluation/marker_stats.py +3 -4
  151. rasa/core/evaluation/marker_tracker_loader.py +5 -4
  152. rasa/core/exporter.py +4 -4
  153. rasa/core/featurizers/precomputation.py +8 -8
  154. rasa/core/featurizers/single_state_featurizer.py +7 -7
  155. rasa/core/featurizers/tracker_featurizers.py +13 -13
  156. rasa/core/http_interpreter.py +3 -4
  157. rasa/core/information_retrieval/__init__.py +1 -1
  158. rasa/core/information_retrieval/faiss.py +4 -4
  159. rasa/core/information_retrieval/information_retrieval.py +2 -2
  160. rasa/core/information_retrieval/milvus.py +3 -3
  161. rasa/core/information_retrieval/qdrant.py +3 -3
  162. rasa/core/jobs.py +1 -0
  163. rasa/core/lock.py +2 -3
  164. rasa/core/lock_store.py +3 -3
  165. rasa/core/migrate.py +12 -9
  166. rasa/core/nlg/__init__.py +1 -1
  167. rasa/core/nlg/callback.py +2 -3
  168. rasa/core/nlg/contextual_response_rephraser.py +82 -14
  169. rasa/core/nlg/generator.py +85 -17
  170. rasa/core/nlg/interpolator.py +4 -3
  171. rasa/core/nlg/response.py +9 -7
  172. rasa/core/nlg/summarize.py +1 -0
  173. rasa/core/nlg/translate.py +55 -0
  174. rasa/core/persistor.py +3 -3
  175. rasa/core/policies/ensemble.py +10 -9
  176. rasa/core/policies/enterprise_search_policy.py +87 -21
  177. rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +1 -1
  178. rasa/core/policies/flow_policy.py +13 -14
  179. rasa/core/policies/flows/flow_executor.py +85 -55
  180. rasa/core/policies/intentless_policy.py +6 -7
  181. rasa/core/policies/memoization.py +22 -20
  182. rasa/core/policies/policy.py +24 -22
  183. rasa/core/policies/rule_policy.py +37 -36
  184. rasa/core/policies/ted_policy.py +87 -85
  185. rasa/core/policies/unexpected_intent_policy.py +77 -75
  186. rasa/core/processor.py +167 -74
  187. rasa/core/run.py +5 -4
  188. rasa/core/secrets_manager/endpoints.py +2 -3
  189. rasa/core/secrets_manager/factory.py +2 -3
  190. rasa/core/secrets_manager/secret_manager.py +2 -3
  191. rasa/core/secrets_manager/vault.py +2 -2
  192. rasa/core/test.py +30 -30
  193. rasa/core/tracker_store.py +138 -49
  194. rasa/core/train.py +1 -1
  195. rasa/core/training/__init__.py +2 -2
  196. rasa/core/training/converters/responses_prefix_converter.py +1 -2
  197. rasa/core/training/interactive.py +13 -13
  198. rasa/core/training/story_conflict.py +4 -5
  199. rasa/core/training/training.py +3 -5
  200. rasa/core/utils.py +5 -5
  201. rasa/core/visualize.py +1 -1
  202. rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -2
  203. rasa/dialogue_understanding/coexistence/llm_based_router.py +5 -5
  204. rasa/dialogue_understanding/commands/__init__.py +22 -22
  205. rasa/dialogue_understanding/commands/can_not_handle_command.py +38 -1
  206. rasa/dialogue_understanding/commands/cancel_flow_command.py +96 -9
  207. rasa/dialogue_understanding/commands/change_flow_command.py +36 -2
  208. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +36 -4
  209. rasa/dialogue_understanding/commands/clarify_command.py +46 -4
  210. rasa/dialogue_understanding/commands/command.py +3 -2
  211. rasa/dialogue_understanding/commands/command_syntax_manager.py +55 -0
  212. rasa/dialogue_understanding/commands/correct_slots_command.py +14 -5
  213. rasa/dialogue_understanding/commands/error_command.py +1 -1
  214. rasa/dialogue_understanding/commands/free_form_answer_command.py +2 -1
  215. rasa/dialogue_understanding/commands/handle_code_change_command.py +2 -2
  216. rasa/dialogue_understanding/commands/handle_digressions_command.py +144 -0
  217. rasa/dialogue_understanding/commands/human_handoff_command.py +34 -4
  218. rasa/dialogue_understanding/commands/knowledge_answer_command.py +36 -4
  219. rasa/dialogue_understanding/commands/noop_command.py +2 -1
  220. rasa/dialogue_understanding/commands/prompt_command.py +94 -0
  221. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +34 -4
  222. rasa/dialogue_understanding/commands/restart_command.py +2 -5
  223. rasa/dialogue_understanding/commands/session_end_command.py +3 -5
  224. rasa/dialogue_understanding/commands/session_start_command.py +3 -5
  225. rasa/dialogue_understanding/commands/set_slot_command.py +55 -16
  226. rasa/dialogue_understanding/commands/skip_question_command.py +34 -4
  227. rasa/dialogue_understanding/commands/start_flow_command.py +78 -2
  228. rasa/dialogue_understanding/commands/user_silence_command.py +3 -5
  229. rasa/dialogue_understanding/commands/utils.py +126 -43
  230. rasa/dialogue_understanding/constants.py +2 -0
  231. rasa/dialogue_understanding/generator/__init__.py +2 -0
  232. rasa/dialogue_understanding/generator/command_generator.py +120 -79
  233. rasa/dialogue_understanding/generator/command_parser.py +245 -0
  234. rasa/dialogue_understanding/generator/constants.py +12 -4
  235. rasa/dialogue_understanding/generator/flow_retrieval.py +7 -7
  236. rasa/dialogue_understanding/generator/llm_based_command_generator.py +187 -59
  237. rasa/dialogue_understanding/generator/llm_command_generator.py +6 -3
  238. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +106 -110
  239. rasa/dialogue_understanding/generator/nlu_command_adapter.py +53 -11
  240. rasa/dialogue_understanding/generator/prompt_templates/__init__.py +0 -0
  241. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +58 -0
  242. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +57 -0
  243. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +574 -0
  244. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +41 -386
  245. rasa/dialogue_understanding/generator/utils.py +76 -0
  246. rasa/dialogue_understanding/patterns/cancel.py +2 -1
  247. rasa/dialogue_understanding/patterns/cannot_handle.py +1 -0
  248. rasa/dialogue_understanding/patterns/chitchat.py +1 -1
  249. rasa/dialogue_understanding/patterns/clarify.py +2 -1
  250. rasa/dialogue_understanding/patterns/code_change.py +2 -0
  251. rasa/dialogue_understanding/patterns/collect_information.py +7 -4
  252. rasa/dialogue_understanding/patterns/completed.py +1 -1
  253. rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -1
  254. rasa/dialogue_understanding/patterns/correction.py +17 -3
  255. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +78 -2
  256. rasa/dialogue_understanding/patterns/handle_digressions.py +81 -0
  257. rasa/dialogue_understanding/patterns/human_handoff.py +1 -1
  258. rasa/dialogue_understanding/patterns/internal_error.py +1 -0
  259. rasa/dialogue_understanding/patterns/search.py +1 -1
  260. rasa/dialogue_understanding/patterns/session_start.py +1 -1
  261. rasa/dialogue_understanding/patterns/skip_question.py +1 -0
  262. rasa/dialogue_understanding/patterns/user_silence.py +1 -1
  263. rasa/dialogue_understanding/patterns/validate_slot.py +65 -0
  264. rasa/dialogue_understanding/processor/command_processor.py +193 -43
  265. rasa/dialogue_understanding/processor/command_processor_component.py +1 -1
  266. rasa/dialogue_understanding/stack/dialogue_stack.py +4 -3
  267. rasa/dialogue_understanding/stack/frames/__init__.py +2 -2
  268. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +4 -1
  269. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +2 -3
  270. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +5 -2
  271. rasa/dialogue_understanding/stack/frames/search_frame.py +4 -1
  272. rasa/dialogue_understanding/stack/utils.py +56 -10
  273. rasa/dialogue_understanding/utils.py +164 -0
  274. rasa/dialogue_understanding_test/README.md +429 -0
  275. rasa/dialogue_understanding_test/__init__.py +0 -0
  276. rasa/dialogue_understanding_test/command_comparison.py +60 -0
  277. rasa/dialogue_understanding_test/command_metric_calculation.py +122 -0
  278. rasa/dialogue_understanding_test/constants.py +22 -0
  279. rasa/dialogue_understanding_test/du_test_case.py +448 -0
  280. rasa/dialogue_understanding_test/du_test_result.py +390 -0
  281. rasa/dialogue_understanding_test/du_test_runner.py +322 -0
  282. rasa/dialogue_understanding_test/du_test_schema.yml +161 -0
  283. rasa/dialogue_understanding_test/io.py +443 -0
  284. rasa/dialogue_understanding_test/test_case_simulation/__init__.py +0 -0
  285. rasa/dialogue_understanding_test/test_case_simulation/exception.py +28 -0
  286. rasa/dialogue_understanding_test/test_case_simulation/test_case_tracker_simulator.py +336 -0
  287. rasa/dialogue_understanding_test/utils.py +70 -0
  288. rasa/dialogue_understanding_test/validation.py +77 -0
  289. rasa/e2e_test/aggregate_test_stats_calculator.py +1 -1
  290. rasa/e2e_test/assertions.py +202 -175
  291. rasa/e2e_test/assertions_schema.yml +6 -0
  292. rasa/e2e_test/constants.py +16 -1
  293. rasa/e2e_test/e2e_config.py +102 -41
  294. rasa/e2e_test/e2e_config_schema.yml +28 -10
  295. rasa/e2e_test/e2e_test_case.py +5 -5
  296. rasa/e2e_test/e2e_test_converter.py +2 -3
  297. rasa/e2e_test/e2e_test_coverage_report.py +6 -6
  298. rasa/e2e_test/e2e_test_result.py +1 -1
  299. rasa/e2e_test/e2e_test_runner.py +143 -38
  300. rasa/e2e_test/llm_judge_prompts/answer_relevance_prompt_template.jinja2 +93 -0
  301. rasa/e2e_test/llm_judge_prompts/groundedness_prompt_template.jinja2 +169 -0
  302. rasa/e2e_test/stub_custom_action.py +1 -1
  303. rasa/e2e_test/utils/generative_assertions.py +243 -0
  304. rasa/e2e_test/utils/io.py +123 -93
  305. rasa/e2e_test/utils/validation.py +101 -3
  306. rasa/engine/caching.py +5 -7
  307. rasa/engine/constants.py +1 -1
  308. rasa/engine/graph.py +3 -2
  309. rasa/engine/language.py +182 -0
  310. rasa/engine/recipes/config_files/default_config.yml +4 -0
  311. rasa/engine/recipes/default_components.py +13 -15
  312. rasa/engine/recipes/default_recipe.py +65 -49
  313. rasa/engine/recipes/graph_recipe.py +10 -7
  314. rasa/engine/recipes/recipe.py +2 -2
  315. rasa/engine/runner/dask.py +2 -2
  316. rasa/engine/runner/interface.py +1 -0
  317. rasa/engine/storage/local_model_storage.py +6 -4
  318. rasa/engine/storage/resource.py +2 -1
  319. rasa/engine/storage/storage.py +8 -3
  320. rasa/engine/training/components.py +2 -1
  321. rasa/engine/training/fingerprinting.py +4 -2
  322. rasa/engine/training/graph_trainer.py +4 -4
  323. rasa/engine/training/hooks.py +2 -2
  324. rasa/engine/validation.py +36 -33
  325. rasa/exceptions.py +3 -2
  326. rasa/graph_components/converters/nlu_message_converter.py +3 -3
  327. rasa/graph_components/providers/domain_for_core_training_provider.py +3 -3
  328. rasa/graph_components/providers/domain_provider.py +3 -2
  329. rasa/graph_components/providers/flows_provider.py +2 -3
  330. rasa/graph_components/providers/forms_provider.py +4 -4
  331. rasa/graph_components/providers/nlu_training_data_provider.py +5 -3
  332. rasa/graph_components/providers/responses_provider.py +4 -4
  333. rasa/graph_components/providers/rule_only_provider.py +3 -2
  334. rasa/graph_components/providers/story_graph_provider.py +8 -8
  335. rasa/graph_components/providers/training_tracker_provider.py +3 -2
  336. rasa/graph_components/validators/default_recipe_validator.py +16 -16
  337. rasa/graph_components/validators/finetuning_validator.py +10 -8
  338. rasa/hooks.py +19 -14
  339. rasa/jupyter.py +2 -2
  340. rasa/llm_fine_tuning/annotation_module.py +4 -4
  341. rasa/llm_fine_tuning/conversations.py +5 -33
  342. rasa/llm_fine_tuning/llm_data_preparation_module.py +6 -4
  343. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -4
  344. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +18 -13
  345. rasa/llm_fine_tuning/paraphrasing_module.py +6 -2
  346. rasa/llm_fine_tuning/storage.py +3 -3
  347. rasa/llm_fine_tuning/train_test_split_module.py +27 -27
  348. rasa/llm_fine_tuning/utils.py +7 -0
  349. rasa/markers/marker.py +2 -3
  350. rasa/markers/marker_base.py +1 -2
  351. rasa/markers/upload.py +2 -2
  352. rasa/markers/validate.py +2 -3
  353. rasa/model.py +3 -5
  354. rasa/model_manager/config.py +1 -1
  355. rasa/model_manager/model_api.py +5 -4
  356. rasa/model_manager/runner_service.py +13 -10
  357. rasa/model_manager/socket_bridge.py +15 -9
  358. rasa/model_manager/studio_jwt_auth.py +1 -0
  359. rasa/model_manager/trainer_service.py +9 -7
  360. rasa/model_manager/utils.py +1 -1
  361. rasa/model_manager/warm_rasa_process.py +14 -9
  362. rasa/model_service.py +5 -6
  363. rasa/model_testing.py +13 -15
  364. rasa/model_training.py +29 -29
  365. rasa/nlu/classifiers/diet_classifier.py +72 -73
  366. rasa/nlu/classifiers/fallback_classifier.py +9 -8
  367. rasa/nlu/classifiers/keyword_intent_classifier.py +7 -6
  368. rasa/nlu/classifiers/logistic_regression_classifier.py +3 -3
  369. rasa/nlu/classifiers/mitie_intent_classifier.py +5 -4
  370. rasa/nlu/classifiers/regex_message_handler.py +3 -2
  371. rasa/nlu/classifiers/sklearn_intent_classifier.py +2 -2
  372. rasa/nlu/convert.py +2 -2
  373. rasa/nlu/emulators/dialogflow.py +3 -3
  374. rasa/nlu/emulators/luis.py +5 -5
  375. rasa/nlu/emulators/no_emulator.py +1 -0
  376. rasa/nlu/emulators/wit.py +4 -4
  377. rasa/nlu/extractors/crf_entity_extractor.py +11 -11
  378. rasa/nlu/extractors/duckling_entity_extractor.py +7 -6
  379. rasa/nlu/extractors/entity_synonyms.py +10 -9
  380. rasa/nlu/extractors/extractor.py +16 -16
  381. rasa/nlu/extractors/mitie_entity_extractor.py +10 -9
  382. rasa/nlu/extractors/regex_entity_extractor.py +11 -10
  383. rasa/nlu/extractors/spacy_entity_extractor.py +2 -2
  384. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +15 -14
  385. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +2 -1
  386. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +10 -9
  387. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +9 -7
  388. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +13 -12
  389. rasa/nlu/featurizers/featurizer.py +5 -4
  390. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +6 -6
  391. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -4
  392. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +4 -4
  393. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +2 -0
  394. rasa/nlu/model.py +0 -1
  395. rasa/nlu/selectors/response_selector.py +67 -68
  396. rasa/nlu/test.py +38 -38
  397. rasa/nlu/tokenizers/jieba_tokenizer.py +1 -2
  398. rasa/nlu/tokenizers/mitie_tokenizer.py +2 -2
  399. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -3
  400. rasa/nlu/tokenizers/tokenizer.py +6 -7
  401. rasa/nlu/tokenizers/whitespace_tokenizer.py +1 -1
  402. rasa/nlu/utils/bilou_utils.py +7 -7
  403. rasa/nlu/utils/hugging_face/registry.py +22 -22
  404. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +2 -1
  405. rasa/nlu/utils/mitie_utils.py +2 -1
  406. rasa/nlu/utils/pattern_utils.py +1 -1
  407. rasa/nlu/utils/spacy_utils.py +3 -3
  408. rasa/plugin.py +12 -1
  409. rasa/server.py +6 -3
  410. rasa/shared/constants.py +45 -18
  411. rasa/shared/core/command_payload_reader.py +15 -7
  412. rasa/shared/core/constants.py +34 -4
  413. rasa/shared/core/conversation.py +1 -2
  414. rasa/shared/core/domain.py +19 -20
  415. rasa/shared/core/events.py +60 -39
  416. rasa/shared/core/flows/__init__.py +0 -1
  417. rasa/shared/core/flows/constants.py +11 -0
  418. rasa/shared/core/flows/flow.py +107 -26
  419. rasa/shared/core/flows/flow_step.py +4 -3
  420. rasa/shared/core/flows/flow_step_links.py +1 -2
  421. rasa/shared/core/flows/flow_step_sequence.py +1 -1
  422. rasa/shared/core/flows/flows_list.py +3 -3
  423. rasa/shared/core/flows/flows_yaml_schema.json +69 -3
  424. rasa/shared/core/flows/nlu_trigger.py +1 -1
  425. rasa/shared/core/flows/steps/__init__.py +2 -2
  426. rasa/shared/core/flows/steps/action.py +1 -1
  427. rasa/shared/core/flows/steps/call.py +1 -1
  428. rasa/shared/core/flows/steps/collect.py +22 -40
  429. rasa/shared/core/flows/steps/internal.py +1 -1
  430. rasa/shared/core/flows/steps/link.py +1 -1
  431. rasa/shared/core/flows/steps/no_operation.py +2 -2
  432. rasa/shared/core/flows/steps/set_slots.py +1 -1
  433. rasa/shared/core/flows/utils.py +44 -4
  434. rasa/shared/core/flows/validation.py +4 -6
  435. rasa/shared/core/generator.py +20 -21
  436. rasa/shared/core/slot_mappings.py +360 -121
  437. rasa/shared/core/slots.py +163 -6
  438. rasa/shared/core/trackers.py +108 -33
  439. rasa/shared/core/training_data/loading.py +1 -1
  440. rasa/shared/core/training_data/story_reader/story_reader.py +3 -3
  441. rasa/shared/core/training_data/story_reader/story_step_builder.py +4 -4
  442. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +29 -31
  443. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +22 -24
  444. rasa/shared/core/training_data/structures.py +11 -12
  445. rasa/shared/core/training_data/visualization.py +10 -10
  446. rasa/shared/data.py +6 -6
  447. rasa/shared/engine/caching.py +0 -1
  448. rasa/shared/exceptions.py +2 -2
  449. rasa/shared/importers/importer.py +58 -2
  450. rasa/shared/importers/rasa.py +5 -6
  451. rasa/shared/importers/utils.py +1 -1
  452. rasa/shared/nlu/constants.py +9 -0
  453. rasa/shared/nlu/training_data/entities_parser.py +6 -6
  454. rasa/shared/nlu/training_data/features.py +3 -3
  455. rasa/shared/nlu/training_data/formats/__init__.py +1 -1
  456. rasa/shared/nlu/training_data/formats/dialogflow.py +4 -5
  457. rasa/shared/nlu/training_data/formats/luis.py +7 -8
  458. rasa/shared/nlu/training_data/formats/rasa.py +4 -5
  459. rasa/shared/nlu/training_data/formats/rasa_yaml.py +17 -16
  460. rasa/shared/nlu/training_data/formats/readerwriter.py +8 -11
  461. rasa/shared/nlu/training_data/formats/wit.py +3 -4
  462. rasa/shared/nlu/training_data/loading.py +4 -4
  463. rasa/shared/nlu/training_data/lookup_tables_parser.py +1 -1
  464. rasa/shared/nlu/training_data/message.py +13 -14
  465. rasa/shared/nlu/training_data/schemas/data_schema.py +1 -1
  466. rasa/shared/nlu/training_data/schemas/responses.yml +19 -11
  467. rasa/shared/nlu/training_data/synonyms_parser.py +3 -3
  468. rasa/shared/nlu/training_data/training_data.py +12 -13
  469. rasa/shared/nlu/training_data/util.py +11 -10
  470. rasa/shared/providers/_configs/azure_entra_id_config.py +541 -0
  471. rasa/shared/providers/_configs/azure_openai_client_config.py +150 -15
  472. rasa/shared/providers/_configs/client_config.py +3 -1
  473. rasa/shared/providers/_configs/default_litellm_client_config.py +9 -7
  474. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +13 -11
  475. rasa/shared/providers/_configs/litellm_router_client_config.py +12 -10
  476. rasa/shared/providers/_configs/model_group_config.py +8 -5
  477. rasa/shared/providers/_configs/oauth_config.py +33 -0
  478. rasa/shared/providers/_configs/openai_client_config.py +14 -12
  479. rasa/shared/providers/_configs/rasa_llm_client_config.py +5 -3
  480. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +12 -11
  481. rasa/shared/providers/_configs/utils.py +1 -0
  482. rasa/shared/providers/_ssl_verification_utils.py +5 -6
  483. rasa/shared/providers/_utils.py +5 -5
  484. rasa/shared/providers/constants.py +6 -0
  485. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +1 -1
  486. rasa/shared/providers/embedding/azure_openai_embedding_client.py +32 -7
  487. rasa/shared/providers/embedding/embedding_client.py +1 -1
  488. rasa/shared/providers/embedding/litellm_router_embedding_client.py +5 -2
  489. rasa/shared/providers/llm/_base_litellm_client.py +43 -18
  490. rasa/shared/providers/llm/azure_openai_llm_client.py +90 -34
  491. rasa/shared/providers/llm/default_litellm_llm_client.py +4 -2
  492. rasa/shared/providers/llm/litellm_router_llm_client.py +32 -9
  493. rasa/shared/providers/llm/llm_client.py +24 -8
  494. rasa/shared/providers/llm/llm_response.py +61 -2
  495. rasa/shared/providers/llm/openai_llm_client.py +11 -5
  496. rasa/shared/providers/llm/rasa_llm_client.py +17 -14
  497. rasa/shared/providers/llm/self_hosted_llm_client.py +35 -15
  498. rasa/shared/providers/mappings.py +18 -19
  499. rasa/shared/providers/router/_base_litellm_router_client.py +48 -15
  500. rasa/shared/providers/router/router_client.py +3 -1
  501. rasa/shared/utils/cli.py +1 -1
  502. rasa/shared/utils/common.py +15 -1
  503. rasa/shared/utils/constants.py +3 -0
  504. rasa/shared/utils/health_check/embeddings_health_check_mixin.py +1 -1
  505. rasa/shared/utils/health_check/health_check.py +3 -3
  506. rasa/shared/utils/health_check/llm_health_check_mixin.py +1 -1
  507. rasa/shared/utils/io.py +1 -1
  508. rasa/shared/utils/llm.py +100 -18
  509. rasa/shared/utils/pykwalify_extensions.py +25 -1
  510. rasa/shared/utils/schemas/domain.yml +26 -1
  511. rasa/shared/utils/schemas/events.py +1 -1
  512. rasa/shared/utils/yaml.py +24 -20
  513. rasa/studio/auth.py +3 -3
  514. rasa/studio/config.py +1 -2
  515. rasa/studio/data_handler.py +3 -3
  516. rasa/studio/download.py +1 -1
  517. rasa/studio/results_logger.py +3 -3
  518. rasa/studio/upload.py +21 -5
  519. rasa/telemetry.py +127 -48
  520. rasa/tracing/config.py +5 -3
  521. rasa/tracing/constants.py +12 -0
  522. rasa/tracing/instrumentation/attribute_extractors.py +92 -14
  523. rasa/tracing/instrumentation/instrumentation.py +61 -5
  524. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -1
  525. rasa/tracing/instrumentation/metrics.py +52 -11
  526. rasa/tracing/metric_instrument_provider.py +54 -14
  527. rasa/utils/common.py +12 -24
  528. rasa/utils/endpoints.py +1 -1
  529. rasa/utils/io.py +7 -7
  530. rasa/utils/licensing.py +3 -4
  531. rasa/utils/log_utils.py +7 -6
  532. rasa/utils/ml_utils.py +1 -0
  533. rasa/utils/plotting.py +3 -3
  534. rasa/utils/sanic_error_handler.py +1 -1
  535. rasa/utils/tensorflow/callback.py +2 -2
  536. rasa/utils/tensorflow/crf.py +2 -2
  537. rasa/utils/tensorflow/data_generator.py +5 -5
  538. rasa/utils/tensorflow/environment.py +3 -3
  539. rasa/utils/tensorflow/feature_array.py +2 -3
  540. rasa/utils/tensorflow/layers.py +18 -12
  541. rasa/utils/tensorflow/layers_utils.py +2 -1
  542. rasa/utils/tensorflow/metrics.py +2 -2
  543. rasa/utils/tensorflow/model_data.py +7 -7
  544. rasa/utils/tensorflow/model_data_utils.py +10 -9
  545. rasa/utils/tensorflow/models.py +31 -32
  546. rasa/utils/tensorflow/rasa_layers.py +20 -19
  547. rasa/utils/tensorflow/types.py +2 -1
  548. rasa/utils/train_utils.py +23 -21
  549. rasa/utils/url_tools.py +1 -1
  550. rasa/validator.py +594 -115
  551. rasa/version.py +1 -1
  552. {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/METADATA +23 -26
  553. rasa_pro-3.12.0.dist-info/RECORD +829 -0
  554. rasa/core/channels/inspector/dist/assets/arc-632a63ec.js +0 -1
  555. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-081e0df4.js +0 -10
  556. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-3df0afc2.js +0 -2
  557. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-8c5ed31e.js +0 -2
  558. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-4fc48c3e.js +0 -4
  559. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-9ec53a3c.js +0 -6
  560. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-41da787a.js +0 -4
  561. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-8bea338b.js +0 -1
  562. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-ce370633.js +0 -139
  563. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-90a36523.js +0 -266
  564. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-41e1aa3f.js +0 -70
  565. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-e6f2af62.js +0 -1
  566. rasa/core/channels/inspector/dist/assets/layout-498807d8.js +0 -1
  567. rasa/core/channels/inspector/dist/assets/linear-8a078617.js +0 -1
  568. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-396d17dd.js +0 -109
  569. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-53f6f391.js +0 -8
  570. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-715c9c20.js +0 -122
  571. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-2e8fb31f.js +0 -1
  572. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-7e2d2aa0.js +0 -1
  573. rasa/core/channels/inspector/dist/assets/styles-080da4f6-4420cea6.js +0 -110
  574. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-28676cf4.js +0 -159
  575. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-151251e9.js +0 -1
  576. rasa_pro-3.11.4.dist-info/RECORD +0 -779
  577. /rasa/dialogue_understanding/generator/{single_step → prompt_templates}/command_prompt_template.jinja2 +0 -0
  578. {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/NOTICE +0 -0
  579. {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/WHEEL +0 -0
  580. {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/entry_points.txt +0 -0
rasa/core/processor.py CHANGED
@@ -1,62 +1,84 @@
1
- import inspect
2
1
  import copy
2
+ import inspect
3
3
  import logging
4
- import structlog
5
4
  import os
6
5
  import re
7
- from pathlib import Path
8
6
  import tarfile
9
7
  import time
8
+ from pathlib import Path
10
9
  from types import LambdaType
11
- from typing import Any, Dict, List, Optional, TYPE_CHECKING, Text, Tuple, Union
10
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, Union
11
+
12
+ import structlog
13
+
14
+ import rasa.core.actions.action
15
+ import rasa.core.tracker_store
16
+ import rasa.core.utils
17
+ import rasa.shared.core.trackers
18
+ import rasa.shared.utils.io
19
+ from rasa.core import jobs
20
+ from rasa.core.actions.action import Action
12
21
  from rasa.core.actions.action_exceptions import ActionExecutionRejection
13
22
  from rasa.core.actions.forms import FormAction
23
+ from rasa.core.channels.channel import (
24
+ CollectingOutputChannel,
25
+ OutputChannel,
26
+ UserMessage,
27
+ )
28
+ from rasa.core.constants import KEY_IS_CALM_SYSTEM, KEY_IS_COEXISTENCE_ASSISTANT
14
29
  from rasa.core.http_interpreter import RasaNLUHttpInterpreter
30
+ from rasa.core.lock_store import LockStore
31
+ from rasa.core.nlg import NaturalLanguageGenerator
32
+ from rasa.core.policies.policy import PolicyPrediction
15
33
  from rasa.dialogue_understanding.commands import (
34
+ CannotHandleCommand,
16
35
  Command,
17
36
  NoopCommand,
18
37
  SetSlotCommand,
19
- CannotHandleCommand,
20
38
  )
39
+ from rasa.dialogue_understanding.commands.utils import (
40
+ create_validate_frames_from_slot_set_events,
41
+ )
42
+ from rasa.dialogue_understanding.patterns.validate_slot import (
43
+ ValidateSlotPatternFlowStackFrame,
44
+ )
45
+ from rasa.dialogue_understanding.utils import add_commands_to_message_parse_data
21
46
  from rasa.engine import loader
22
47
  from rasa.engine.constants import (
48
+ PLACEHOLDER_ENDPOINTS,
23
49
  PLACEHOLDER_MESSAGE,
24
50
  PLACEHOLDER_TRACKER,
25
- PLACEHOLDER_ENDPOINTS,
26
51
  )
27
52
  from rasa.engine.runner.dask import DaskGraphRunner
53
+ from rasa.engine.runner.interface import GraphRunner
28
54
  from rasa.engine.storage.local_model_storage import LocalModelStorage
29
55
  from rasa.engine.storage.storage import ModelMetadata
56
+ from rasa.exceptions import ActionLimitReached, ModelNotFound
30
57
  from rasa.model import get_latest_model
31
58
  from rasa.plugin import plugin_manager
32
- from rasa.shared.core.flows import FlowsList
33
- from rasa.shared.data import TrainingType, create_regex_pattern_reader
34
- import rasa.shared.utils.io
35
- import rasa.core.actions.action
36
- from rasa.core import jobs
37
- from rasa.core.actions.action import Action
38
- from rasa.core.channels.channel import (
39
- CollectingOutputChannel,
40
- OutputChannel,
41
- UserMessage,
59
+ from rasa.shared.constants import (
60
+ ASSISTANT_ID_KEY,
61
+ DEFAULT_SENDER_ID,
62
+ DOCS_URL_DOMAINS,
63
+ DOCS_URL_NLU_BASED_POLICIES,
64
+ RASA_PATTERN_CANNOT_HANDLE_INVALID_INTENT,
65
+ ROUTE_TO_CALM_SLOT,
66
+ UTTER_PREFIX,
42
67
  )
43
- import rasa.core.utils
44
- from rasa.core.policies.policy import PolicyPrediction
45
- from rasa.engine.runner.interface import GraphRunner
46
- from rasa.exceptions import ActionLimitReached, ModelNotFound
47
68
  from rasa.shared.core.constants import (
48
69
  ACTION_CORRECT_FLOW_SLOT,
49
- SLOT_CONSECUTIVE_SILENCE_TIMEOUTS,
50
- SLOT_SILENCE_TIMEOUT,
51
- USER_INTENT_RESTART,
70
+ ACTION_EXTRACT_SLOTS,
52
71
  ACTION_LISTEN_NAME,
53
72
  ACTION_SESSION_START_NAME,
54
73
  FOLLOWUP_ACTION,
55
74
  SESSION_START_METADATA_SLOT,
56
- ACTION_EXTRACT_SLOTS,
75
+ SLOT_CONSECUTIVE_SILENCE_TIMEOUTS,
76
+ SLOT_SILENCE_TIMEOUT,
77
+ USER_INTENT_RESTART,
57
78
  USER_INTENT_SILENCE_TIMEOUT,
58
79
  )
59
80
  from rasa.shared.core.events import (
81
+ ActionExecuted,
60
82
  ActionExecutionRejected,
61
83
  BotUttered,
62
84
  Event,
@@ -64,37 +86,25 @@ from rasa.shared.core.events import (
64
86
  ReminderScheduled,
65
87
  SlotSet,
66
88
  UserUttered,
67
- ActionExecuted,
68
- )
69
- from rasa.shared.constants import (
70
- ASSISTANT_ID_KEY,
71
- DOCS_URL_DOMAINS,
72
- DEFAULT_SENDER_ID,
73
- ROUTE_TO_CALM_SLOT,
74
- DOCS_URL_NLU_BASED_POLICIES,
75
- UTTER_PREFIX,
76
- RASA_PATTERN_CANNOT_HANDLE_INVALID_INTENT,
77
89
  )
78
- from rasa.core.nlg import NaturalLanguageGenerator
79
- from rasa.core.lock_store import LockStore
80
- from rasa.utils.common import TempDirectoryPath, get_temp_dir_name
81
- import rasa.core.tracker_store
82
- import rasa.core.actions.action
83
- import rasa.shared.core.trackers
90
+ from rasa.shared.core.flows import FlowsList
84
91
  from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
92
+ from rasa.shared.data import TrainingType, create_regex_pattern_reader
85
93
  from rasa.shared.nlu.constants import (
86
94
  COMMANDS,
87
95
  ENTITIES,
96
+ FULL_RETRIEVAL_INTENT_NAME_KEY,
88
97
  INTENT,
89
98
  INTENT_NAME_KEY,
90
99
  INTENT_RESPONSE_KEY,
100
+ PREDICTED_COMMANDS,
91
101
  PREDICTED_CONFIDENCE_KEY,
92
- FULL_RETRIEVAL_INTENT_NAME_KEY,
93
- RESPONSE_SELECTOR,
94
102
  RESPONSE,
103
+ RESPONSE_SELECTOR,
95
104
  TEXT,
96
105
  )
97
106
  from rasa.shared.nlu.training_data.message import Message
107
+ from rasa.utils.common import TempDirectoryPath, get_temp_dir_name
98
108
  from rasa.utils.endpoints import EndpointConfig
99
109
 
100
110
  if TYPE_CHECKING:
@@ -198,10 +208,7 @@ class MessageProcessor:
198
208
  )
199
209
  return None
200
210
 
201
- if not self.message_contains_commands(tracker.latest_message):
202
- tracker = await self.run_action_extract_slots(
203
- message.output_channel, tracker
204
- )
211
+ tracker = await self.run_action_extract_slots(message.output_channel, tracker)
205
212
 
206
213
  await self._run_prediction_loop(message.output_channel, tracker)
207
214
 
@@ -215,7 +222,9 @@ class MessageProcessor:
215
222
  return None
216
223
 
217
224
  async def run_action_extract_slots(
218
- self, output_channel: OutputChannel, tracker: DialogueStateTracker
225
+ self,
226
+ output_channel: OutputChannel,
227
+ tracker: DialogueStateTracker,
219
228
  ) -> DialogueStateTracker:
220
229
  """Run action to extract slots and update the tracker accordingly.
221
230
 
@@ -230,6 +239,10 @@ class MessageProcessor:
230
239
  ACTION_EXTRACT_SLOTS, self.domain, self.action_endpoint
231
240
  )
232
241
  metadata = await self._add_flows_to_metadata()
242
+ metadata[KEY_IS_CALM_SYSTEM] = self.message_contains_commands(
243
+ tracker.latest_message
244
+ )
245
+ metadata[KEY_IS_COEXISTENCE_ASSISTANT] = self._is_coexistence_assistant(tracker)
233
246
 
234
247
  extraction_events = await action_extract_slots.run(
235
248
  output_channel, self.nlg, tracker, self.domain, metadata
@@ -818,9 +831,7 @@ class MessageProcessor:
818
831
  return parse_data
819
832
 
820
833
  def _sanitize_message(self, message: UserMessage) -> UserMessage:
821
- """Sanitize user message by removing prepended slashes before the
822
- actual content.
823
- """
834
+ """Sanitize user message by removing prepended slashes before the content."""
824
835
  # Regex pattern to match leading slashes and any whitespace before
825
836
  # actual content
826
837
  pattern = r"^[/\s]+"
@@ -898,9 +909,14 @@ class MessageProcessor:
898
909
  NLUCommandAdapter,
899
910
  )
900
911
 
912
+ message = Message(parse_data)
901
913
  commands = NLUCommandAdapter.convert_nlu_to_commands(
902
- Message(parse_data), tracker, await self.get_flows(), self.domain
914
+ message, tracker, await self.get_flows(), self.domain
903
915
  )
916
+ add_commands_to_message_parse_data(
917
+ message, NLUCommandAdapter.__name__, commands
918
+ )
919
+ parse_data[PREDICTED_COMMANDS] = message.get(PREDICTED_COMMANDS, [])
904
920
 
905
921
  # if there are no converted commands and parsed data contains invalid intent
906
922
  # add CannotHandleCommand as fallback
@@ -921,9 +937,7 @@ class MessageProcessor:
921
937
  return [command.as_dict() for command in commands]
922
938
 
923
939
  def _contains_undefined_intent(self, message: Message) -> bool:
924
- """Checks if the message contains an intent that is undefined
925
- in the domain.
926
- """
940
+ """Checks if the message contains an undefined intent."""
927
941
  intent_name = message.get(INTENT, {}).get("name")
928
942
  return intent_name is not None and intent_name not in self.domain.intents
929
943
 
@@ -987,6 +1001,8 @@ class MessageProcessor:
987
1001
  if parse_data["entities"]:
988
1002
  self._log_slots(tracker)
989
1003
 
1004
+ plugin_manager().hook.after_new_user_message(tracker=tracker)
1005
+
990
1006
  logger.debug(
991
1007
  f"Logged UserUtterance - tracker now has {len(tracker.events)} events."
992
1008
  )
@@ -1245,6 +1261,12 @@ class MessageProcessor:
1245
1261
  # events and return values are used to update
1246
1262
  # the tracker state after an action has been taken
1247
1263
  try:
1264
+ validate_frames: List[ValidateSlotPatternFlowStackFrame] = []
1265
+ # check if the last action was a correction action
1266
+ # before validating the corrected slots
1267
+ if tracker.latest_action_name == ACTION_CORRECT_FLOW_SLOT:
1268
+ tracker, validate_frames = self.validate_corrected_slots(tracker)
1269
+
1248
1270
  # Use temporary tracker as we might need to discard the policy events in
1249
1271
  # case of a rejection.
1250
1272
  temporary_tracker = tracker.copy()
@@ -1256,6 +1278,12 @@ class MessageProcessor:
1256
1278
 
1257
1279
  if isinstance(action, FormAction):
1258
1280
  flows_metadata = await self._add_flows_to_metadata()
1281
+ flows_metadata[KEY_IS_CALM_SYSTEM] = self.message_contains_commands(
1282
+ temporary_tracker.latest_message
1283
+ )
1284
+ flows_metadata[KEY_IS_COEXISTENCE_ASSISTANT] = (
1285
+ self._is_coexistence_assistant(temporary_tracker)
1286
+ )
1259
1287
  metadata = prediction.action_metadata or {}
1260
1288
  metadata.update(flows_metadata)
1261
1289
 
@@ -1270,6 +1298,15 @@ class MessageProcessor:
1270
1298
  events = await action.run(
1271
1299
  output_channel, nlg, temporary_tracker, self.domain
1272
1300
  )
1301
+
1302
+ if validate_frames:
1303
+ stack = tracker.stack
1304
+ for frame in validate_frames:
1305
+ stack.push(frame)
1306
+ new_events = tracker.create_stack_updated_events(stack)
1307
+ tracker.update_with_events(new_events)
1308
+
1309
+ self._log_action_and_events_on_tracker(tracker, action, events, prediction)
1273
1310
  except ActionExecutionRejection:
1274
1311
  events = [
1275
1312
  ActionExecutionRejected(
@@ -1278,7 +1315,7 @@ class MessageProcessor:
1278
1315
  ]
1279
1316
  tracker.update(events[0])
1280
1317
  return self.should_predict_another_action(action.name())
1281
- except Exception:
1318
+ except Exception as e:
1282
1319
  structlogger.exception(
1283
1320
  "rasa.core.processor.run_action.exception",
1284
1321
  event_info=f"Encountered an exception while "
@@ -1287,9 +1324,15 @@ class MessageProcessor:
1287
1324
  f"Please check the logs of your action server for "
1288
1325
  f"more information.",
1289
1326
  )
1327
+ error_messge = str(e)
1290
1328
  events = []
1291
-
1292
- self._log_action_on_tracker(tracker, action, events, prediction)
1329
+ self._log_action_prediction_on_tracker(
1330
+ tracker,
1331
+ action,
1332
+ prediction,
1333
+ was_successful=False,
1334
+ error_message=error_messge,
1335
+ )
1293
1336
 
1294
1337
  if any(isinstance(e, UserUttered) for e in events):
1295
1338
  logger.debug(
@@ -1305,10 +1348,10 @@ class MessageProcessor:
1305
1348
  self._log_slots(tracker)
1306
1349
 
1307
1350
  await self.execute_side_effects(events, tracker, output_channel)
1308
-
1351
+ plugin_manager().hook.after_action_executed(tracker=tracker)
1309
1352
  return self.should_predict_another_action(action.name())
1310
1353
 
1311
- def _log_action_on_tracker(
1354
+ def _log_action_and_events_on_tracker(
1312
1355
  self,
1313
1356
  tracker: DialogueStateTracker,
1314
1357
  action: Action,
@@ -1325,16 +1368,9 @@ class MessageProcessor:
1325
1368
  isinstance(event, ActionExecutionRejected) for event in events
1326
1369
  )
1327
1370
  if not action_was_rejected_manually:
1328
- structlogger.debug(
1329
- "processor.actions.policy_prediction",
1330
- prediction_events=copy.deepcopy(prediction.events),
1331
- policy_name=prediction.policy_name,
1332
- action_name=action.name(),
1371
+ self._log_action_prediction_on_tracker(
1372
+ tracker, action, prediction, was_successful=True, error_message=None
1333
1373
  )
1334
- tracker.update_with_events(prediction.events)
1335
-
1336
- # log the action and its produced events
1337
- tracker.update(action.event_for_successful_execution(prediction))
1338
1374
 
1339
1375
  structlogger.debug(
1340
1376
  "processor.actions.log",
@@ -1343,6 +1379,29 @@ class MessageProcessor:
1343
1379
  )
1344
1380
  tracker.update_with_events(events)
1345
1381
 
1382
+ def _log_action_prediction_on_tracker(
1383
+ self,
1384
+ tracker: DialogueStateTracker,
1385
+ action: Action,
1386
+ prediction: PolicyPrediction,
1387
+ was_successful: bool,
1388
+ error_message: Optional[str],
1389
+ ) -> None:
1390
+ structlogger.debug(
1391
+ "processor.actions.policy_prediction",
1392
+ prediction_events=copy.deepcopy(prediction.events),
1393
+ policy_name=prediction.policy_name,
1394
+ action_name=action.name(),
1395
+ )
1396
+ tracker.update_with_events(prediction.events)
1397
+
1398
+ # log the action and its produced events
1399
+ tracker.update(
1400
+ action.event_for_successful_execution(
1401
+ prediction, was_successful, error_message
1402
+ )
1403
+ )
1404
+
1346
1405
  def _has_session_expired(self, tracker: DialogueStateTracker) -> bool:
1347
1406
  """Determine whether the latest session in `tracker` has expired.
1348
1407
 
@@ -1441,25 +1500,59 @@ class MessageProcessor:
1441
1500
  return len(filtered_commands) > 0
1442
1501
 
1443
1502
  def _is_calm_assistant(self) -> bool:
1444
- """Inspects the nodes of the graph schema to determine whether
1445
- any node is associated with the `FlowPolicy`, which is indicative of a
1503
+ """Inspects the nodes of the graph schema to decide if we are in CALM.
1504
+
1505
+ To determine whether we are in CALM mode, we check if any node is
1506
+ associated with the `FlowPolicy`, which is indicative of a
1446
1507
  CALM assistant setup.
1447
1508
 
1448
1509
  Returns:
1449
1510
  bool: True if any node in the graph schema uses `FlowPolicy`.
1450
1511
  """
1512
+ flow_policy_class_path = "rasa.core.policies.flow_policy.FlowPolicy"
1513
+ return self._is_component_present_in_graph_nodes(flow_policy_class_path)
1514
+
1515
+ @staticmethod
1516
+ def _is_coexistence_assistant(tracker: DialogueStateTracker) -> bool:
1517
+ """Inspect the tracker to decide if we are in coexistence.
1518
+
1519
+ Returns:
1520
+ bool: True if the tracker contains the routine slot.
1521
+ """
1522
+ return tracker.slots.get(ROUTE_TO_CALM_SLOT) is not None
1523
+
1524
+ def _is_component_present_in_graph_nodes(self, component_path: Text) -> bool:
1525
+ """Check if a component is present in the graph nodes.
1526
+
1527
+ Args:
1528
+ component_path: The path of the component to check for.
1529
+
1530
+ Returns:
1531
+ `True` if the component is present in the graph nodes, `False` otherwise.
1532
+ """
1451
1533
  # Get the graph schema's nodes from the graph runner.
1452
1534
  nodes: dict[str, Any] = self.graph_runner._graph_schema.nodes # type: ignore[attr-defined]
1453
1535
 
1454
- flow_policy_class_path = "rasa.core.policies.flow_policy.FlowPolicy"
1455
- # Iterate over the nodes and check if any node uses `FlowPolicy`.
1456
1536
  for node_name, schema_node in nodes.items():
1457
1537
  if (
1458
1538
  schema_node.uses is not None
1459
1539
  and f"{schema_node.uses.__module__}.{schema_node.uses.__name__}"
1460
- == flow_policy_class_path
1540
+ == component_path
1461
1541
  ):
1462
1542
  return True
1463
1543
 
1464
- # Return False if no node is found using `FlowPolicy`.
1465
1544
  return False
1545
+
1546
+ def validate_corrected_slots(
1547
+ self,
1548
+ tracker: DialogueStateTracker,
1549
+ ) -> Tuple[DialogueStateTracker, List[ValidateSlotPatternFlowStackFrame]]:
1550
+ """Validate the slots that were corrected in the tracker."""
1551
+ prior_tracker_events = list(reversed(tracker.events))
1552
+ tracker, validate_frames = create_validate_frames_from_slot_set_events(
1553
+ tracker,
1554
+ prior_tracker_events,
1555
+ should_break=True,
1556
+ )
1557
+
1558
+ return tracker, validate_frames
rasa/core/run.py CHANGED
@@ -19,7 +19,6 @@ from typing import (
19
19
 
20
20
  from sanic import Sanic
21
21
  from sanic.worker.loader import AppLoader
22
- from rasa.core.channels.development_inspector import DevelopmentInspectProxy
23
22
 
24
23
  import rasa.core.utils
25
24
  import rasa.shared.utils.common
@@ -33,6 +32,7 @@ from rasa.core import agent, channels, constants
33
32
  from rasa.core.agent import Agent
34
33
  from rasa.core.channels import console
35
34
  from rasa.core.channels.channel import InputChannel
35
+ from rasa.core.channels.development_inspector import DevelopmentInspectProxy
36
36
  from rasa.core.persistor import StorageType
37
37
  from rasa.core.utils import AvailableEndpoints
38
38
  from rasa.plugin import plugin_manager
@@ -283,9 +283,10 @@ def serve_application(
283
283
  endpoints.lock_store if endpoints else None
284
284
  )
285
285
 
286
- telemetry.track_server_start(
287
- input_channels, endpoints, model_path, number_of_workers, enable_api
288
- )
286
+ if not inspect:
287
+ telemetry.track_server_start(
288
+ input_channels, endpoints, model_path, number_of_workers, enable_api
289
+ )
289
290
 
290
291
  rasa.utils.common.update_sanic_log_level(
291
292
  log_file, use_syslog, syslog_address, syslog_port, syslog_protocol
@@ -2,15 +2,14 @@ import logging
2
2
  from dataclasses import dataclass
3
3
  from typing import Any, Dict, List, Optional, Text, Union, cast
4
4
 
5
- from rasa.shared.exceptions import RasaException
6
- from rasa.utils.endpoints import EndpointConfig
7
-
8
5
  from rasa.core.secrets_manager.constants import (
9
6
  SECRET_KEY_LABEL,
10
7
  SECRET_MANAGER_PREFIX,
11
8
  SOURCE_KEY_LABEL,
12
9
  SUPPORTED_SECRET_MANAGERS,
13
10
  )
11
+ from rasa.shared.exceptions import RasaException
12
+ from rasa.utils.endpoints import EndpointConfig
14
13
 
15
14
  logger = logging.getLogger(__name__)
16
15
 
@@ -1,9 +1,6 @@
1
1
  import os
2
2
  from typing import Optional, Text, cast
3
3
 
4
- from rasa.shared.exceptions import RasaException
5
- from rasa.utils.endpoints import EndpointConfig, read_endpoint_config
6
-
7
4
  from rasa.core.secrets_manager.constants import (
8
5
  SECRET_MANAGER_ENV_NAME,
9
6
  VAULT_DEFAULT_RASA_SECRETS_PATH,
@@ -29,6 +26,8 @@ from rasa.core.secrets_manager.vault import (
29
26
  VaultSecretManagerNonStrictConfig,
30
27
  VaultSecretsManager,
31
28
  )
29
+ from rasa.shared.exceptions import RasaException
30
+ from rasa.utils.endpoints import EndpointConfig, read_endpoint_config
32
31
 
33
32
 
34
33
  def create(config: SecretManagerConfig) -> Optional[SecretsManager]:
@@ -5,14 +5,13 @@ import copy
5
5
  import logging
6
6
  from typing import Any, ClassVar, Dict, List, Optional, Text, cast
7
7
 
8
- from rasa.shared.exceptions import RasaException
9
- from rasa.utils.endpoints import EndpointConfig
10
-
11
8
  from rasa.core.secrets_manager.endpoints import (
12
9
  CredentialsLocation,
13
10
  EndpointReader,
14
11
  EndpointTrait,
15
12
  )
13
+ from rasa.shared.exceptions import RasaException
14
+ from rasa.utils.endpoints import EndpointConfig
16
15
  from rasa.utils.singleton import Singleton
17
16
 
18
17
  logger = logging.getLogger(__name__)
@@ -9,8 +9,6 @@ from typing import Any, Dict, Optional, Text, Union, cast
9
9
  import hvac.exceptions
10
10
  from apscheduler.schedulers.background import BackgroundScheduler
11
11
  from apscheduler.triggers.interval import IntervalTrigger
12
- from rasa.shared.exceptions import RasaException
13
- from rasa.utils.endpoints import EndpointConfig
14
12
 
15
13
  from rasa.core.secrets_manager.constants import (
16
14
  TRACKER_STORE_ENDPOINT_TYPE,
@@ -25,6 +23,8 @@ from rasa.core.secrets_manager.endpoints import (
25
23
  TrackerStoreEndpointValidator,
26
24
  )
27
25
  from rasa.core.secrets_manager.secret_manager import SecretManagerConfig, SecretsManager
26
+ from rasa.shared.exceptions import RasaException
27
+ from rasa.utils.endpoints import EndpointConfig
28
28
 
29
29
  logger = logging.getLogger(__name__)
30
30
 
rasa/core/test.py CHANGED
@@ -1,73 +1,72 @@
1
1
  import logging
2
2
  import os
3
- from pathlib import Path
4
3
  import tempfile
5
4
  import warnings as pywarnings
6
5
  from collections import defaultdict, namedtuple
7
- from typing import Any, Dict, List, Optional, Text, Tuple, TYPE_CHECKING, cast
6
+ from pathlib import Path
7
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, cast
8
8
 
9
+ import rasa.shared.utils.io
9
10
  from rasa import telemetry
11
+ from rasa.constants import PERCENTAGE_KEY, RESULTS_FILE
12
+ from rasa.core.actions.action import ActionRetrieveResponse
13
+ from rasa.core.channels import UserMessage
10
14
  from rasa.core.constants import (
11
15
  CONFUSION_MATRIX_STORIES_FILE,
12
- REPORT_STORIES_FILE,
13
16
  FAILED_STORIES_FILE,
14
- SUCCESSFUL_STORIES_FILE,
17
+ REPORT_STORIES_FILE,
15
18
  STORIES_WITH_WARNINGS_FILE,
19
+ SUCCESSFUL_STORIES_FILE,
16
20
  )
17
- from rasa.core.channels import UserMessage
18
21
  from rasa.core.policies.policy import PolicyPrediction
22
+ from rasa.exceptions import ActionLimitReached
23
+ from rasa.nlu.constants import (
24
+ RESPONSE_SELECTOR_DEFAULT_INTENT,
25
+ RESPONSE_SELECTOR_PROPERTY_NAME,
26
+ RESPONSE_SELECTOR_RETRIEVAL_INTENTS,
27
+ TOKENS_NAMES,
28
+ )
19
29
  from rasa.nlu.test import EntityEvaluationResult, evaluate_entities
20
30
  from rasa.nlu.tokenizers.tokenizer import Token
21
31
  from rasa.shared.constants import ROUTE_TO_CALM_SLOT
22
32
  from rasa.shared.core.constants import (
23
- POLICIES_THAT_EXTRACT_ENTITIES,
24
33
  ACTION_UNLIKELY_INTENT_NAME,
34
+ POLICIES_THAT_EXTRACT_ENTITIES,
25
35
  )
26
- from rasa.shared.exceptions import RasaException
27
- import rasa.shared.utils.io
36
+ from rasa.shared.core.domain import Domain
37
+ from rasa.shared.core.events import ActionExecuted, EntitiesAdded, SlotSet, UserUttered
38
+ from rasa.shared.core.trackers import DialogueStateTracker
28
39
  from rasa.shared.core.training_data.story_writer.yaml_story_writer import (
29
40
  YAMLStoryWriter,
30
41
  )
31
42
  from rasa.shared.core.training_data.structures import StoryStep
32
- from rasa.shared.core.domain import Domain
33
- from rasa.nlu.constants import (
34
- RESPONSE_SELECTOR_DEFAULT_INTENT,
35
- RESPONSE_SELECTOR_RETRIEVAL_INTENTS,
36
- TOKENS_NAMES,
37
- RESPONSE_SELECTOR_PROPERTY_NAME,
38
- )
43
+ from rasa.shared.exceptions import RasaException
44
+ from rasa.shared.importers.importer import TrainingDataImporter
39
45
  from rasa.shared.nlu.constants import (
40
- INTENT,
41
46
  ENTITIES,
42
- ENTITY_ATTRIBUTE_VALUE,
43
- ENTITY_ATTRIBUTE_START,
44
47
  ENTITY_ATTRIBUTE_END,
45
- EXTRACTOR,
48
+ ENTITY_ATTRIBUTE_START,
49
+ ENTITY_ATTRIBUTE_TEXT,
46
50
  ENTITY_ATTRIBUTE_TYPE,
47
- INTENT_RESPONSE_KEY,
51
+ ENTITY_ATTRIBUTE_VALUE,
52
+ EXTRACTOR,
53
+ FULL_RETRIEVAL_INTENT_NAME_KEY,
54
+ INTENT,
48
55
  INTENT_NAME_KEY,
56
+ INTENT_RESPONSE_KEY,
49
57
  RESPONSE,
50
58
  RESPONSE_SELECTOR,
51
- FULL_RETRIEVAL_INTENT_NAME_KEY,
52
59
  TEXT,
53
- ENTITY_ATTRIBUTE_TEXT,
54
60
  )
55
- from rasa.constants import RESULTS_FILE, PERCENTAGE_KEY
56
- from rasa.shared.core.events import ActionExecuted, EntitiesAdded, UserUttered, SlotSet
57
- from rasa.shared.core.trackers import DialogueStateTracker
58
61
  from rasa.shared.nlu.training_data.formats.readerwriter import TrainingDataWriter
59
- from rasa.shared.importers.importer import TrainingDataImporter
60
62
  from rasa.shared.utils.io import DEFAULT_ENCODING
61
63
  from rasa.utils.tensorflow.constants import QUERY_INTENT_KEY, SEVERITY_KEY
62
- from rasa.exceptions import ActionLimitReached
63
-
64
- from rasa.core.actions.action import ActionRetrieveResponse
65
64
 
66
65
  if TYPE_CHECKING:
67
66
  from rasa.core.agent import Agent
68
67
  from rasa.core.processor import MessageProcessor
68
+ from rasa.shared.core.events import EntityPrediction, Event
69
69
  from rasa.shared.core.generator import TrainingDataGenerator
70
- from rasa.shared.core.events import Event, EntityPrediction
71
70
 
72
71
  logger = logging.getLogger(__name__)
73
72
 
@@ -1226,6 +1225,7 @@ def _plot_story_evaluation(
1226
1225
  """Plot a confusion matrix of story evaluation."""
1227
1226
  from sklearn.metrics import confusion_matrix
1228
1227
  from sklearn.utils.multiclass import unique_labels
1228
+
1229
1229
  from rasa.utils.plotting import plot_confusion_matrix
1230
1230
 
1231
1231
  confusion_matrix_filename = CONFUSION_MATRIX_STORIES_FILE