rasa-pro 3.8.16__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 (644) hide show
  1. README.md +380 -0
  2. rasa/__init__.py +10 -0
  3. rasa/__main__.py +151 -0
  4. rasa/anonymization/__init__.py +2 -0
  5. rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
  6. rasa/anonymization/anonymization_pipeline.py +287 -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 +117 -0
  11. rasa/api.py +146 -0
  12. rasa/cli/__init__.py +5 -0
  13. rasa/cli/arguments/__init__.py +0 -0
  14. rasa/cli/arguments/data.py +81 -0
  15. rasa/cli/arguments/default_arguments.py +165 -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 +204 -0
  20. rasa/cli/arguments/shell.py +13 -0
  21. rasa/cli/arguments/test.py +211 -0
  22. rasa/cli/arguments/train.py +263 -0
  23. rasa/cli/arguments/visualize.py +34 -0
  24. rasa/cli/arguments/x.py +30 -0
  25. rasa/cli/data.py +292 -0
  26. rasa/cli/e2e_test.py +566 -0
  27. rasa/cli/evaluate.py +222 -0
  28. rasa/cli/export.py +251 -0
  29. rasa/cli/inspect.py +63 -0
  30. rasa/cli/interactive.py +164 -0
  31. rasa/cli/license.py +65 -0
  32. rasa/cli/markers.py +78 -0
  33. rasa/cli/project_templates/__init__.py +0 -0
  34. rasa/cli/project_templates/calm/actions/__init__.py +0 -0
  35. rasa/cli/project_templates/calm/actions/action_template.py +27 -0
  36. rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
  37. rasa/cli/project_templates/calm/actions/db.py +57 -0
  38. rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
  39. rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
  40. rasa/cli/project_templates/calm/config.yml +12 -0
  41. rasa/cli/project_templates/calm/credentials.yml +33 -0
  42. rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
  43. rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
  44. rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
  45. rasa/cli/project_templates/calm/db/contacts.json +10 -0
  46. rasa/cli/project_templates/calm/domain/add_contact.yml +33 -0
  47. rasa/cli/project_templates/calm/domain/list_contacts.yml +14 -0
  48. rasa/cli/project_templates/calm/domain/remove_contact.yml +31 -0
  49. rasa/cli/project_templates/calm/domain/shared.yml +5 -0
  50. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
  51. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
  52. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
  53. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
  54. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
  55. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
  56. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
  57. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
  58. rasa/cli/project_templates/calm/endpoints.yml +45 -0
  59. rasa/cli/project_templates/default/actions/__init__.py +0 -0
  60. rasa/cli/project_templates/default/actions/actions.py +27 -0
  61. rasa/cli/project_templates/default/config.yml +44 -0
  62. rasa/cli/project_templates/default/credentials.yml +33 -0
  63. rasa/cli/project_templates/default/data/nlu.yml +91 -0
  64. rasa/cli/project_templates/default/data/rules.yml +13 -0
  65. rasa/cli/project_templates/default/data/stories.yml +30 -0
  66. rasa/cli/project_templates/default/domain.yml +34 -0
  67. rasa/cli/project_templates/default/endpoints.yml +42 -0
  68. rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
  69. rasa/cli/project_templates/tutorial/actions.py +22 -0
  70. rasa/cli/project_templates/tutorial/config.yml +11 -0
  71. rasa/cli/project_templates/tutorial/credentials.yml +33 -0
  72. rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
  73. rasa/cli/project_templates/tutorial/domain.yml +17 -0
  74. rasa/cli/project_templates/tutorial/endpoints.yml +45 -0
  75. rasa/cli/run.py +136 -0
  76. rasa/cli/scaffold.py +268 -0
  77. rasa/cli/shell.py +141 -0
  78. rasa/cli/studio/__init__.py +0 -0
  79. rasa/cli/studio/download.py +51 -0
  80. rasa/cli/studio/studio.py +110 -0
  81. rasa/cli/studio/train.py +59 -0
  82. rasa/cli/studio/upload.py +85 -0
  83. rasa/cli/telemetry.py +90 -0
  84. rasa/cli/test.py +280 -0
  85. rasa/cli/train.py +260 -0
  86. rasa/cli/utils.py +453 -0
  87. rasa/cli/visualize.py +40 -0
  88. rasa/cli/x.py +205 -0
  89. rasa/constants.py +37 -0
  90. rasa/core/__init__.py +17 -0
  91. rasa/core/actions/__init__.py +0 -0
  92. rasa/core/actions/action.py +1450 -0
  93. rasa/core/actions/action_clean_stack.py +59 -0
  94. rasa/core/actions/action_run_slot_rejections.py +207 -0
  95. rasa/core/actions/action_trigger_chitchat.py +31 -0
  96. rasa/core/actions/action_trigger_flow.py +109 -0
  97. rasa/core/actions/action_trigger_search.py +31 -0
  98. rasa/core/actions/constants.py +2 -0
  99. rasa/core/actions/forms.py +737 -0
  100. rasa/core/actions/loops.py +111 -0
  101. rasa/core/actions/two_stage_fallback.py +186 -0
  102. rasa/core/agent.py +557 -0
  103. rasa/core/auth_retry_tracker_store.py +122 -0
  104. rasa/core/brokers/__init__.py +0 -0
  105. rasa/core/brokers/broker.py +126 -0
  106. rasa/core/brokers/file.py +58 -0
  107. rasa/core/brokers/kafka.py +322 -0
  108. rasa/core/brokers/pika.py +387 -0
  109. rasa/core/brokers/sql.py +86 -0
  110. rasa/core/channels/__init__.py +55 -0
  111. rasa/core/channels/audiocodes.py +463 -0
  112. rasa/core/channels/botframework.py +339 -0
  113. rasa/core/channels/callback.py +85 -0
  114. rasa/core/channels/channel.py +419 -0
  115. rasa/core/channels/console.py +243 -0
  116. rasa/core/channels/development_inspector.py +93 -0
  117. rasa/core/channels/facebook.py +422 -0
  118. rasa/core/channels/hangouts.py +335 -0
  119. rasa/core/channels/inspector/.eslintrc.cjs +25 -0
  120. rasa/core/channels/inspector/.gitignore +23 -0
  121. rasa/core/channels/inspector/README.md +54 -0
  122. rasa/core/channels/inspector/assets/favicon.ico +0 -0
  123. rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
  124. rasa/core/channels/inspector/custom.d.ts +3 -0
  125. rasa/core/channels/inspector/dist/assets/arc-5623b6dc.js +1 -0
  126. rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
  127. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-685c106a.js +10 -0
  128. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-8cbed007.js +2 -0
  129. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-5889cf12.js +2 -0
  130. rasa/core/channels/inspector/dist/assets/createText-62fc7601-24c249d7.js +7 -0
  131. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-7dd06a75.js +4 -0
  132. rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-62c1e54c.js +51 -0
  133. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-ce49b86f.js +6 -0
  134. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-4067e48f.js +4 -0
  135. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-85583a23.js +1 -0
  136. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-59fe4051.js +139 -0
  137. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-47e3a43b.js +266 -0
  138. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-5a2ac0d9.js +70 -0
  139. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
  140. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
  141. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
  142. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
  143. rasa/core/channels/inspector/dist/assets/index-268a75c0.js +1040 -0
  144. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-dfb8efc4.js +1 -0
  145. rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
  146. rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-b0c470f2.js +7 -0
  147. rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
  148. rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-2edb829a.js +139 -0
  149. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
  150. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
  151. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
  152. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
  153. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
  154. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
  155. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
  156. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
  157. rasa/core/channels/inspector/dist/assets/layout-b6873d69.js +1 -0
  158. rasa/core/channels/inspector/dist/assets/line-1efc5781.js +1 -0
  159. rasa/core/channels/inspector/dist/assets/linear-661e9b94.js +1 -0
  160. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-2d2e727f.js +109 -0
  161. rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
  162. rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
  163. rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-9d3ea93d.js +35 -0
  164. rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-06a178a2.js +7 -0
  165. rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-0bfedffc.js +52 -0
  166. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-d76d0a04.js +8 -0
  167. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-37bb4341.js +122 -0
  168. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-f52f7f57.js +1 -0
  169. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-4a986a20.js +1 -0
  170. rasa/core/channels/inspector/dist/assets/styles-080da4f6-7dd9ae12.js +110 -0
  171. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-46e1ca14.js +159 -0
  172. rasa/core/channels/inspector/dist/assets/styles-9c745c82-4a97439a.js +207 -0
  173. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-823917a3.js +1 -0
  174. rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-9ea72896.js +61 -0
  175. rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-b631a8b6.js +7 -0
  176. rasa/core/channels/inspector/dist/index.html +39 -0
  177. rasa/core/channels/inspector/index.html +37 -0
  178. rasa/core/channels/inspector/jest.config.ts +13 -0
  179. rasa/core/channels/inspector/package.json +48 -0
  180. rasa/core/channels/inspector/setupTests.ts +2 -0
  181. rasa/core/channels/inspector/src/App.tsx +170 -0
  182. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +97 -0
  183. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
  184. rasa/core/channels/inspector/src/components/DialogueStack.tsx +151 -0
  185. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
  186. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
  187. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +19 -0
  188. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
  189. rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
  190. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
  191. rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
  192. rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
  193. rasa/core/channels/inspector/src/helpers/formatters.test.ts +385 -0
  194. rasa/core/channels/inspector/src/helpers/formatters.ts +239 -0
  195. rasa/core/channels/inspector/src/helpers/utils.ts +42 -0
  196. rasa/core/channels/inspector/src/main.tsx +13 -0
  197. rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
  198. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
  199. rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
  200. rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
  201. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
  202. rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
  203. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
  204. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
  205. rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
  206. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
  207. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
  208. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
  209. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
  210. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
  211. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
  212. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
  213. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
  214. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
  215. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
  216. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
  217. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
  218. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
  219. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
  220. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
  221. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
  222. rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
  223. rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
  224. rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
  225. rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
  226. rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
  227. rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
  228. rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
  229. rasa/core/channels/inspector/src/theme/index.ts +101 -0
  230. rasa/core/channels/inspector/src/types.ts +64 -0
  231. rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
  232. rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
  233. rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
  234. rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
  235. rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
  236. rasa/core/channels/inspector/tsconfig.json +26 -0
  237. rasa/core/channels/inspector/tsconfig.node.json +10 -0
  238. rasa/core/channels/inspector/vite.config.ts +8 -0
  239. rasa/core/channels/inspector/yarn.lock +6156 -0
  240. rasa/core/channels/mattermost.py +229 -0
  241. rasa/core/channels/rasa_chat.py +126 -0
  242. rasa/core/channels/rest.py +210 -0
  243. rasa/core/channels/rocketchat.py +175 -0
  244. rasa/core/channels/slack.py +620 -0
  245. rasa/core/channels/socketio.py +274 -0
  246. rasa/core/channels/telegram.py +298 -0
  247. rasa/core/channels/twilio.py +169 -0
  248. rasa/core/channels/twilio_voice.py +367 -0
  249. rasa/core/channels/vier_cvg.py +374 -0
  250. rasa/core/channels/webexteams.py +135 -0
  251. rasa/core/concurrent_lock_store.py +210 -0
  252. rasa/core/constants.py +107 -0
  253. rasa/core/evaluation/__init__.py +0 -0
  254. rasa/core/evaluation/marker.py +267 -0
  255. rasa/core/evaluation/marker_base.py +925 -0
  256. rasa/core/evaluation/marker_stats.py +294 -0
  257. rasa/core/evaluation/marker_tracker_loader.py +103 -0
  258. rasa/core/exceptions.py +29 -0
  259. rasa/core/exporter.py +284 -0
  260. rasa/core/featurizers/__init__.py +0 -0
  261. rasa/core/featurizers/precomputation.py +410 -0
  262. rasa/core/featurizers/single_state_featurizer.py +402 -0
  263. rasa/core/featurizers/tracker_featurizers.py +1172 -0
  264. rasa/core/http_interpreter.py +89 -0
  265. rasa/core/information_retrieval/__init__.py +0 -0
  266. rasa/core/information_retrieval/faiss.py +116 -0
  267. rasa/core/information_retrieval/information_retrieval.py +72 -0
  268. rasa/core/information_retrieval/milvus.py +59 -0
  269. rasa/core/information_retrieval/qdrant.py +102 -0
  270. rasa/core/jobs.py +63 -0
  271. rasa/core/lock.py +139 -0
  272. rasa/core/lock_store.py +344 -0
  273. rasa/core/migrate.py +404 -0
  274. rasa/core/nlg/__init__.py +3 -0
  275. rasa/core/nlg/callback.py +147 -0
  276. rasa/core/nlg/contextual_response_rephraser.py +270 -0
  277. rasa/core/nlg/generator.py +230 -0
  278. rasa/core/nlg/interpolator.py +143 -0
  279. rasa/core/nlg/response.py +155 -0
  280. rasa/core/nlg/summarize.py +69 -0
  281. rasa/core/policies/__init__.py +0 -0
  282. rasa/core/policies/ensemble.py +329 -0
  283. rasa/core/policies/enterprise_search_policy.py +717 -0
  284. rasa/core/policies/enterprise_search_prompt_template.jinja2 +62 -0
  285. rasa/core/policies/flow_policy.py +205 -0
  286. rasa/core/policies/flows/__init__.py +0 -0
  287. rasa/core/policies/flows/flow_exceptions.py +44 -0
  288. rasa/core/policies/flows/flow_executor.py +582 -0
  289. rasa/core/policies/flows/flow_step_result.py +43 -0
  290. rasa/core/policies/intentless_policy.py +924 -0
  291. rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
  292. rasa/core/policies/memoization.py +538 -0
  293. rasa/core/policies/policy.py +716 -0
  294. rasa/core/policies/rule_policy.py +1276 -0
  295. rasa/core/policies/ted_policy.py +2146 -0
  296. rasa/core/policies/unexpected_intent_policy.py +1015 -0
  297. rasa/core/processor.py +1331 -0
  298. rasa/core/run.py +315 -0
  299. rasa/core/secrets_manager/__init__.py +0 -0
  300. rasa/core/secrets_manager/constants.py +32 -0
  301. rasa/core/secrets_manager/endpoints.py +391 -0
  302. rasa/core/secrets_manager/factory.py +233 -0
  303. rasa/core/secrets_manager/secret_manager.py +262 -0
  304. rasa/core/secrets_manager/vault.py +576 -0
  305. rasa/core/test.py +1337 -0
  306. rasa/core/tracker_store.py +1664 -0
  307. rasa/core/train.py +107 -0
  308. rasa/core/training/__init__.py +89 -0
  309. rasa/core/training/converters/__init__.py +0 -0
  310. rasa/core/training/converters/responses_prefix_converter.py +119 -0
  311. rasa/core/training/interactive.py +1742 -0
  312. rasa/core/training/story_conflict.py +381 -0
  313. rasa/core/training/training.py +93 -0
  314. rasa/core/utils.py +344 -0
  315. rasa/core/visualize.py +70 -0
  316. rasa/dialogue_understanding/__init__.py +0 -0
  317. rasa/dialogue_understanding/coexistence/__init__.py +0 -0
  318. rasa/dialogue_understanding/coexistence/constants.py +4 -0
  319. rasa/dialogue_understanding/coexistence/intent_based_router.py +189 -0
  320. rasa/dialogue_understanding/coexistence/llm_based_router.py +261 -0
  321. rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
  322. rasa/dialogue_understanding/commands/__init__.py +45 -0
  323. rasa/dialogue_understanding/commands/can_not_handle_command.py +61 -0
  324. rasa/dialogue_understanding/commands/cancel_flow_command.py +116 -0
  325. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +48 -0
  326. rasa/dialogue_understanding/commands/clarify_command.py +77 -0
  327. rasa/dialogue_understanding/commands/command.py +85 -0
  328. rasa/dialogue_understanding/commands/correct_slots_command.py +288 -0
  329. rasa/dialogue_understanding/commands/error_command.py +67 -0
  330. rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
  331. rasa/dialogue_understanding/commands/handle_code_change_command.py +64 -0
  332. rasa/dialogue_understanding/commands/human_handoff_command.py +57 -0
  333. rasa/dialogue_understanding/commands/knowledge_answer_command.py +48 -0
  334. rasa/dialogue_understanding/commands/noop_command.py +45 -0
  335. rasa/dialogue_understanding/commands/set_slot_command.py +125 -0
  336. rasa/dialogue_understanding/commands/skip_question_command.py +66 -0
  337. rasa/dialogue_understanding/commands/start_flow_command.py +98 -0
  338. rasa/dialogue_understanding/generator/__init__.py +6 -0
  339. rasa/dialogue_understanding/generator/command_generator.py +257 -0
  340. rasa/dialogue_understanding/generator/command_prompt_template.jinja2 +57 -0
  341. rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
  342. rasa/dialogue_understanding/generator/flow_retrieval.py +410 -0
  343. rasa/dialogue_understanding/generator/llm_command_generator.py +637 -0
  344. rasa/dialogue_understanding/generator/nlu_command_adapter.py +157 -0
  345. rasa/dialogue_understanding/patterns/__init__.py +0 -0
  346. rasa/dialogue_understanding/patterns/cancel.py +111 -0
  347. rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
  348. rasa/dialogue_understanding/patterns/chitchat.py +37 -0
  349. rasa/dialogue_understanding/patterns/clarify.py +97 -0
  350. rasa/dialogue_understanding/patterns/code_change.py +41 -0
  351. rasa/dialogue_understanding/patterns/collect_information.py +90 -0
  352. rasa/dialogue_understanding/patterns/completed.py +40 -0
  353. rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
  354. rasa/dialogue_understanding/patterns/correction.py +278 -0
  355. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +243 -0
  356. rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
  357. rasa/dialogue_understanding/patterns/internal_error.py +47 -0
  358. rasa/dialogue_understanding/patterns/search.py +37 -0
  359. rasa/dialogue_understanding/patterns/skip_question.py +38 -0
  360. rasa/dialogue_understanding/processor/__init__.py +0 -0
  361. rasa/dialogue_understanding/processor/command_processor.py +578 -0
  362. rasa/dialogue_understanding/processor/command_processor_component.py +39 -0
  363. rasa/dialogue_understanding/stack/__init__.py +0 -0
  364. rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
  365. rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
  366. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
  367. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
  368. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
  369. rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
  370. rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
  371. rasa/dialogue_understanding/stack/utils.py +211 -0
  372. rasa/e2e_test/__init__.py +0 -0
  373. rasa/e2e_test/constants.py +10 -0
  374. rasa/e2e_test/e2e_test_case.py +322 -0
  375. rasa/e2e_test/e2e_test_result.py +34 -0
  376. rasa/e2e_test/e2e_test_runner.py +659 -0
  377. rasa/e2e_test/e2e_test_schema.yml +67 -0
  378. rasa/engine/__init__.py +0 -0
  379. rasa/engine/caching.py +464 -0
  380. rasa/engine/constants.py +17 -0
  381. rasa/engine/exceptions.py +14 -0
  382. rasa/engine/graph.py +625 -0
  383. rasa/engine/loader.py +36 -0
  384. rasa/engine/recipes/__init__.py +0 -0
  385. rasa/engine/recipes/config_files/default_config.yml +44 -0
  386. rasa/engine/recipes/default_components.py +99 -0
  387. rasa/engine/recipes/default_recipe.py +1252 -0
  388. rasa/engine/recipes/graph_recipe.py +79 -0
  389. rasa/engine/recipes/recipe.py +93 -0
  390. rasa/engine/runner/__init__.py +0 -0
  391. rasa/engine/runner/dask.py +256 -0
  392. rasa/engine/runner/interface.py +49 -0
  393. rasa/engine/storage/__init__.py +0 -0
  394. rasa/engine/storage/local_model_storage.py +248 -0
  395. rasa/engine/storage/resource.py +110 -0
  396. rasa/engine/storage/storage.py +203 -0
  397. rasa/engine/training/__init__.py +0 -0
  398. rasa/engine/training/components.py +176 -0
  399. rasa/engine/training/fingerprinting.py +64 -0
  400. rasa/engine/training/graph_trainer.py +256 -0
  401. rasa/engine/training/hooks.py +164 -0
  402. rasa/engine/validation.py +839 -0
  403. rasa/env.py +5 -0
  404. rasa/exceptions.py +69 -0
  405. rasa/graph_components/__init__.py +0 -0
  406. rasa/graph_components/converters/__init__.py +0 -0
  407. rasa/graph_components/converters/nlu_message_converter.py +48 -0
  408. rasa/graph_components/providers/__init__.py +0 -0
  409. rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
  410. rasa/graph_components/providers/domain_provider.py +71 -0
  411. rasa/graph_components/providers/flows_provider.py +74 -0
  412. rasa/graph_components/providers/forms_provider.py +44 -0
  413. rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
  414. rasa/graph_components/providers/responses_provider.py +44 -0
  415. rasa/graph_components/providers/rule_only_provider.py +49 -0
  416. rasa/graph_components/providers/story_graph_provider.py +43 -0
  417. rasa/graph_components/providers/training_tracker_provider.py +55 -0
  418. rasa/graph_components/validators/__init__.py +0 -0
  419. rasa/graph_components/validators/default_recipe_validator.py +552 -0
  420. rasa/graph_components/validators/finetuning_validator.py +302 -0
  421. rasa/hooks.py +113 -0
  422. rasa/jupyter.py +63 -0
  423. rasa/keys +1 -0
  424. rasa/markers/__init__.py +0 -0
  425. rasa/markers/marker.py +269 -0
  426. rasa/markers/marker_base.py +828 -0
  427. rasa/markers/upload.py +74 -0
  428. rasa/markers/validate.py +21 -0
  429. rasa/model.py +118 -0
  430. rasa/model_testing.py +457 -0
  431. rasa/model_training.py +535 -0
  432. rasa/nlu/__init__.py +7 -0
  433. rasa/nlu/classifiers/__init__.py +3 -0
  434. rasa/nlu/classifiers/classifier.py +5 -0
  435. rasa/nlu/classifiers/diet_classifier.py +1874 -0
  436. rasa/nlu/classifiers/fallback_classifier.py +192 -0
  437. rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
  438. rasa/nlu/classifiers/llm_intent_classifier.py +519 -0
  439. rasa/nlu/classifiers/logistic_regression_classifier.py +240 -0
  440. rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
  441. rasa/nlu/classifiers/regex_message_handler.py +56 -0
  442. rasa/nlu/classifiers/sklearn_intent_classifier.py +309 -0
  443. rasa/nlu/constants.py +77 -0
  444. rasa/nlu/convert.py +40 -0
  445. rasa/nlu/emulators/__init__.py +0 -0
  446. rasa/nlu/emulators/dialogflow.py +55 -0
  447. rasa/nlu/emulators/emulator.py +49 -0
  448. rasa/nlu/emulators/luis.py +86 -0
  449. rasa/nlu/emulators/no_emulator.py +10 -0
  450. rasa/nlu/emulators/wit.py +56 -0
  451. rasa/nlu/extractors/__init__.py +0 -0
  452. rasa/nlu/extractors/crf_entity_extractor.py +672 -0
  453. rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
  454. rasa/nlu/extractors/entity_synonyms.py +178 -0
  455. rasa/nlu/extractors/extractor.py +470 -0
  456. rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
  457. rasa/nlu/extractors/regex_entity_extractor.py +220 -0
  458. rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
  459. rasa/nlu/featurizers/__init__.py +0 -0
  460. rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
  461. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +449 -0
  462. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
  463. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +772 -0
  464. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
  465. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
  466. rasa/nlu/featurizers/featurizer.py +89 -0
  467. rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
  468. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +840 -0
  469. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +539 -0
  470. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +269 -0
  471. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
  472. rasa/nlu/model.py +24 -0
  473. rasa/nlu/persistor.py +240 -0
  474. rasa/nlu/run.py +27 -0
  475. rasa/nlu/selectors/__init__.py +0 -0
  476. rasa/nlu/selectors/response_selector.py +990 -0
  477. rasa/nlu/test.py +1943 -0
  478. rasa/nlu/tokenizers/__init__.py +0 -0
  479. rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
  480. rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
  481. rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
  482. rasa/nlu/tokenizers/tokenizer.py +239 -0
  483. rasa/nlu/tokenizers/whitespace_tokenizer.py +106 -0
  484. rasa/nlu/utils/__init__.py +35 -0
  485. rasa/nlu/utils/bilou_utils.py +462 -0
  486. rasa/nlu/utils/hugging_face/__init__.py +0 -0
  487. rasa/nlu/utils/hugging_face/registry.py +108 -0
  488. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
  489. rasa/nlu/utils/mitie_utils.py +113 -0
  490. rasa/nlu/utils/pattern_utils.py +168 -0
  491. rasa/nlu/utils/spacy_utils.py +312 -0
  492. rasa/plugin.py +90 -0
  493. rasa/server.py +1536 -0
  494. rasa/shared/__init__.py +0 -0
  495. rasa/shared/constants.py +181 -0
  496. rasa/shared/core/__init__.py +0 -0
  497. rasa/shared/core/constants.py +168 -0
  498. rasa/shared/core/conversation.py +46 -0
  499. rasa/shared/core/domain.py +2106 -0
  500. rasa/shared/core/events.py +2507 -0
  501. rasa/shared/core/flows/__init__.py +7 -0
  502. rasa/shared/core/flows/flow.py +353 -0
  503. rasa/shared/core/flows/flow_step.py +146 -0
  504. rasa/shared/core/flows/flow_step_links.py +319 -0
  505. rasa/shared/core/flows/flow_step_sequence.py +70 -0
  506. rasa/shared/core/flows/flows_list.py +211 -0
  507. rasa/shared/core/flows/flows_yaml_schema.json +217 -0
  508. rasa/shared/core/flows/nlu_trigger.py +117 -0
  509. rasa/shared/core/flows/steps/__init__.py +24 -0
  510. rasa/shared/core/flows/steps/action.py +51 -0
  511. rasa/shared/core/flows/steps/call.py +64 -0
  512. rasa/shared/core/flows/steps/collect.py +112 -0
  513. rasa/shared/core/flows/steps/constants.py +5 -0
  514. rasa/shared/core/flows/steps/continuation.py +36 -0
  515. rasa/shared/core/flows/steps/end.py +22 -0
  516. rasa/shared/core/flows/steps/internal.py +44 -0
  517. rasa/shared/core/flows/steps/link.py +51 -0
  518. rasa/shared/core/flows/steps/no_operation.py +48 -0
  519. rasa/shared/core/flows/steps/set_slots.py +50 -0
  520. rasa/shared/core/flows/steps/start.py +30 -0
  521. rasa/shared/core/flows/validation.py +527 -0
  522. rasa/shared/core/flows/yaml_flows_io.py +278 -0
  523. rasa/shared/core/generator.py +907 -0
  524. rasa/shared/core/slot_mappings.py +235 -0
  525. rasa/shared/core/slots.py +647 -0
  526. rasa/shared/core/trackers.py +1159 -0
  527. rasa/shared/core/training_data/__init__.py +0 -0
  528. rasa/shared/core/training_data/loading.py +90 -0
  529. rasa/shared/core/training_data/story_reader/__init__.py +0 -0
  530. rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
  531. rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
  532. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
  533. rasa/shared/core/training_data/story_writer/__init__.py +0 -0
  534. rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
  535. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +442 -0
  536. rasa/shared/core/training_data/structures.py +838 -0
  537. rasa/shared/core/training_data/visualization.html +146 -0
  538. rasa/shared/core/training_data/visualization.py +603 -0
  539. rasa/shared/data.py +192 -0
  540. rasa/shared/engine/__init__.py +0 -0
  541. rasa/shared/engine/caching.py +26 -0
  542. rasa/shared/exceptions.py +129 -0
  543. rasa/shared/importers/__init__.py +0 -0
  544. rasa/shared/importers/importer.py +705 -0
  545. rasa/shared/importers/multi_project.py +203 -0
  546. rasa/shared/importers/rasa.py +100 -0
  547. rasa/shared/importers/utils.py +34 -0
  548. rasa/shared/nlu/__init__.py +0 -0
  549. rasa/shared/nlu/constants.py +45 -0
  550. rasa/shared/nlu/interpreter.py +10 -0
  551. rasa/shared/nlu/training_data/__init__.py +0 -0
  552. rasa/shared/nlu/training_data/entities_parser.py +209 -0
  553. rasa/shared/nlu/training_data/features.py +374 -0
  554. rasa/shared/nlu/training_data/formats/__init__.py +10 -0
  555. rasa/shared/nlu/training_data/formats/dialogflow.py +162 -0
  556. rasa/shared/nlu/training_data/formats/luis.py +87 -0
  557. rasa/shared/nlu/training_data/formats/rasa.py +135 -0
  558. rasa/shared/nlu/training_data/formats/rasa_yaml.py +605 -0
  559. rasa/shared/nlu/training_data/formats/readerwriter.py +245 -0
  560. rasa/shared/nlu/training_data/formats/wit.py +52 -0
  561. rasa/shared/nlu/training_data/loading.py +137 -0
  562. rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
  563. rasa/shared/nlu/training_data/message.py +477 -0
  564. rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
  565. rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
  566. rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
  567. rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
  568. rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
  569. rasa/shared/nlu/training_data/training_data.py +732 -0
  570. rasa/shared/nlu/training_data/util.py +223 -0
  571. rasa/shared/providers/__init__.py +0 -0
  572. rasa/shared/providers/openai/__init__.py +0 -0
  573. rasa/shared/providers/openai/clients.py +43 -0
  574. rasa/shared/providers/openai/session_handler.py +110 -0
  575. rasa/shared/utils/__init__.py +0 -0
  576. rasa/shared/utils/cli.py +72 -0
  577. rasa/shared/utils/common.py +308 -0
  578. rasa/shared/utils/constants.py +1 -0
  579. rasa/shared/utils/io.py +403 -0
  580. rasa/shared/utils/llm.py +405 -0
  581. rasa/shared/utils/pykwalify_extensions.py +26 -0
  582. rasa/shared/utils/schemas/__init__.py +0 -0
  583. rasa/shared/utils/schemas/config.yml +2 -0
  584. rasa/shared/utils/schemas/domain.yml +142 -0
  585. rasa/shared/utils/schemas/events.py +212 -0
  586. rasa/shared/utils/schemas/model_config.yml +46 -0
  587. rasa/shared/utils/schemas/stories.yml +173 -0
  588. rasa/shared/utils/yaml.py +777 -0
  589. rasa/studio/__init__.py +0 -0
  590. rasa/studio/auth.py +252 -0
  591. rasa/studio/config.py +127 -0
  592. rasa/studio/constants.py +16 -0
  593. rasa/studio/data_handler.py +352 -0
  594. rasa/studio/download.py +350 -0
  595. rasa/studio/train.py +136 -0
  596. rasa/studio/upload.py +408 -0
  597. rasa/telemetry.py +1583 -0
  598. rasa/tracing/__init__.py +0 -0
  599. rasa/tracing/config.py +338 -0
  600. rasa/tracing/constants.py +38 -0
  601. rasa/tracing/instrumentation/__init__.py +0 -0
  602. rasa/tracing/instrumentation/attribute_extractors.py +663 -0
  603. rasa/tracing/instrumentation/instrumentation.py +939 -0
  604. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +142 -0
  605. rasa/tracing/instrumentation/metrics.py +206 -0
  606. rasa/tracing/metric_instrument_provider.py +125 -0
  607. rasa/utils/__init__.py +0 -0
  608. rasa/utils/beta.py +83 -0
  609. rasa/utils/cli.py +27 -0
  610. rasa/utils/common.py +635 -0
  611. rasa/utils/converter.py +53 -0
  612. rasa/utils/endpoints.py +303 -0
  613. rasa/utils/io.py +326 -0
  614. rasa/utils/licensing.py +319 -0
  615. rasa/utils/log_utils.py +174 -0
  616. rasa/utils/mapper.py +210 -0
  617. rasa/utils/ml_utils.py +145 -0
  618. rasa/utils/plotting.py +362 -0
  619. rasa/utils/singleton.py +23 -0
  620. rasa/utils/tensorflow/__init__.py +0 -0
  621. rasa/utils/tensorflow/callback.py +112 -0
  622. rasa/utils/tensorflow/constants.py +116 -0
  623. rasa/utils/tensorflow/crf.py +492 -0
  624. rasa/utils/tensorflow/data_generator.py +440 -0
  625. rasa/utils/tensorflow/environment.py +161 -0
  626. rasa/utils/tensorflow/exceptions.py +5 -0
  627. rasa/utils/tensorflow/layers.py +1565 -0
  628. rasa/utils/tensorflow/layers_utils.py +113 -0
  629. rasa/utils/tensorflow/metrics.py +281 -0
  630. rasa/utils/tensorflow/model_data.py +991 -0
  631. rasa/utils/tensorflow/model_data_utils.py +500 -0
  632. rasa/utils/tensorflow/models.py +936 -0
  633. rasa/utils/tensorflow/rasa_layers.py +1094 -0
  634. rasa/utils/tensorflow/transformer.py +640 -0
  635. rasa/utils/tensorflow/types.py +6 -0
  636. rasa/utils/train_utils.py +572 -0
  637. rasa/utils/yaml.py +54 -0
  638. rasa/validator.py +1035 -0
  639. rasa/version.py +3 -0
  640. rasa_pro-3.8.16.dist-info/METADATA +528 -0
  641. rasa_pro-3.8.16.dist-info/NOTICE +5 -0
  642. rasa_pro-3.8.16.dist-info/RECORD +644 -0
  643. rasa_pro-3.8.16.dist-info/WHEEL +4 -0
  644. rasa_pro-3.8.16.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,582 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Dict, Text, List, Optional
4
+
5
+ from jinja2 import Template
6
+ from structlog.contextvars import (
7
+ bound_contextvars,
8
+ )
9
+ from rasa.core.policies.flows.flow_exceptions import (
10
+ FlowCircuitBreakerTrippedException,
11
+ FlowException,
12
+ NoNextStepInFlowException,
13
+ )
14
+ from rasa.core.policies.flows.flow_step_result import (
15
+ FlowActionPrediction,
16
+ ContinueFlowWithNextStep,
17
+ FlowStepResult,
18
+ PauseFlowReturnPrediction,
19
+ )
20
+ from rasa.dialogue_understanding.patterns.search import SearchPatternFlowStackFrame
21
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
22
+ from rasa.dialogue_understanding.stack.frames import (
23
+ BaseFlowStackFrame,
24
+ DialogueStackFrame,
25
+ UserFlowStackFrame,
26
+ )
27
+ from rasa.dialogue_understanding.patterns.collect_information import (
28
+ CollectInformationPatternFlowStackFrame,
29
+ )
30
+ from rasa.dialogue_understanding.patterns.completed import (
31
+ CompletedPatternFlowStackFrame,
32
+ )
33
+ from rasa.dialogue_understanding.patterns.continue_interrupted import (
34
+ ContinueInterruptedPatternFlowStackFrame,
35
+ )
36
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
37
+ FlowStackFrameType,
38
+ )
39
+ from rasa.dialogue_understanding.stack.utils import (
40
+ top_user_flow_frame,
41
+ )
42
+
43
+ from pypred import Predicate
44
+
45
+ from rasa.shared.core.constants import ACTION_LISTEN_NAME
46
+ from rasa.shared.core.events import (
47
+ Event,
48
+ FlowCompleted,
49
+ FlowResumed,
50
+ FlowStarted,
51
+ SlotSet,
52
+ )
53
+ from rasa.shared.core.flows import FlowsList
54
+ from rasa.shared.core.flows.flow_step_links import (
55
+ StaticFlowStepLink,
56
+ IfFlowStepLink,
57
+ ElseFlowStepLink,
58
+ )
59
+ from rasa.shared.core.flows.steps import (
60
+ ActionFlowStep,
61
+ SetSlotsFlowStep,
62
+ LinkFlowStep,
63
+ ContinueFlowStep,
64
+ EndFlowStep,
65
+ CallFlowStep,
66
+ CollectInformationFlowStep,
67
+ NoOperationFlowStep,
68
+ )
69
+ from rasa.shared.core.flows.flow import (
70
+ END_STEP,
71
+ Flow,
72
+ FlowStep,
73
+ )
74
+ from rasa.shared.core.flows.steps.collect import SlotRejection
75
+ from rasa.shared.core.trackers import (
76
+ DialogueStateTracker,
77
+ )
78
+ import structlog
79
+
80
+ structlogger = structlog.get_logger()
81
+
82
+ MAX_NUMBER_OF_STEPS = 250
83
+
84
+
85
+ def render_template_variables(text: str, context: Dict[Text, Any]) -> str:
86
+ """Replace context variables in a text."""
87
+ return Template(text).render(context)
88
+
89
+
90
+ def is_condition_satisfied(
91
+ predicate: Text, context: Dict[str, Any], tracker: DialogueStateTracker
92
+ ) -> bool:
93
+ """Evaluate a predicate condition."""
94
+ # attach context to the predicate evaluation to allow conditions using it
95
+ context = {"context": context}
96
+
97
+ document: Dict[str, Any] = context.copy()
98
+ # add slots namespace to the document
99
+ document["slots"] = tracker.current_slot_values()
100
+
101
+ rendered_condition = render_template_variables(predicate, context)
102
+ p = Predicate(rendered_condition)
103
+ structlogger.debug(
104
+ "flow.predicate.evaluating",
105
+ condition=predicate,
106
+ rendered_condition=rendered_condition,
107
+ )
108
+ try:
109
+ return p.evaluate(document)
110
+ except (TypeError, Exception) as e:
111
+ structlogger.error(
112
+ "flow.predicate.error",
113
+ predicate=predicate,
114
+ document=document,
115
+ error=str(e),
116
+ )
117
+ return False
118
+
119
+
120
+ def is_step_end_of_flow(step: FlowStep) -> bool:
121
+ """Check if a step is the end of a flow."""
122
+ return (
123
+ step.id == END_STEP
124
+ or
125
+ # not quite at the end but almost, so we'll treat it as the end
126
+ step.id == ContinueFlowStep.continue_step_for_id(END_STEP)
127
+ )
128
+
129
+
130
+ def select_next_step_id(
131
+ current: FlowStep,
132
+ condition_evaluation_context: Dict[str, Any],
133
+ tracker: DialogueStateTracker,
134
+ ) -> Optional[Text]:
135
+ """Selects the next step id based on the current step."""
136
+ next_step = current.next
137
+ if len(next_step.links) == 1 and isinstance(next_step.links[0], StaticFlowStepLink):
138
+ return next_step.links[0].target
139
+
140
+ # evaluate if conditions
141
+ for link in next_step.links:
142
+ if isinstance(link, IfFlowStepLink) and link.condition:
143
+ if is_condition_satisfied(
144
+ link.condition, condition_evaluation_context, tracker
145
+ ):
146
+ structlogger.debug(
147
+ "flow.link.if_condition_satisfied",
148
+ current_id=current.id,
149
+ target=link.target,
150
+ )
151
+ return link.target
152
+
153
+ # evaluate else condition
154
+ for link in next_step.links:
155
+ if isinstance(link, ElseFlowStepLink):
156
+ structlogger.debug(
157
+ "flow.link.else_condition_satisfied",
158
+ current_id=current.id,
159
+ target=link.target,
160
+ )
161
+ return link.target
162
+
163
+ if next_step.links:
164
+ structlogger.error(
165
+ "flow.link.failed_to_select_branch",
166
+ current=current,
167
+ links=next_step.links,
168
+ tracker=tracker,
169
+ )
170
+ return None
171
+
172
+ if current.id == END_STEP:
173
+ # we are already at the very end of the flow. There is no next step.
174
+ return None
175
+ elif isinstance(current, LinkFlowStep):
176
+ # link steps don't have a next step, so we'll return the end step
177
+ return END_STEP
178
+ else:
179
+ structlogger.error(
180
+ "flow.step.failed_to_select_next_step",
181
+ step=current,
182
+ tracker=tracker,
183
+ )
184
+ return None
185
+
186
+
187
+ def select_next_step(
188
+ current_step: FlowStep,
189
+ current_flow: Flow,
190
+ stack: DialogueStack,
191
+ tracker: DialogueStateTracker,
192
+ ) -> Optional[FlowStep]:
193
+ """Get the next step to execute."""
194
+ next_id = select_next_step_id(current_step, stack.current_context(), tracker)
195
+ step = current_flow.step_by_id(next_id)
196
+ structlogger.debug(
197
+ "flow.step.next",
198
+ next_id=step.id if step else None,
199
+ current_id=current_step.id,
200
+ flow_id=current_flow.id,
201
+ )
202
+ return step
203
+
204
+
205
+ def update_top_flow_step_id(updated_id: str, stack: DialogueStack) -> DialogueStack:
206
+ """Update the top flow on the stack."""
207
+ if (top := stack.top()) and isinstance(top, BaseFlowStackFrame):
208
+ top.step_id = updated_id
209
+ return stack
210
+
211
+
212
+ def events_from_set_slots_step(step: SetSlotsFlowStep) -> List[Event]:
213
+ """Create events from a set slots step."""
214
+ return [SlotSet(slot["key"], slot["value"]) for slot in step.slots]
215
+
216
+
217
+ def events_for_collect_step_execution(
218
+ step: CollectInformationFlowStep, tracker: DialogueStateTracker
219
+ ) -> List[Event]:
220
+ """Create the events needed to prepare for the execution of a collect step."""
221
+ # reset the slots that always need to be explicitly collected
222
+ slot = tracker.slots.get(step.collect, None)
223
+
224
+ if slot and step.ask_before_filling:
225
+ return [SlotSet(step.collect, None)]
226
+ else:
227
+ return []
228
+
229
+
230
+ def trigger_pattern_continue_interrupted(
231
+ current_frame: DialogueStackFrame, stack: DialogueStack, flows: FlowsList
232
+ ) -> List[Event]:
233
+ """Trigger the pattern to continue an interrupted flow if needed."""
234
+ events: List[Event] = []
235
+
236
+ # get previously started user flow that will be continued
237
+ interrupted_user_flow_frame = top_user_flow_frame(stack)
238
+ interrupted_user_flow_step = (
239
+ interrupted_user_flow_frame.step(flows) if interrupted_user_flow_frame else None
240
+ )
241
+ interrupted_user_flow = (
242
+ interrupted_user_flow_frame.flow(flows) if interrupted_user_flow_frame else None
243
+ )
244
+
245
+ if (
246
+ isinstance(current_frame, UserFlowStackFrame)
247
+ and interrupted_user_flow_step is not None
248
+ and interrupted_user_flow is not None
249
+ and current_frame.frame_type == FlowStackFrameType.INTERRUPT
250
+ and not is_step_end_of_flow(interrupted_user_flow_step)
251
+ ):
252
+ stack.push(
253
+ ContinueInterruptedPatternFlowStackFrame(
254
+ previous_flow_name=interrupted_user_flow.readable_name(),
255
+ )
256
+ )
257
+ events.append(
258
+ FlowResumed(interrupted_user_flow.id, interrupted_user_flow_step.id)
259
+ )
260
+
261
+ return events
262
+
263
+
264
+ def trigger_pattern_completed(
265
+ current_frame: DialogueStackFrame, stack: DialogueStack, flows: FlowsList
266
+ ) -> None:
267
+ """Trigger the pattern indicating that the stack is empty, if needed."""
268
+ # trigger pattern if the stack is empty and the last frame was either a user flow
269
+ # frame or a search frame
270
+ if stack.is_empty() and (
271
+ isinstance(current_frame, UserFlowStackFrame)
272
+ or isinstance(current_frame, SearchPatternFlowStackFrame)
273
+ ):
274
+ completed_flow = current_frame.flow(flows)
275
+ completed_flow_name = completed_flow.readable_name() if completed_flow else None
276
+ stack.push(
277
+ CompletedPatternFlowStackFrame(
278
+ previous_flow_name=completed_flow_name,
279
+ )
280
+ )
281
+
282
+
283
+ def trigger_pattern_ask_collect_information(
284
+ collect: str,
285
+ stack: DialogueStack,
286
+ rejections: List[SlotRejection],
287
+ utter: str,
288
+ collect_action: str,
289
+ ) -> None:
290
+ """Trigger the pattern to ask for a slot value."""
291
+ stack.push(
292
+ CollectInformationPatternFlowStackFrame(
293
+ collect=collect,
294
+ utter=utter,
295
+ collect_action=collect_action,
296
+ rejections=rejections,
297
+ )
298
+ )
299
+
300
+
301
+ def reset_scoped_slots(
302
+ current_frame: DialogueStackFrame, current_flow: Flow, tracker: DialogueStateTracker
303
+ ) -> List[Event]:
304
+ """Reset all scoped slots."""
305
+
306
+ def _reset_slot(slot_name: Text, dialogue_tracker: DialogueStateTracker) -> None:
307
+ slot = dialogue_tracker.slots.get(slot_name, None)
308
+ initial_value = slot.initial_value if slot else None
309
+ events.append(SlotSet(slot_name, initial_value))
310
+
311
+ if (
312
+ isinstance(current_frame, UserFlowStackFrame)
313
+ and current_frame.frame_type == FlowStackFrameType.CALL
314
+ ):
315
+ # if a called frame is completed, we don't reset the slots
316
+ # as they are scoped to the called flow. resetting will happen as part
317
+ # of the flow that contained the call step triggering this called flow
318
+ return []
319
+
320
+ events: List[Event] = []
321
+
322
+ not_resettable_slot_names = set()
323
+
324
+ for step in current_flow.steps_with_calls_resolved:
325
+ if isinstance(step, CollectInformationFlowStep):
326
+ # reset all slots scoped to the flow
327
+ if step.reset_after_flow_ends:
328
+ _reset_slot(step.collect, tracker)
329
+ else:
330
+ not_resettable_slot_names.add(step.collect)
331
+
332
+ # slots set by the set slots step should be reset after the flow ends
333
+ # unless they are also used in a collect step where `reset_after_flow_ends`
334
+ # is set to `False`
335
+ resettable_set_slots = [
336
+ slot["key"]
337
+ for step in current_flow.steps_with_calls_resolved
338
+ if isinstance(step, SetSlotsFlowStep)
339
+ for slot in step.slots
340
+ if slot["key"] not in not_resettable_slot_names
341
+ ]
342
+
343
+ for name in resettable_set_slots:
344
+ _reset_slot(name, tracker)
345
+
346
+ return events
347
+
348
+
349
+ def advance_flows(
350
+ tracker: DialogueStateTracker, available_actions: List[str], flows: FlowsList
351
+ ) -> FlowActionPrediction:
352
+ """Advance the current flows until the next action.
353
+
354
+ Args:
355
+ tracker: The tracker to get the next action for.
356
+ available_actions: The actions that are available in the domain.
357
+ flows: All flows.
358
+
359
+ Returns:
360
+ The predicted action and the events to run.
361
+ """
362
+ stack = tracker.stack
363
+ if stack.is_empty():
364
+ # if there are no flows, there is nothing to do
365
+ return FlowActionPrediction(None, 0.0)
366
+
367
+ return advance_flows_until_next_action(tracker, available_actions, flows)
368
+
369
+
370
+ def advance_flows_until_next_action(
371
+ tracker: DialogueStateTracker,
372
+ available_actions: List[str],
373
+ flows: FlowsList,
374
+ ) -> FlowActionPrediction:
375
+ """Advance the flow and select the next action to execute.
376
+
377
+ Advances the current flow and returns the next action to execute. A flow
378
+ is advanced until it is completed or until it predicts an action. If
379
+ the flow is completed, the next flow is popped from the stack and
380
+ advanced. If there are no more flows, the action listen is predicted.
381
+
382
+ Args:
383
+ tracker: The tracker to get the next action for.
384
+ available_actions: The actions that are available in the domain.
385
+ flows: All flows.
386
+
387
+ Returns:
388
+ The next action to execute, the events that should be applied to the
389
+ tracker and the confidence of the prediction.
390
+ """
391
+ step_result: FlowStepResult = ContinueFlowWithNextStep()
392
+
393
+ tracker = tracker.copy()
394
+
395
+ number_of_initial_events = len(tracker.events)
396
+
397
+ number_of_steps_taken = 0
398
+
399
+ while isinstance(step_result, ContinueFlowWithNextStep):
400
+
401
+ number_of_steps_taken += 1
402
+ if number_of_steps_taken > MAX_NUMBER_OF_STEPS:
403
+ raise FlowCircuitBreakerTrippedException(
404
+ tracker.stack, number_of_steps_taken
405
+ )
406
+
407
+ active_frame = tracker.stack.top()
408
+ if not isinstance(active_frame, BaseFlowStackFrame):
409
+ # If there is no current flow, we assume that all flows are done
410
+ # and there is nothing to do. The assumption here is that every
411
+ # flow ends with an action listen.
412
+ step_result = PauseFlowReturnPrediction(
413
+ FlowActionPrediction(ACTION_LISTEN_NAME, 1.0)
414
+ )
415
+ break
416
+
417
+ with bound_contextvars(flow_id=active_frame.flow_id):
418
+ previous_step_id = active_frame.step_id
419
+ structlogger.debug("flow.execution.loop", previous_step_id=previous_step_id)
420
+ current_flow = active_frame.flow(flows)
421
+ next_step = select_next_step(
422
+ active_frame.step(flows), current_flow, tracker.stack, tracker
423
+ )
424
+
425
+ if not next_step:
426
+ raise NoNextStepInFlowException(tracker.stack)
427
+
428
+ tracker.update_stack(update_top_flow_step_id(next_step.id, tracker.stack))
429
+
430
+ with bound_contextvars(step_id=next_step.id):
431
+ step_stack = tracker.stack
432
+ step_result = run_step(
433
+ next_step,
434
+ current_flow,
435
+ step_stack,
436
+ tracker,
437
+ available_actions,
438
+ flows,
439
+ )
440
+ new_events = step_result.events
441
+ if (
442
+ isinstance(step_result, ContinueFlowWithNextStep)
443
+ and step_result.has_flow_ended
444
+ ):
445
+ # insert flow completed before flow resumed event
446
+ offset = (
447
+ -1
448
+ if new_events and isinstance(new_events[-1], FlowResumed)
449
+ else 0
450
+ )
451
+ idx = len(new_events) + offset
452
+ new_events.insert(
453
+ idx, FlowCompleted(active_frame.flow_id, previous_step_id)
454
+ )
455
+ tracker.update_stack(step_stack)
456
+ tracker.update_with_events(new_events)
457
+
458
+ gathered_events = list(tracker.events)[number_of_initial_events:]
459
+ if isinstance(step_result, PauseFlowReturnPrediction):
460
+ prediction = step_result.action_prediction
461
+ # make sure we really return all events that got created during the
462
+ # step execution of all steps (not only the last one)
463
+ prediction.events = gathered_events
464
+ return prediction
465
+ else:
466
+ structlogger.warning("flow.step.execution.no_action")
467
+ return FlowActionPrediction(None, 0.0, events=gathered_events)
468
+
469
+
470
+ def run_step(
471
+ step: FlowStep,
472
+ flow: Flow,
473
+ stack: DialogueStack,
474
+ tracker: DialogueStateTracker,
475
+ available_actions: List[str],
476
+ flows: FlowsList,
477
+ ) -> FlowStepResult:
478
+ """Run a single step of a flow.
479
+
480
+ Returns the predicted action and a list of events that were generated
481
+ during the step. The predicted action can be `None` if the step
482
+ doesn't generate an action. The list of events can be empty if the
483
+ step doesn't generate any events.
484
+
485
+ Raises a `FlowException` if the step is invalid.
486
+
487
+ Args:
488
+ step: The step to run.
489
+ flow: The flow that the step belongs to.
490
+ stack: The stack that the flow is on.
491
+ tracker: The tracker to run the step on.
492
+ available_actions: The actions that are available in the domain.
493
+ flows: All flows.
494
+
495
+ Returns:
496
+ A result of running the step describing where to transition to.
497
+ """
498
+ initial_events: List[Event] = []
499
+ if step == flow.first_step_in_flow():
500
+ initial_events.append(FlowStarted(flow.id))
501
+
502
+ if isinstance(step, CollectInformationFlowStep):
503
+ structlogger.debug("flow.step.run.collect")
504
+ trigger_pattern_ask_collect_information(
505
+ step.collect, stack, step.rejections, step.utter, step.collect_action
506
+ )
507
+
508
+ events: List[Event] = events_for_collect_step_execution(step, tracker)
509
+ return ContinueFlowWithNextStep(events=initial_events + events)
510
+
511
+ elif isinstance(step, ActionFlowStep):
512
+ if not step.action:
513
+ raise FlowException(f"Action not specified for step {step}")
514
+
515
+ context = {"context": stack.current_context()}
516
+ action_name = render_template_variables(step.action, context)
517
+
518
+ if action_name in available_actions:
519
+ structlogger.debug("flow.step.run.action", context=context)
520
+ return PauseFlowReturnPrediction(
521
+ FlowActionPrediction(action_name, 1.0, events=initial_events)
522
+ )
523
+ else:
524
+ if step.action != "validate_{{context.collect}}":
525
+ # do not log about non-existing validation actions of collect steps
526
+ utter_action_name = render_template_variables(
527
+ "{{context.utter}}", context
528
+ )
529
+ if utter_action_name not in available_actions:
530
+ structlogger.warning(
531
+ "flow.step.run.action.unknown", action=action_name
532
+ )
533
+ return ContinueFlowWithNextStep(events=initial_events)
534
+
535
+ elif isinstance(step, LinkFlowStep):
536
+ structlogger.debug("flow.step.run.link")
537
+ stack.push(
538
+ UserFlowStackFrame(
539
+ flow_id=step.link,
540
+ frame_type=FlowStackFrameType.LINK,
541
+ ),
542
+ # push this below the current stack frame so that we can
543
+ # complete the current flow first and then continue with the
544
+ # linked flow
545
+ index=-1,
546
+ )
547
+ return ContinueFlowWithNextStep(events=initial_events)
548
+
549
+ elif isinstance(step, CallFlowStep):
550
+ structlogger.debug("flow.step.run.call")
551
+ stack.push(
552
+ UserFlowStackFrame(
553
+ flow_id=step.call,
554
+ frame_type=FlowStackFrameType.CALL,
555
+ ),
556
+ )
557
+ return ContinueFlowWithNextStep()
558
+
559
+ elif isinstance(step, SetSlotsFlowStep):
560
+ structlogger.debug("flow.step.run.slot")
561
+ slot_events: List[Event] = events_from_set_slots_step(step)
562
+ return ContinueFlowWithNextStep(events=initial_events + slot_events)
563
+
564
+ elif isinstance(step, NoOperationFlowStep):
565
+ structlogger.debug("flow.step.run.no_operation")
566
+ return ContinueFlowWithNextStep(events=initial_events)
567
+
568
+ elif isinstance(step, EndFlowStep):
569
+ # this is the end of the flow, so we'll pop it from the stack
570
+ structlogger.debug("flow.step.run.flow_end")
571
+ current_frame = stack.pop()
572
+ trigger_pattern_completed(current_frame, stack, flows)
573
+ resumed_events = trigger_pattern_continue_interrupted(
574
+ current_frame, stack, flows
575
+ )
576
+ reset_events: List[Event] = reset_scoped_slots(current_frame, flow, tracker)
577
+ return ContinueFlowWithNextStep(
578
+ events=initial_events + reset_events + resumed_events, has_flow_ended=True
579
+ )
580
+
581
+ else:
582
+ raise FlowException(f"Unknown flow step type {type(step)}")
@@ -0,0 +1,43 @@
1
+ from dataclasses import dataclass
2
+ from typing import Any, Dict, List, Optional
3
+
4
+ from rasa.shared.core.events import Event
5
+
6
+
7
+ @dataclass
8
+ class FlowActionPrediction:
9
+ """Represents an action prediction."""
10
+
11
+ action_name: Optional[str]
12
+ """The name of the predicted action."""
13
+ score: float
14
+ """The score of the predicted action."""
15
+ metadata: Optional[Dict[str, Any]] = None
16
+ """The metadata of the predicted action."""
17
+ events: Optional[List[Event]] = None
18
+ """The events attached to the predicted action."""
19
+
20
+
21
+ class FlowStepResult:
22
+ """Represents the result of a flow step."""
23
+
24
+ def __init__(self, events: Optional[List[Event]] = None) -> None:
25
+ self.events = events or []
26
+
27
+
28
+ class ContinueFlowWithNextStep(FlowStepResult):
29
+ """Represents the result of a flow step that should continue with the next step."""
30
+
31
+ def __init__(
32
+ self, events: Optional[List[Event]] = None, has_flow_ended: bool = False
33
+ ) -> None:
34
+ self.has_flow_ended = has_flow_ended
35
+ super().__init__(events=events)
36
+
37
+
38
+ class PauseFlowReturnPrediction(FlowStepResult):
39
+ """Result where the flow execution should be paused after this step."""
40
+
41
+ def __init__(self, action_prediction: FlowActionPrediction) -> None:
42
+ self.action_prediction = action_prediction
43
+ super().__init__(events=action_prediction.events)