rasa-pro 3.11.3a1.dev2__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 (784) 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/e2e_test.py +259 -0
  27. rasa/cli/evaluate.py +222 -0
  28. rasa/cli/export.py +250 -0
  29. rasa/cli/inspect.py +75 -0
  30. rasa/cli/interactive.py +166 -0
  31. rasa/cli/license.py +65 -0
  32. rasa/cli/llm_fine_tuning.py +403 -0
  33. rasa/cli/markers.py +78 -0
  34. rasa/cli/project_templates/__init__.py +0 -0
  35. rasa/cli/project_templates/calm/actions/__init__.py +0 -0
  36. rasa/cli/project_templates/calm/actions/action_template.py +27 -0
  37. rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
  38. rasa/cli/project_templates/calm/actions/db.py +57 -0
  39. rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
  40. rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
  41. rasa/cli/project_templates/calm/config.yml +10 -0
  42. rasa/cli/project_templates/calm/credentials.yml +33 -0
  43. rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
  44. rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
  45. rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
  46. rasa/cli/project_templates/calm/db/contacts.json +10 -0
  47. rasa/cli/project_templates/calm/domain/add_contact.yml +39 -0
  48. rasa/cli/project_templates/calm/domain/list_contacts.yml +17 -0
  49. rasa/cli/project_templates/calm/domain/remove_contact.yml +38 -0
  50. rasa/cli/project_templates/calm/domain/shared.yml +10 -0
  51. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
  52. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
  53. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
  54. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
  55. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
  56. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
  57. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
  58. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
  59. rasa/cli/project_templates/calm/endpoints.yml +58 -0
  60. rasa/cli/project_templates/default/actions/__init__.py +0 -0
  61. rasa/cli/project_templates/default/actions/actions.py +27 -0
  62. rasa/cli/project_templates/default/config.yml +44 -0
  63. rasa/cli/project_templates/default/credentials.yml +33 -0
  64. rasa/cli/project_templates/default/data/nlu.yml +91 -0
  65. rasa/cli/project_templates/default/data/rules.yml +13 -0
  66. rasa/cli/project_templates/default/data/stories.yml +30 -0
  67. rasa/cli/project_templates/default/domain.yml +34 -0
  68. rasa/cli/project_templates/default/endpoints.yml +42 -0
  69. rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
  70. rasa/cli/project_templates/tutorial/actions/__init__.py +0 -0
  71. rasa/cli/project_templates/tutorial/actions/actions.py +22 -0
  72. rasa/cli/project_templates/tutorial/config.yml +12 -0
  73. rasa/cli/project_templates/tutorial/credentials.yml +33 -0
  74. rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
  75. rasa/cli/project_templates/tutorial/data/patterns.yml +11 -0
  76. rasa/cli/project_templates/tutorial/domain.yml +35 -0
  77. rasa/cli/project_templates/tutorial/endpoints.yml +55 -0
  78. rasa/cli/run.py +143 -0
  79. rasa/cli/scaffold.py +273 -0
  80. rasa/cli/shell.py +141 -0
  81. rasa/cli/studio/__init__.py +0 -0
  82. rasa/cli/studio/download.py +62 -0
  83. rasa/cli/studio/studio.py +296 -0
  84. rasa/cli/studio/train.py +59 -0
  85. rasa/cli/studio/upload.py +62 -0
  86. rasa/cli/telemetry.py +102 -0
  87. rasa/cli/test.py +280 -0
  88. rasa/cli/train.py +278 -0
  89. rasa/cli/utils.py +484 -0
  90. rasa/cli/visualize.py +40 -0
  91. rasa/cli/x.py +206 -0
  92. rasa/constants.py +45 -0
  93. rasa/core/__init__.py +17 -0
  94. rasa/core/actions/__init__.py +0 -0
  95. rasa/core/actions/action.py +1320 -0
  96. rasa/core/actions/action_clean_stack.py +59 -0
  97. rasa/core/actions/action_exceptions.py +24 -0
  98. rasa/core/actions/action_hangup.py +29 -0
  99. rasa/core/actions/action_repeat_bot_messages.py +89 -0
  100. rasa/core/actions/action_run_slot_rejections.py +210 -0
  101. rasa/core/actions/action_trigger_chitchat.py +31 -0
  102. rasa/core/actions/action_trigger_flow.py +109 -0
  103. rasa/core/actions/action_trigger_search.py +31 -0
  104. rasa/core/actions/constants.py +5 -0
  105. rasa/core/actions/custom_action_executor.py +191 -0
  106. rasa/core/actions/direct_custom_actions_executor.py +109 -0
  107. rasa/core/actions/e2e_stub_custom_action_executor.py +72 -0
  108. rasa/core/actions/forms.py +741 -0
  109. rasa/core/actions/grpc_custom_action_executor.py +251 -0
  110. rasa/core/actions/http_custom_action_executor.py +145 -0
  111. rasa/core/actions/loops.py +114 -0
  112. rasa/core/actions/two_stage_fallback.py +186 -0
  113. rasa/core/agent.py +559 -0
  114. rasa/core/auth_retry_tracker_store.py +122 -0
  115. rasa/core/brokers/__init__.py +0 -0
  116. rasa/core/brokers/broker.py +126 -0
  117. rasa/core/brokers/file.py +58 -0
  118. rasa/core/brokers/kafka.py +324 -0
  119. rasa/core/brokers/pika.py +388 -0
  120. rasa/core/brokers/sql.py +86 -0
  121. rasa/core/channels/__init__.py +61 -0
  122. rasa/core/channels/botframework.py +338 -0
  123. rasa/core/channels/callback.py +84 -0
  124. rasa/core/channels/channel.py +456 -0
  125. rasa/core/channels/console.py +241 -0
  126. rasa/core/channels/development_inspector.py +200 -0
  127. rasa/core/channels/facebook.py +419 -0
  128. rasa/core/channels/hangouts.py +329 -0
  129. rasa/core/channels/inspector/.eslintrc.cjs +25 -0
  130. rasa/core/channels/inspector/.gitignore +23 -0
  131. rasa/core/channels/inspector/README.md +54 -0
  132. rasa/core/channels/inspector/assets/favicon.ico +0 -0
  133. rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
  134. rasa/core/channels/inspector/custom.d.ts +3 -0
  135. rasa/core/channels/inspector/dist/assets/arc-861ddd57.js +1 -0
  136. rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
  137. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-921f02db.js +10 -0
  138. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-b436c4f8.js +2 -0
  139. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-511a23cb.js +2 -0
  140. rasa/core/channels/inspector/dist/assets/createText-62fc7601-ef476ecd.js +7 -0
  141. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-f1878e0a.js +4 -0
  142. rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-fac75185.js +51 -0
  143. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-201c5bbc.js +6 -0
  144. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-f904ae41.js +4 -0
  145. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +1 -0
  146. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-1813da66.js +139 -0
  147. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-872af172.js +266 -0
  148. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-34a0af5a.js +70 -0
  149. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
  150. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
  151. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
  152. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
  153. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-42ba3e3d.js +1 -0
  154. rasa/core/channels/inspector/dist/assets/index-37817b51.js +1317 -0
  155. rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
  156. rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-6b731386.js +7 -0
  157. rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
  158. rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-e8579ac6.js +139 -0
  159. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
  160. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
  161. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
  162. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
  163. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
  164. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
  165. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
  166. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
  167. rasa/core/channels/inspector/dist/assets/layout-89e6403a.js +1 -0
  168. rasa/core/channels/inspector/dist/assets/line-dc73d3fc.js +1 -0
  169. rasa/core/channels/inspector/dist/assets/linear-f5b1d2bc.js +1 -0
  170. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-82cb74fa.js +109 -0
  171. rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
  172. rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
  173. rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-bdf5f29b.js +35 -0
  174. rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-c7a0cbe4.js +7 -0
  175. rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-7ec5410f.js +52 -0
  176. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-caee5554.js +8 -0
  177. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-2935f8db.js +122 -0
  178. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-8f5d9693.js +1 -0
  179. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-d565d1de.js +1 -0
  180. rasa/core/channels/inspector/dist/assets/styles-080da4f6-75ad421d.js +110 -0
  181. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-7e764226.js +159 -0
  182. rasa/core/channels/inspector/dist/assets/styles-9c745c82-7a4e0e61.js +207 -0
  183. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-4019d1bf.js +1 -0
  184. rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-01ea12df.js +61 -0
  185. rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-89407137.js +7 -0
  186. rasa/core/channels/inspector/dist/index.html +42 -0
  187. rasa/core/channels/inspector/index.html +40 -0
  188. rasa/core/channels/inspector/jest.config.ts +13 -0
  189. rasa/core/channels/inspector/package.json +52 -0
  190. rasa/core/channels/inspector/setupTests.ts +2 -0
  191. rasa/core/channels/inspector/src/App.tsx +220 -0
  192. rasa/core/channels/inspector/src/components/Chat.tsx +95 -0
  193. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +108 -0
  194. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
  195. rasa/core/channels/inspector/src/components/DialogueStack.tsx +136 -0
  196. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
  197. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
  198. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +22 -0
  199. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
  200. rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
  201. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
  202. rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
  203. rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
  204. rasa/core/channels/inspector/src/helpers/audiostream.ts +191 -0
  205. rasa/core/channels/inspector/src/helpers/formatters.test.ts +392 -0
  206. rasa/core/channels/inspector/src/helpers/formatters.ts +306 -0
  207. rasa/core/channels/inspector/src/helpers/utils.ts +127 -0
  208. rasa/core/channels/inspector/src/main.tsx +13 -0
  209. rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
  210. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
  211. rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
  212. rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
  213. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
  214. rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
  215. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
  216. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
  217. rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
  218. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
  219. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
  220. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
  221. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
  222. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
  223. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
  224. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
  225. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
  226. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
  227. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
  228. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
  229. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
  230. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
  231. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
  232. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
  233. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
  234. rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
  235. rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
  236. rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
  237. rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
  238. rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
  239. rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
  240. rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
  241. rasa/core/channels/inspector/src/theme/index.ts +101 -0
  242. rasa/core/channels/inspector/src/types.ts +84 -0
  243. rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
  244. rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
  245. rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
  246. rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
  247. rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
  248. rasa/core/channels/inspector/tsconfig.json +26 -0
  249. rasa/core/channels/inspector/tsconfig.node.json +10 -0
  250. rasa/core/channels/inspector/vite.config.ts +8 -0
  251. rasa/core/channels/inspector/yarn.lock +6249 -0
  252. rasa/core/channels/mattermost.py +229 -0
  253. rasa/core/channels/rasa_chat.py +126 -0
  254. rasa/core/channels/rest.py +230 -0
  255. rasa/core/channels/rocketchat.py +174 -0
  256. rasa/core/channels/slack.py +620 -0
  257. rasa/core/channels/socketio.py +306 -0
  258. rasa/core/channels/telegram.py +298 -0
  259. rasa/core/channels/twilio.py +169 -0
  260. rasa/core/channels/vier_cvg.py +374 -0
  261. rasa/core/channels/voice_ready/__init__.py +0 -0
  262. rasa/core/channels/voice_ready/audiocodes.py +501 -0
  263. rasa/core/channels/voice_ready/jambonz.py +121 -0
  264. rasa/core/channels/voice_ready/jambonz_protocol.py +396 -0
  265. rasa/core/channels/voice_ready/twilio_voice.py +403 -0
  266. rasa/core/channels/voice_ready/utils.py +37 -0
  267. rasa/core/channels/voice_stream/__init__.py +0 -0
  268. rasa/core/channels/voice_stream/asr/__init__.py +0 -0
  269. rasa/core/channels/voice_stream/asr/asr_engine.py +89 -0
  270. rasa/core/channels/voice_stream/asr/asr_event.py +18 -0
  271. rasa/core/channels/voice_stream/asr/azure.py +130 -0
  272. rasa/core/channels/voice_stream/asr/deepgram.py +90 -0
  273. rasa/core/channels/voice_stream/audio_bytes.py +8 -0
  274. rasa/core/channels/voice_stream/browser_audio.py +107 -0
  275. rasa/core/channels/voice_stream/call_state.py +23 -0
  276. rasa/core/channels/voice_stream/tts/__init__.py +0 -0
  277. rasa/core/channels/voice_stream/tts/azure.py +106 -0
  278. rasa/core/channels/voice_stream/tts/cartesia.py +118 -0
  279. rasa/core/channels/voice_stream/tts/tts_cache.py +27 -0
  280. rasa/core/channels/voice_stream/tts/tts_engine.py +58 -0
  281. rasa/core/channels/voice_stream/twilio_media_streams.py +173 -0
  282. rasa/core/channels/voice_stream/util.py +57 -0
  283. rasa/core/channels/voice_stream/voice_channel.py +427 -0
  284. rasa/core/channels/webexteams.py +134 -0
  285. rasa/core/concurrent_lock_store.py +210 -0
  286. rasa/core/constants.py +112 -0
  287. rasa/core/evaluation/__init__.py +0 -0
  288. rasa/core/evaluation/marker.py +267 -0
  289. rasa/core/evaluation/marker_base.py +923 -0
  290. rasa/core/evaluation/marker_stats.py +293 -0
  291. rasa/core/evaluation/marker_tracker_loader.py +103 -0
  292. rasa/core/exceptions.py +29 -0
  293. rasa/core/exporter.py +284 -0
  294. rasa/core/featurizers/__init__.py +0 -0
  295. rasa/core/featurizers/precomputation.py +410 -0
  296. rasa/core/featurizers/single_state_featurizer.py +421 -0
  297. rasa/core/featurizers/tracker_featurizers.py +1262 -0
  298. rasa/core/http_interpreter.py +89 -0
  299. rasa/core/information_retrieval/__init__.py +7 -0
  300. rasa/core/information_retrieval/faiss.py +124 -0
  301. rasa/core/information_retrieval/information_retrieval.py +137 -0
  302. rasa/core/information_retrieval/milvus.py +59 -0
  303. rasa/core/information_retrieval/qdrant.py +96 -0
  304. rasa/core/jobs.py +63 -0
  305. rasa/core/lock.py +139 -0
  306. rasa/core/lock_store.py +343 -0
  307. rasa/core/migrate.py +403 -0
  308. rasa/core/nlg/__init__.py +3 -0
  309. rasa/core/nlg/callback.py +146 -0
  310. rasa/core/nlg/contextual_response_rephraser.py +379 -0
  311. rasa/core/nlg/generator.py +230 -0
  312. rasa/core/nlg/interpolator.py +143 -0
  313. rasa/core/nlg/response.py +155 -0
  314. rasa/core/nlg/summarize.py +70 -0
  315. rasa/core/persistor.py +538 -0
  316. rasa/core/policies/__init__.py +0 -0
  317. rasa/core/policies/ensemble.py +329 -0
  318. rasa/core/policies/enterprise_search_policy.py +973 -0
  319. rasa/core/policies/enterprise_search_prompt_template.jinja2 +25 -0
  320. rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +60 -0
  321. rasa/core/policies/flow_policy.py +205 -0
  322. rasa/core/policies/flows/__init__.py +0 -0
  323. rasa/core/policies/flows/flow_exceptions.py +44 -0
  324. rasa/core/policies/flows/flow_executor.py +778 -0
  325. rasa/core/policies/flows/flow_step_result.py +43 -0
  326. rasa/core/policies/intentless_policy.py +1031 -0
  327. rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
  328. rasa/core/policies/memoization.py +538 -0
  329. rasa/core/policies/policy.py +725 -0
  330. rasa/core/policies/rule_policy.py +1273 -0
  331. rasa/core/policies/ted_policy.py +2169 -0
  332. rasa/core/policies/unexpected_intent_policy.py +1022 -0
  333. rasa/core/processor.py +1465 -0
  334. rasa/core/run.py +342 -0
  335. rasa/core/secrets_manager/__init__.py +0 -0
  336. rasa/core/secrets_manager/constants.py +36 -0
  337. rasa/core/secrets_manager/endpoints.py +391 -0
  338. rasa/core/secrets_manager/factory.py +241 -0
  339. rasa/core/secrets_manager/secret_manager.py +262 -0
  340. rasa/core/secrets_manager/vault.py +584 -0
  341. rasa/core/test.py +1335 -0
  342. rasa/core/tracker_store.py +1703 -0
  343. rasa/core/train.py +105 -0
  344. rasa/core/training/__init__.py +89 -0
  345. rasa/core/training/converters/__init__.py +0 -0
  346. rasa/core/training/converters/responses_prefix_converter.py +119 -0
  347. rasa/core/training/interactive.py +1744 -0
  348. rasa/core/training/story_conflict.py +381 -0
  349. rasa/core/training/training.py +93 -0
  350. rasa/core/utils.py +366 -0
  351. rasa/core/visualize.py +70 -0
  352. rasa/dialogue_understanding/__init__.py +0 -0
  353. rasa/dialogue_understanding/coexistence/__init__.py +0 -0
  354. rasa/dialogue_understanding/coexistence/constants.py +4 -0
  355. rasa/dialogue_understanding/coexistence/intent_based_router.py +196 -0
  356. rasa/dialogue_understanding/coexistence/llm_based_router.py +327 -0
  357. rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
  358. rasa/dialogue_understanding/commands/__init__.py +61 -0
  359. rasa/dialogue_understanding/commands/can_not_handle_command.py +70 -0
  360. rasa/dialogue_understanding/commands/cancel_flow_command.py +125 -0
  361. rasa/dialogue_understanding/commands/change_flow_command.py +44 -0
  362. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +57 -0
  363. rasa/dialogue_understanding/commands/clarify_command.py +86 -0
  364. rasa/dialogue_understanding/commands/command.py +85 -0
  365. rasa/dialogue_understanding/commands/correct_slots_command.py +297 -0
  366. rasa/dialogue_understanding/commands/error_command.py +79 -0
  367. rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
  368. rasa/dialogue_understanding/commands/handle_code_change_command.py +73 -0
  369. rasa/dialogue_understanding/commands/human_handoff_command.py +66 -0
  370. rasa/dialogue_understanding/commands/knowledge_answer_command.py +57 -0
  371. rasa/dialogue_understanding/commands/noop_command.py +54 -0
  372. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +60 -0
  373. rasa/dialogue_understanding/commands/restart_command.py +58 -0
  374. rasa/dialogue_understanding/commands/session_end_command.py +61 -0
  375. rasa/dialogue_understanding/commands/session_start_command.py +59 -0
  376. rasa/dialogue_understanding/commands/set_slot_command.py +160 -0
  377. rasa/dialogue_understanding/commands/skip_question_command.py +75 -0
  378. rasa/dialogue_understanding/commands/start_flow_command.py +107 -0
  379. rasa/dialogue_understanding/commands/user_silence_command.py +59 -0
  380. rasa/dialogue_understanding/commands/utils.py +45 -0
  381. rasa/dialogue_understanding/generator/__init__.py +21 -0
  382. rasa/dialogue_understanding/generator/command_generator.py +472 -0
  383. rasa/dialogue_understanding/generator/constants.py +27 -0
  384. rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
  385. rasa/dialogue_understanding/generator/flow_retrieval.py +466 -0
  386. rasa/dialogue_understanding/generator/llm_based_command_generator.py +502 -0
  387. rasa/dialogue_understanding/generator/llm_command_generator.py +68 -0
  388. rasa/dialogue_understanding/generator/multi_step/__init__.py +0 -0
  389. rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2 +62 -0
  390. rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2 +38 -0
  391. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +935 -0
  392. rasa/dialogue_understanding/generator/nlu_command_adapter.py +261 -0
  393. rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
  394. rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +60 -0
  395. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +489 -0
  396. rasa/dialogue_understanding/patterns/__init__.py +0 -0
  397. rasa/dialogue_understanding/patterns/cancel.py +111 -0
  398. rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
  399. rasa/dialogue_understanding/patterns/chitchat.py +37 -0
  400. rasa/dialogue_understanding/patterns/clarify.py +97 -0
  401. rasa/dialogue_understanding/patterns/code_change.py +41 -0
  402. rasa/dialogue_understanding/patterns/collect_information.py +90 -0
  403. rasa/dialogue_understanding/patterns/completed.py +40 -0
  404. rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
  405. rasa/dialogue_understanding/patterns/correction.py +278 -0
  406. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +301 -0
  407. rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
  408. rasa/dialogue_understanding/patterns/internal_error.py +47 -0
  409. rasa/dialogue_understanding/patterns/repeat.py +37 -0
  410. rasa/dialogue_understanding/patterns/restart.py +37 -0
  411. rasa/dialogue_understanding/patterns/search.py +37 -0
  412. rasa/dialogue_understanding/patterns/session_start.py +37 -0
  413. rasa/dialogue_understanding/patterns/skip_question.py +38 -0
  414. rasa/dialogue_understanding/patterns/user_silence.py +37 -0
  415. rasa/dialogue_understanding/processor/__init__.py +0 -0
  416. rasa/dialogue_understanding/processor/command_processor.py +720 -0
  417. rasa/dialogue_understanding/processor/command_processor_component.py +43 -0
  418. rasa/dialogue_understanding/stack/__init__.py +0 -0
  419. rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
  420. rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
  421. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
  422. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
  423. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
  424. rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
  425. rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
  426. rasa/dialogue_understanding/stack/utils.py +211 -0
  427. rasa/dialogue_understanding/utils.py +14 -0
  428. rasa/dialogue_understanding_test/__init__.py +0 -0
  429. rasa/dialogue_understanding_test/constants.py +15 -0
  430. rasa/dialogue_understanding_test/du_test_case.py +118 -0
  431. rasa/dialogue_understanding_test/du_test_result.py +11 -0
  432. rasa/e2e_test/__init__.py +0 -0
  433. rasa/e2e_test/aggregate_test_stats_calculator.py +134 -0
  434. rasa/e2e_test/assertions.py +1345 -0
  435. rasa/e2e_test/assertions_schema.yml +129 -0
  436. rasa/e2e_test/constants.py +31 -0
  437. rasa/e2e_test/e2e_config.py +220 -0
  438. rasa/e2e_test/e2e_config_schema.yml +26 -0
  439. rasa/e2e_test/e2e_test_case.py +569 -0
  440. rasa/e2e_test/e2e_test_converter.py +363 -0
  441. rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
  442. rasa/e2e_test/e2e_test_coverage_report.py +364 -0
  443. rasa/e2e_test/e2e_test_result.py +54 -0
  444. rasa/e2e_test/e2e_test_runner.py +1190 -0
  445. rasa/e2e_test/e2e_test_schema.yml +181 -0
  446. rasa/e2e_test/pykwalify_extensions.py +39 -0
  447. rasa/e2e_test/stub_custom_action.py +70 -0
  448. rasa/e2e_test/utils/__init__.py +0 -0
  449. rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
  450. rasa/e2e_test/utils/io.py +598 -0
  451. rasa/e2e_test/utils/validation.py +178 -0
  452. rasa/engine/__init__.py +0 -0
  453. rasa/engine/caching.py +463 -0
  454. rasa/engine/constants.py +17 -0
  455. rasa/engine/exceptions.py +14 -0
  456. rasa/engine/graph.py +642 -0
  457. rasa/engine/loader.py +48 -0
  458. rasa/engine/recipes/__init__.py +0 -0
  459. rasa/engine/recipes/config_files/default_config.yml +41 -0
  460. rasa/engine/recipes/default_components.py +97 -0
  461. rasa/engine/recipes/default_recipe.py +1272 -0
  462. rasa/engine/recipes/graph_recipe.py +79 -0
  463. rasa/engine/recipes/recipe.py +93 -0
  464. rasa/engine/runner/__init__.py +0 -0
  465. rasa/engine/runner/dask.py +250 -0
  466. rasa/engine/runner/interface.py +49 -0
  467. rasa/engine/storage/__init__.py +0 -0
  468. rasa/engine/storage/local_model_storage.py +244 -0
  469. rasa/engine/storage/resource.py +110 -0
  470. rasa/engine/storage/storage.py +199 -0
  471. rasa/engine/training/__init__.py +0 -0
  472. rasa/engine/training/components.py +176 -0
  473. rasa/engine/training/fingerprinting.py +64 -0
  474. rasa/engine/training/graph_trainer.py +256 -0
  475. rasa/engine/training/hooks.py +164 -0
  476. rasa/engine/validation.py +1451 -0
  477. rasa/env.py +14 -0
  478. rasa/exceptions.py +69 -0
  479. rasa/graph_components/__init__.py +0 -0
  480. rasa/graph_components/converters/__init__.py +0 -0
  481. rasa/graph_components/converters/nlu_message_converter.py +48 -0
  482. rasa/graph_components/providers/__init__.py +0 -0
  483. rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
  484. rasa/graph_components/providers/domain_provider.py +71 -0
  485. rasa/graph_components/providers/flows_provider.py +74 -0
  486. rasa/graph_components/providers/forms_provider.py +44 -0
  487. rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
  488. rasa/graph_components/providers/responses_provider.py +44 -0
  489. rasa/graph_components/providers/rule_only_provider.py +49 -0
  490. rasa/graph_components/providers/story_graph_provider.py +96 -0
  491. rasa/graph_components/providers/training_tracker_provider.py +55 -0
  492. rasa/graph_components/validators/__init__.py +0 -0
  493. rasa/graph_components/validators/default_recipe_validator.py +550 -0
  494. rasa/graph_components/validators/finetuning_validator.py +302 -0
  495. rasa/hooks.py +112 -0
  496. rasa/jupyter.py +63 -0
  497. rasa/llm_fine_tuning/__init__.py +0 -0
  498. rasa/llm_fine_tuning/annotation_module.py +241 -0
  499. rasa/llm_fine_tuning/conversations.py +144 -0
  500. rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
  501. rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
  502. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
  503. rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
  504. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
  505. rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
  506. rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
  507. rasa/llm_fine_tuning/storage.py +174 -0
  508. rasa/llm_fine_tuning/train_test_split_module.py +441 -0
  509. rasa/markers/__init__.py +0 -0
  510. rasa/markers/marker.py +269 -0
  511. rasa/markers/marker_base.py +828 -0
  512. rasa/markers/upload.py +74 -0
  513. rasa/markers/validate.py +21 -0
  514. rasa/model.py +118 -0
  515. rasa/model_manager/__init__.py +0 -0
  516. rasa/model_manager/config.py +40 -0
  517. rasa/model_manager/model_api.py +559 -0
  518. rasa/model_manager/runner_service.py +287 -0
  519. rasa/model_manager/socket_bridge.py +152 -0
  520. rasa/model_manager/studio_jwt_auth.py +86 -0
  521. rasa/model_manager/trainer_service.py +325 -0
  522. rasa/model_manager/utils.py +87 -0
  523. rasa/model_manager/warm_rasa_process.py +187 -0
  524. rasa/model_service.py +112 -0
  525. rasa/model_testing.py +457 -0
  526. rasa/model_training.py +596 -0
  527. rasa/nlu/__init__.py +7 -0
  528. rasa/nlu/classifiers/__init__.py +3 -0
  529. rasa/nlu/classifiers/classifier.py +5 -0
  530. rasa/nlu/classifiers/diet_classifier.py +1881 -0
  531. rasa/nlu/classifiers/fallback_classifier.py +192 -0
  532. rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
  533. rasa/nlu/classifiers/logistic_regression_classifier.py +253 -0
  534. rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
  535. rasa/nlu/classifiers/regex_message_handler.py +56 -0
  536. rasa/nlu/classifiers/sklearn_intent_classifier.py +330 -0
  537. rasa/nlu/constants.py +77 -0
  538. rasa/nlu/convert.py +40 -0
  539. rasa/nlu/emulators/__init__.py +0 -0
  540. rasa/nlu/emulators/dialogflow.py +55 -0
  541. rasa/nlu/emulators/emulator.py +49 -0
  542. rasa/nlu/emulators/luis.py +86 -0
  543. rasa/nlu/emulators/no_emulator.py +10 -0
  544. rasa/nlu/emulators/wit.py +56 -0
  545. rasa/nlu/extractors/__init__.py +0 -0
  546. rasa/nlu/extractors/crf_entity_extractor.py +715 -0
  547. rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
  548. rasa/nlu/extractors/entity_synonyms.py +178 -0
  549. rasa/nlu/extractors/extractor.py +470 -0
  550. rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
  551. rasa/nlu/extractors/regex_entity_extractor.py +220 -0
  552. rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
  553. rasa/nlu/featurizers/__init__.py +0 -0
  554. rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
  555. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +445 -0
  556. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
  557. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +768 -0
  558. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
  559. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
  560. rasa/nlu/featurizers/featurizer.py +89 -0
  561. rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
  562. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +867 -0
  563. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +571 -0
  564. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +271 -0
  565. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
  566. rasa/nlu/model.py +24 -0
  567. rasa/nlu/run.py +27 -0
  568. rasa/nlu/selectors/__init__.py +0 -0
  569. rasa/nlu/selectors/response_selector.py +987 -0
  570. rasa/nlu/test.py +1940 -0
  571. rasa/nlu/tokenizers/__init__.py +0 -0
  572. rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
  573. rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
  574. rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
  575. rasa/nlu/tokenizers/tokenizer.py +239 -0
  576. rasa/nlu/tokenizers/whitespace_tokenizer.py +95 -0
  577. rasa/nlu/utils/__init__.py +35 -0
  578. rasa/nlu/utils/bilou_utils.py +462 -0
  579. rasa/nlu/utils/hugging_face/__init__.py +0 -0
  580. rasa/nlu/utils/hugging_face/registry.py +108 -0
  581. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
  582. rasa/nlu/utils/mitie_utils.py +113 -0
  583. rasa/nlu/utils/pattern_utils.py +168 -0
  584. rasa/nlu/utils/spacy_utils.py +310 -0
  585. rasa/plugin.py +90 -0
  586. rasa/server.py +1588 -0
  587. rasa/shared/__init__.py +0 -0
  588. rasa/shared/constants.py +321 -0
  589. rasa/shared/core/__init__.py +0 -0
  590. rasa/shared/core/command_payload_reader.py +109 -0
  591. rasa/shared/core/constants.py +180 -0
  592. rasa/shared/core/conversation.py +46 -0
  593. rasa/shared/core/domain.py +2172 -0
  594. rasa/shared/core/events.py +2559 -0
  595. rasa/shared/core/flows/__init__.py +7 -0
  596. rasa/shared/core/flows/flow.py +562 -0
  597. rasa/shared/core/flows/flow_path.py +84 -0
  598. rasa/shared/core/flows/flow_step.py +146 -0
  599. rasa/shared/core/flows/flow_step_links.py +319 -0
  600. rasa/shared/core/flows/flow_step_sequence.py +70 -0
  601. rasa/shared/core/flows/flows_list.py +258 -0
  602. rasa/shared/core/flows/flows_yaml_schema.json +303 -0
  603. rasa/shared/core/flows/nlu_trigger.py +117 -0
  604. rasa/shared/core/flows/steps/__init__.py +24 -0
  605. rasa/shared/core/flows/steps/action.py +56 -0
  606. rasa/shared/core/flows/steps/call.py +64 -0
  607. rasa/shared/core/flows/steps/collect.py +112 -0
  608. rasa/shared/core/flows/steps/constants.py +5 -0
  609. rasa/shared/core/flows/steps/continuation.py +36 -0
  610. rasa/shared/core/flows/steps/end.py +22 -0
  611. rasa/shared/core/flows/steps/internal.py +44 -0
  612. rasa/shared/core/flows/steps/link.py +51 -0
  613. rasa/shared/core/flows/steps/no_operation.py +48 -0
  614. rasa/shared/core/flows/steps/set_slots.py +50 -0
  615. rasa/shared/core/flows/steps/start.py +30 -0
  616. rasa/shared/core/flows/utils.py +39 -0
  617. rasa/shared/core/flows/validation.py +735 -0
  618. rasa/shared/core/flows/yaml_flows_io.py +405 -0
  619. rasa/shared/core/generator.py +908 -0
  620. rasa/shared/core/slot_mappings.py +526 -0
  621. rasa/shared/core/slots.py +654 -0
  622. rasa/shared/core/trackers.py +1183 -0
  623. rasa/shared/core/training_data/__init__.py +0 -0
  624. rasa/shared/core/training_data/loading.py +89 -0
  625. rasa/shared/core/training_data/story_reader/__init__.py +0 -0
  626. rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
  627. rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
  628. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
  629. rasa/shared/core/training_data/story_writer/__init__.py +0 -0
  630. rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
  631. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +444 -0
  632. rasa/shared/core/training_data/structures.py +858 -0
  633. rasa/shared/core/training_data/visualization.html +146 -0
  634. rasa/shared/core/training_data/visualization.py +603 -0
  635. rasa/shared/data.py +249 -0
  636. rasa/shared/engine/__init__.py +0 -0
  637. rasa/shared/engine/caching.py +26 -0
  638. rasa/shared/exceptions.py +167 -0
  639. rasa/shared/importers/__init__.py +0 -0
  640. rasa/shared/importers/importer.py +770 -0
  641. rasa/shared/importers/multi_project.py +215 -0
  642. rasa/shared/importers/rasa.py +108 -0
  643. rasa/shared/importers/remote_importer.py +196 -0
  644. rasa/shared/importers/utils.py +36 -0
  645. rasa/shared/nlu/__init__.py +0 -0
  646. rasa/shared/nlu/constants.py +54 -0
  647. rasa/shared/nlu/interpreter.py +10 -0
  648. rasa/shared/nlu/training_data/__init__.py +0 -0
  649. rasa/shared/nlu/training_data/entities_parser.py +208 -0
  650. rasa/shared/nlu/training_data/features.py +492 -0
  651. rasa/shared/nlu/training_data/formats/__init__.py +10 -0
  652. rasa/shared/nlu/training_data/formats/dialogflow.py +163 -0
  653. rasa/shared/nlu/training_data/formats/luis.py +87 -0
  654. rasa/shared/nlu/training_data/formats/rasa.py +135 -0
  655. rasa/shared/nlu/training_data/formats/rasa_yaml.py +618 -0
  656. rasa/shared/nlu/training_data/formats/readerwriter.py +244 -0
  657. rasa/shared/nlu/training_data/formats/wit.py +52 -0
  658. rasa/shared/nlu/training_data/loading.py +137 -0
  659. rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
  660. rasa/shared/nlu/training_data/message.py +490 -0
  661. rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
  662. rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
  663. rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
  664. rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
  665. rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
  666. rasa/shared/nlu/training_data/training_data.py +729 -0
  667. rasa/shared/nlu/training_data/util.py +223 -0
  668. rasa/shared/providers/__init__.py +0 -0
  669. rasa/shared/providers/_configs/__init__.py +0 -0
  670. rasa/shared/providers/_configs/azure_openai_client_config.py +183 -0
  671. rasa/shared/providers/_configs/client_config.py +57 -0
  672. rasa/shared/providers/_configs/default_litellm_client_config.py +130 -0
  673. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +234 -0
  674. rasa/shared/providers/_configs/litellm_router_client_config.py +220 -0
  675. rasa/shared/providers/_configs/model_group_config.py +167 -0
  676. rasa/shared/providers/_configs/openai_client_config.py +175 -0
  677. rasa/shared/providers/_configs/rasa_llm_client_config.py +73 -0
  678. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +177 -0
  679. rasa/shared/providers/_configs/utils.py +117 -0
  680. rasa/shared/providers/_ssl_verification_utils.py +124 -0
  681. rasa/shared/providers/_utils.py +79 -0
  682. rasa/shared/providers/embedding/__init__.py +0 -0
  683. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +243 -0
  684. rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
  685. rasa/shared/providers/embedding/azure_openai_embedding_client.py +310 -0
  686. rasa/shared/providers/embedding/default_litellm_embedding_client.py +126 -0
  687. rasa/shared/providers/embedding/embedding_client.py +90 -0
  688. rasa/shared/providers/embedding/embedding_response.py +41 -0
  689. rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
  690. rasa/shared/providers/embedding/litellm_router_embedding_client.py +135 -0
  691. rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
  692. rasa/shared/providers/llm/__init__.py +0 -0
  693. rasa/shared/providers/llm/_base_litellm_client.py +263 -0
  694. rasa/shared/providers/llm/azure_openai_llm_client.py +359 -0
  695. rasa/shared/providers/llm/default_litellm_llm_client.py +108 -0
  696. rasa/shared/providers/llm/litellm_router_llm_client.py +182 -0
  697. rasa/shared/providers/llm/llm_client.py +76 -0
  698. rasa/shared/providers/llm/llm_response.py +79 -0
  699. rasa/shared/providers/llm/openai_llm_client.py +155 -0
  700. rasa/shared/providers/llm/rasa_llm_client.py +112 -0
  701. rasa/shared/providers/llm/self_hosted_llm_client.py +269 -0
  702. rasa/shared/providers/mappings.py +94 -0
  703. rasa/shared/providers/router/__init__.py +0 -0
  704. rasa/shared/providers/router/_base_litellm_router_client.py +183 -0
  705. rasa/shared/providers/router/router_client.py +73 -0
  706. rasa/shared/utils/__init__.py +0 -0
  707. rasa/shared/utils/cli.py +102 -0
  708. rasa/shared/utils/common.py +324 -0
  709. rasa/shared/utils/constants.py +4 -0
  710. rasa/shared/utils/health_check/__init__.py +0 -0
  711. rasa/shared/utils/health_check/embeddings_health_check_mixin.py +31 -0
  712. rasa/shared/utils/health_check/health_check.py +258 -0
  713. rasa/shared/utils/health_check/llm_health_check_mixin.py +31 -0
  714. rasa/shared/utils/io.py +499 -0
  715. rasa/shared/utils/llm.py +760 -0
  716. rasa/shared/utils/pykwalify_extensions.py +27 -0
  717. rasa/shared/utils/schemas/__init__.py +0 -0
  718. rasa/shared/utils/schemas/config.yml +2 -0
  719. rasa/shared/utils/schemas/domain.yml +145 -0
  720. rasa/shared/utils/schemas/events.py +214 -0
  721. rasa/shared/utils/schemas/model_config.yml +36 -0
  722. rasa/shared/utils/schemas/stories.yml +173 -0
  723. rasa/shared/utils/yaml.py +1068 -0
  724. rasa/studio/__init__.py +0 -0
  725. rasa/studio/auth.py +270 -0
  726. rasa/studio/config.py +136 -0
  727. rasa/studio/constants.py +19 -0
  728. rasa/studio/data_handler.py +368 -0
  729. rasa/studio/download.py +489 -0
  730. rasa/studio/results_logger.py +137 -0
  731. rasa/studio/train.py +134 -0
  732. rasa/studio/upload.py +563 -0
  733. rasa/telemetry.py +1876 -0
  734. rasa/tracing/__init__.py +0 -0
  735. rasa/tracing/config.py +355 -0
  736. rasa/tracing/constants.py +62 -0
  737. rasa/tracing/instrumentation/__init__.py +0 -0
  738. rasa/tracing/instrumentation/attribute_extractors.py +765 -0
  739. rasa/tracing/instrumentation/instrumentation.py +1306 -0
  740. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +144 -0
  741. rasa/tracing/instrumentation/metrics.py +294 -0
  742. rasa/tracing/metric_instrument_provider.py +205 -0
  743. rasa/utils/__init__.py +0 -0
  744. rasa/utils/beta.py +83 -0
  745. rasa/utils/cli.py +28 -0
  746. rasa/utils/common.py +639 -0
  747. rasa/utils/converter.py +53 -0
  748. rasa/utils/endpoints.py +331 -0
  749. rasa/utils/io.py +252 -0
  750. rasa/utils/json_utils.py +60 -0
  751. rasa/utils/licensing.py +542 -0
  752. rasa/utils/log_utils.py +181 -0
  753. rasa/utils/mapper.py +210 -0
  754. rasa/utils/ml_utils.py +147 -0
  755. rasa/utils/plotting.py +362 -0
  756. rasa/utils/sanic_error_handler.py +32 -0
  757. rasa/utils/singleton.py +23 -0
  758. rasa/utils/tensorflow/__init__.py +0 -0
  759. rasa/utils/tensorflow/callback.py +112 -0
  760. rasa/utils/tensorflow/constants.py +116 -0
  761. rasa/utils/tensorflow/crf.py +492 -0
  762. rasa/utils/tensorflow/data_generator.py +440 -0
  763. rasa/utils/tensorflow/environment.py +161 -0
  764. rasa/utils/tensorflow/exceptions.py +5 -0
  765. rasa/utils/tensorflow/feature_array.py +366 -0
  766. rasa/utils/tensorflow/layers.py +1565 -0
  767. rasa/utils/tensorflow/layers_utils.py +113 -0
  768. rasa/utils/tensorflow/metrics.py +281 -0
  769. rasa/utils/tensorflow/model_data.py +798 -0
  770. rasa/utils/tensorflow/model_data_utils.py +499 -0
  771. rasa/utils/tensorflow/models.py +935 -0
  772. rasa/utils/tensorflow/rasa_layers.py +1094 -0
  773. rasa/utils/tensorflow/transformer.py +640 -0
  774. rasa/utils/tensorflow/types.py +6 -0
  775. rasa/utils/train_utils.py +572 -0
  776. rasa/utils/url_tools.py +53 -0
  777. rasa/utils/yaml.py +54 -0
  778. rasa/validator.py +1644 -0
  779. rasa/version.py +3 -0
  780. rasa_pro-3.11.3a1.dev2.dist-info/METADATA +198 -0
  781. rasa_pro-3.11.3a1.dev2.dist-info/NOTICE +5 -0
  782. rasa_pro-3.11.3a1.dev2.dist-info/RECORD +784 -0
  783. rasa_pro-3.11.3a1.dev2.dist-info/WHEEL +4 -0
  784. rasa_pro-3.11.3a1.dev2.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,778 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Dict, Text, List, Optional
4
+
5
+ import structlog
6
+ from jinja2 import Template
7
+ from pypred import Predicate
8
+ from structlog.contextvars import (
9
+ bound_contextvars,
10
+ )
11
+
12
+ from rasa.core.constants import STEP_ID_METADATA_KEY, ACTIVE_FLOW_METADATA_KEY
13
+ from rasa.core.policies.flows.flow_exceptions import (
14
+ FlowCircuitBreakerTrippedException,
15
+ FlowException,
16
+ NoNextStepInFlowException,
17
+ )
18
+ from rasa.core.policies.flows.flow_step_result import (
19
+ FlowActionPrediction,
20
+ ContinueFlowWithNextStep,
21
+ FlowStepResult,
22
+ PauseFlowReturnPrediction,
23
+ )
24
+ from rasa.dialogue_understanding.commands import CancelFlowCommand
25
+ from rasa.dialogue_understanding.patterns.cancel import CancelPatternFlowStackFrame
26
+ from rasa.dialogue_understanding.patterns.collect_information import (
27
+ CollectInformationPatternFlowStackFrame,
28
+ )
29
+ from rasa.dialogue_understanding.patterns.completed import (
30
+ CompletedPatternFlowStackFrame,
31
+ )
32
+ from rasa.dialogue_understanding.patterns.continue_interrupted import (
33
+ ContinueInterruptedPatternFlowStackFrame,
34
+ )
35
+ from rasa.dialogue_understanding.patterns.human_handoff import (
36
+ HumanHandoffPatternFlowStackFrame,
37
+ )
38
+ from rasa.dialogue_understanding.patterns.internal_error import (
39
+ InternalErrorPatternFlowStackFrame,
40
+ )
41
+ from rasa.dialogue_understanding.patterns.search import SearchPatternFlowStackFrame
42
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
43
+ from rasa.dialogue_understanding.stack.frames import (
44
+ BaseFlowStackFrame,
45
+ DialogueStackFrame,
46
+ UserFlowStackFrame,
47
+ )
48
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
49
+ FlowStackFrameType,
50
+ )
51
+ from rasa.dialogue_understanding.stack.utils import (
52
+ top_user_flow_frame,
53
+ )
54
+ from rasa.shared.constants import RASA_PATTERN_HUMAN_HANDOFF
55
+ from rasa.shared.core.constants import ACTION_LISTEN_NAME, SlotMappingType
56
+ from rasa.shared.core.events import (
57
+ Event,
58
+ FlowCompleted,
59
+ FlowResumed,
60
+ FlowStarted,
61
+ SlotSet,
62
+ )
63
+ from rasa.shared.core.flows import FlowsList
64
+ from rasa.shared.core.flows.flow import (
65
+ END_STEP,
66
+ Flow,
67
+ FlowStep,
68
+ )
69
+ from rasa.shared.core.flows.flow_step_links import (
70
+ StaticFlowStepLink,
71
+ IfFlowStepLink,
72
+ ElseFlowStepLink,
73
+ )
74
+ from rasa.shared.core.flows.steps import (
75
+ ActionFlowStep,
76
+ SetSlotsFlowStep,
77
+ LinkFlowStep,
78
+ ContinueFlowStep,
79
+ EndFlowStep,
80
+ CallFlowStep,
81
+ CollectInformationFlowStep,
82
+ NoOperationFlowStep,
83
+ )
84
+ from rasa.shared.core.flows.steps.collect import SlotRejection
85
+ from rasa.shared.core.flows.steps.constants import START_STEP
86
+ from rasa.shared.core.slots import Slot
87
+ from rasa.shared.core.trackers import (
88
+ DialogueStateTracker,
89
+ )
90
+
91
+ structlogger = structlog.get_logger()
92
+
93
+ MAX_NUMBER_OF_STEPS = 250
94
+
95
+
96
+ def render_template_variables(text: str, context: Dict[Text, Any]) -> str:
97
+ """Replace context variables in a text."""
98
+ return Template(text).render(context)
99
+
100
+
101
+ def is_condition_satisfied(
102
+ predicate: Text, context: Dict[str, Any], tracker: DialogueStateTracker
103
+ ) -> bool:
104
+ """Evaluate a predicate condition."""
105
+ # attach context to the predicate evaluation to allow conditions using it
106
+ context = {"context": context}
107
+
108
+ document: Dict[str, Any] = context.copy()
109
+ # add slots namespace to the document
110
+ document["slots"] = tracker.current_slot_values()
111
+
112
+ rendered_condition = render_template_variables(predicate, context)
113
+ p = Predicate(rendered_condition)
114
+ structlogger.debug(
115
+ "flow.predicate.evaluating",
116
+ condition=predicate,
117
+ rendered_condition=rendered_condition,
118
+ )
119
+ try:
120
+ return p.evaluate(document)
121
+ except (TypeError, Exception) as e:
122
+ structlogger.error(
123
+ "flow.predicate.error",
124
+ predicate=predicate,
125
+ document=document,
126
+ error=str(e),
127
+ )
128
+ return False
129
+
130
+
131
+ def is_step_end_of_flow(step: FlowStep) -> bool:
132
+ """Check if a step is the end of a flow."""
133
+ return (
134
+ step.id == END_STEP
135
+ or
136
+ # not quite at the end but almost, so we'll treat it as the end
137
+ step.id == ContinueFlowStep.continue_step_for_id(END_STEP)
138
+ )
139
+
140
+
141
+ def select_next_step_id(
142
+ current: FlowStep,
143
+ condition_evaluation_context: Dict[str, Any],
144
+ tracker: DialogueStateTracker,
145
+ ) -> Optional[Text]:
146
+ """Selects the next step id based on the current step."""
147
+ next_step = current.next
148
+ if len(next_step.links) == 1 and isinstance(next_step.links[0], StaticFlowStepLink):
149
+ return next_step.links[0].target
150
+
151
+ # evaluate if conditions
152
+ for link in next_step.links:
153
+ if isinstance(link, IfFlowStepLink) and link.condition:
154
+ if is_condition_satisfied(
155
+ link.condition, condition_evaluation_context, tracker
156
+ ):
157
+ structlogger.debug(
158
+ "flow.link.if_condition_satisfied",
159
+ current_id=current.id,
160
+ target=link.target,
161
+ )
162
+ return link.target
163
+
164
+ # evaluate else condition
165
+ for link in next_step.links:
166
+ if isinstance(link, ElseFlowStepLink):
167
+ structlogger.debug(
168
+ "flow.link.else_condition_satisfied",
169
+ current_id=current.id,
170
+ target=link.target,
171
+ )
172
+ return link.target
173
+
174
+ if next_step.links:
175
+ structlogger.error(
176
+ "flow.link.failed_to_select_branch",
177
+ current=current,
178
+ links=next_step.links,
179
+ tracker=tracker,
180
+ )
181
+ return None
182
+
183
+ if current.id == END_STEP:
184
+ # we are already at the very end of the flow. There is no next step.
185
+ return None
186
+ elif isinstance(current, LinkFlowStep):
187
+ # link steps don't have a next step, so we'll return the end step
188
+ return END_STEP
189
+ else:
190
+ structlogger.error(
191
+ "flow.step.failed_to_select_next_step",
192
+ step=current,
193
+ tracker=tracker,
194
+ )
195
+ return None
196
+
197
+
198
+ def select_next_step(
199
+ current_step: FlowStep,
200
+ current_flow: Flow,
201
+ stack: DialogueStack,
202
+ tracker: DialogueStateTracker,
203
+ ) -> Optional[FlowStep]:
204
+ """Get the next step to execute."""
205
+ next_id = select_next_step_id(current_step, stack.current_context(), tracker)
206
+ step = current_flow.step_by_id(next_id)
207
+ structlogger.debug(
208
+ "flow.step.next",
209
+ next_id=step.id if step else None,
210
+ current_id=current_step.id,
211
+ flow_id=current_flow.id,
212
+ )
213
+ return step
214
+
215
+
216
+ def update_top_flow_step_id(updated_id: str, stack: DialogueStack) -> DialogueStack:
217
+ """Update the top flow on the stack."""
218
+ if (top := stack.top()) and isinstance(top, BaseFlowStackFrame):
219
+ top.step_id = updated_id
220
+ return stack
221
+
222
+
223
+ def events_from_set_slots_step(step: SetSlotsFlowStep) -> List[Event]:
224
+ """Create events from a set slots step."""
225
+ return [SlotSet(slot["key"], slot["value"]) for slot in step.slots]
226
+
227
+
228
+ def events_for_collect_step_execution(
229
+ step: CollectInformationFlowStep, tracker: DialogueStateTracker
230
+ ) -> List[Event]:
231
+ """Create the events needed to prepare for the execution of a collect step."""
232
+ # reset the slots that always need to be explicitly collected
233
+ slot = tracker.slots.get(step.collect, None)
234
+
235
+ if slot and step.ask_before_filling:
236
+ return [SlotSet(step.collect, None)]
237
+ else:
238
+ return []
239
+
240
+
241
+ def trigger_pattern_continue_interrupted(
242
+ current_frame: DialogueStackFrame, stack: DialogueStack, flows: FlowsList
243
+ ) -> List[Event]:
244
+ """Trigger the pattern to continue an interrupted flow if needed."""
245
+ events: List[Event] = []
246
+
247
+ # get previously started user flow that will be continued
248
+ interrupted_user_flow_frame = top_user_flow_frame(stack)
249
+ interrupted_user_flow_step = (
250
+ interrupted_user_flow_frame.step(flows) if interrupted_user_flow_frame else None
251
+ )
252
+ interrupted_user_flow = (
253
+ interrupted_user_flow_frame.flow(flows) if interrupted_user_flow_frame else None
254
+ )
255
+
256
+ if (
257
+ isinstance(current_frame, UserFlowStackFrame)
258
+ and interrupted_user_flow_step is not None
259
+ and interrupted_user_flow is not None
260
+ and current_frame.frame_type == FlowStackFrameType.INTERRUPT
261
+ and not is_step_end_of_flow(interrupted_user_flow_step)
262
+ ):
263
+ stack.push(
264
+ ContinueInterruptedPatternFlowStackFrame(
265
+ previous_flow_name=interrupted_user_flow.readable_name(),
266
+ )
267
+ )
268
+ events.append(
269
+ FlowResumed(interrupted_user_flow.id, interrupted_user_flow_step.id)
270
+ )
271
+
272
+ return events
273
+
274
+
275
+ def trigger_pattern_completed(
276
+ current_frame: DialogueStackFrame, stack: DialogueStack, flows: FlowsList
277
+ ) -> None:
278
+ """Trigger the pattern indicating that the stack is empty, if needed."""
279
+ # trigger pattern if the stack is empty and the last frame was either a user flow
280
+ # frame or a search frame
281
+ if stack.is_empty() and (
282
+ isinstance(current_frame, UserFlowStackFrame)
283
+ or isinstance(current_frame, SearchPatternFlowStackFrame)
284
+ ):
285
+ completed_flow = current_frame.flow(flows)
286
+ completed_flow_name = completed_flow.readable_name() if completed_flow else None
287
+ stack.push(
288
+ CompletedPatternFlowStackFrame(
289
+ previous_flow_name=completed_flow_name,
290
+ )
291
+ )
292
+
293
+
294
+ def trigger_pattern_ask_collect_information(
295
+ collect: str,
296
+ stack: DialogueStack,
297
+ rejections: List[SlotRejection],
298
+ utter: str,
299
+ collect_action: str,
300
+ ) -> None:
301
+ """Trigger the pattern to ask for a slot value."""
302
+ stack.push(
303
+ CollectInformationPatternFlowStackFrame(
304
+ collect=collect,
305
+ utter=utter,
306
+ collect_action=collect_action,
307
+ rejections=rejections,
308
+ )
309
+ )
310
+
311
+
312
+ def reset_scoped_slots(
313
+ current_frame: DialogueStackFrame, current_flow: Flow, tracker: DialogueStateTracker
314
+ ) -> List[Event]:
315
+ """Reset all scoped slots."""
316
+
317
+ def _reset_slot(slot_name: Text, dialogue_tracker: DialogueStateTracker) -> None:
318
+ slot = dialogue_tracker.slots.get(slot_name, None)
319
+ initial_value = slot.initial_value if slot else None
320
+ events.append(SlotSet(slot_name, initial_value, metadata={"reset": True}))
321
+
322
+ if (
323
+ isinstance(current_frame, UserFlowStackFrame)
324
+ and current_frame.frame_type == FlowStackFrameType.CALL
325
+ ):
326
+ # if a called frame is completed, we don't reset the slots
327
+ # as they are scoped to the called flow. resetting will happen as part
328
+ # of the flow that contained the call step triggering this called flow
329
+ return []
330
+
331
+ events: List[Event] = []
332
+
333
+ not_resettable_slot_names = set()
334
+ flow_persistable_slots = current_flow.persisted_slots
335
+
336
+ for step in current_flow.steps_with_calls_resolved:
337
+ if isinstance(step, CollectInformationFlowStep):
338
+ # reset all slots scoped to the flow
339
+ slot_name = step.collect
340
+ if step.reset_after_flow_ends and slot_name not in flow_persistable_slots:
341
+ _reset_slot(slot_name, tracker)
342
+ else:
343
+ not_resettable_slot_names.add(slot_name)
344
+
345
+ # slots set by the set slots step should be reset after the flow ends
346
+ # unless they are also used in a collect step where `reset_after_flow_ends`
347
+ # is set to `False` or set in the `persisted_slots` list.
348
+ resettable_set_slots = [
349
+ slot["key"]
350
+ for step in current_flow.steps_with_calls_resolved
351
+ if isinstance(step, SetSlotsFlowStep)
352
+ for slot in step.slots
353
+ if slot["key"] not in not_resettable_slot_names
354
+ and slot["key"] not in flow_persistable_slots
355
+ ]
356
+
357
+ for name in resettable_set_slots:
358
+ _reset_slot(name, tracker)
359
+
360
+ return events
361
+
362
+
363
+ def advance_flows(
364
+ tracker: DialogueStateTracker, available_actions: List[str], flows: FlowsList
365
+ ) -> FlowActionPrediction:
366
+ """Advance the current flows until the next action.
367
+
368
+ Args:
369
+ tracker: The tracker to get the next action for.
370
+ available_actions: The actions that are available in the domain.
371
+ flows: All flows.
372
+
373
+ Returns:
374
+ The predicted action and the events to run.
375
+ """
376
+ stack = tracker.stack
377
+ if stack.is_empty():
378
+ # if there are no flows, there is nothing to do
379
+ return FlowActionPrediction(None, 0.0)
380
+
381
+ return advance_flows_until_next_action(tracker, available_actions, flows)
382
+
383
+
384
+ def advance_flows_until_next_action(
385
+ tracker: DialogueStateTracker,
386
+ available_actions: List[str],
387
+ flows: FlowsList,
388
+ ) -> FlowActionPrediction:
389
+ """Advance the flow and select the next action to execute.
390
+
391
+ Advances the current flow and returns the next action to execute. A flow
392
+ is advanced until it is completed or until it predicts an action. If
393
+ the flow is completed, the next flow is popped from the stack and
394
+ advanced. If there are no more flows, the action listen is predicted.
395
+
396
+ Args:
397
+ tracker: The tracker to get the next action for.
398
+ available_actions: The actions that are available in the domain.
399
+ flows: All flows.
400
+
401
+ Returns:
402
+ The next action to execute, the events that should be applied to the
403
+ tracker and the confidence of the prediction.
404
+ """
405
+ step_result: FlowStepResult = ContinueFlowWithNextStep()
406
+
407
+ tracker = tracker.copy()
408
+
409
+ number_of_initial_events = len(tracker.events)
410
+
411
+ number_of_steps_taken = 0
412
+
413
+ while isinstance(step_result, ContinueFlowWithNextStep):
414
+ number_of_steps_taken += 1
415
+ if number_of_steps_taken > MAX_NUMBER_OF_STEPS:
416
+ raise FlowCircuitBreakerTrippedException(
417
+ tracker.stack, number_of_steps_taken
418
+ )
419
+
420
+ active_frame = tracker.stack.top()
421
+ if not isinstance(active_frame, BaseFlowStackFrame):
422
+ # If there is no current flow, we assume that all flows are done
423
+ # and there is nothing to do. The assumption here is that every
424
+ # flow ends with an action listen.
425
+ step_result = PauseFlowReturnPrediction(
426
+ FlowActionPrediction(ACTION_LISTEN_NAME, 1.0)
427
+ )
428
+ break
429
+
430
+ with bound_contextvars(flow_id=active_frame.flow_id):
431
+ previous_step_id = active_frame.step_id
432
+ structlogger.debug("flow.execution.loop", previous_step_id=previous_step_id)
433
+ current_flow = active_frame.flow(flows)
434
+ next_step = select_next_step(
435
+ active_frame.step(flows), current_flow, tracker.stack, tracker
436
+ )
437
+
438
+ if not next_step:
439
+ raise NoNextStepInFlowException(tracker.stack)
440
+
441
+ tracker.update_stack(update_top_flow_step_id(next_step.id, tracker.stack))
442
+
443
+ with bound_contextvars(step_id=next_step.id):
444
+ step_stack = tracker.stack
445
+ step_result = run_step(
446
+ next_step,
447
+ current_flow,
448
+ step_stack,
449
+ tracker,
450
+ available_actions,
451
+ flows,
452
+ previous_step_id,
453
+ )
454
+ new_events = step_result.events
455
+ if (
456
+ isinstance(step_result, ContinueFlowWithNextStep)
457
+ and step_result.has_flow_ended
458
+ ):
459
+ # insert flow completed before flow resumed event
460
+ offset = (
461
+ -1
462
+ if new_events and isinstance(new_events[-1], FlowResumed)
463
+ else 0
464
+ )
465
+ idx = len(new_events) + offset
466
+ new_events.insert(
467
+ idx, FlowCompleted(active_frame.flow_id, previous_step_id)
468
+ )
469
+ attach_stack_metadata_to_events(
470
+ next_step.id, current_flow.id, new_events
471
+ )
472
+ tracker.update_stack(step_stack)
473
+ tracker.update_with_events(new_events)
474
+
475
+ gathered_events = list(tracker.events)[number_of_initial_events:]
476
+ if isinstance(step_result, PauseFlowReturnPrediction):
477
+ prediction = step_result.action_prediction
478
+ # make sure we really return all events that got created during the
479
+ # step execution of all steps (not only the last one)
480
+ prediction.events = gathered_events
481
+ prediction.metadata = {
482
+ ACTIVE_FLOW_METADATA_KEY: tracker.active_flow,
483
+ STEP_ID_METADATA_KEY: tracker.current_step_id,
484
+ }
485
+ return prediction
486
+ else:
487
+ structlogger.warning("flow.step.execution.no_action")
488
+ return FlowActionPrediction(None, 0.0, events=gathered_events)
489
+
490
+
491
+ def validate_collect_step(
492
+ step: CollectInformationFlowStep,
493
+ stack: DialogueStack,
494
+ available_actions: List[str],
495
+ slots: Dict[str, Slot],
496
+ flow_name: str,
497
+ ) -> bool:
498
+ """Validate that a collect step can be executed.
499
+
500
+ A collect step can be executed if either the `utter_ask` or the `action_ask` is
501
+ defined in the domain. If neither is defined, the collect step can still be
502
+ executed if the slot has an initial value defined in the domain, which would cause
503
+ the step to be skipped.
504
+ """
505
+ slot = slots.get(step.collect)
506
+ slot_has_initial_value_defined = slot and slot.initial_value is not None
507
+ if (
508
+ slot_has_initial_value_defined
509
+ or step.utter in available_actions
510
+ or step.collect_action in available_actions
511
+ ):
512
+ return True
513
+
514
+ structlogger.error(
515
+ "flow.step.run.collect_missing_utter_or_collect_action",
516
+ slot_name=step.collect,
517
+ )
518
+
519
+ cancel_flow_and_push_internal_error(stack, flow_name)
520
+
521
+ return False
522
+
523
+
524
+ def cancel_flow_and_push_internal_error(stack: DialogueStack, flow_name: str) -> None:
525
+ """Cancel the top user flow and push the internal error pattern."""
526
+ top_frame = stack.top()
527
+
528
+ if isinstance(top_frame, BaseFlowStackFrame):
529
+ # we need to first cancel the top user flow
530
+ # because we cannot collect one of its slots
531
+ # and therefore should not proceed with the flow
532
+ # after triggering pattern_internal_error
533
+ canceled_frames = CancelFlowCommand.select_canceled_frames(stack)
534
+ stack.push(
535
+ CancelPatternFlowStackFrame(
536
+ canceled_name=flow_name,
537
+ canceled_frames=canceled_frames,
538
+ )
539
+ )
540
+ stack.push(InternalErrorPatternFlowStackFrame())
541
+
542
+
543
+ def validate_custom_slot_mappings(
544
+ step: CollectInformationFlowStep,
545
+ stack: DialogueStack,
546
+ tracker: DialogueStateTracker,
547
+ available_actions: List[str],
548
+ flow_name: str,
549
+ ) -> bool:
550
+ """Validate a slot with custom mappings.
551
+
552
+ If invalid, trigger pattern_internal_error and return False.
553
+ """
554
+ slot = tracker.slots.get(step.collect, None)
555
+ slot_mappings = slot.mappings if slot else []
556
+ for mapping in slot_mappings:
557
+ if (
558
+ mapping.get("type") == SlotMappingType.CUSTOM.value
559
+ and mapping.get("action") is None
560
+ ):
561
+ # this is a slot that must be filled by a custom action
562
+ # check if collect_action exists
563
+ if step.collect_action not in available_actions:
564
+ structlogger.error(
565
+ "flow.step.run.collect_action_not_found_for_custom_slot_mapping",
566
+ action=step.collect_action,
567
+ collect=step.collect,
568
+ )
569
+ cancel_flow_and_push_internal_error(stack, flow_name)
570
+ return False
571
+
572
+ return True
573
+
574
+
575
+ def attach_stack_metadata_to_events(
576
+ step_id: str,
577
+ flow_id: str,
578
+ events: List[Event],
579
+ ) -> None:
580
+ """Attach the stack metadata to the events."""
581
+ for event in events:
582
+ event.metadata[STEP_ID_METADATA_KEY] = step_id
583
+ event.metadata[ACTIVE_FLOW_METADATA_KEY] = flow_id
584
+
585
+
586
+ def run_step(
587
+ step: FlowStep,
588
+ flow: Flow,
589
+ stack: DialogueStack,
590
+ tracker: DialogueStateTracker,
591
+ available_actions: List[str],
592
+ flows: FlowsList,
593
+ previous_step_id: str,
594
+ ) -> FlowStepResult:
595
+ """Run a single step of a flow.
596
+
597
+ Returns the predicted action and a list of events that were generated
598
+ during the step. The predicted action can be `None` if the step
599
+ doesn't generate an action. The list of events can be empty if the
600
+ step doesn't generate any events.
601
+
602
+ Raises a `FlowException` if the step is invalid.
603
+
604
+ Args:
605
+ step: The step to run.
606
+ flow: The flow that the step belongs to.
607
+ stack: The stack that the flow is on.
608
+ tracker: The tracker to run the step on.
609
+ available_actions: The actions that are available in the domain.
610
+ flows: All flows.
611
+ previous_step_id: The ID of the previous step.
612
+
613
+ Returns:
614
+ A result of running the step describing where to transition to.
615
+ """
616
+ initial_events: List[Event] = []
617
+ if previous_step_id == START_STEP:
618
+ # if the previous step id is the start step, we need to add a flow
619
+ # started event to the initial events.
620
+ # we can't use the current step to check this, as the current step is the
621
+ # first step in the flow -> other steps might link to this flow, so the
622
+ # only reliable way to check if we are starting a new flow is checking for
623
+ # the START_STEP meta step
624
+ initial_events.append(FlowStarted(flow.id, metadata=stack.current_context()))
625
+
626
+ if isinstance(step, CollectInformationFlowStep):
627
+ return _run_collect_information_step(
628
+ available_actions,
629
+ initial_events,
630
+ stack,
631
+ step,
632
+ tracker,
633
+ flow.readable_name(),
634
+ )
635
+
636
+ elif isinstance(step, ActionFlowStep):
637
+ if not step.action:
638
+ raise FlowException(f"Action not specified for step {step}")
639
+ return _run_action_step(available_actions, initial_events, stack, step)
640
+
641
+ elif isinstance(step, LinkFlowStep):
642
+ return _run_link_step(initial_events, stack, step)
643
+
644
+ elif isinstance(step, CallFlowStep):
645
+ return _run_call_step(initial_events, stack, step)
646
+
647
+ elif isinstance(step, SetSlotsFlowStep):
648
+ return _run_set_slot_step(initial_events, step)
649
+
650
+ elif isinstance(step, NoOperationFlowStep):
651
+ structlogger.debug("flow.step.run.no_operation")
652
+ return ContinueFlowWithNextStep(events=initial_events)
653
+
654
+ elif isinstance(step, EndFlowStep):
655
+ return _run_end_step(flow, flows, initial_events, stack, tracker)
656
+
657
+ else:
658
+ raise FlowException(f"Unknown flow step type {type(step)}")
659
+
660
+
661
+ def _run_end_step(
662
+ flow: Flow,
663
+ flows: FlowsList,
664
+ initial_events: List[Event],
665
+ stack: DialogueStack,
666
+ tracker: DialogueStateTracker,
667
+ ) -> FlowStepResult:
668
+ # this is the end of the flow, so we'll pop it from the stack
669
+ structlogger.debug("flow.step.run.flow_end")
670
+ current_frame = stack.pop()
671
+ trigger_pattern_completed(current_frame, stack, flows)
672
+ resumed_events = trigger_pattern_continue_interrupted(current_frame, stack, flows)
673
+ reset_events: List[Event] = reset_scoped_slots(current_frame, flow, tracker)
674
+ return ContinueFlowWithNextStep(
675
+ events=initial_events + reset_events + resumed_events, has_flow_ended=True
676
+ )
677
+
678
+
679
+ def _run_set_slot_step(
680
+ initial_events: List[Event], step: SetSlotsFlowStep
681
+ ) -> FlowStepResult:
682
+ structlogger.debug("flow.step.run.slot")
683
+ slot_events: List[Event] = events_from_set_slots_step(step)
684
+ return ContinueFlowWithNextStep(events=initial_events + slot_events)
685
+
686
+
687
+ def _run_call_step(
688
+ initial_events: List[Event], stack: DialogueStack, step: CallFlowStep
689
+ ) -> FlowStepResult:
690
+ structlogger.debug("flow.step.run.call")
691
+ stack.push(
692
+ UserFlowStackFrame(
693
+ flow_id=step.call,
694
+ frame_type=FlowStackFrameType.CALL,
695
+ ),
696
+ )
697
+ return ContinueFlowWithNextStep(events=initial_events)
698
+
699
+
700
+ def _run_link_step(
701
+ initial_events: List[Event], stack: DialogueStack, step: LinkFlowStep
702
+ ) -> FlowStepResult:
703
+ structlogger.debug("flow.step.run.link")
704
+
705
+ if step.link == RASA_PATTERN_HUMAN_HANDOFF:
706
+ linked_stack_frame: DialogueStackFrame = HumanHandoffPatternFlowStackFrame()
707
+ else:
708
+ linked_stack_frame = UserFlowStackFrame(
709
+ flow_id=step.link,
710
+ frame_type=FlowStackFrameType.LINK,
711
+ )
712
+
713
+ stack.push(
714
+ linked_stack_frame,
715
+ # push this below the current stack frame so that we can
716
+ # complete the current flow first and then continue with the
717
+ # linked flow
718
+ index=-1,
719
+ )
720
+
721
+ return ContinueFlowWithNextStep(events=initial_events)
722
+
723
+
724
+ def _run_action_step(
725
+ available_actions: List[str],
726
+ initial_events: List[Event],
727
+ stack: DialogueStack,
728
+ step: ActionFlowStep,
729
+ ) -> FlowStepResult:
730
+ context = {"context": stack.current_context()}
731
+ action_name = render_template_variables(step.action, context)
732
+
733
+ if action_name in available_actions:
734
+ structlogger.debug("flow.step.run.action", context=context)
735
+ return PauseFlowReturnPrediction(
736
+ FlowActionPrediction(action_name, 1.0, events=initial_events)
737
+ )
738
+ else:
739
+ if step.action != "validate_{{context.collect}}":
740
+ # do not log about non-existing validation actions of collect steps
741
+ utter_action_name = render_template_variables("{{context.utter}}", context)
742
+ if utter_action_name not in available_actions:
743
+ structlogger.warning("flow.step.run.action.unknown", action=action_name)
744
+ return ContinueFlowWithNextStep(events=initial_events)
745
+
746
+
747
+ def _run_collect_information_step(
748
+ available_actions: List[str],
749
+ initial_events: List[Event],
750
+ stack: DialogueStack,
751
+ step: CollectInformationFlowStep,
752
+ tracker: DialogueStateTracker,
753
+ flow_name: str,
754
+ ) -> FlowStepResult:
755
+ is_step_valid = validate_collect_step(
756
+ step, stack, available_actions, tracker.slots, flow_name
757
+ )
758
+
759
+ if not is_step_valid:
760
+ # if we return any other FlowStepResult, the assistant will stay silent
761
+ # instead of triggering the internal error pattern
762
+ return ContinueFlowWithNextStep(events=initial_events)
763
+ is_mapping_valid = validate_custom_slot_mappings(
764
+ step, stack, tracker, available_actions, flow_name
765
+ )
766
+
767
+ if not is_mapping_valid:
768
+ # if we return any other FlowStepResult, the assistant will stay silent
769
+ # instead of triggering the internal error pattern
770
+ return ContinueFlowWithNextStep(events=initial_events)
771
+
772
+ structlogger.debug("flow.step.run.collect")
773
+ trigger_pattern_ask_collect_information(
774
+ step.collect, stack, step.rejections, step.utter, step.collect_action
775
+ )
776
+
777
+ events: List[Event] = events_for_collect_step_execution(step, tracker)
778
+ return ContinueFlowWithNextStep(events=initial_events + events)