rasa-pro 3.9.18__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 (662) hide show
  1. README.md +415 -0
  2. rasa/__init__.py +10 -0
  3. rasa/__main__.py +156 -0
  4. rasa/anonymization/__init__.py +2 -0
  5. rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
  6. rasa/anonymization/anonymization_pipeline.py +286 -0
  7. rasa/anonymization/anonymization_rule_executor.py +260 -0
  8. rasa/anonymization/anonymization_rule_orchestrator.py +120 -0
  9. rasa/anonymization/schemas/config.yml +47 -0
  10. rasa/anonymization/utils.py +118 -0
  11. rasa/api.py +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 +586 -0
  27. rasa/cli/evaluate.py +222 -0
  28. rasa/cli/export.py +250 -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 +39 -0
  47. rasa/cli/project_templates/calm/domain/list_contacts.yml +17 -0
  48. rasa/cli/project_templates/calm/domain/remove_contact.yml +38 -0
  49. rasa/cli/project_templates/calm/domain/shared.yml +10 -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/data/patterns.yml +6 -0
  74. rasa/cli/project_templates/tutorial/domain.yml +21 -0
  75. rasa/cli/project_templates/tutorial/endpoints.yml +45 -0
  76. rasa/cli/run.py +135 -0
  77. rasa/cli/scaffold.py +269 -0
  78. rasa/cli/shell.py +141 -0
  79. rasa/cli/studio/__init__.py +0 -0
  80. rasa/cli/studio/download.py +62 -0
  81. rasa/cli/studio/studio.py +266 -0
  82. rasa/cli/studio/train.py +59 -0
  83. rasa/cli/studio/upload.py +77 -0
  84. rasa/cli/telemetry.py +102 -0
  85. rasa/cli/test.py +280 -0
  86. rasa/cli/train.py +260 -0
  87. rasa/cli/utils.py +464 -0
  88. rasa/cli/visualize.py +40 -0
  89. rasa/cli/x.py +206 -0
  90. rasa/constants.py +37 -0
  91. rasa/core/__init__.py +17 -0
  92. rasa/core/actions/__init__.py +0 -0
  93. rasa/core/actions/action.py +1225 -0
  94. rasa/core/actions/action_clean_stack.py +59 -0
  95. rasa/core/actions/action_exceptions.py +24 -0
  96. rasa/core/actions/action_run_slot_rejections.py +207 -0
  97. rasa/core/actions/action_trigger_chitchat.py +31 -0
  98. rasa/core/actions/action_trigger_flow.py +109 -0
  99. rasa/core/actions/action_trigger_search.py +31 -0
  100. rasa/core/actions/constants.py +5 -0
  101. rasa/core/actions/custom_action_executor.py +188 -0
  102. rasa/core/actions/forms.py +741 -0
  103. rasa/core/actions/grpc_custom_action_executor.py +251 -0
  104. rasa/core/actions/http_custom_action_executor.py +140 -0
  105. rasa/core/actions/loops.py +114 -0
  106. rasa/core/actions/two_stage_fallback.py +186 -0
  107. rasa/core/agent.py +555 -0
  108. rasa/core/auth_retry_tracker_store.py +122 -0
  109. rasa/core/brokers/__init__.py +0 -0
  110. rasa/core/brokers/broker.py +126 -0
  111. rasa/core/brokers/file.py +58 -0
  112. rasa/core/brokers/kafka.py +322 -0
  113. rasa/core/brokers/pika.py +386 -0
  114. rasa/core/brokers/sql.py +86 -0
  115. rasa/core/channels/__init__.py +55 -0
  116. rasa/core/channels/audiocodes.py +463 -0
  117. rasa/core/channels/botframework.py +338 -0
  118. rasa/core/channels/callback.py +84 -0
  119. rasa/core/channels/channel.py +419 -0
  120. rasa/core/channels/console.py +241 -0
  121. rasa/core/channels/development_inspector.py +93 -0
  122. rasa/core/channels/facebook.py +419 -0
  123. rasa/core/channels/hangouts.py +329 -0
  124. rasa/core/channels/inspector/.eslintrc.cjs +25 -0
  125. rasa/core/channels/inspector/.gitignore +23 -0
  126. rasa/core/channels/inspector/README.md +54 -0
  127. rasa/core/channels/inspector/assets/favicon.ico +0 -0
  128. rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
  129. rasa/core/channels/inspector/custom.d.ts +3 -0
  130. rasa/core/channels/inspector/dist/assets/arc-b6e548fe.js +1 -0
  131. rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
  132. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-fa03ac9e.js +10 -0
  133. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-ee67392a.js +2 -0
  134. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-9b283fae.js +2 -0
  135. rasa/core/channels/inspector/dist/assets/createText-62fc7601-8b6fcc2a.js +7 -0
  136. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-22e77f4f.js +4 -0
  137. rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-60ffc87f.js +51 -0
  138. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-9dd802e4.js +6 -0
  139. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-5fa1912f.js +4 -0
  140. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-1844e5a5.js +1 -0
  141. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-622a1fd2.js +139 -0
  142. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-e285a63a.js +266 -0
  143. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-f237bdca.js +70 -0
  144. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
  145. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
  146. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
  147. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
  148. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-4b03d70e.js +1 -0
  149. rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
  150. rasa/core/channels/inspector/dist/assets/index-a5d3e69d.js +1040 -0
  151. rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-72a0fa5f.js +7 -0
  152. rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
  153. rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-82218c41.js +139 -0
  154. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
  155. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
  156. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
  157. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
  158. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
  159. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
  160. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
  161. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
  162. rasa/core/channels/inspector/dist/assets/layout-78cff630.js +1 -0
  163. rasa/core/channels/inspector/dist/assets/line-5038b469.js +1 -0
  164. rasa/core/channels/inspector/dist/assets/linear-c4fc4098.js +1 -0
  165. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-c33c8ea6.js +109 -0
  166. rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
  167. rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
  168. rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-a8d03059.js +35 -0
  169. rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-6a0e56b2.js +7 -0
  170. rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-2dc7c7bd.js +52 -0
  171. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-2360fe39.js +8 -0
  172. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-41b9f9ad.js +122 -0
  173. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-0aad326f.js +1 -0
  174. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-9847d984.js +1 -0
  175. rasa/core/channels/inspector/dist/assets/styles-080da4f6-564d890e.js +110 -0
  176. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-38957613.js +159 -0
  177. rasa/core/channels/inspector/dist/assets/styles-9c745c82-f0fc6921.js +207 -0
  178. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-ef3c5a77.js +1 -0
  179. rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-bf3e91c1.js +61 -0
  180. rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-4d4026c0.js +7 -0
  181. rasa/core/channels/inspector/dist/index.html +41 -0
  182. rasa/core/channels/inspector/index.html +39 -0
  183. rasa/core/channels/inspector/jest.config.ts +13 -0
  184. rasa/core/channels/inspector/package.json +48 -0
  185. rasa/core/channels/inspector/setupTests.ts +2 -0
  186. rasa/core/channels/inspector/src/App.tsx +170 -0
  187. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +107 -0
  188. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
  189. rasa/core/channels/inspector/src/components/DialogueStack.tsx +151 -0
  190. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
  191. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
  192. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +19 -0
  193. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
  194. rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
  195. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
  196. rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
  197. rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
  198. rasa/core/channels/inspector/src/helpers/formatters.test.ts +382 -0
  199. rasa/core/channels/inspector/src/helpers/formatters.ts +240 -0
  200. rasa/core/channels/inspector/src/helpers/utils.ts +42 -0
  201. rasa/core/channels/inspector/src/main.tsx +13 -0
  202. rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
  203. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
  204. rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
  205. rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
  206. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
  207. rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
  208. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
  209. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
  210. rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
  211. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
  212. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
  213. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
  214. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
  215. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
  216. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
  217. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
  218. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
  219. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
  220. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
  221. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
  222. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
  223. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
  224. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
  225. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
  226. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
  227. rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
  228. rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
  229. rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
  230. rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
  231. rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
  232. rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
  233. rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
  234. rasa/core/channels/inspector/src/theme/index.ts +101 -0
  235. rasa/core/channels/inspector/src/types.ts +64 -0
  236. rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
  237. rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
  238. rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
  239. rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
  240. rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
  241. rasa/core/channels/inspector/tsconfig.json +26 -0
  242. rasa/core/channels/inspector/tsconfig.node.json +10 -0
  243. rasa/core/channels/inspector/vite.config.ts +8 -0
  244. rasa/core/channels/inspector/yarn.lock +6156 -0
  245. rasa/core/channels/mattermost.py +229 -0
  246. rasa/core/channels/rasa_chat.py +126 -0
  247. rasa/core/channels/rest.py +225 -0
  248. rasa/core/channels/rocketchat.py +174 -0
  249. rasa/core/channels/slack.py +620 -0
  250. rasa/core/channels/socketio.py +274 -0
  251. rasa/core/channels/telegram.py +298 -0
  252. rasa/core/channels/twilio.py +169 -0
  253. rasa/core/channels/twilio_voice.py +367 -0
  254. rasa/core/channels/vier_cvg.py +374 -0
  255. rasa/core/channels/webexteams.py +134 -0
  256. rasa/core/concurrent_lock_store.py +210 -0
  257. rasa/core/constants.py +107 -0
  258. rasa/core/evaluation/__init__.py +0 -0
  259. rasa/core/evaluation/marker.py +267 -0
  260. rasa/core/evaluation/marker_base.py +923 -0
  261. rasa/core/evaluation/marker_stats.py +293 -0
  262. rasa/core/evaluation/marker_tracker_loader.py +103 -0
  263. rasa/core/exceptions.py +29 -0
  264. rasa/core/exporter.py +284 -0
  265. rasa/core/featurizers/__init__.py +0 -0
  266. rasa/core/featurizers/precomputation.py +410 -0
  267. rasa/core/featurizers/single_state_featurizer.py +421 -0
  268. rasa/core/featurizers/tracker_featurizers.py +1262 -0
  269. rasa/core/http_interpreter.py +89 -0
  270. rasa/core/information_retrieval/__init__.py +7 -0
  271. rasa/core/information_retrieval/faiss.py +121 -0
  272. rasa/core/information_retrieval/information_retrieval.py +129 -0
  273. rasa/core/information_retrieval/milvus.py +52 -0
  274. rasa/core/information_retrieval/qdrant.py +95 -0
  275. rasa/core/jobs.py +63 -0
  276. rasa/core/lock.py +139 -0
  277. rasa/core/lock_store.py +343 -0
  278. rasa/core/migrate.py +403 -0
  279. rasa/core/nlg/__init__.py +3 -0
  280. rasa/core/nlg/callback.py +146 -0
  281. rasa/core/nlg/contextual_response_rephraser.py +270 -0
  282. rasa/core/nlg/generator.py +230 -0
  283. rasa/core/nlg/interpolator.py +143 -0
  284. rasa/core/nlg/response.py +155 -0
  285. rasa/core/nlg/summarize.py +69 -0
  286. rasa/core/policies/__init__.py +0 -0
  287. rasa/core/policies/ensemble.py +329 -0
  288. rasa/core/policies/enterprise_search_policy.py +781 -0
  289. rasa/core/policies/enterprise_search_prompt_template.jinja2 +25 -0
  290. rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +60 -0
  291. rasa/core/policies/flow_policy.py +205 -0
  292. rasa/core/policies/flows/__init__.py +0 -0
  293. rasa/core/policies/flows/flow_exceptions.py +44 -0
  294. rasa/core/policies/flows/flow_executor.py +705 -0
  295. rasa/core/policies/flows/flow_step_result.py +43 -0
  296. rasa/core/policies/intentless_policy.py +922 -0
  297. rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
  298. rasa/core/policies/memoization.py +538 -0
  299. rasa/core/policies/policy.py +725 -0
  300. rasa/core/policies/rule_policy.py +1273 -0
  301. rasa/core/policies/ted_policy.py +2169 -0
  302. rasa/core/policies/unexpected_intent_policy.py +1022 -0
  303. rasa/core/processor.py +1422 -0
  304. rasa/core/run.py +331 -0
  305. rasa/core/secrets_manager/__init__.py +0 -0
  306. rasa/core/secrets_manager/constants.py +32 -0
  307. rasa/core/secrets_manager/endpoints.py +391 -0
  308. rasa/core/secrets_manager/factory.py +233 -0
  309. rasa/core/secrets_manager/secret_manager.py +262 -0
  310. rasa/core/secrets_manager/vault.py +574 -0
  311. rasa/core/test.py +1335 -0
  312. rasa/core/tracker_store.py +1699 -0
  313. rasa/core/train.py +105 -0
  314. rasa/core/training/__init__.py +89 -0
  315. rasa/core/training/converters/__init__.py +0 -0
  316. rasa/core/training/converters/responses_prefix_converter.py +119 -0
  317. rasa/core/training/interactive.py +1745 -0
  318. rasa/core/training/story_conflict.py +381 -0
  319. rasa/core/training/training.py +93 -0
  320. rasa/core/utils.py +339 -0
  321. rasa/core/visualize.py +70 -0
  322. rasa/dialogue_understanding/__init__.py +0 -0
  323. rasa/dialogue_understanding/coexistence/__init__.py +0 -0
  324. rasa/dialogue_understanding/coexistence/constants.py +4 -0
  325. rasa/dialogue_understanding/coexistence/intent_based_router.py +196 -0
  326. rasa/dialogue_understanding/coexistence/llm_based_router.py +260 -0
  327. rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
  328. rasa/dialogue_understanding/commands/__init__.py +49 -0
  329. rasa/dialogue_understanding/commands/can_not_handle_command.py +70 -0
  330. rasa/dialogue_understanding/commands/cancel_flow_command.py +125 -0
  331. rasa/dialogue_understanding/commands/change_flow_command.py +44 -0
  332. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +57 -0
  333. rasa/dialogue_understanding/commands/clarify_command.py +86 -0
  334. rasa/dialogue_understanding/commands/command.py +85 -0
  335. rasa/dialogue_understanding/commands/correct_slots_command.py +297 -0
  336. rasa/dialogue_understanding/commands/error_command.py +79 -0
  337. rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
  338. rasa/dialogue_understanding/commands/handle_code_change_command.py +73 -0
  339. rasa/dialogue_understanding/commands/human_handoff_command.py +66 -0
  340. rasa/dialogue_understanding/commands/knowledge_answer_command.py +57 -0
  341. rasa/dialogue_understanding/commands/noop_command.py +54 -0
  342. rasa/dialogue_understanding/commands/set_slot_command.py +160 -0
  343. rasa/dialogue_understanding/commands/skip_question_command.py +75 -0
  344. rasa/dialogue_understanding/commands/start_flow_command.py +107 -0
  345. rasa/dialogue_understanding/generator/__init__.py +21 -0
  346. rasa/dialogue_understanding/generator/command_generator.py +343 -0
  347. rasa/dialogue_understanding/generator/constants.py +18 -0
  348. rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
  349. rasa/dialogue_understanding/generator/flow_retrieval.py +412 -0
  350. rasa/dialogue_understanding/generator/llm_based_command_generator.py +467 -0
  351. rasa/dialogue_understanding/generator/llm_command_generator.py +67 -0
  352. rasa/dialogue_understanding/generator/multi_step/__init__.py +0 -0
  353. rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2 +62 -0
  354. rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2 +38 -0
  355. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +827 -0
  356. rasa/dialogue_understanding/generator/nlu_command_adapter.py +218 -0
  357. rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
  358. rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +57 -0
  359. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +345 -0
  360. rasa/dialogue_understanding/patterns/__init__.py +0 -0
  361. rasa/dialogue_understanding/patterns/cancel.py +111 -0
  362. rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
  363. rasa/dialogue_understanding/patterns/chitchat.py +37 -0
  364. rasa/dialogue_understanding/patterns/clarify.py +97 -0
  365. rasa/dialogue_understanding/patterns/code_change.py +41 -0
  366. rasa/dialogue_understanding/patterns/collect_information.py +90 -0
  367. rasa/dialogue_understanding/patterns/completed.py +40 -0
  368. rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
  369. rasa/dialogue_understanding/patterns/correction.py +278 -0
  370. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +248 -0
  371. rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
  372. rasa/dialogue_understanding/patterns/internal_error.py +47 -0
  373. rasa/dialogue_understanding/patterns/search.py +37 -0
  374. rasa/dialogue_understanding/patterns/skip_question.py +38 -0
  375. rasa/dialogue_understanding/processor/__init__.py +0 -0
  376. rasa/dialogue_understanding/processor/command_processor.py +687 -0
  377. rasa/dialogue_understanding/processor/command_processor_component.py +39 -0
  378. rasa/dialogue_understanding/stack/__init__.py +0 -0
  379. rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
  380. rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
  381. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
  382. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
  383. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
  384. rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
  385. rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
  386. rasa/dialogue_understanding/stack/utils.py +211 -0
  387. rasa/e2e_test/__init__.py +0 -0
  388. rasa/e2e_test/constants.py +11 -0
  389. rasa/e2e_test/e2e_test_case.py +366 -0
  390. rasa/e2e_test/e2e_test_result.py +34 -0
  391. rasa/e2e_test/e2e_test_runner.py +768 -0
  392. rasa/e2e_test/e2e_test_schema.yml +85 -0
  393. rasa/engine/__init__.py +0 -0
  394. rasa/engine/caching.py +463 -0
  395. rasa/engine/constants.py +17 -0
  396. rasa/engine/exceptions.py +14 -0
  397. rasa/engine/graph.py +637 -0
  398. rasa/engine/loader.py +36 -0
  399. rasa/engine/recipes/__init__.py +0 -0
  400. rasa/engine/recipes/config_files/default_config.yml +44 -0
  401. rasa/engine/recipes/default_components.py +99 -0
  402. rasa/engine/recipes/default_recipe.py +1251 -0
  403. rasa/engine/recipes/graph_recipe.py +79 -0
  404. rasa/engine/recipes/recipe.py +93 -0
  405. rasa/engine/runner/__init__.py +0 -0
  406. rasa/engine/runner/dask.py +250 -0
  407. rasa/engine/runner/interface.py +49 -0
  408. rasa/engine/storage/__init__.py +0 -0
  409. rasa/engine/storage/local_model_storage.py +246 -0
  410. rasa/engine/storage/resource.py +110 -0
  411. rasa/engine/storage/storage.py +203 -0
  412. rasa/engine/training/__init__.py +0 -0
  413. rasa/engine/training/components.py +176 -0
  414. rasa/engine/training/fingerprinting.py +64 -0
  415. rasa/engine/training/graph_trainer.py +256 -0
  416. rasa/engine/training/hooks.py +164 -0
  417. rasa/engine/validation.py +873 -0
  418. rasa/env.py +5 -0
  419. rasa/exceptions.py +69 -0
  420. rasa/graph_components/__init__.py +0 -0
  421. rasa/graph_components/converters/__init__.py +0 -0
  422. rasa/graph_components/converters/nlu_message_converter.py +48 -0
  423. rasa/graph_components/providers/__init__.py +0 -0
  424. rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
  425. rasa/graph_components/providers/domain_provider.py +71 -0
  426. rasa/graph_components/providers/flows_provider.py +74 -0
  427. rasa/graph_components/providers/forms_provider.py +44 -0
  428. rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
  429. rasa/graph_components/providers/responses_provider.py +44 -0
  430. rasa/graph_components/providers/rule_only_provider.py +49 -0
  431. rasa/graph_components/providers/story_graph_provider.py +43 -0
  432. rasa/graph_components/providers/training_tracker_provider.py +55 -0
  433. rasa/graph_components/validators/__init__.py +0 -0
  434. rasa/graph_components/validators/default_recipe_validator.py +550 -0
  435. rasa/graph_components/validators/finetuning_validator.py +302 -0
  436. rasa/hooks.py +112 -0
  437. rasa/jupyter.py +63 -0
  438. rasa/markers/__init__.py +0 -0
  439. rasa/markers/marker.py +269 -0
  440. rasa/markers/marker_base.py +828 -0
  441. rasa/markers/upload.py +74 -0
  442. rasa/markers/validate.py +21 -0
  443. rasa/model.py +118 -0
  444. rasa/model_testing.py +457 -0
  445. rasa/model_training.py +536 -0
  446. rasa/nlu/__init__.py +7 -0
  447. rasa/nlu/classifiers/__init__.py +3 -0
  448. rasa/nlu/classifiers/classifier.py +5 -0
  449. rasa/nlu/classifiers/diet_classifier.py +1881 -0
  450. rasa/nlu/classifiers/fallback_classifier.py +192 -0
  451. rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
  452. rasa/nlu/classifiers/llm_intent_classifier.py +519 -0
  453. rasa/nlu/classifiers/logistic_regression_classifier.py +253 -0
  454. rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
  455. rasa/nlu/classifiers/regex_message_handler.py +56 -0
  456. rasa/nlu/classifiers/sklearn_intent_classifier.py +330 -0
  457. rasa/nlu/constants.py +77 -0
  458. rasa/nlu/convert.py +40 -0
  459. rasa/nlu/emulators/__init__.py +0 -0
  460. rasa/nlu/emulators/dialogflow.py +55 -0
  461. rasa/nlu/emulators/emulator.py +49 -0
  462. rasa/nlu/emulators/luis.py +86 -0
  463. rasa/nlu/emulators/no_emulator.py +10 -0
  464. rasa/nlu/emulators/wit.py +56 -0
  465. rasa/nlu/extractors/__init__.py +0 -0
  466. rasa/nlu/extractors/crf_entity_extractor.py +715 -0
  467. rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
  468. rasa/nlu/extractors/entity_synonyms.py +178 -0
  469. rasa/nlu/extractors/extractor.py +470 -0
  470. rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
  471. rasa/nlu/extractors/regex_entity_extractor.py +220 -0
  472. rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
  473. rasa/nlu/featurizers/__init__.py +0 -0
  474. rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
  475. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +445 -0
  476. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
  477. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +768 -0
  478. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
  479. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
  480. rasa/nlu/featurizers/featurizer.py +89 -0
  481. rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
  482. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +867 -0
  483. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +571 -0
  484. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +271 -0
  485. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
  486. rasa/nlu/model.py +24 -0
  487. rasa/nlu/persistor.py +282 -0
  488. rasa/nlu/run.py +27 -0
  489. rasa/nlu/selectors/__init__.py +0 -0
  490. rasa/nlu/selectors/response_selector.py +987 -0
  491. rasa/nlu/test.py +1940 -0
  492. rasa/nlu/tokenizers/__init__.py +0 -0
  493. rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
  494. rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
  495. rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
  496. rasa/nlu/tokenizers/tokenizer.py +239 -0
  497. rasa/nlu/tokenizers/whitespace_tokenizer.py +106 -0
  498. rasa/nlu/utils/__init__.py +35 -0
  499. rasa/nlu/utils/bilou_utils.py +462 -0
  500. rasa/nlu/utils/hugging_face/__init__.py +0 -0
  501. rasa/nlu/utils/hugging_face/registry.py +108 -0
  502. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
  503. rasa/nlu/utils/mitie_utils.py +113 -0
  504. rasa/nlu/utils/pattern_utils.py +168 -0
  505. rasa/nlu/utils/spacy_utils.py +310 -0
  506. rasa/plugin.py +90 -0
  507. rasa/server.py +1551 -0
  508. rasa/shared/__init__.py +0 -0
  509. rasa/shared/constants.py +192 -0
  510. rasa/shared/core/__init__.py +0 -0
  511. rasa/shared/core/command_payload_reader.py +109 -0
  512. rasa/shared/core/constants.py +167 -0
  513. rasa/shared/core/conversation.py +46 -0
  514. rasa/shared/core/domain.py +2107 -0
  515. rasa/shared/core/events.py +2504 -0
  516. rasa/shared/core/flows/__init__.py +7 -0
  517. rasa/shared/core/flows/flow.py +362 -0
  518. rasa/shared/core/flows/flow_step.py +146 -0
  519. rasa/shared/core/flows/flow_step_links.py +319 -0
  520. rasa/shared/core/flows/flow_step_sequence.py +70 -0
  521. rasa/shared/core/flows/flows_list.py +223 -0
  522. rasa/shared/core/flows/flows_yaml_schema.json +217 -0
  523. rasa/shared/core/flows/nlu_trigger.py +117 -0
  524. rasa/shared/core/flows/steps/__init__.py +24 -0
  525. rasa/shared/core/flows/steps/action.py +56 -0
  526. rasa/shared/core/flows/steps/call.py +64 -0
  527. rasa/shared/core/flows/steps/collect.py +112 -0
  528. rasa/shared/core/flows/steps/constants.py +5 -0
  529. rasa/shared/core/flows/steps/continuation.py +36 -0
  530. rasa/shared/core/flows/steps/end.py +22 -0
  531. rasa/shared/core/flows/steps/internal.py +44 -0
  532. rasa/shared/core/flows/steps/link.py +51 -0
  533. rasa/shared/core/flows/steps/no_operation.py +48 -0
  534. rasa/shared/core/flows/steps/set_slots.py +50 -0
  535. rasa/shared/core/flows/steps/start.py +30 -0
  536. rasa/shared/core/flows/validation.py +527 -0
  537. rasa/shared/core/flows/yaml_flows_io.py +278 -0
  538. rasa/shared/core/generator.py +908 -0
  539. rasa/shared/core/slot_mappings.py +526 -0
  540. rasa/shared/core/slots.py +649 -0
  541. rasa/shared/core/trackers.py +1177 -0
  542. rasa/shared/core/training_data/__init__.py +0 -0
  543. rasa/shared/core/training_data/loading.py +89 -0
  544. rasa/shared/core/training_data/story_reader/__init__.py +0 -0
  545. rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
  546. rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
  547. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
  548. rasa/shared/core/training_data/story_writer/__init__.py +0 -0
  549. rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
  550. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +444 -0
  551. rasa/shared/core/training_data/structures.py +838 -0
  552. rasa/shared/core/training_data/visualization.html +146 -0
  553. rasa/shared/core/training_data/visualization.py +603 -0
  554. rasa/shared/data.py +249 -0
  555. rasa/shared/engine/__init__.py +0 -0
  556. rasa/shared/engine/caching.py +26 -0
  557. rasa/shared/exceptions.py +163 -0
  558. rasa/shared/importers/__init__.py +0 -0
  559. rasa/shared/importers/importer.py +704 -0
  560. rasa/shared/importers/multi_project.py +203 -0
  561. rasa/shared/importers/rasa.py +99 -0
  562. rasa/shared/importers/utils.py +34 -0
  563. rasa/shared/nlu/__init__.py +0 -0
  564. rasa/shared/nlu/constants.py +47 -0
  565. rasa/shared/nlu/interpreter.py +10 -0
  566. rasa/shared/nlu/training_data/__init__.py +0 -0
  567. rasa/shared/nlu/training_data/entities_parser.py +208 -0
  568. rasa/shared/nlu/training_data/features.py +492 -0
  569. rasa/shared/nlu/training_data/formats/__init__.py +10 -0
  570. rasa/shared/nlu/training_data/formats/dialogflow.py +163 -0
  571. rasa/shared/nlu/training_data/formats/luis.py +87 -0
  572. rasa/shared/nlu/training_data/formats/rasa.py +135 -0
  573. rasa/shared/nlu/training_data/formats/rasa_yaml.py +603 -0
  574. rasa/shared/nlu/training_data/formats/readerwriter.py +244 -0
  575. rasa/shared/nlu/training_data/formats/wit.py +52 -0
  576. rasa/shared/nlu/training_data/loading.py +137 -0
  577. rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
  578. rasa/shared/nlu/training_data/message.py +490 -0
  579. rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
  580. rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
  581. rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
  582. rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
  583. rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
  584. rasa/shared/nlu/training_data/training_data.py +730 -0
  585. rasa/shared/nlu/training_data/util.py +223 -0
  586. rasa/shared/providers/__init__.py +0 -0
  587. rasa/shared/providers/openai/__init__.py +0 -0
  588. rasa/shared/providers/openai/clients.py +43 -0
  589. rasa/shared/providers/openai/session_handler.py +110 -0
  590. rasa/shared/utils/__init__.py +0 -0
  591. rasa/shared/utils/cli.py +72 -0
  592. rasa/shared/utils/common.py +308 -0
  593. rasa/shared/utils/constants.py +4 -0
  594. rasa/shared/utils/io.py +415 -0
  595. rasa/shared/utils/llm.py +404 -0
  596. rasa/shared/utils/pykwalify_extensions.py +27 -0
  597. rasa/shared/utils/schemas/__init__.py +0 -0
  598. rasa/shared/utils/schemas/config.yml +2 -0
  599. rasa/shared/utils/schemas/domain.yml +145 -0
  600. rasa/shared/utils/schemas/events.py +212 -0
  601. rasa/shared/utils/schemas/model_config.yml +46 -0
  602. rasa/shared/utils/schemas/stories.yml +173 -0
  603. rasa/shared/utils/yaml.py +786 -0
  604. rasa/studio/__init__.py +0 -0
  605. rasa/studio/auth.py +268 -0
  606. rasa/studio/config.py +127 -0
  607. rasa/studio/constants.py +18 -0
  608. rasa/studio/data_handler.py +359 -0
  609. rasa/studio/download.py +483 -0
  610. rasa/studio/results_logger.py +137 -0
  611. rasa/studio/train.py +135 -0
  612. rasa/studio/upload.py +433 -0
  613. rasa/telemetry.py +1737 -0
  614. rasa/tracing/__init__.py +0 -0
  615. rasa/tracing/config.py +353 -0
  616. rasa/tracing/constants.py +62 -0
  617. rasa/tracing/instrumentation/__init__.py +0 -0
  618. rasa/tracing/instrumentation/attribute_extractors.py +672 -0
  619. rasa/tracing/instrumentation/instrumentation.py +1185 -0
  620. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +144 -0
  621. rasa/tracing/instrumentation/metrics.py +294 -0
  622. rasa/tracing/metric_instrument_provider.py +205 -0
  623. rasa/utils/__init__.py +0 -0
  624. rasa/utils/beta.py +83 -0
  625. rasa/utils/cli.py +28 -0
  626. rasa/utils/common.py +635 -0
  627. rasa/utils/converter.py +53 -0
  628. rasa/utils/endpoints.py +302 -0
  629. rasa/utils/io.py +260 -0
  630. rasa/utils/licensing.py +534 -0
  631. rasa/utils/log_utils.py +174 -0
  632. rasa/utils/mapper.py +210 -0
  633. rasa/utils/ml_utils.py +145 -0
  634. rasa/utils/plotting.py +362 -0
  635. rasa/utils/singleton.py +23 -0
  636. rasa/utils/tensorflow/__init__.py +0 -0
  637. rasa/utils/tensorflow/callback.py +112 -0
  638. rasa/utils/tensorflow/constants.py +116 -0
  639. rasa/utils/tensorflow/crf.py +492 -0
  640. rasa/utils/tensorflow/data_generator.py +440 -0
  641. rasa/utils/tensorflow/environment.py +161 -0
  642. rasa/utils/tensorflow/exceptions.py +5 -0
  643. rasa/utils/tensorflow/feature_array.py +366 -0
  644. rasa/utils/tensorflow/layers.py +1565 -0
  645. rasa/utils/tensorflow/layers_utils.py +113 -0
  646. rasa/utils/tensorflow/metrics.py +281 -0
  647. rasa/utils/tensorflow/model_data.py +798 -0
  648. rasa/utils/tensorflow/model_data_utils.py +499 -0
  649. rasa/utils/tensorflow/models.py +935 -0
  650. rasa/utils/tensorflow/rasa_layers.py +1094 -0
  651. rasa/utils/tensorflow/transformer.py +640 -0
  652. rasa/utils/tensorflow/types.py +6 -0
  653. rasa/utils/train_utils.py +572 -0
  654. rasa/utils/url_tools.py +53 -0
  655. rasa/utils/yaml.py +54 -0
  656. rasa/validator.py +1337 -0
  657. rasa/version.py +3 -0
  658. rasa_pro-3.9.18.dist-info/METADATA +563 -0
  659. rasa_pro-3.9.18.dist-info/NOTICE +5 -0
  660. rasa_pro-3.9.18.dist-info/RECORD +662 -0
  661. rasa_pro-3.9.18.dist-info/WHEEL +4 -0
  662. rasa_pro-3.9.18.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,248 @@
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 can I 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: "Sorry, I'm not able to answer that right now."
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: from_llm
104
+
105
+ flows:
106
+ pattern_cancel_flow:
107
+ description: Conversation repair flow that starts 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
+ Conversation repair flow for addressing failed command generation scenarios
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
+ # fallback for things that are not supported
126
+ - if: "'{{context.reason}}' = 'cannot_handle_not_supported'"
127
+ then:
128
+ - action: utter_cannot_handle
129
+ next: END
130
+ # default
131
+ - else:
132
+ - action: utter_ask_rephrase
133
+ next: END
134
+
135
+ pattern_chitchat:
136
+ description: Conversation repair flow for off-topic interactions that won't disrupt the main conversation
137
+ name: pattern chitchat
138
+ steps:
139
+ - action: action_trigger_chitchat
140
+
141
+ pattern_clarification:
142
+ description: Conversation repair flow for handling ambiguous requests that could match multiple flows
143
+ name: pattern clarification
144
+ steps:
145
+ - action: action_clarify_flows
146
+ - action: utter_clarification_options_rasa
147
+
148
+ pattern_code_change:
149
+ description: Conversation repair flow for cleaning the stack after an assistant update
150
+ name: pattern code change
151
+ steps:
152
+ - action: utter_inform_code_change
153
+ - action: action_clean_stack
154
+
155
+ pattern_collect_information:
156
+ description: Flow for collecting information from users
157
+ name: pattern collect information
158
+ steps:
159
+ - id: start
160
+ action: action_run_slot_rejections
161
+ - action: validate_{{context.collect}}
162
+ next:
163
+ - if: "slots.{{context.collect}} is not null"
164
+ then: END
165
+ - else: ask_collect
166
+ - id: ask_collect
167
+ action: "{{context.utter}}"
168
+ - action: "{{context.collect_action}}"
169
+ - action: action_listen
170
+ next: start
171
+
172
+ pattern_completed:
173
+ description: Flow that asks if the user needs more help after completing their initiated use cases
174
+ name: pattern completed
175
+ steps:
176
+ - action: utter_can_do_something_else
177
+
178
+ pattern_continue_interrupted:
179
+ description: Conversation repair flow for managing when users switch between different flows
180
+ name: pattern continue interrupted
181
+ steps:
182
+ - action: utter_flow_continue_interrupted
183
+
184
+ pattern_correction:
185
+ description: Conversation repair flow for managing user input changes or error corrections
186
+ name: pattern correction
187
+ steps:
188
+ - action: action_correct_flow_slot
189
+ next:
190
+ - if: not context.is_reset_only
191
+ then:
192
+ - action: utter_corrected_previous_input
193
+ next: END
194
+ - else: END
195
+
196
+ pattern_human_handoff:
197
+ description: Conversation repair flow for switching users to a human agent if their request can't be handled
198
+ name: pattern human handoff
199
+ steps:
200
+ - action: utter_human_handoff_not_available
201
+
202
+ pattern_internal_error:
203
+ description: Conversation repair flow for informing users about internal errors
204
+ name: pattern internal error
205
+ steps:
206
+ - noop: true
207
+ next:
208
+ - if: "'{{context.error_type}}' = 'rasa_internal_error_user_input_too_long'"
209
+ then:
210
+ - action: utter_user_input_too_long_error_rasa
211
+ next: END
212
+ - if: "'{{context.error_type}}' = 'rasa_internal_error_user_input_empty'"
213
+ then:
214
+ - action: utter_user_input_empty_error_rasa
215
+ next: END
216
+ - else:
217
+ - action: utter_internal_error_rasa
218
+ next: END
219
+
220
+
221
+ pattern_restart:
222
+ description: Flow for restarting the conversation
223
+ name: pattern restart
224
+ nlu_trigger:
225
+ - intent: restart
226
+ steps:
227
+ - action: action_restart
228
+
229
+ pattern_search:
230
+ description: Flow for handling knowledge-based questions
231
+ name: pattern search
232
+ steps:
233
+ - action: utter_no_knowledge_base
234
+ # - action: action_trigger_search to use doc search policy if present
235
+
236
+ pattern_session_start:
237
+ description: Flow for starting the conversation
238
+ name: pattern session start
239
+ nlu_trigger:
240
+ - intent: session_start
241
+ steps:
242
+ - action: action_session_start
243
+
244
+ pattern_skip_question:
245
+ description: Conversation repair flow for managing user intents to skip questions (steps)
246
+ name: pattern skip question
247
+ steps:
248
+ - 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