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,278 @@
1
+ from __future__ import annotations
2
+ from dataclasses import dataclass, field
3
+ from typing import Any, Dict, Text, List, Optional
4
+
5
+ import structlog
6
+ from rasa.core.actions import action
7
+ from rasa.core.channels import OutputChannel
8
+ from rasa.core.nlg import NaturalLanguageGenerator
9
+ from rasa.dialogue_understanding.patterns.collect_information import (
10
+ CollectInformationPatternFlowStackFrame,
11
+ )
12
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
13
+ from rasa.dialogue_understanding.stack.frames import (
14
+ BaseFlowStackFrame,
15
+ PatternFlowStackFrame,
16
+ )
17
+ from rasa.dialogue_understanding.stack.frames.dialogue_stack_frame import (
18
+ DialogueStackFrame,
19
+ )
20
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
21
+ FlowStackFrameType,
22
+ UserFlowStackFrame,
23
+ )
24
+ from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
25
+ from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
26
+ from rasa.shared.core.constants import ACTION_CORRECT_FLOW_SLOT
27
+ from rasa.shared.core.domain import Domain
28
+ from rasa.shared.core.events import Event, SlotSet
29
+ from rasa.shared.core.flows.flow import ContinueFlowStep, END_STEP, START_STEP
30
+ from rasa.shared.core.trackers import DialogueStateTracker
31
+
32
+ structlogger = structlog.get_logger()
33
+
34
+ FLOW_PATTERN_CORRECTION_ID = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "correction"
35
+
36
+
37
+ @dataclass
38
+ class CorrectionPatternFlowStackFrame(PatternFlowStackFrame):
39
+ """A pattern flow stack frame which gets added if a slot value is corrected."""
40
+
41
+ flow_id: str = FLOW_PATTERN_CORRECTION_ID
42
+ """The ID of the flow."""
43
+ is_reset_only: bool = False
44
+ """Whether the correction is only a reset of the flow.
45
+
46
+ This is the case if all corrected slots have `ask_before_filling=True`.
47
+ In this case, we do not set their value directly but rather reset the flow
48
+ to the position where the first question is asked to fill the slot."""
49
+ corrected_slots: Dict[str, Any] = field(default_factory=dict)
50
+ """The slots that were corrected."""
51
+ reset_flow_id: Optional[str] = None
52
+ """The ID of the flow to reset to."""
53
+ reset_step_id: Optional[str] = None
54
+ """The ID of the step to reset to."""
55
+
56
+ @classmethod
57
+ def type(cls) -> str:
58
+ """Returns the type of the frame."""
59
+ return FLOW_PATTERN_CORRECTION_ID
60
+
61
+ @staticmethod
62
+ def from_dict(data: Dict[Text, Any]) -> CorrectionPatternFlowStackFrame:
63
+ """Creates a `DialogueStackFrame` from a dictionary.
64
+
65
+ Args:
66
+ data: The dictionary to create the `DialogueStackFrame` from.
67
+
68
+ Returns:
69
+ The created `DialogueStackFrame`.
70
+ """
71
+ return CorrectionPatternFlowStackFrame(
72
+ frame_id=data["frame_id"],
73
+ step_id=data["step_id"],
74
+ is_reset_only=data["is_reset_only"],
75
+ corrected_slots=data["corrected_slots"],
76
+ reset_flow_id=data["reset_flow_id"],
77
+ reset_step_id=data["reset_step_id"],
78
+ )
79
+
80
+
81
+ class ActionCorrectFlowSlot(action.Action):
82
+ """Action which corrects a slots value in a flow."""
83
+
84
+ def __init__(self) -> None:
85
+ """Creates a `ActionCorrectFlowSlot`."""
86
+ super().__init__()
87
+
88
+ def name(self) -> Text:
89
+ """Return the flow name."""
90
+ return ACTION_CORRECT_FLOW_SLOT
91
+
92
+ async def run(
93
+ self,
94
+ output_channel: "OutputChannel",
95
+ nlg: "NaturalLanguageGenerator",
96
+ tracker: "DialogueStateTracker",
97
+ domain: "Domain",
98
+ metadata: Optional[Dict[Text, Any]] = None,
99
+ ) -> List[Event]:
100
+ """Correct the slots."""
101
+ stack = tracker.stack
102
+ if not (top := stack.top()):
103
+ structlogger.warning("action.correct_flow_slot.no_active_flow")
104
+ return []
105
+
106
+ if not isinstance(top, CorrectionPatternFlowStackFrame):
107
+ structlogger.warning(
108
+ "action.correct_flow_slot.no_correction_frame", top=top
109
+ )
110
+ return []
111
+
112
+ events: List[Event] = []
113
+ if top.reset_flow_id:
114
+ updated_stack = reset_stack_on_tracker_to_prior_state(
115
+ top.reset_flow_id, top.reset_step_id or START_STEP, tracker
116
+ )
117
+ events.extend(tracker.create_stack_updated_events(updated_stack))
118
+
119
+ events.extend([SlotSet(k, v) for k, v in top.corrected_slots.items()])
120
+ return events
121
+
122
+
123
+ def find_previous_state_to_reset_to(
124
+ reset_flow_id: str, reset_step_id: str, tracker: DialogueStateTracker
125
+ ) -> Optional[DialogueStack]:
126
+ """Find the previous stack state where the reset step was the active stack frame.
127
+
128
+ Looks for the most recent state of the stack in the tracker where the top
129
+ flow has the same flow id and step id as the reset flow id and reset step id.
130
+ """
131
+ stack_to_reset_to: Optional[DialogueStack] = None
132
+ for previous_stack_state in tracker.previous_stack_states():
133
+ top_frame = previous_stack_state.top()
134
+ if (
135
+ isinstance(top_frame, BaseFlowStackFrame)
136
+ and top_frame.flow_id == reset_flow_id
137
+ and top_frame.step_id == reset_step_id
138
+ ):
139
+ stack_to_reset_to = previous_stack_state
140
+ return stack_to_reset_to
141
+
142
+
143
+ def slice_of_stack_below_target(
144
+ target_frame: DialogueStackFrame, stack: DialogueStack
145
+ ) -> List[DialogueStackFrame]:
146
+ """Get all the frames from the current stack up until the target frame.
147
+
148
+ The target frame is not included."""
149
+ replacement_stack: List[DialogueStackFrame] = []
150
+
151
+ for frame in stack.frames:
152
+ if frame.frame_id == target_frame.frame_id:
153
+ break
154
+ replacement_stack.append(frame)
155
+ return replacement_stack
156
+
157
+
158
+ def slice_of_stack_with_target_and_above(
159
+ target_frame: DialogueStackFrame, stack: DialogueStack
160
+ ) -> List[DialogueStackFrame]:
161
+ """Get all the frames from the current stack starting at the target frame."""
162
+ replacement_frames: List[DialogueStackFrame] = []
163
+ for frame in reversed(stack.frames):
164
+ replacement_frames.insert(0, frame) # push to front, since reversed
165
+ if frame.frame_id == target_frame.frame_id:
166
+ break
167
+ return replacement_frames
168
+
169
+
170
+ def set_topmost_flow_frame_to_continue(stack_frames: List[DialogueStackFrame]) -> None:
171
+ """Ensure that the topmost flow frame continues its step.
172
+
173
+ This ensures that the topmost step can be re-executed."""
174
+ for frame in reversed(stack_frames):
175
+ if isinstance(frame, BaseFlowStackFrame) and frame.step_id != START_STEP:
176
+ frame.step_id = ContinueFlowStep.continue_step_for_id(frame.step_id)
177
+ break
178
+
179
+
180
+ def create_termination_frames_for_missing_frames(
181
+ new_stack_frames: List[DialogueStackFrame], previous_stack: DialogueStack
182
+ ) -> List[DialogueStackFrame]:
183
+ """Terminate frames that are part in the previous stack but not in the new stack.
184
+
185
+ The frames are terminated by setting them to the END_STEP. This allows
186
+ them to be properly wrapped up.
187
+ """
188
+
189
+ reused_frame_ids = {frame.frame_id for frame in new_stack_frames}
190
+
191
+ frames_to_terminate: List[DialogueStackFrame] = []
192
+ for frame in reversed(previous_stack.frames):
193
+ if frame.frame_id in reused_frame_ids:
194
+ # this frame already exists in the replacement stack, skip it
195
+ # shouldn't be terminated
196
+ continue
197
+ if (
198
+ isinstance(frame, UserFlowStackFrame)
199
+ and frame.frame_type == FlowStackFrameType.CALL
200
+ ):
201
+ frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
202
+ if isinstance(frame, CollectInformationPatternFlowStackFrame):
203
+ frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
204
+ frames_to_terminate.insert(0, frame)
205
+ return frames_to_terminate
206
+
207
+
208
+ def reset_stack_on_tracker_to_prior_state(
209
+ reset_flow_id: str, reset_step_id: str, tracker: DialogueStateTracker
210
+ ) -> DialogueStack:
211
+ """Reset the stack on the tracker to the prior state."""
212
+ # assumption is that we have already been at the reset step id in the reset flow
213
+ # at some point before in the tracker. we'll search for that point in time and
214
+ # update the current stack to be as close to that time as possible,
215
+ # jumping back in time.
216
+ stack_to_reset_to: Optional[DialogueStack] = find_previous_state_to_reset_to(
217
+ reset_flow_id, reset_step_id, tracker
218
+ )
219
+
220
+ if not stack_to_reset_to:
221
+ structlogger.warning(
222
+ "action.correct_flow_slot.no_frame_found",
223
+ reset_step_id=reset_step_id,
224
+ reset_flow_id=reset_flow_id,
225
+ )
226
+ return tracker.stack
227
+
228
+ target_frame = top_user_flow_frame(stack_to_reset_to)
229
+
230
+ if not target_frame:
231
+ structlogger.warning(
232
+ "action.correct_flow_slot.no_target_frame_found",
233
+ reset_step_id=reset_step_id,
234
+ reset_flow_id=reset_flow_id,
235
+ stack_to_reset_to=stack_to_reset_to,
236
+ )
237
+ return tracker.stack
238
+
239
+ current_stack = tracker.stack
240
+
241
+ # Approach we use to reset the stack:
242
+ # 1. Search through all past stack states and identify the most recent
243
+ # state where the stack had the given flow and step id on top. This
244
+ # stack is the reference stack.
245
+ # 2. On the reference stack, identify the top most user flow frame that
246
+ # was not started through a flow call. This frame is the reference frame.
247
+ # 3. Create a new stack by stacking the following frames: A) all frames
248
+ # from the current stack that are strictly below the reference
249
+ # frame. B) all frames including the reference frame and frames above
250
+ # it from the reference stack. C) all frames from the current stack
251
+ # that are strictly above the reference frame and set them to their
252
+ # end step.
253
+ # 4. This will ensure A) we keep anything from the current stack that is
254
+ # below the current active user flow. B) We reset the current user
255
+ # flow to the desired position. C) we wrap up all unfinished frames
256
+ # above the current user flow from the current state.
257
+
258
+ replacement_stack: List[DialogueStackFrame] = []
259
+
260
+ # get all the frames from the current stack up until the target frame
261
+ # and put them into the replacement stack. the target frame is not included
262
+ replacement_stack.extend(slice_of_stack_below_target(target_frame, current_stack))
263
+
264
+ replacement_stack.extend(
265
+ slice_of_stack_with_target_and_above(target_frame, stack_to_reset_to)
266
+ )
267
+
268
+ # ensure that we continue the topmost frames step
269
+ set_topmost_flow_frame_to_continue(replacement_stack)
270
+
271
+ # terminate all the frames from the original stack that are not part of the
272
+ # replacement stack. this will add these frames to the replacement stack,
273
+ # but with their step set to END_STEP. this allows them to be properly
274
+ # wrapped up before we head into the correction.
275
+ replacement_stack.extend(
276
+ create_termination_frames_for_missing_frames(replacement_stack, current_stack)
277
+ )
278
+ return DialogueStack(frames=replacement_stack)
@@ -0,0 +1,243 @@
1
+ version: "3.1"
2
+ responses:
3
+
4
+ utter_ask_rephrase:
5
+ - text: I’m sorry I am unable to understand you, could you please rephrase?
6
+
7
+ utter_boolean_slot_rejection:
8
+ - text: "Sorry, the value you provided, `{{value}}`, is not valid. Please respond with a valid value."
9
+ metadata:
10
+ rephrase: True
11
+ template: jinja
12
+
13
+ utter_can_do_something_else:
14
+ - text: "What else I can help you with?"
15
+ metadata:
16
+ rephrase: True
17
+
18
+ utter_cannot_handle:
19
+ - text: I'm sorry, I'm not trained to help with that.
20
+
21
+ utter_categorical_slot_rejection:
22
+ - text: "Sorry, you responded with an invalid value - `{{value}}`. Please select one of the available options."
23
+ metadata:
24
+ rephrase: True
25
+ template: jinja
26
+
27
+ utter_clarification_options_rasa:
28
+ - text: "I can help, but I need more information. Which of these would you like to do: {{context.clarification_options}}?"
29
+ metadata:
30
+ rephrase: True
31
+ template: jinja
32
+
33
+ utter_corrected_previous_input:
34
+ - text: "Ok, I am updating {{ context.corrected_slots.keys()|join(', ') }} to {{ context.corrected_slots.values()|join(', ') }} respectively."
35
+ metadata:
36
+ rephrase: True
37
+ template: jinja
38
+
39
+ utter_float_slot_rejection:
40
+ - text: "Sorry, it seems the value you provided `{{value}}` is not a valid number. Please provide a valid number in your response."
41
+ metadata:
42
+ rephrase: True
43
+ template: jinja
44
+
45
+ utter_flow_cancelled_rasa:
46
+ - text: "Okay, stopping {{ context.canceled_name }}."
47
+ metadata:
48
+ rephrase: True
49
+ template: jinja
50
+
51
+ utter_flow_continue_interrupted:
52
+ - text: "Let's continue with {{ context.previous_flow_name }}."
53
+ metadata:
54
+ rephrase: True
55
+ template: jinja
56
+
57
+ utter_free_chitchat_response:
58
+ - text: "placeholder_this_utterance_needs_the_rephraser"
59
+ metadata:
60
+ rephrase: True
61
+ rephrase_prompt: |
62
+ You are an incredibly friendly assistant. Generate a short
63
+ response to the user's comment in simple english.
64
+
65
+ User: {{current_input}}
66
+ Response:
67
+
68
+ utter_human_handoff_not_available:
69
+ - text: I understand you want to be connected to a human agent, but that's something I cannot help you with at the moment. Is there something else I can help you with?
70
+ metadata:
71
+ rephrase: True
72
+
73
+ utter_inform_code_change:
74
+ - text: There has been an update to my code. I need to wrap up our running dialogue and start from scratch.
75
+ metadata:
76
+ rephrase: True
77
+
78
+ utter_internal_error_rasa:
79
+ - text: Sorry, I am having trouble with that. Please try again in a few minutes.
80
+
81
+ utter_no_knowledge_base:
82
+ - text: I am afraid, I don't know the answer. At this point, I don't have access to a knowledge base.
83
+ metadata:
84
+ rephrase: True
85
+
86
+ utter_skip_question_answer:
87
+ - text: I'm here to provide you with the best assistance, and in order to do so, I kindly request that we complete this step together. Your input is essential for a seamless experience!
88
+ metadata:
89
+ rephrase: True
90
+
91
+ utter_user_input_empty_error_rasa:
92
+ - text: I see an empty message. What can I assist you with?
93
+
94
+ utter_user_input_too_long_error_rasa:
95
+ - text: I'm sorry, but your message is too long for me to process. Please keep your message concise and within {% if context.info.max_characters %}{{context.info.max_characters}} characters.{% else %}a reasonable length.{% endif %}
96
+ metadata:
97
+ template: jinja
98
+
99
+ slots:
100
+ confirm_correction:
101
+ type: bool
102
+ mappings:
103
+ - type: custom
104
+
105
+ flows:
106
+ pattern_cancel_flow:
107
+ description: A meta flow that's started when a flow is cancelled.
108
+ name: pattern_cancel_flow
109
+ steps:
110
+ - action: action_cancel_flow
111
+ - action: utter_flow_cancelled_rasa
112
+
113
+ pattern_cannot_handle:
114
+ description: |
115
+ pattern that is triggered when the command generators fail to create (any) valid commands
116
+ name: pattern cannot handle
117
+ steps:
118
+ - noop: true
119
+ next:
120
+ # chitchat fallback
121
+ - if: "'{{context.reason}}' == 'cannot_handle_chitchat'"
122
+ then:
123
+ - action: utter_cannot_handle
124
+ next: "END"
125
+ # default
126
+ - else:
127
+ - action: utter_ask_rephrase
128
+ next: "END"
129
+
130
+ pattern_chitchat:
131
+ description: handle interactions with the user that are not task-oriented
132
+ name: pattern chitchat
133
+ steps:
134
+ - action: action_trigger_chitchat
135
+
136
+ pattern_clarification:
137
+ description: handle clarifications with the user
138
+ name: pattern clarification
139
+ steps:
140
+ - action: action_clarify_flows
141
+ - action: utter_clarification_options_rasa
142
+
143
+ pattern_code_change:
144
+ description: flow used to clean the stack after a bot update
145
+ name: pattern code change
146
+ steps:
147
+ - action: utter_inform_code_change
148
+ - action: action_clean_stack
149
+
150
+ pattern_collect_information:
151
+ description: flow used to fill a slot
152
+ name: pattern collect information
153
+ steps:
154
+ - id: "start"
155
+ action: action_run_slot_rejections
156
+ - action: validate_{{context.collect}}
157
+ next:
158
+ - if: "slots.{{context.collect}} is not null"
159
+ then: "END"
160
+ - else: "ask_collect"
161
+ - id: "ask_collect"
162
+ action: "{{context.utter}}"
163
+ - action: "{{context.collect_action}}"
164
+ - action: action_listen
165
+ next: "start"
166
+
167
+ pattern_completed:
168
+ description: a flow has been completed and there is nothing else to be done
169
+ name: pattern completed
170
+ steps:
171
+ - action: utter_can_do_something_else
172
+
173
+ pattern_continue_interrupted:
174
+ description: A flow that should will be started to continue an interrupted flow.
175
+ name: pattern continue interrupted
176
+ steps:
177
+ - action: utter_flow_continue_interrupted
178
+
179
+ pattern_correction:
180
+ description: Handle a correction of a slot value.
181
+ name: pattern correction
182
+ steps:
183
+ - action: action_correct_flow_slot
184
+ next:
185
+ - if: not context.is_reset_only
186
+ then:
187
+ - action: utter_corrected_previous_input
188
+ next: "END"
189
+ - else: "END"
190
+
191
+ pattern_human_handoff:
192
+ description: human handoff
193
+ name: pattern human handoff
194
+ steps:
195
+ - action: utter_human_handoff_not_available
196
+
197
+ pattern_internal_error:
198
+ description: internal error
199
+ name: pattern internal error
200
+ steps:
201
+ - noop: true
202
+ next:
203
+ - if: "'{{context.error_type}}' == 'rasa_internal_error_user_input_too_long'"
204
+ then:
205
+ - action: utter_user_input_too_long_error_rasa
206
+ next: "END"
207
+ - if: "'{{context.error_type}}' == 'rasa_internal_error_user_input_empty'"
208
+ then:
209
+ - action: utter_user_input_empty_error_rasa
210
+ next: "END"
211
+ - else:
212
+ - action: utter_internal_error_rasa
213
+ next: "END"
214
+
215
+
216
+ pattern_restart:
217
+ description: flow used to restart the conversation
218
+ name: pattern restart
219
+ nlu_trigger:
220
+ - intent: restart
221
+ steps:
222
+ - action: action_restart
223
+
224
+ pattern_search:
225
+ description: handle a knowledge-based question or request
226
+ name: pattern search
227
+ steps:
228
+ - action: utter_no_knowledge_base
229
+ # - action: action_trigger_search to use doc search policy if present
230
+
231
+ pattern_session_start:
232
+ description: flow used to start the conversation
233
+ name: pattern session start
234
+ nlu_trigger:
235
+ - intent: session_start
236
+ steps:
237
+ - action: action_session_start
238
+
239
+ pattern_skip_question:
240
+ description: flow used to handle users intent to skip questions (steps)
241
+ name: pattern skip question
242
+ steps:
243
+ - action: utter_skip_question_answer
@@ -0,0 +1,37 @@
1
+ from __future__ import annotations
2
+ from dataclasses import dataclass
3
+ from typing import Any, Dict
4
+
5
+ from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
6
+ from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
7
+
8
+
9
+ FLOW_PATTERN_HUMAN_HANDOFF = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "human_handoff"
10
+
11
+
12
+ @dataclass
13
+ class HumanHandoffPatternFlowStackFrame(PatternFlowStackFrame):
14
+ """A pattern flow stack frame which hands off to a human."""
15
+
16
+ flow_id: str = FLOW_PATTERN_HUMAN_HANDOFF
17
+ """The ID of the flow."""
18
+
19
+ @classmethod
20
+ def type(cls) -> str:
21
+ """Returns the type of the frame."""
22
+ return FLOW_PATTERN_HUMAN_HANDOFF
23
+
24
+ @staticmethod
25
+ def from_dict(data: Dict[str, Any]) -> HumanHandoffPatternFlowStackFrame:
26
+ """Creates a `DialogueStackFrame` from a dictionary.
27
+
28
+ Args:
29
+ data: The dictionary to create the `DialogueStackFrame` from.
30
+
31
+ Returns:
32
+ The created `DialogueStackFrame`.
33
+ """
34
+ return HumanHandoffPatternFlowStackFrame(
35
+ frame_id=data["frame_id"],
36
+ step_id=data["step_id"],
37
+ )
@@ -0,0 +1,47 @@
1
+ from __future__ import annotations
2
+ from dataclasses import dataclass, field
3
+ from typing import Any, Dict, Optional, Text
4
+
5
+ from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
6
+ from rasa.shared.constants import (
7
+ RASA_DEFAULT_FLOW_PATTERN_PREFIX,
8
+ RASA_PATTERN_INTERNAL_ERROR_DEFAULT,
9
+ )
10
+
11
+ FLOW_PATTERN_INTERNAL_ERROR_ID = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "internal_error"
12
+
13
+
14
+ @dataclass
15
+ class InternalErrorPatternFlowStackFrame(PatternFlowStackFrame):
16
+ """A pattern flow stack frame that gets added if an internal error occurs."""
17
+
18
+ flow_id: str = FLOW_PATTERN_INTERNAL_ERROR_ID
19
+ """The ID of the flow."""
20
+
21
+ error_type: Optional[Text] = RASA_PATTERN_INTERNAL_ERROR_DEFAULT
22
+ """Error type used in switch-case of the error pattern flow."""
23
+
24
+ info: Dict[Text, Any] = field(default_factory=dict)
25
+ """Additional info to be provided to the user"""
26
+
27
+ @classmethod
28
+ def type(cls) -> str:
29
+ """Returns the type of the frame."""
30
+ return FLOW_PATTERN_INTERNAL_ERROR_ID
31
+
32
+ @staticmethod
33
+ def from_dict(data: Dict[str, Any]) -> InternalErrorPatternFlowStackFrame:
34
+ """Creates a `DialogueStackFrame` from a dictionary.
35
+
36
+ Args:
37
+ data: The dictionary to create the `DialogueStackFrame` from.
38
+
39
+ Returns:
40
+ The created `DialogueStackFrame`.
41
+ """
42
+ return InternalErrorPatternFlowStackFrame(
43
+ frame_id=data["frame_id"],
44
+ step_id=data["step_id"],
45
+ error_type=data.get("error_type", RASA_PATTERN_INTERNAL_ERROR_DEFAULT),
46
+ info=data.get("info", {}),
47
+ )
@@ -0,0 +1,37 @@
1
+ from __future__ import annotations
2
+ from dataclasses import dataclass
3
+ from typing import Any, Dict
4
+
5
+ from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
6
+ from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
7
+
8
+
9
+ FLOW_PATTERN_SEARCH = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "search"
10
+
11
+
12
+ @dataclass
13
+ class SearchPatternFlowStackFrame(PatternFlowStackFrame):
14
+ """A stack frame that gets added to respond to knowledge-oriented questions."""
15
+
16
+ flow_id: str = FLOW_PATTERN_SEARCH
17
+ """The ID of the flow."""
18
+
19
+ @classmethod
20
+ def type(cls) -> str:
21
+ """Returns the type of the frame."""
22
+ return FLOW_PATTERN_SEARCH
23
+
24
+ @staticmethod
25
+ def from_dict(data: Dict[str, Any]) -> SearchPatternFlowStackFrame:
26
+ """Creates a `DialogueStackFrame` from a dictionary.
27
+
28
+ Args:
29
+ data: The dictionary to create the `DialogueStackFrame` from.
30
+
31
+ Returns:
32
+ The created `DialogueStackFrame`.
33
+ """
34
+ return SearchPatternFlowStackFrame(
35
+ frame_id=data["frame_id"],
36
+ step_id=data["step_id"],
37
+ )
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+ from dataclasses import dataclass
3
+ from typing import Any, Dict
4
+
5
+ from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
6
+ from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
7
+
8
+ FLOW_PATTERN_SKIP_QUESTION = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "skip_question"
9
+
10
+
11
+ @dataclass
12
+ class SkipQuestionPatternFlowStackFrame(PatternFlowStackFrame):
13
+ """A pattern flow stack frame that gets added if user interrupts the current flow by
14
+ trying to bypass the collect information step.
15
+ """
16
+
17
+ flow_id: str = FLOW_PATTERN_SKIP_QUESTION
18
+ """The ID of the flow."""
19
+
20
+ @classmethod
21
+ def type(cls) -> str:
22
+ """Returns the type of the frame."""
23
+ return FLOW_PATTERN_SKIP_QUESTION
24
+
25
+ @staticmethod
26
+ def from_dict(data: Dict[str, Any]) -> SkipQuestionPatternFlowStackFrame:
27
+ """Creates a `DialogueStackFrame` from a dictionary.
28
+
29
+ Args:
30
+ data: The dictionary to create the `DialogueStackFrame` from.
31
+
32
+ Returns:
33
+ The created `DialogueStackFrame`.
34
+ """
35
+ return SkipQuestionPatternFlowStackFrame(
36
+ frame_id=data["frame_id"],
37
+ step_id=data["step_id"],
38
+ )
File without changes