rasa-pro 3.12.0.dev1__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 (790) hide show
  1. README.md +41 -0
  2. rasa/__init__.py +9 -0
  3. rasa/__main__.py +177 -0
  4. rasa/anonymization/__init__.py +2 -0
  5. rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
  6. rasa/anonymization/anonymization_pipeline.py +286 -0
  7. rasa/anonymization/anonymization_rule_executor.py +260 -0
  8. rasa/anonymization/anonymization_rule_orchestrator.py +120 -0
  9. rasa/anonymization/schemas/config.yml +47 -0
  10. rasa/anonymization/utils.py +118 -0
  11. rasa/api.py +160 -0
  12. rasa/cli/__init__.py +5 -0
  13. rasa/cli/arguments/__init__.py +0 -0
  14. rasa/cli/arguments/data.py +106 -0
  15. rasa/cli/arguments/default_arguments.py +207 -0
  16. rasa/cli/arguments/evaluate.py +65 -0
  17. rasa/cli/arguments/export.py +51 -0
  18. rasa/cli/arguments/interactive.py +74 -0
  19. rasa/cli/arguments/run.py +219 -0
  20. rasa/cli/arguments/shell.py +17 -0
  21. rasa/cli/arguments/test.py +211 -0
  22. rasa/cli/arguments/train.py +279 -0
  23. rasa/cli/arguments/visualize.py +34 -0
  24. rasa/cli/arguments/x.py +30 -0
  25. rasa/cli/data.py +354 -0
  26. rasa/cli/dialogue_understanding_test.py +251 -0
  27. rasa/cli/e2e_test.py +259 -0
  28. rasa/cli/evaluate.py +222 -0
  29. rasa/cli/export.py +250 -0
  30. rasa/cli/inspect.py +75 -0
  31. rasa/cli/interactive.py +166 -0
  32. rasa/cli/license.py +65 -0
  33. rasa/cli/llm_fine_tuning.py +403 -0
  34. rasa/cli/markers.py +78 -0
  35. rasa/cli/project_templates/__init__.py +0 -0
  36. rasa/cli/project_templates/calm/actions/__init__.py +0 -0
  37. rasa/cli/project_templates/calm/actions/action_template.py +27 -0
  38. rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
  39. rasa/cli/project_templates/calm/actions/db.py +57 -0
  40. rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
  41. rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
  42. rasa/cli/project_templates/calm/config.yml +10 -0
  43. rasa/cli/project_templates/calm/credentials.yml +33 -0
  44. rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
  45. rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
  46. rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
  47. rasa/cli/project_templates/calm/db/contacts.json +10 -0
  48. rasa/cli/project_templates/calm/domain/add_contact.yml +39 -0
  49. rasa/cli/project_templates/calm/domain/list_contacts.yml +17 -0
  50. rasa/cli/project_templates/calm/domain/remove_contact.yml +38 -0
  51. rasa/cli/project_templates/calm/domain/shared.yml +10 -0
  52. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
  53. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
  54. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
  55. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
  56. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
  57. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
  58. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
  59. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
  60. rasa/cli/project_templates/calm/endpoints.yml +58 -0
  61. rasa/cli/project_templates/default/actions/__init__.py +0 -0
  62. rasa/cli/project_templates/default/actions/actions.py +27 -0
  63. rasa/cli/project_templates/default/config.yml +44 -0
  64. rasa/cli/project_templates/default/credentials.yml +33 -0
  65. rasa/cli/project_templates/default/data/nlu.yml +91 -0
  66. rasa/cli/project_templates/default/data/rules.yml +13 -0
  67. rasa/cli/project_templates/default/data/stories.yml +30 -0
  68. rasa/cli/project_templates/default/domain.yml +34 -0
  69. rasa/cli/project_templates/default/endpoints.yml +42 -0
  70. rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
  71. rasa/cli/project_templates/tutorial/actions/__init__.py +0 -0
  72. rasa/cli/project_templates/tutorial/actions/actions.py +22 -0
  73. rasa/cli/project_templates/tutorial/config.yml +12 -0
  74. rasa/cli/project_templates/tutorial/credentials.yml +33 -0
  75. rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
  76. rasa/cli/project_templates/tutorial/data/patterns.yml +11 -0
  77. rasa/cli/project_templates/tutorial/domain.yml +35 -0
  78. rasa/cli/project_templates/tutorial/endpoints.yml +55 -0
  79. rasa/cli/run.py +143 -0
  80. rasa/cli/scaffold.py +273 -0
  81. rasa/cli/shell.py +141 -0
  82. rasa/cli/studio/__init__.py +0 -0
  83. rasa/cli/studio/download.py +62 -0
  84. rasa/cli/studio/studio.py +296 -0
  85. rasa/cli/studio/train.py +59 -0
  86. rasa/cli/studio/upload.py +62 -0
  87. rasa/cli/telemetry.py +102 -0
  88. rasa/cli/test.py +280 -0
  89. rasa/cli/train.py +278 -0
  90. rasa/cli/utils.py +484 -0
  91. rasa/cli/visualize.py +40 -0
  92. rasa/cli/x.py +206 -0
  93. rasa/constants.py +45 -0
  94. rasa/core/__init__.py +17 -0
  95. rasa/core/actions/__init__.py +0 -0
  96. rasa/core/actions/action.py +1318 -0
  97. rasa/core/actions/action_clean_stack.py +59 -0
  98. rasa/core/actions/action_exceptions.py +24 -0
  99. rasa/core/actions/action_hangup.py +29 -0
  100. rasa/core/actions/action_repeat_bot_messages.py +89 -0
  101. rasa/core/actions/action_run_slot_rejections.py +210 -0
  102. rasa/core/actions/action_trigger_chitchat.py +31 -0
  103. rasa/core/actions/action_trigger_flow.py +109 -0
  104. rasa/core/actions/action_trigger_search.py +31 -0
  105. rasa/core/actions/constants.py +5 -0
  106. rasa/core/actions/custom_action_executor.py +191 -0
  107. rasa/core/actions/direct_custom_actions_executor.py +109 -0
  108. rasa/core/actions/e2e_stub_custom_action_executor.py +72 -0
  109. rasa/core/actions/forms.py +741 -0
  110. rasa/core/actions/grpc_custom_action_executor.py +251 -0
  111. rasa/core/actions/http_custom_action_executor.py +145 -0
  112. rasa/core/actions/loops.py +114 -0
  113. rasa/core/actions/two_stage_fallback.py +186 -0
  114. rasa/core/agent.py +559 -0
  115. rasa/core/auth_retry_tracker_store.py +122 -0
  116. rasa/core/brokers/__init__.py +0 -0
  117. rasa/core/brokers/broker.py +126 -0
  118. rasa/core/brokers/file.py +58 -0
  119. rasa/core/brokers/kafka.py +324 -0
  120. rasa/core/brokers/pika.py +388 -0
  121. rasa/core/brokers/sql.py +86 -0
  122. rasa/core/channels/__init__.py +61 -0
  123. rasa/core/channels/botframework.py +338 -0
  124. rasa/core/channels/callback.py +84 -0
  125. rasa/core/channels/channel.py +456 -0
  126. rasa/core/channels/console.py +241 -0
  127. rasa/core/channels/development_inspector.py +197 -0
  128. rasa/core/channels/facebook.py +419 -0
  129. rasa/core/channels/hangouts.py +329 -0
  130. rasa/core/channels/inspector/.eslintrc.cjs +25 -0
  131. rasa/core/channels/inspector/.gitignore +23 -0
  132. rasa/core/channels/inspector/README.md +54 -0
  133. rasa/core/channels/inspector/assets/favicon.ico +0 -0
  134. rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
  135. rasa/core/channels/inspector/custom.d.ts +3 -0
  136. rasa/core/channels/inspector/dist/assets/arc-861ddd57.js +1 -0
  137. rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
  138. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-921f02db.js +10 -0
  139. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-b436c4f8.js +2 -0
  140. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-511a23cb.js +2 -0
  141. rasa/core/channels/inspector/dist/assets/createText-62fc7601-ef476ecd.js +7 -0
  142. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-f1878e0a.js +4 -0
  143. rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-fac75185.js +51 -0
  144. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-201c5bbc.js +6 -0
  145. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-f904ae41.js +4 -0
  146. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +1 -0
  147. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-1813da66.js +139 -0
  148. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-872af172.js +266 -0
  149. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-34a0af5a.js +70 -0
  150. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
  151. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
  152. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
  153. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
  154. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-42ba3e3d.js +1 -0
  155. rasa/core/channels/inspector/dist/assets/index-37817b51.js +1317 -0
  156. rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
  157. rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-6b731386.js +7 -0
  158. rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
  159. rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-e8579ac6.js +139 -0
  160. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
  161. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
  162. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
  163. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
  164. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
  165. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
  166. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
  167. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
  168. rasa/core/channels/inspector/dist/assets/layout-89e6403a.js +1 -0
  169. rasa/core/channels/inspector/dist/assets/line-dc73d3fc.js +1 -0
  170. rasa/core/channels/inspector/dist/assets/linear-f5b1d2bc.js +1 -0
  171. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-82cb74fa.js +109 -0
  172. rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
  173. rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
  174. rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-bdf5f29b.js +35 -0
  175. rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-c7a0cbe4.js +7 -0
  176. rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-7ec5410f.js +52 -0
  177. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-caee5554.js +8 -0
  178. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-2935f8db.js +122 -0
  179. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-8f5d9693.js +1 -0
  180. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-d565d1de.js +1 -0
  181. rasa/core/channels/inspector/dist/assets/styles-080da4f6-75ad421d.js +110 -0
  182. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-7e764226.js +159 -0
  183. rasa/core/channels/inspector/dist/assets/styles-9c745c82-7a4e0e61.js +207 -0
  184. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-4019d1bf.js +1 -0
  185. rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-01ea12df.js +61 -0
  186. rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-89407137.js +7 -0
  187. rasa/core/channels/inspector/dist/index.html +42 -0
  188. rasa/core/channels/inspector/index.html +40 -0
  189. rasa/core/channels/inspector/jest.config.ts +13 -0
  190. rasa/core/channels/inspector/package.json +52 -0
  191. rasa/core/channels/inspector/setupTests.ts +2 -0
  192. rasa/core/channels/inspector/src/App.tsx +220 -0
  193. rasa/core/channels/inspector/src/components/Chat.tsx +95 -0
  194. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +108 -0
  195. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
  196. rasa/core/channels/inspector/src/components/DialogueStack.tsx +136 -0
  197. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
  198. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
  199. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +22 -0
  200. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
  201. rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
  202. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
  203. rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
  204. rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
  205. rasa/core/channels/inspector/src/helpers/audiostream.ts +191 -0
  206. rasa/core/channels/inspector/src/helpers/formatters.test.ts +392 -0
  207. rasa/core/channels/inspector/src/helpers/formatters.ts +306 -0
  208. rasa/core/channels/inspector/src/helpers/utils.ts +127 -0
  209. rasa/core/channels/inspector/src/main.tsx +13 -0
  210. rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
  211. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
  212. rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
  213. rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
  214. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
  215. rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
  216. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
  217. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
  218. rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
  219. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
  220. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
  221. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
  222. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
  223. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
  224. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
  225. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
  226. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
  227. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
  228. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
  229. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
  230. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
  231. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
  232. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
  233. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
  234. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
  235. rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
  236. rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
  237. rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
  238. rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
  239. rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
  240. rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
  241. rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
  242. rasa/core/channels/inspector/src/theme/index.ts +101 -0
  243. rasa/core/channels/inspector/src/types.ts +84 -0
  244. rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
  245. rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
  246. rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
  247. rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
  248. rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
  249. rasa/core/channels/inspector/tsconfig.json +26 -0
  250. rasa/core/channels/inspector/tsconfig.node.json +10 -0
  251. rasa/core/channels/inspector/vite.config.ts +8 -0
  252. rasa/core/channels/inspector/yarn.lock +6249 -0
  253. rasa/core/channels/mattermost.py +229 -0
  254. rasa/core/channels/rasa_chat.py +126 -0
  255. rasa/core/channels/rest.py +230 -0
  256. rasa/core/channels/rocketchat.py +174 -0
  257. rasa/core/channels/slack.py +620 -0
  258. rasa/core/channels/socketio.py +302 -0
  259. rasa/core/channels/telegram.py +298 -0
  260. rasa/core/channels/twilio.py +169 -0
  261. rasa/core/channels/vier_cvg.py +374 -0
  262. rasa/core/channels/voice_ready/__init__.py +0 -0
  263. rasa/core/channels/voice_ready/audiocodes.py +501 -0
  264. rasa/core/channels/voice_ready/jambonz.py +121 -0
  265. rasa/core/channels/voice_ready/jambonz_protocol.py +396 -0
  266. rasa/core/channels/voice_ready/twilio_voice.py +403 -0
  267. rasa/core/channels/voice_ready/utils.py +37 -0
  268. rasa/core/channels/voice_stream/__init__.py +0 -0
  269. rasa/core/channels/voice_stream/asr/__init__.py +0 -0
  270. rasa/core/channels/voice_stream/asr/asr_engine.py +89 -0
  271. rasa/core/channels/voice_stream/asr/asr_event.py +18 -0
  272. rasa/core/channels/voice_stream/asr/azure.py +130 -0
  273. rasa/core/channels/voice_stream/asr/deepgram.py +90 -0
  274. rasa/core/channels/voice_stream/audio_bytes.py +8 -0
  275. rasa/core/channels/voice_stream/browser_audio.py +107 -0
  276. rasa/core/channels/voice_stream/call_state.py +23 -0
  277. rasa/core/channels/voice_stream/tts/__init__.py +0 -0
  278. rasa/core/channels/voice_stream/tts/azure.py +106 -0
  279. rasa/core/channels/voice_stream/tts/cartesia.py +118 -0
  280. rasa/core/channels/voice_stream/tts/tts_cache.py +27 -0
  281. rasa/core/channels/voice_stream/tts/tts_engine.py +58 -0
  282. rasa/core/channels/voice_stream/twilio_media_streams.py +173 -0
  283. rasa/core/channels/voice_stream/util.py +57 -0
  284. rasa/core/channels/voice_stream/voice_channel.py +427 -0
  285. rasa/core/channels/webexteams.py +134 -0
  286. rasa/core/concurrent_lock_store.py +210 -0
  287. rasa/core/constants.py +112 -0
  288. rasa/core/evaluation/__init__.py +0 -0
  289. rasa/core/evaluation/marker.py +267 -0
  290. rasa/core/evaluation/marker_base.py +923 -0
  291. rasa/core/evaluation/marker_stats.py +293 -0
  292. rasa/core/evaluation/marker_tracker_loader.py +103 -0
  293. rasa/core/exceptions.py +29 -0
  294. rasa/core/exporter.py +284 -0
  295. rasa/core/featurizers/__init__.py +0 -0
  296. rasa/core/featurizers/precomputation.py +410 -0
  297. rasa/core/featurizers/single_state_featurizer.py +421 -0
  298. rasa/core/featurizers/tracker_featurizers.py +1262 -0
  299. rasa/core/http_interpreter.py +89 -0
  300. rasa/core/information_retrieval/__init__.py +7 -0
  301. rasa/core/information_retrieval/faiss.py +124 -0
  302. rasa/core/information_retrieval/information_retrieval.py +137 -0
  303. rasa/core/information_retrieval/milvus.py +59 -0
  304. rasa/core/information_retrieval/qdrant.py +96 -0
  305. rasa/core/jobs.py +63 -0
  306. rasa/core/lock.py +139 -0
  307. rasa/core/lock_store.py +343 -0
  308. rasa/core/migrate.py +403 -0
  309. rasa/core/nlg/__init__.py +3 -0
  310. rasa/core/nlg/callback.py +146 -0
  311. rasa/core/nlg/contextual_response_rephraser.py +320 -0
  312. rasa/core/nlg/generator.py +230 -0
  313. rasa/core/nlg/interpolator.py +143 -0
  314. rasa/core/nlg/response.py +155 -0
  315. rasa/core/nlg/summarize.py +70 -0
  316. rasa/core/persistor.py +538 -0
  317. rasa/core/policies/__init__.py +0 -0
  318. rasa/core/policies/ensemble.py +329 -0
  319. rasa/core/policies/enterprise_search_policy.py +905 -0
  320. rasa/core/policies/enterprise_search_prompt_template.jinja2 +25 -0
  321. rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +60 -0
  322. rasa/core/policies/flow_policy.py +205 -0
  323. rasa/core/policies/flows/__init__.py +0 -0
  324. rasa/core/policies/flows/flow_exceptions.py +44 -0
  325. rasa/core/policies/flows/flow_executor.py +754 -0
  326. rasa/core/policies/flows/flow_step_result.py +43 -0
  327. rasa/core/policies/intentless_policy.py +1031 -0
  328. rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
  329. rasa/core/policies/memoization.py +538 -0
  330. rasa/core/policies/policy.py +725 -0
  331. rasa/core/policies/rule_policy.py +1273 -0
  332. rasa/core/policies/ted_policy.py +2169 -0
  333. rasa/core/policies/unexpected_intent_policy.py +1022 -0
  334. rasa/core/processor.py +1465 -0
  335. rasa/core/run.py +342 -0
  336. rasa/core/secrets_manager/__init__.py +0 -0
  337. rasa/core/secrets_manager/constants.py +36 -0
  338. rasa/core/secrets_manager/endpoints.py +391 -0
  339. rasa/core/secrets_manager/factory.py +241 -0
  340. rasa/core/secrets_manager/secret_manager.py +262 -0
  341. rasa/core/secrets_manager/vault.py +584 -0
  342. rasa/core/test.py +1335 -0
  343. rasa/core/tracker_store.py +1703 -0
  344. rasa/core/train.py +105 -0
  345. rasa/core/training/__init__.py +89 -0
  346. rasa/core/training/converters/__init__.py +0 -0
  347. rasa/core/training/converters/responses_prefix_converter.py +119 -0
  348. rasa/core/training/interactive.py +1744 -0
  349. rasa/core/training/story_conflict.py +381 -0
  350. rasa/core/training/training.py +93 -0
  351. rasa/core/utils.py +366 -0
  352. rasa/core/visualize.py +70 -0
  353. rasa/dialogue_understanding/__init__.py +0 -0
  354. rasa/dialogue_understanding/coexistence/__init__.py +0 -0
  355. rasa/dialogue_understanding/coexistence/constants.py +4 -0
  356. rasa/dialogue_understanding/coexistence/intent_based_router.py +196 -0
  357. rasa/dialogue_understanding/coexistence/llm_based_router.py +327 -0
  358. rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
  359. rasa/dialogue_understanding/commands/__init__.py +61 -0
  360. rasa/dialogue_understanding/commands/can_not_handle_command.py +70 -0
  361. rasa/dialogue_understanding/commands/cancel_flow_command.py +125 -0
  362. rasa/dialogue_understanding/commands/change_flow_command.py +44 -0
  363. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +57 -0
  364. rasa/dialogue_understanding/commands/clarify_command.py +86 -0
  365. rasa/dialogue_understanding/commands/command.py +85 -0
  366. rasa/dialogue_understanding/commands/correct_slots_command.py +297 -0
  367. rasa/dialogue_understanding/commands/error_command.py +79 -0
  368. rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
  369. rasa/dialogue_understanding/commands/handle_code_change_command.py +73 -0
  370. rasa/dialogue_understanding/commands/human_handoff_command.py +66 -0
  371. rasa/dialogue_understanding/commands/knowledge_answer_command.py +57 -0
  372. rasa/dialogue_understanding/commands/noop_command.py +54 -0
  373. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +60 -0
  374. rasa/dialogue_understanding/commands/restart_command.py +58 -0
  375. rasa/dialogue_understanding/commands/session_end_command.py +61 -0
  376. rasa/dialogue_understanding/commands/session_start_command.py +59 -0
  377. rasa/dialogue_understanding/commands/set_slot_command.py +160 -0
  378. rasa/dialogue_understanding/commands/skip_question_command.py +75 -0
  379. rasa/dialogue_understanding/commands/start_flow_command.py +107 -0
  380. rasa/dialogue_understanding/commands/user_silence_command.py +59 -0
  381. rasa/dialogue_understanding/commands/utils.py +45 -0
  382. rasa/dialogue_understanding/generator/__init__.py +21 -0
  383. rasa/dialogue_understanding/generator/command_generator.py +464 -0
  384. rasa/dialogue_understanding/generator/constants.py +27 -0
  385. rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
  386. rasa/dialogue_understanding/generator/flow_retrieval.py +466 -0
  387. rasa/dialogue_understanding/generator/llm_based_command_generator.py +500 -0
  388. rasa/dialogue_understanding/generator/llm_command_generator.py +67 -0
  389. rasa/dialogue_understanding/generator/multi_step/__init__.py +0 -0
  390. rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2 +62 -0
  391. rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2 +38 -0
  392. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +920 -0
  393. rasa/dialogue_understanding/generator/nlu_command_adapter.py +261 -0
  394. rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
  395. rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +60 -0
  396. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +486 -0
  397. rasa/dialogue_understanding/patterns/__init__.py +0 -0
  398. rasa/dialogue_understanding/patterns/cancel.py +111 -0
  399. rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
  400. rasa/dialogue_understanding/patterns/chitchat.py +37 -0
  401. rasa/dialogue_understanding/patterns/clarify.py +97 -0
  402. rasa/dialogue_understanding/patterns/code_change.py +41 -0
  403. rasa/dialogue_understanding/patterns/collect_information.py +90 -0
  404. rasa/dialogue_understanding/patterns/completed.py +40 -0
  405. rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
  406. rasa/dialogue_understanding/patterns/correction.py +278 -0
  407. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +301 -0
  408. rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
  409. rasa/dialogue_understanding/patterns/internal_error.py +47 -0
  410. rasa/dialogue_understanding/patterns/repeat.py +37 -0
  411. rasa/dialogue_understanding/patterns/restart.py +37 -0
  412. rasa/dialogue_understanding/patterns/search.py +37 -0
  413. rasa/dialogue_understanding/patterns/session_start.py +37 -0
  414. rasa/dialogue_understanding/patterns/skip_question.py +38 -0
  415. rasa/dialogue_understanding/patterns/user_silence.py +37 -0
  416. rasa/dialogue_understanding/processor/__init__.py +0 -0
  417. rasa/dialogue_understanding/processor/command_processor.py +720 -0
  418. rasa/dialogue_understanding/processor/command_processor_component.py +43 -0
  419. rasa/dialogue_understanding/stack/__init__.py +0 -0
  420. rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
  421. rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
  422. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
  423. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
  424. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
  425. rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
  426. rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
  427. rasa/dialogue_understanding/stack/utils.py +211 -0
  428. rasa/dialogue_understanding/utils.py +14 -0
  429. rasa/dialogue_understanding_test/__init__.py +0 -0
  430. rasa/dialogue_understanding_test/command_metric_calculation.py +12 -0
  431. rasa/dialogue_understanding_test/constants.py +17 -0
  432. rasa/dialogue_understanding_test/du_test_case.py +118 -0
  433. rasa/dialogue_understanding_test/du_test_result.py +11 -0
  434. rasa/dialogue_understanding_test/du_test_runner.py +93 -0
  435. rasa/dialogue_understanding_test/io.py +54 -0
  436. rasa/dialogue_understanding_test/validation.py +22 -0
  437. rasa/e2e_test/__init__.py +0 -0
  438. rasa/e2e_test/aggregate_test_stats_calculator.py +134 -0
  439. rasa/e2e_test/assertions.py +1345 -0
  440. rasa/e2e_test/assertions_schema.yml +129 -0
  441. rasa/e2e_test/constants.py +31 -0
  442. rasa/e2e_test/e2e_config.py +220 -0
  443. rasa/e2e_test/e2e_config_schema.yml +26 -0
  444. rasa/e2e_test/e2e_test_case.py +569 -0
  445. rasa/e2e_test/e2e_test_converter.py +363 -0
  446. rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
  447. rasa/e2e_test/e2e_test_coverage_report.py +364 -0
  448. rasa/e2e_test/e2e_test_result.py +54 -0
  449. rasa/e2e_test/e2e_test_runner.py +1192 -0
  450. rasa/e2e_test/e2e_test_schema.yml +181 -0
  451. rasa/e2e_test/pykwalify_extensions.py +39 -0
  452. rasa/e2e_test/stub_custom_action.py +70 -0
  453. rasa/e2e_test/utils/__init__.py +0 -0
  454. rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
  455. rasa/e2e_test/utils/io.py +598 -0
  456. rasa/e2e_test/utils/validation.py +178 -0
  457. rasa/engine/__init__.py +0 -0
  458. rasa/engine/caching.py +463 -0
  459. rasa/engine/constants.py +17 -0
  460. rasa/engine/exceptions.py +14 -0
  461. rasa/engine/graph.py +642 -0
  462. rasa/engine/loader.py +48 -0
  463. rasa/engine/recipes/__init__.py +0 -0
  464. rasa/engine/recipes/config_files/default_config.yml +41 -0
  465. rasa/engine/recipes/default_components.py +97 -0
  466. rasa/engine/recipes/default_recipe.py +1272 -0
  467. rasa/engine/recipes/graph_recipe.py +79 -0
  468. rasa/engine/recipes/recipe.py +93 -0
  469. rasa/engine/runner/__init__.py +0 -0
  470. rasa/engine/runner/dask.py +250 -0
  471. rasa/engine/runner/interface.py +49 -0
  472. rasa/engine/storage/__init__.py +0 -0
  473. rasa/engine/storage/local_model_storage.py +244 -0
  474. rasa/engine/storage/resource.py +110 -0
  475. rasa/engine/storage/storage.py +199 -0
  476. rasa/engine/training/__init__.py +0 -0
  477. rasa/engine/training/components.py +176 -0
  478. rasa/engine/training/fingerprinting.py +64 -0
  479. rasa/engine/training/graph_trainer.py +256 -0
  480. rasa/engine/training/hooks.py +164 -0
  481. rasa/engine/validation.py +1451 -0
  482. rasa/env.py +14 -0
  483. rasa/exceptions.py +69 -0
  484. rasa/graph_components/__init__.py +0 -0
  485. rasa/graph_components/converters/__init__.py +0 -0
  486. rasa/graph_components/converters/nlu_message_converter.py +48 -0
  487. rasa/graph_components/providers/__init__.py +0 -0
  488. rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
  489. rasa/graph_components/providers/domain_provider.py +71 -0
  490. rasa/graph_components/providers/flows_provider.py +74 -0
  491. rasa/graph_components/providers/forms_provider.py +44 -0
  492. rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
  493. rasa/graph_components/providers/responses_provider.py +44 -0
  494. rasa/graph_components/providers/rule_only_provider.py +49 -0
  495. rasa/graph_components/providers/story_graph_provider.py +96 -0
  496. rasa/graph_components/providers/training_tracker_provider.py +55 -0
  497. rasa/graph_components/validators/__init__.py +0 -0
  498. rasa/graph_components/validators/default_recipe_validator.py +550 -0
  499. rasa/graph_components/validators/finetuning_validator.py +302 -0
  500. rasa/hooks.py +111 -0
  501. rasa/jupyter.py +63 -0
  502. rasa/llm_fine_tuning/__init__.py +0 -0
  503. rasa/llm_fine_tuning/annotation_module.py +241 -0
  504. rasa/llm_fine_tuning/conversations.py +144 -0
  505. rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
  506. rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
  507. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
  508. rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
  509. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
  510. rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
  511. rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
  512. rasa/llm_fine_tuning/storage.py +174 -0
  513. rasa/llm_fine_tuning/train_test_split_module.py +441 -0
  514. rasa/markers/__init__.py +0 -0
  515. rasa/markers/marker.py +269 -0
  516. rasa/markers/marker_base.py +828 -0
  517. rasa/markers/upload.py +74 -0
  518. rasa/markers/validate.py +21 -0
  519. rasa/model.py +118 -0
  520. rasa/model_manager/__init__.py +0 -0
  521. rasa/model_manager/config.py +40 -0
  522. rasa/model_manager/model_api.py +559 -0
  523. rasa/model_manager/runner_service.py +286 -0
  524. rasa/model_manager/socket_bridge.py +146 -0
  525. rasa/model_manager/studio_jwt_auth.py +86 -0
  526. rasa/model_manager/trainer_service.py +325 -0
  527. rasa/model_manager/utils.py +87 -0
  528. rasa/model_manager/warm_rasa_process.py +187 -0
  529. rasa/model_service.py +112 -0
  530. rasa/model_testing.py +457 -0
  531. rasa/model_training.py +596 -0
  532. rasa/nlu/__init__.py +7 -0
  533. rasa/nlu/classifiers/__init__.py +3 -0
  534. rasa/nlu/classifiers/classifier.py +5 -0
  535. rasa/nlu/classifiers/diet_classifier.py +1881 -0
  536. rasa/nlu/classifiers/fallback_classifier.py +192 -0
  537. rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
  538. rasa/nlu/classifiers/logistic_regression_classifier.py +253 -0
  539. rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
  540. rasa/nlu/classifiers/regex_message_handler.py +56 -0
  541. rasa/nlu/classifiers/sklearn_intent_classifier.py +330 -0
  542. rasa/nlu/constants.py +77 -0
  543. rasa/nlu/convert.py +40 -0
  544. rasa/nlu/emulators/__init__.py +0 -0
  545. rasa/nlu/emulators/dialogflow.py +55 -0
  546. rasa/nlu/emulators/emulator.py +49 -0
  547. rasa/nlu/emulators/luis.py +86 -0
  548. rasa/nlu/emulators/no_emulator.py +10 -0
  549. rasa/nlu/emulators/wit.py +56 -0
  550. rasa/nlu/extractors/__init__.py +0 -0
  551. rasa/nlu/extractors/crf_entity_extractor.py +715 -0
  552. rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
  553. rasa/nlu/extractors/entity_synonyms.py +178 -0
  554. rasa/nlu/extractors/extractor.py +470 -0
  555. rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
  556. rasa/nlu/extractors/regex_entity_extractor.py +220 -0
  557. rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
  558. rasa/nlu/featurizers/__init__.py +0 -0
  559. rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
  560. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +445 -0
  561. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
  562. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +768 -0
  563. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
  564. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
  565. rasa/nlu/featurizers/featurizer.py +89 -0
  566. rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
  567. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +867 -0
  568. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +571 -0
  569. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +271 -0
  570. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
  571. rasa/nlu/model.py +24 -0
  572. rasa/nlu/run.py +27 -0
  573. rasa/nlu/selectors/__init__.py +0 -0
  574. rasa/nlu/selectors/response_selector.py +987 -0
  575. rasa/nlu/test.py +1940 -0
  576. rasa/nlu/tokenizers/__init__.py +0 -0
  577. rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
  578. rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
  579. rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
  580. rasa/nlu/tokenizers/tokenizer.py +239 -0
  581. rasa/nlu/tokenizers/whitespace_tokenizer.py +95 -0
  582. rasa/nlu/utils/__init__.py +35 -0
  583. rasa/nlu/utils/bilou_utils.py +462 -0
  584. rasa/nlu/utils/hugging_face/__init__.py +0 -0
  585. rasa/nlu/utils/hugging_face/registry.py +108 -0
  586. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
  587. rasa/nlu/utils/mitie_utils.py +113 -0
  588. rasa/nlu/utils/pattern_utils.py +168 -0
  589. rasa/nlu/utils/spacy_utils.py +310 -0
  590. rasa/plugin.py +90 -0
  591. rasa/server.py +1588 -0
  592. rasa/shared/__init__.py +0 -0
  593. rasa/shared/constants.py +311 -0
  594. rasa/shared/core/__init__.py +0 -0
  595. rasa/shared/core/command_payload_reader.py +109 -0
  596. rasa/shared/core/constants.py +180 -0
  597. rasa/shared/core/conversation.py +46 -0
  598. rasa/shared/core/domain.py +2172 -0
  599. rasa/shared/core/events.py +2559 -0
  600. rasa/shared/core/flows/__init__.py +7 -0
  601. rasa/shared/core/flows/flow.py +562 -0
  602. rasa/shared/core/flows/flow_path.py +84 -0
  603. rasa/shared/core/flows/flow_step.py +146 -0
  604. rasa/shared/core/flows/flow_step_links.py +319 -0
  605. rasa/shared/core/flows/flow_step_sequence.py +70 -0
  606. rasa/shared/core/flows/flows_list.py +258 -0
  607. rasa/shared/core/flows/flows_yaml_schema.json +303 -0
  608. rasa/shared/core/flows/nlu_trigger.py +117 -0
  609. rasa/shared/core/flows/steps/__init__.py +24 -0
  610. rasa/shared/core/flows/steps/action.py +56 -0
  611. rasa/shared/core/flows/steps/call.py +64 -0
  612. rasa/shared/core/flows/steps/collect.py +112 -0
  613. rasa/shared/core/flows/steps/constants.py +5 -0
  614. rasa/shared/core/flows/steps/continuation.py +36 -0
  615. rasa/shared/core/flows/steps/end.py +22 -0
  616. rasa/shared/core/flows/steps/internal.py +44 -0
  617. rasa/shared/core/flows/steps/link.py +51 -0
  618. rasa/shared/core/flows/steps/no_operation.py +48 -0
  619. rasa/shared/core/flows/steps/set_slots.py +50 -0
  620. rasa/shared/core/flows/steps/start.py +30 -0
  621. rasa/shared/core/flows/utils.py +39 -0
  622. rasa/shared/core/flows/validation.py +735 -0
  623. rasa/shared/core/flows/yaml_flows_io.py +405 -0
  624. rasa/shared/core/generator.py +908 -0
  625. rasa/shared/core/slot_mappings.py +526 -0
  626. rasa/shared/core/slots.py +654 -0
  627. rasa/shared/core/trackers.py +1183 -0
  628. rasa/shared/core/training_data/__init__.py +0 -0
  629. rasa/shared/core/training_data/loading.py +89 -0
  630. rasa/shared/core/training_data/story_reader/__init__.py +0 -0
  631. rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
  632. rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
  633. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
  634. rasa/shared/core/training_data/story_writer/__init__.py +0 -0
  635. rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
  636. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +444 -0
  637. rasa/shared/core/training_data/structures.py +858 -0
  638. rasa/shared/core/training_data/visualization.html +146 -0
  639. rasa/shared/core/training_data/visualization.py +603 -0
  640. rasa/shared/data.py +249 -0
  641. rasa/shared/engine/__init__.py +0 -0
  642. rasa/shared/engine/caching.py +26 -0
  643. rasa/shared/exceptions.py +167 -0
  644. rasa/shared/importers/__init__.py +0 -0
  645. rasa/shared/importers/importer.py +770 -0
  646. rasa/shared/importers/multi_project.py +215 -0
  647. rasa/shared/importers/rasa.py +108 -0
  648. rasa/shared/importers/remote_importer.py +196 -0
  649. rasa/shared/importers/utils.py +36 -0
  650. rasa/shared/nlu/__init__.py +0 -0
  651. rasa/shared/nlu/constants.py +53 -0
  652. rasa/shared/nlu/interpreter.py +10 -0
  653. rasa/shared/nlu/training_data/__init__.py +0 -0
  654. rasa/shared/nlu/training_data/entities_parser.py +208 -0
  655. rasa/shared/nlu/training_data/features.py +492 -0
  656. rasa/shared/nlu/training_data/formats/__init__.py +10 -0
  657. rasa/shared/nlu/training_data/formats/dialogflow.py +163 -0
  658. rasa/shared/nlu/training_data/formats/luis.py +87 -0
  659. rasa/shared/nlu/training_data/formats/rasa.py +135 -0
  660. rasa/shared/nlu/training_data/formats/rasa_yaml.py +618 -0
  661. rasa/shared/nlu/training_data/formats/readerwriter.py +244 -0
  662. rasa/shared/nlu/training_data/formats/wit.py +52 -0
  663. rasa/shared/nlu/training_data/loading.py +137 -0
  664. rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
  665. rasa/shared/nlu/training_data/message.py +490 -0
  666. rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
  667. rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
  668. rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
  669. rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
  670. rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
  671. rasa/shared/nlu/training_data/training_data.py +729 -0
  672. rasa/shared/nlu/training_data/util.py +223 -0
  673. rasa/shared/providers/__init__.py +0 -0
  674. rasa/shared/providers/_configs/__init__.py +0 -0
  675. rasa/shared/providers/_configs/azure_openai_client_config.py +677 -0
  676. rasa/shared/providers/_configs/client_config.py +59 -0
  677. rasa/shared/providers/_configs/default_litellm_client_config.py +132 -0
  678. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +236 -0
  679. rasa/shared/providers/_configs/litellm_router_client_config.py +222 -0
  680. rasa/shared/providers/_configs/model_group_config.py +173 -0
  681. rasa/shared/providers/_configs/openai_client_config.py +177 -0
  682. rasa/shared/providers/_configs/rasa_llm_client_config.py +75 -0
  683. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +178 -0
  684. rasa/shared/providers/_configs/utils.py +117 -0
  685. rasa/shared/providers/_ssl_verification_utils.py +124 -0
  686. rasa/shared/providers/_utils.py +79 -0
  687. rasa/shared/providers/constants.py +7 -0
  688. rasa/shared/providers/embedding/__init__.py +0 -0
  689. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +243 -0
  690. rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
  691. rasa/shared/providers/embedding/azure_openai_embedding_client.py +335 -0
  692. rasa/shared/providers/embedding/default_litellm_embedding_client.py +126 -0
  693. rasa/shared/providers/embedding/embedding_client.py +90 -0
  694. rasa/shared/providers/embedding/embedding_response.py +41 -0
  695. rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
  696. rasa/shared/providers/embedding/litellm_router_embedding_client.py +138 -0
  697. rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
  698. rasa/shared/providers/llm/__init__.py +0 -0
  699. rasa/shared/providers/llm/_base_litellm_client.py +265 -0
  700. rasa/shared/providers/llm/azure_openai_llm_client.py +415 -0
  701. rasa/shared/providers/llm/default_litellm_llm_client.py +110 -0
  702. rasa/shared/providers/llm/litellm_router_llm_client.py +202 -0
  703. rasa/shared/providers/llm/llm_client.py +78 -0
  704. rasa/shared/providers/llm/llm_response.py +50 -0
  705. rasa/shared/providers/llm/openai_llm_client.py +161 -0
  706. rasa/shared/providers/llm/rasa_llm_client.py +120 -0
  707. rasa/shared/providers/llm/self_hosted_llm_client.py +276 -0
  708. rasa/shared/providers/mappings.py +94 -0
  709. rasa/shared/providers/router/__init__.py +0 -0
  710. rasa/shared/providers/router/_base_litellm_router_client.py +185 -0
  711. rasa/shared/providers/router/router_client.py +75 -0
  712. rasa/shared/utils/__init__.py +0 -0
  713. rasa/shared/utils/cli.py +102 -0
  714. rasa/shared/utils/common.py +324 -0
  715. rasa/shared/utils/constants.py +4 -0
  716. rasa/shared/utils/health_check/__init__.py +0 -0
  717. rasa/shared/utils/health_check/embeddings_health_check_mixin.py +31 -0
  718. rasa/shared/utils/health_check/health_check.py +258 -0
  719. rasa/shared/utils/health_check/llm_health_check_mixin.py +31 -0
  720. rasa/shared/utils/io.py +499 -0
  721. rasa/shared/utils/llm.py +764 -0
  722. rasa/shared/utils/pykwalify_extensions.py +27 -0
  723. rasa/shared/utils/schemas/__init__.py +0 -0
  724. rasa/shared/utils/schemas/config.yml +2 -0
  725. rasa/shared/utils/schemas/domain.yml +145 -0
  726. rasa/shared/utils/schemas/events.py +214 -0
  727. rasa/shared/utils/schemas/model_config.yml +36 -0
  728. rasa/shared/utils/schemas/stories.yml +173 -0
  729. rasa/shared/utils/yaml.py +1068 -0
  730. rasa/studio/__init__.py +0 -0
  731. rasa/studio/auth.py +270 -0
  732. rasa/studio/config.py +136 -0
  733. rasa/studio/constants.py +19 -0
  734. rasa/studio/data_handler.py +368 -0
  735. rasa/studio/download.py +489 -0
  736. rasa/studio/results_logger.py +137 -0
  737. rasa/studio/train.py +134 -0
  738. rasa/studio/upload.py +563 -0
  739. rasa/telemetry.py +1876 -0
  740. rasa/tracing/__init__.py +0 -0
  741. rasa/tracing/config.py +355 -0
  742. rasa/tracing/constants.py +62 -0
  743. rasa/tracing/instrumentation/__init__.py +0 -0
  744. rasa/tracing/instrumentation/attribute_extractors.py +765 -0
  745. rasa/tracing/instrumentation/instrumentation.py +1306 -0
  746. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +144 -0
  747. rasa/tracing/instrumentation/metrics.py +294 -0
  748. rasa/tracing/metric_instrument_provider.py +205 -0
  749. rasa/utils/__init__.py +0 -0
  750. rasa/utils/beta.py +83 -0
  751. rasa/utils/cli.py +28 -0
  752. rasa/utils/common.py +639 -0
  753. rasa/utils/converter.py +53 -0
  754. rasa/utils/endpoints.py +331 -0
  755. rasa/utils/io.py +252 -0
  756. rasa/utils/json_utils.py +60 -0
  757. rasa/utils/licensing.py +542 -0
  758. rasa/utils/log_utils.py +181 -0
  759. rasa/utils/mapper.py +210 -0
  760. rasa/utils/ml_utils.py +147 -0
  761. rasa/utils/plotting.py +362 -0
  762. rasa/utils/sanic_error_handler.py +32 -0
  763. rasa/utils/singleton.py +23 -0
  764. rasa/utils/tensorflow/__init__.py +0 -0
  765. rasa/utils/tensorflow/callback.py +112 -0
  766. rasa/utils/tensorflow/constants.py +116 -0
  767. rasa/utils/tensorflow/crf.py +492 -0
  768. rasa/utils/tensorflow/data_generator.py +440 -0
  769. rasa/utils/tensorflow/environment.py +161 -0
  770. rasa/utils/tensorflow/exceptions.py +5 -0
  771. rasa/utils/tensorflow/feature_array.py +366 -0
  772. rasa/utils/tensorflow/layers.py +1565 -0
  773. rasa/utils/tensorflow/layers_utils.py +113 -0
  774. rasa/utils/tensorflow/metrics.py +281 -0
  775. rasa/utils/tensorflow/model_data.py +798 -0
  776. rasa/utils/tensorflow/model_data_utils.py +499 -0
  777. rasa/utils/tensorflow/models.py +935 -0
  778. rasa/utils/tensorflow/rasa_layers.py +1094 -0
  779. rasa/utils/tensorflow/transformer.py +640 -0
  780. rasa/utils/tensorflow/types.py +6 -0
  781. rasa/utils/train_utils.py +572 -0
  782. rasa/utils/url_tools.py +53 -0
  783. rasa/utils/yaml.py +54 -0
  784. rasa/validator.py +1644 -0
  785. rasa/version.py +3 -0
  786. rasa_pro-3.12.0.dev1.dist-info/METADATA +199 -0
  787. rasa_pro-3.12.0.dev1.dist-info/NOTICE +5 -0
  788. rasa_pro-3.12.0.dev1.dist-info/RECORD +790 -0
  789. rasa_pro-3.12.0.dev1.dist-info/WHEEL +4 -0
  790. rasa_pro-3.12.0.dev1.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,735 @@
1
+ from __future__ import annotations
2
+
3
+ import re
4
+ import typing
5
+ from collections import defaultdict
6
+ from dataclasses import dataclass
7
+ from typing import Optional, Set, Text, List
8
+
9
+ from rasa.shared.constants import (
10
+ RASA_DEFAULT_FLOW_PATTERN_PREFIX,
11
+ RASA_PATTERN_HUMAN_HANDOFF,
12
+ )
13
+ from rasa.shared.constants import (
14
+ RASA_PATTERN_INTERNAL_ERROR,
15
+ )
16
+ from rasa.shared.core.flows.flow import Flow
17
+ from rasa.shared.core.flows.flow_step import (
18
+ FlowStep,
19
+ )
20
+ from rasa.shared.core.flows.flow_step_links import (
21
+ BranchingFlowStepLink,
22
+ IfFlowStepLink,
23
+ ElseFlowStepLink,
24
+ )
25
+ from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
26
+ from rasa.shared.core.flows.steps.call import CallFlowStep
27
+ from rasa.shared.core.flows.steps.collect import CollectInformationFlowStep
28
+ from rasa.shared.core.flows.steps.constants import CONTINUE_STEP_PREFIX, DEFAULT_STEPS
29
+ from rasa.shared.core.flows.steps.link import LinkFlowStep
30
+ from rasa.shared.core.flows.steps.set_slots import SetSlotsFlowStep
31
+ from rasa.shared.core.flows.utils import (
32
+ warn_deprecated_collect_step_config,
33
+ get_duplicate_slot_persistence_config_error_message,
34
+ get_invalid_slot_persistence_config_error_message,
35
+ )
36
+ from rasa.shared.exceptions import RasaException
37
+
38
+ if typing.TYPE_CHECKING:
39
+ from rasa.shared.core.flows.flows_list import FlowsList
40
+
41
+ FLOW_ID_REGEX = r"""^[a-zA-Z0-9_][a-zA-Z0-9_-]*?$"""
42
+
43
+
44
+ class UnreachableFlowStepException(RasaException):
45
+ """Raised when a flow step is unreachable."""
46
+
47
+ def __init__(self, step_id: str, flow_id: str) -> None:
48
+ """Initializes the exception."""
49
+ self.step_id = step_id
50
+ self.flow_id = flow_id
51
+
52
+ def __str__(self) -> str:
53
+ """Return a string representation of the exception."""
54
+ return (
55
+ f"Step '{self.step_id}' in flow '{self.flow_id}' can not be reached "
56
+ f"from the start step. Please make sure that all steps can be reached "
57
+ f"from the start step, e.g. by "
58
+ f"checking that another step points to this step."
59
+ )
60
+
61
+
62
+ class MissingNextLinkException(RasaException):
63
+ """Raised when a flow step is missing a next link."""
64
+
65
+ def __init__(self, step_id: str, flow_id: str) -> None:
66
+ """Initializes the exception."""
67
+ self.step_id = step_id
68
+ self.flow_id = flow_id
69
+
70
+ def __str__(self) -> str:
71
+ """Return a string representation of the exception."""
72
+ return (
73
+ f"Step '{self.step_id}' in flow '{self.flow_id}' is missing a `next`. "
74
+ f"As a last step of a branch, it is required to have one. "
75
+ )
76
+
77
+
78
+ class ReservedFlowStepIdException(RasaException):
79
+ """Raised when a flow step is using a reserved id."""
80
+
81
+ def __init__(self, step_id: str, flow_id: str) -> None:
82
+ """Initializes the exception."""
83
+ self.step_id = step_id
84
+ self.flow_id = flow_id
85
+
86
+ def __str__(self) -> str:
87
+ """Return a string representation of the exception."""
88
+ return (
89
+ f"Step '{self.step_id}' in flow '{self.flow_id}' is using the reserved id "
90
+ f"'{self.step_id}'. Please use a different id for your step."
91
+ )
92
+
93
+
94
+ class DuplicatedStepIdException(RasaException):
95
+ """Raised when a flow step is using the same id as another step."""
96
+
97
+ def __init__(self, step_id: str, flow_id: str) -> None:
98
+ """Initializes the exception."""
99
+ self.step_id = step_id
100
+ self.flow_id = flow_id
101
+
102
+ def __str__(self) -> str:
103
+ """Return a string representation of the exception."""
104
+ return (
105
+ f"Step '{self.step_id}' in flow '{self.flow_id}' is using the same id as "
106
+ f"another step. Step ids must be unique across all steps of a flow. "
107
+ f"Please use a different id for your step."
108
+ )
109
+
110
+
111
+ class DuplicatedFlowIdException(RasaException):
112
+ """Raised when a flow is using the same id as another flow."""
113
+
114
+ def __init__(
115
+ self, flow_id: str, first_file_path: str, second_file_path: str
116
+ ) -> None:
117
+ """Initializes the exception."""
118
+ self.flow_id = flow_id
119
+ self.first_file_path = first_file_path
120
+ self.second_file_path = second_file_path
121
+
122
+ def __str__(self) -> str:
123
+ """Return a string representation of the exception."""
124
+ if self.first_file_path == self.second_file_path:
125
+ return (
126
+ f"Flow '{self.flow_id}' is used twice in `{self.first_file_path}`. "
127
+ f"Please make sure flow IDs are unique across all files."
128
+ )
129
+ return (
130
+ f"Flow '{self.flow_id}' is used in both "
131
+ f"`{self.first_file_path}` and `{self.second_file_path}`. "
132
+ f"Please make sure flow IDs are unique across all files."
133
+ )
134
+
135
+
136
+ class MissingElseBranchException(RasaException):
137
+ """Raised when a flow step is missing an else branch."""
138
+
139
+ def __init__(self, step_id: str, flow_id: str) -> None:
140
+ """Initializes the exception."""
141
+ self.step_id = step_id
142
+ self.flow_id = flow_id
143
+
144
+ def __str__(self) -> str:
145
+ """Return a string representation of the exception."""
146
+ return (
147
+ f"Step '{self.step_id}' in flow '{self.flow_id}' is missing an `else` "
148
+ f"branch. If a steps `next` statement contains an `if` it always "
149
+ f"also needs an `else` branch. Please add the missing `else` branch."
150
+ )
151
+
152
+
153
+ class NoNextAllowedForLinkException(RasaException):
154
+ """Raised when a flow step has a next link but is not allowed to have one."""
155
+
156
+ def __init__(self, step_id: str, flow_id: str) -> None:
157
+ """Initializes the exception."""
158
+ self.step_id = step_id
159
+ self.flow_id = flow_id
160
+
161
+ def __str__(self) -> str:
162
+ """Return a string representation of the exception."""
163
+ return (
164
+ f"Link step '{self.step_id}' in flow '{self.flow_id}' has a `next` but "
165
+ f"as a link step is not allowed to have one."
166
+ )
167
+
168
+
169
+ class ReferenceToPatternException(RasaException):
170
+ """Raised when a flow step is referencing a pattern, which is not allowed."""
171
+
172
+ def __init__(
173
+ self, referenced_pattern: str, flow_id: str, step_id: str, call_step: bool
174
+ ) -> None:
175
+ """Initializes the exception."""
176
+ self.step_id = step_id
177
+ self.flow_id = flow_id
178
+ self.referenced_pattern = referenced_pattern
179
+ self.call_step = call_step
180
+
181
+ def __str__(self) -> str:
182
+ """Return a string representation of the exception."""
183
+ message = (
184
+ f"Step '{self.step_id}' in flow '{self.flow_id}' is referencing a "
185
+ f"pattern '{self.referenced_pattern}', which is not allowed. "
186
+ )
187
+ if self.call_step:
188
+ return message + "Patterns can not be used as a target for a call step."
189
+ else:
190
+ return message + (
191
+ "All patterns, except for 'pattern_human_handoff', can "
192
+ "not be used as a target for a link step."
193
+ )
194
+
195
+
196
+ class PatternReferencedPatternException(RasaException):
197
+ """Raised when a pattern is referencing a pattern, which is not allowed."""
198
+
199
+ def __init__(self, flow_id: str, step_id: str, call_step: bool) -> None:
200
+ """Initializes the exception."""
201
+ self.step_id = step_id
202
+ self.flow_id = flow_id
203
+ self.call_step = call_step
204
+
205
+ def __str__(self) -> str:
206
+ """Return a string representation of the exception."""
207
+ message = (
208
+ f"Step '{self.step_id}' in pattern '{self.flow_id}' is referencing a "
209
+ f"pattern which is not allowed. "
210
+ )
211
+ if self.call_step:
212
+ return message + "Patterns can not use call steps to other patterns."
213
+ else:
214
+ return message + (
215
+ "Patterns can not use link steps to other patterns. "
216
+ "Exception: patterns can link to 'pattern_human_handoff'."
217
+ )
218
+
219
+
220
+ class PatternReferencedFlowException(RasaException):
221
+ """Raised when a pattern is referencing a flow, which is not allowed."""
222
+
223
+ def __init__(self, flow_id: str, step_id: str, call_step: bool) -> None:
224
+ """Initializes the exception."""
225
+ self.step_id = step_id
226
+ self.flow_id = flow_id
227
+ self.call_step = call_step
228
+
229
+ def __str__(self) -> str:
230
+ """Return a string representation of the exception."""
231
+ message = (
232
+ f"Step '{self.step_id}' in pattern '{self.flow_id}' is referencing a flow "
233
+ f"which is not allowed. "
234
+ )
235
+ if self.call_step:
236
+ return message + "Patterns can not use call steps."
237
+ else:
238
+ return message + (
239
+ "'pattern_internal_error' can not use link steps to user flows."
240
+ )
241
+
242
+
243
+ class NoLinkAllowedInCalledFlowException(RasaException):
244
+ """Raised when a flow is called from another flow but is also using a link."""
245
+
246
+ def __init__(self, step_id: str, flow_id: str, called_flow_id: str) -> None:
247
+ """Initializes the exception."""
248
+ self.step_id = step_id
249
+ self.flow_id = flow_id
250
+ self.called_flow_id = called_flow_id
251
+
252
+ def __str__(self) -> str:
253
+ """Return a string representation of the exception."""
254
+ return (
255
+ f"Flow '{self.flow_id}' is calling another flow (call step). "
256
+ f"The flow that is getting called ('{self.called_flow_id}') is "
257
+ f"using a link step, which is not allowed. "
258
+ f"Either this flow can not be called or the link step in {self.step_id} "
259
+ f"needs to be removed."
260
+ )
261
+
262
+
263
+ class UnresolvedFlowException(RasaException):
264
+ """Raised when a flow is called or linked from another flow but doesn't exist."""
265
+
266
+ def __init__(self, flow_id: str, calling_flow_id: str, step_id: str) -> None:
267
+ """Initializes the exception."""
268
+ self.flow_id = flow_id
269
+ self.calling_flow_id = calling_flow_id
270
+ self.step_id = step_id
271
+
272
+ def __str__(self) -> str:
273
+ """Return a string representation of the exception."""
274
+ return (
275
+ f"Flow '{self.flow_id}' is called or linked from flow "
276
+ f"'{self.calling_flow_id}' in step '{self.step_id}', "
277
+ f"but it doesn't exist. "
278
+ f"Please make sure that a flow with id '{self.flow_id}' exists."
279
+ )
280
+
281
+
282
+ class UnresolvedFlowStepIdException(RasaException):
283
+ """Raised when a flow step is referenced, but its id can not be resolved."""
284
+
285
+ def __init__(
286
+ self, step_id: str, flow_id: str, referenced_from_step_id: Optional[str]
287
+ ) -> None:
288
+ """Initializes the exception."""
289
+ self.step_id = step_id
290
+ self.flow_id = flow_id
291
+ self.referenced_from_step_id = referenced_from_step_id
292
+
293
+ def __str__(self) -> str:
294
+ """Return a string representation of the exception."""
295
+ if self.referenced_from_step_id:
296
+ exception_message = (
297
+ f"Step with id '{self.step_id}' could not be resolved. "
298
+ f"'Step '{self.referenced_from_step_id}' in flow '{self.flow_id}' "
299
+ f"referenced this step but it does not exist. "
300
+ )
301
+ else:
302
+ exception_message = (
303
+ f"Step '{self.step_id}' in flow '{self.flow_id}' can not be resolved. "
304
+ )
305
+
306
+ return exception_message + (
307
+ "Please make sure that the step is defined in the same flow."
308
+ )
309
+
310
+
311
+ class EmptyStepSequenceException(RasaException):
312
+ """Raised when an empty step sequence is encountered."""
313
+
314
+ def __init__(self, flow_id: str, step_id: str) -> None:
315
+ """Initializes the exception."""
316
+ self.flow_id = flow_id
317
+ self.step_id = step_id
318
+
319
+ def __str__(self) -> str:
320
+ """Return a string representation of the exception."""
321
+ return (
322
+ f"Encountered an empty step sequence in flow '{self.flow_id}' "
323
+ f"and step '{self.step_id}'."
324
+ )
325
+
326
+
327
+ class EmptyFlowException(RasaException):
328
+ """Raised when a flow is completely empty."""
329
+
330
+ def __init__(self, flow_id: str) -> None:
331
+ """Initializes the exception."""
332
+ self.flow_id = flow_id
333
+
334
+ def __str__(self) -> str:
335
+ """Return a string representation of the exception."""
336
+ return f"Flow '{self.flow_id}' does not have any steps."
337
+
338
+
339
+ class DuplicateNLUTriggerException(RasaException):
340
+ """Raised when multiple flows can be started by the same intent."""
341
+
342
+ def __init__(self, intent: str, flow_names: List[str]) -> None:
343
+ """Initializes the exception."""
344
+ self.intent = intent
345
+ self.flow_names = flow_names
346
+
347
+ def __str__(self) -> Text:
348
+ """Return a string representation of the exception."""
349
+ return (
350
+ f"The intent '{self.intent}' is used as 'nlu_trigger' "
351
+ f"in multiple flows: {self.flow_names}. "
352
+ f"An intent should just trigger one flow, not multiple."
353
+ )
354
+
355
+
356
+ class SlotNamingException(RasaException):
357
+ """Raised when a slot name to be collected does not adhere to naming convention."""
358
+
359
+ def __init__(self, flow_id: str, step_id: str, slot_name: str) -> None:
360
+ """Initializes the exception."""
361
+ self.flow_id = flow_id
362
+ self.step_id = step_id
363
+ self.slot_name = slot_name
364
+
365
+ def __str__(self) -> str:
366
+ """Return a string representation of the exception."""
367
+ return (
368
+ f"For the flow '{self.flow_id}', collect step '{self.step_id}' "
369
+ f"the slot name was set to : {self.slot_name}, while it has "
370
+ f"to adhere to the following pattern: [a-zA-Z_][a-zA-Z0-9_-]*?."
371
+ )
372
+
373
+
374
+ class FlowIdNamingException(RasaException):
375
+ """Raised when a flow ID defined does not adhere to naming convention."""
376
+
377
+ def __init__(self, flow_id: str) -> None:
378
+ """Initializes the exception."""
379
+ self.flow_id = flow_id
380
+
381
+ def __str__(self) -> str:
382
+ """Return a string representation of the exception."""
383
+ return (
384
+ f"The flow ID was set to : {self.flow_id}, while it has "
385
+ f"to adhere to the following pattern: [a-zA-Z0-9_][a-zA-Z0-9_-]*?."
386
+ )
387
+
388
+
389
+ class DuplicateSlotPersistConfigException(RasaException):
390
+ """Raised when a slot persist configuration is duplicated."""
391
+
392
+ def __init__(self, flow_id: str, collect_step: str) -> None:
393
+ """Initializes the exception."""
394
+ self.flow_id = flow_id
395
+ self.collect_step = collect_step
396
+
397
+ def __str__(self) -> str:
398
+ """Return a string representation of the exception."""
399
+ return get_duplicate_slot_persistence_config_error_message(
400
+ self.flow_id, self.collect_step
401
+ )
402
+
403
+
404
+ class InvalidPersistSlotsException(RasaException):
405
+ """Raised when a slot persist configuration is duplicated."""
406
+
407
+ def __init__(self, flow_id: str, invalid_slots: Set[str]) -> None:
408
+ """Initializes the exception."""
409
+ self.flow_id = flow_id
410
+ self.invalid_slots = invalid_slots
411
+
412
+ def __str__(self) -> str:
413
+ """Return a string representation of the exception."""
414
+ return get_invalid_slot_persistence_config_error_message(
415
+ self.flow_id, self.invalid_slots
416
+ )
417
+
418
+
419
+ @dataclass
420
+ class ValidationResult:
421
+ is_valid: bool
422
+ invalid_slots: Set[str]
423
+
424
+
425
+ def validate_flow(flow: Flow) -> None:
426
+ """Validates the flow configuration.
427
+
428
+ This ensures that the flow semantically makes sense. E.g. it
429
+ checks:
430
+ - whether all next links point to existing steps
431
+ - whether all steps can be reached from the start step
432
+ """
433
+ from rasa.cli.utils import is_skip_validation_flag_set
434
+
435
+ validate_flow_not_empty(flow)
436
+ validate_no_empty_step_sequences(flow)
437
+ validate_all_steps_next_property(flow)
438
+ validate_all_next_ids_are_available_steps(flow)
439
+ validate_all_steps_can_be_reached(flow)
440
+ validate_all_branches_have_an_else(flow)
441
+ validate_not_using_builtin_ids(flow)
442
+ validate_slot_names_to_be_collected(flow)
443
+ validate_flow_id(flow)
444
+
445
+ if is_skip_validation_flag_set():
446
+ # we only want to run this validation if the --skip-validation flag is used
447
+ # during training because Flow Validation exceptions are raised one by one
448
+ # as opposed to all at once with the Validator class
449
+ validate_slot_persistence_configuration(flow)
450
+
451
+
452
+ def validate_flow_not_empty(flow: Flow) -> None:
453
+ """Validate that the flow is not empty."""
454
+ if len(flow.steps) == 0:
455
+ raise EmptyFlowException(flow.id)
456
+
457
+
458
+ def validate_no_empty_step_sequences(flow: Flow) -> None:
459
+ """Validate that the flow does not have any empty step sequences."""
460
+ for step in flow.steps:
461
+ for link in step.next.links:
462
+ if (
463
+ isinstance(link, BranchingFlowStepLink)
464
+ and isinstance(link.target_reference, FlowStepSequence)
465
+ and len(link.target_reference.child_steps) == 0
466
+ ):
467
+ raise EmptyStepSequenceException(flow.id, step.id)
468
+
469
+
470
+ def validate_not_using_builtin_ids(flow: Flow) -> None:
471
+ """Validates that the flow does not use any of the build in ids."""
472
+ for step in flow.steps:
473
+ if step.id in DEFAULT_STEPS or step.id.startswith(CONTINUE_STEP_PREFIX):
474
+ raise ReservedFlowStepIdException(step.id, flow.id)
475
+
476
+
477
+ def validate_all_branches_have_an_else(flow: Flow) -> None:
478
+ """Validates that all branches have an else link."""
479
+ for step in flow.steps:
480
+ links = step.next.links
481
+
482
+ has_an_if = any(isinstance(link, IfFlowStepLink) for link in links)
483
+ has_an_else = any(isinstance(link, ElseFlowStepLink) for link in links)
484
+
485
+ if has_an_if and not has_an_else:
486
+ raise MissingElseBranchException(step.id, flow.id)
487
+
488
+
489
+ def validate_all_steps_next_property(flow: Flow) -> None:
490
+ """Validates that every step that must have a `next` has one."""
491
+ for step in flow.steps:
492
+ if isinstance(step, LinkFlowStep):
493
+ # link steps can't have a next link!
494
+ if not step.next.no_link_available():
495
+ raise NoNextAllowedForLinkException(step.id, flow.id)
496
+ elif step.next.no_link_available():
497
+ # all other steps should have a next link
498
+ raise MissingNextLinkException(step.id, flow.id)
499
+
500
+
501
+ def validate_all_next_ids_are_available_steps(flow: Flow) -> None:
502
+ """Validates that all next links point to existing steps."""
503
+ available_steps = {step.id for step in flow.steps} | DEFAULT_STEPS
504
+ for step in flow.steps:
505
+ for link in step.next.links:
506
+ if link.target not in available_steps:
507
+ raise UnresolvedFlowStepIdException(link.target, flow.id, step.id)
508
+
509
+
510
+ def validate_all_steps_can_be_reached(flow: Flow) -> None:
511
+ """Validates that all steps can be reached from the start step."""
512
+
513
+ def _reachable_steps(
514
+ step: Optional[FlowStep], reached_steps: Set[Text]
515
+ ) -> Set[Text]:
516
+ """Validates that the given step can be reached from the start step."""
517
+ if step is None or step.id in reached_steps:
518
+ return reached_steps
519
+
520
+ reached_steps.add(step.id)
521
+ for link in step.next.links:
522
+ reached_steps = _reachable_steps(
523
+ flow.step_by_id(link.target), reached_steps
524
+ )
525
+ return reached_steps
526
+
527
+ reached_steps = _reachable_steps(flow.first_step_in_flow(), set())
528
+
529
+ for step in flow.steps:
530
+ if step.id not in reached_steps:
531
+ raise UnreachableFlowStepException(step.id, flow.id)
532
+
533
+
534
+ def validate_nlu_trigger(flows: List[Flow]) -> None:
535
+ """Validates that an intent can just trigger one flow."""
536
+ nlu_trigger_to_flows = defaultdict(list)
537
+
538
+ for flow in flows:
539
+ intents = flow.get_trigger_intents()
540
+ for intent in intents:
541
+ nlu_trigger_to_flows[intent].append(flow.name)
542
+
543
+ for intent, flow_names in nlu_trigger_to_flows.items():
544
+ if len(flow_names) > 1:
545
+ raise DuplicateNLUTriggerException(intent, flow_names)
546
+
547
+
548
+ def validate_link_in_call_restriction(flows: "FlowsList") -> None:
549
+ """Validates that a flow is not called from another flow and uses a link step."""
550
+
551
+ def does_flow_use_link(flow_id: str) -> bool:
552
+ if flow := flows.flow_by_id(flow_id):
553
+ for step in flow.steps:
554
+ if isinstance(step, LinkFlowStep):
555
+ return True
556
+ return False
557
+
558
+ for flow in flows.underlying_flows:
559
+ for step in flow.steps:
560
+ if isinstance(step, CallFlowStep) and does_flow_use_link(step.call):
561
+ raise NoLinkAllowedInCalledFlowException(step.id, flow.id, step.call)
562
+
563
+
564
+ def validate_called_flows_exists(flows: "FlowsList") -> None:
565
+ """Validates that all called flows exist."""
566
+ for flow in flows.underlying_flows:
567
+ for step in flow.steps:
568
+ if not isinstance(step, CallFlowStep):
569
+ continue
570
+
571
+ if flows.flow_by_id(step.call) is None:
572
+ raise UnresolvedFlowException(step.call, flow.id, step.id)
573
+
574
+
575
+ def validate_linked_flows_exists(flows: "FlowsList") -> None:
576
+ """Validates that all linked flows exist."""
577
+ for flow in flows.underlying_flows:
578
+ for step in flow.steps:
579
+ if not isinstance(step, LinkFlowStep):
580
+ continue
581
+
582
+ # It might be that the flows do not contain the default rasa patterns, but
583
+ # only the user flows. Manually check for `pattern_human_handoff` as this
584
+ # pattern can be linked to and it is part of the default patterns of rasa.
585
+ if (
586
+ flows.flow_by_id(step.link) is None
587
+ and step.link != RASA_PATTERN_HUMAN_HANDOFF
588
+ ):
589
+ raise UnresolvedFlowException(step.link, flow.id, step.id)
590
+
591
+
592
+ def validate_patterns_are_not_called_or_linked(flows: "FlowsList") -> None:
593
+ """Validates that patterns are never called or linked.
594
+
595
+ Exception: pattern_human_handoff can be linked.
596
+ """
597
+ for flow in flows.underlying_flows:
598
+ for step in flow.steps:
599
+ if (
600
+ isinstance(step, LinkFlowStep)
601
+ and step.link.startswith(RASA_DEFAULT_FLOW_PATTERN_PREFIX)
602
+ and step.link != RASA_PATTERN_HUMAN_HANDOFF
603
+ ):
604
+ raise ReferenceToPatternException(
605
+ step.link, flow.id, step.id, call_step=False
606
+ )
607
+
608
+ if isinstance(step, CallFlowStep) and step.call.startswith(
609
+ RASA_DEFAULT_FLOW_PATTERN_PREFIX
610
+ ):
611
+ raise ReferenceToPatternException(
612
+ step.call, flow.id, step.id, call_step=True
613
+ )
614
+
615
+
616
+ def validate_patterns_are_not_calling_or_linking_other_flows(
617
+ flows: "FlowsList",
618
+ ) -> None:
619
+ """Validates that patterns do not contain call or link steps.
620
+
621
+ Link steps to user flows are allowed for all patterns but 'pattern_internal_error'.
622
+ Link steps to other patterns, except for 'pattern_human_handoff', are forbidden.
623
+ """
624
+ for flow in flows.underlying_flows:
625
+ if not flow.is_rasa_default_flow:
626
+ continue
627
+ for step in flow.steps:
628
+ if isinstance(step, LinkFlowStep):
629
+ if step.link == RASA_PATTERN_HUMAN_HANDOFF:
630
+ # links to 'pattern_human_handoff' are allowed
631
+ continue
632
+ if step.link.startswith(RASA_DEFAULT_FLOW_PATTERN_PREFIX):
633
+ # all other patterns are allowed to link to user flows, but not
634
+ # to other patterns
635
+ raise PatternReferencedPatternException(
636
+ flow.id, step.id, call_step=False
637
+ )
638
+ if flow.id == RASA_PATTERN_INTERNAL_ERROR:
639
+ # 'pattern_internal_error' is not allowed to link at all
640
+ raise PatternReferencedFlowException(
641
+ flow.id, step.id, call_step=False
642
+ )
643
+ if isinstance(step, CallFlowStep):
644
+ if step.call.startswith(RASA_DEFAULT_FLOW_PATTERN_PREFIX):
645
+ raise PatternReferencedPatternException(
646
+ flow.id, step.id, call_step=True
647
+ )
648
+ else:
649
+ raise PatternReferencedFlowException(
650
+ flow.id, step.id, call_step=True
651
+ )
652
+
653
+
654
+ def validate_step_ids_are_unique(flows: "FlowsList") -> None:
655
+ """Validates that step ids are unique within a flow and any called flows."""
656
+ for flow in flows.underlying_flows:
657
+ used_ids: Set[str] = set()
658
+
659
+ # check that the ids used in the flow are unique
660
+ for step in flow.steps:
661
+ if step.id in used_ids:
662
+ raise DuplicatedStepIdException(step.id, flow.id)
663
+
664
+ used_ids.add(step.id)
665
+
666
+
667
+ def validate_slot_names_to_be_collected(flow: Flow) -> None:
668
+ """Validates that slot names to be collected comply with a specified regex."""
669
+ slot_re = re.compile(r"""^[a-zA-Z_][a-zA-Z0-9_-]*?$""")
670
+ for step in flow.steps:
671
+ if isinstance(step, CollectInformationFlowStep):
672
+ slot_name = step.collect
673
+ if not slot_re.search(slot_name):
674
+ raise SlotNamingException(flow.id, step.id, slot_name)
675
+
676
+
677
+ def validate_flow_id(flow: Flow) -> None:
678
+ """Validates if the flow id comply with a specified regex.
679
+ Flow IDs can start with an alphanumeric character or an underscore.
680
+ Followed by zero or more alphanumeric characters, hyphens, or underscores.
681
+
682
+ Args:
683
+ flow: The flow to validate.
684
+
685
+ Raises:
686
+ FlowIdNamingException: If the flow id does not comply with the regex.
687
+ """
688
+ flow_re = re.compile(FLOW_ID_REGEX)
689
+ if not flow_re.search(flow.id):
690
+ raise FlowIdNamingException(flow.id)
691
+
692
+
693
+ def validate_slot_persistence_configuration(flow: Flow) -> None:
694
+ """Validates that slot persistence configuration is valid.
695
+
696
+ Only slots used in either a collect step or a set_slot step can be persisted
697
+ and the configuration can either be set at the flow level or the collect step level,
698
+ but not both.
699
+
700
+ Args:
701
+ flow: The flow to validate.
702
+
703
+ Raises:
704
+ DuplicateSlotPersistConfigException: If slot persist config is duplicated.
705
+ """
706
+
707
+ def _is_persist_slots_valid(
708
+ persist_slots: List[str], flow_slots: Set[str]
709
+ ) -> ValidationResult:
710
+ """Validates that the slots that should be persisted are used in the flow."""
711
+ invalid_slots = set(persist_slots) - flow_slots
712
+ is_valid = False if invalid_slots else True
713
+
714
+ return ValidationResult(is_valid, invalid_slots)
715
+
716
+ flow_id = flow.id
717
+ persist_slots = flow.persisted_slots
718
+ has_flow_level_persistence = True if persist_slots else False
719
+ flow_slots = set()
720
+
721
+ for step in flow.steps_with_calls_resolved:
722
+ if isinstance(step, SetSlotsFlowStep):
723
+ flow_slots.update([slot["key"] for slot in step.slots])
724
+ elif isinstance(step, CollectInformationFlowStep):
725
+ flow_slots.add(step.collect)
726
+ if not step.reset_after_flow_ends:
727
+ collect_step = step.collect
728
+ warn_deprecated_collect_step_config(flow_id, collect_step)
729
+ if has_flow_level_persistence:
730
+ raise DuplicateSlotPersistConfigException(flow_id, collect_step)
731
+
732
+ if has_flow_level_persistence:
733
+ result = _is_persist_slots_valid(persist_slots, flow_slots)
734
+ if not result.is_valid:
735
+ raise InvalidPersistSlotsException(flow_id, result.invalid_slots)