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,59 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ import structlog
6
+
7
+ from rasa.core.actions.action import Action
8
+ from rasa.core.channels import OutputChannel
9
+ from rasa.core.nlg import NaturalLanguageGenerator
10
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
11
+ from rasa.dialogue_understanding.stack.frames import (
12
+ BaseFlowStackFrame,
13
+ UserFlowStackFrame,
14
+ )
15
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import FlowStackFrameType
16
+ from rasa.shared.core.constants import ACTION_CLEAN_STACK
17
+ from rasa.shared.core.domain import Domain
18
+ from rasa.shared.core.events import Event
19
+ from rasa.shared.core.flows.steps.constants import END_STEP
20
+ from rasa.shared.core.flows.steps.continuation import ContinueFlowStep
21
+ from rasa.shared.core.trackers import DialogueStateTracker
22
+
23
+ structlogger = structlog.get_logger()
24
+
25
+
26
+ class ActionCleanStack(Action):
27
+ """Action which cancels a flow from the stack."""
28
+
29
+ def name(self) -> str:
30
+ """Return the flow name."""
31
+ return ACTION_CLEAN_STACK
32
+
33
+ async def run(
34
+ self,
35
+ output_channel: OutputChannel,
36
+ nlg: NaturalLanguageGenerator,
37
+ tracker: DialogueStateTracker,
38
+ domain: Domain,
39
+ metadata: Optional[Dict[str, Any]] = None,
40
+ ) -> List[Event]:
41
+ """Clean the stack."""
42
+ structlogger.debug("action_clean_stack.run")
43
+ new_frames = []
44
+ # Set all frames to their end step, filter out any non-BaseFlowStackFrames
45
+ for frame in tracker.stack.frames:
46
+ if isinstance(frame, BaseFlowStackFrame):
47
+ structlogger.debug(
48
+ "action_clean_stack.terminating_frame",
49
+ frame_id=frame.frame_id,
50
+ flow_id=frame.flow_id,
51
+ )
52
+ frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
53
+ if isinstance(frame, UserFlowStackFrame):
54
+ # Making sure there are no "continue interrupts" triggered
55
+ frame.frame_type = FlowStackFrameType.REGULAR
56
+ new_frames.append(frame)
57
+ new_stack = DialogueStack.from_dict([frame.as_dict() for frame in new_frames])
58
+
59
+ return tracker.create_stack_updated_events(new_stack)
@@ -0,0 +1,24 @@
1
+ from typing import Optional
2
+
3
+ from rasa.shared.exceptions import RasaException
4
+
5
+
6
+ class ActionExecutionRejection(RasaException):
7
+ """Raising this exception allows other policies to predict a different action."""
8
+
9
+ def __init__(self, action_name: str, message: Optional[str] = None) -> None:
10
+ """Create a new ActionExecutionRejection exception."""
11
+ self.action_name = action_name
12
+ self.message = message or "Custom action '{}' rejected to run".format(
13
+ action_name
14
+ )
15
+ super(ActionExecutionRejection, self).__init__()
16
+
17
+ def __str__(self) -> str:
18
+ return self.message
19
+
20
+
21
+ class DomainNotFound(Exception):
22
+ """Exception raised when domain is not found."""
23
+
24
+ pass
@@ -0,0 +1,207 @@
1
+ from typing import Any, Dict, List, Optional, TYPE_CHECKING, Text, Union
2
+
3
+ import structlog
4
+ from jinja2 import Template
5
+ from pypred import Predicate
6
+
7
+ from rasa.core.actions.action import Action, create_bot_utterance
8
+ from rasa.dialogue_understanding.patterns.collect_information import (
9
+ CollectInformationPatternFlowStackFrame,
10
+ )
11
+ from rasa.shared.core.constants import ACTION_RUN_SLOT_REJECTIONS_NAME
12
+ from rasa.shared.core.events import Event, SlotSet
13
+ from rasa.shared.core.flows.steps.collect import SlotRejection
14
+ from rasa.shared.core.slots import (
15
+ BooleanSlot,
16
+ CategoricalSlot,
17
+ FloatSlot,
18
+ Slot,
19
+ )
20
+
21
+ if TYPE_CHECKING:
22
+ from rasa.core.nlg import NaturalLanguageGenerator
23
+ from rasa.core.channels.channel import OutputChannel
24
+ from rasa.shared.core.domain import Domain
25
+ from rasa.shared.core.trackers import DialogueStateTracker
26
+
27
+ structlogger = structlog.get_logger()
28
+
29
+ UTTERANCE_NOT_DEFINED_BY_USER = "TO.UPDATE.VALUE.BUT.MISSING.UTTERANCE"
30
+
31
+
32
+ def utterance_for_slot_type(slot: Slot) -> Optional[str]:
33
+ """Return the utterance to use for the slot type."""
34
+ if isinstance(slot, BooleanSlot):
35
+ return "utter_boolean_slot_rejection"
36
+ elif isinstance(slot, FloatSlot):
37
+ return "utter_float_slot_rejection"
38
+ elif isinstance(slot, CategoricalSlot):
39
+ return "utter_categorical_slot_rejection"
40
+ return None
41
+
42
+
43
+ def coerce_slot_value(
44
+ slot_value: str, slot_name: str, tracker: "DialogueStateTracker"
45
+ ) -> Union[str, bool, float, None]:
46
+ """Coerce the slot value to the correct type.
47
+
48
+ Tries to coerce the slot value to the correct type. If the
49
+ conversion fails, `None` is returned.
50
+
51
+ Args:
52
+ slot_value: The value to coerce.
53
+ slot_name: The name of the slot.
54
+ tracker: The tracker containing the current state of the conversation.
55
+
56
+ Returns:
57
+ The coerced value or `None` if the conversion failed.
58
+ """
59
+ if slot_name not in tracker.slots:
60
+ return slot_value
61
+
62
+ slot = tracker.slots[slot_name]
63
+
64
+ if not slot.is_valid_value(slot_value):
65
+ structlogger.debug(
66
+ "run.rejection.slot_value_not_valid",
67
+ rejection=slot_value,
68
+ )
69
+ return None
70
+
71
+ return slot.coerce_value(slot_value)
72
+
73
+
74
+ def run_rejections(
75
+ slot_value: Union[str, bool, float, None],
76
+ slot_name: str,
77
+ rejections: List[SlotRejection],
78
+ ) -> Optional[str]:
79
+ """Run the predicate checks under rejections."""
80
+ violation = False
81
+ internal_error = False
82
+ current_context = {"slots": {slot_name: slot_value}}
83
+
84
+ structlogger.debug("run.predicate.context", context=current_context)
85
+ document = current_context.copy()
86
+
87
+ for rejection in rejections:
88
+ condition = rejection.if_
89
+ utterance = rejection.utter
90
+
91
+ try:
92
+ rendered_template = Template(condition).render(current_context)
93
+ predicate = Predicate(rendered_template)
94
+ violation = predicate.evaluate(document)
95
+ structlogger.debug(
96
+ "run.predicate.result",
97
+ predicate=predicate.description(),
98
+ violation=violation,
99
+ )
100
+ except (TypeError, Exception) as e:
101
+ structlogger.error(
102
+ "run.predicate.error",
103
+ predicate=condition,
104
+ document=document,
105
+ error=str(e),
106
+ )
107
+ violation = True
108
+ internal_error = True
109
+
110
+ if violation:
111
+ break
112
+
113
+ if not violation:
114
+ return None
115
+ if internal_error:
116
+ utterance = "utter_internal_error_rasa"
117
+ if not isinstance(utterance, str):
118
+ utterance = UTTERANCE_NOT_DEFINED_BY_USER
119
+ return utterance
120
+
121
+
122
+ class ActionRunSlotRejections(Action):
123
+ """Action which evaluates the predicate checks under rejections."""
124
+
125
+ def name(self) -> Text:
126
+ """Return the name of the action."""
127
+ return ACTION_RUN_SLOT_REJECTIONS_NAME
128
+
129
+ async def run(
130
+ self,
131
+ output_channel: "OutputChannel",
132
+ nlg: "NaturalLanguageGenerator",
133
+ tracker: "DialogueStateTracker",
134
+ domain: "Domain",
135
+ metadata: Optional[Dict[Text, Any]] = None,
136
+ ) -> List[Event]:
137
+ """Run the predicate checks."""
138
+ utterance = None
139
+ top_frame = tracker.stack.top()
140
+ if not isinstance(top_frame, CollectInformationPatternFlowStackFrame):
141
+ return []
142
+
143
+ slot_name = top_frame.collect
144
+ slot_instance = tracker.slots.get(slot_name)
145
+ if slot_instance and not slot_instance.has_been_set:
146
+ # this is the first time the assistant asks for the slot value,
147
+ # therefore we skip the predicate validation because the slot
148
+ # value has not been provided
149
+ structlogger.debug(
150
+ "first.collect.slot.not.set",
151
+ slot_name=slot_name,
152
+ slot_value=slot_instance.value,
153
+ )
154
+ return []
155
+
156
+ slot_value = tracker.get_slot(slot_name)
157
+
158
+ if slot_instance and slot_instance.has_been_set and slot_value is None:
159
+ return []
160
+
161
+ typed_slot_value = coerce_slot_value(slot_value, slot_name, tracker)
162
+ if typed_slot_value is None:
163
+ # the slot value could not be coerced to the correct type
164
+ utterance = utterance_for_slot_type(slot_instance)
165
+ elif top_frame.rejections:
166
+ # run the predicate checks under rejections
167
+ utterance = run_rejections(
168
+ typed_slot_value, slot_name, top_frame.rejections
169
+ )
170
+
171
+ events: List[Event] = []
172
+ if utterance:
173
+ # the slot value has been rejected
174
+ events.append(SlotSet(slot_name, None))
175
+ elif slot_value != typed_slot_value or type(slot_value) != type(
176
+ typed_slot_value
177
+ ):
178
+ # the slot value has been coerced to the correct type
179
+ return [SlotSet(slot_name, typed_slot_value)]
180
+ elif slot_value == typed_slot_value:
181
+ # the slot value has not changed and no utterance present
182
+ return []
183
+
184
+ if utterance == UTTERANCE_NOT_DEFINED_BY_USER:
185
+ structlogger.error(
186
+ "run.rejection.missing.utter",
187
+ utterance=None,
188
+ )
189
+ return events
190
+
191
+ message = await nlg.generate(
192
+ utterance,
193
+ tracker,
194
+ output_channel.name(),
195
+ value=slot_value,
196
+ )
197
+
198
+ if message is None:
199
+ structlogger.error(
200
+ "run.rejection.failed.finding.utter",
201
+ utterance=utterance,
202
+ )
203
+ else:
204
+ message["utter_action"] = utterance
205
+ events.append(create_bot_utterance(message))
206
+
207
+ return events
@@ -0,0 +1,31 @@
1
+ from typing import Optional, Dict, Any, List
2
+
3
+ from rasa.core.actions.action import Action
4
+ from rasa.core.channels import OutputChannel
5
+ from rasa.core.nlg import NaturalLanguageGenerator
6
+ from rasa.dialogue_understanding.stack.frames import ChitChatStackFrame
7
+ from rasa.shared.core.constants import ACTION_TRIGGER_CHITCHAT
8
+ from rasa.shared.core.domain import Domain
9
+ from rasa.shared.core.events import Event
10
+ from rasa.shared.core.trackers import DialogueStateTracker
11
+
12
+
13
+ class ActionTriggerChitchat(Action):
14
+ """Action which triggers a chitchat answer."""
15
+
16
+ def name(self) -> str:
17
+ """Return the name of the action."""
18
+ return ACTION_TRIGGER_CHITCHAT
19
+
20
+ async def run(
21
+ self,
22
+ output_channel: OutputChannel,
23
+ nlg: NaturalLanguageGenerator,
24
+ tracker: DialogueStateTracker,
25
+ domain: Domain,
26
+ metadata: Optional[Dict[str, Any]] = None,
27
+ ) -> List[Event]:
28
+ """Run the predicate checks."""
29
+ stack = tracker.stack
30
+ stack.push(ChitChatStackFrame())
31
+ return tracker.create_stack_updated_events(stack)
@@ -0,0 +1,109 @@
1
+ from typing import Any, Dict, Optional, Text, List
2
+
3
+ import structlog
4
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
5
+ FlowStackFrameType,
6
+ UserFlowStackFrame,
7
+ )
8
+ from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
9
+ from rasa.core.actions import action
10
+ from rasa.core.channels import OutputChannel
11
+ from rasa.shared.constants import FLOW_PREFIX
12
+
13
+ from rasa.shared.core.domain import Domain
14
+ from rasa.shared.core.events import (
15
+ ActiveLoop,
16
+ Event,
17
+ FlowInterrupted,
18
+ SlotSet,
19
+ )
20
+ from rasa.core.nlg import NaturalLanguageGenerator
21
+ from rasa.shared.core.trackers import DialogueStateTracker
22
+
23
+ structlogger = structlog.get_logger(__name__)
24
+
25
+
26
+ class ActionTriggerFlow(action.Action):
27
+ """Action which triggers a flow by putting it on the dialogue stack."""
28
+
29
+ def __init__(self, flow_action_name: Text) -> None:
30
+ """Creates a `ActionTriggerFlow`.
31
+
32
+ Args:
33
+ flow_action_name: Name of the flow.
34
+ """
35
+ super().__init__()
36
+
37
+ if not flow_action_name.startswith(FLOW_PREFIX):
38
+ raise ValueError(
39
+ f"Flow action name '{flow_action_name}' needs to start with "
40
+ f"'{FLOW_PREFIX}'."
41
+ )
42
+
43
+ self._flow_name = flow_action_name[len(FLOW_PREFIX) :]
44
+ self._flow_action_name = flow_action_name
45
+
46
+ def name(self) -> Text:
47
+ """Return the flow name."""
48
+ return self._flow_action_name
49
+
50
+ def create_events_to_start_flow(self, tracker: DialogueStateTracker) -> List[Event]:
51
+ """Create events to start the flow.
52
+
53
+ Args:
54
+ tracker: The tracker to start the flow on.
55
+
56
+ Returns:
57
+ The event to start the flow."""
58
+ stack = tracker.stack
59
+ events: List[Event] = []
60
+
61
+ frame_type = FlowStackFrameType.REGULAR
62
+
63
+ if not stack.is_empty():
64
+ frame_type = FlowStackFrameType.INTERRUPT
65
+ top_user_frame = top_user_flow_frame(stack)
66
+ if top_user_frame is not None:
67
+ events.append(
68
+ FlowInterrupted(top_user_frame.flow_id, top_user_frame.step_id)
69
+ )
70
+
71
+ stack.push(
72
+ UserFlowStackFrame(
73
+ flow_id=self._flow_name,
74
+ frame_type=frame_type,
75
+ )
76
+ )
77
+ return events + tracker.create_stack_updated_events(stack)
78
+
79
+ def create_events_to_set_flow_slots(self, metadata: Dict[str, Any]) -> List[Event]:
80
+ """Create events to set the flow slots.
81
+
82
+ Set additional slots to prefill information for the flow.
83
+
84
+ Args:
85
+ metadata: The metadata to set the slots from.
86
+
87
+ Returns:
88
+ The events to set the flow slots.
89
+ """
90
+ slots_to_be_set = metadata.get("slots", {}) if metadata else {}
91
+ return [SlotSet(key, value) for key, value in slots_to_be_set.items()]
92
+
93
+ async def run(
94
+ self,
95
+ output_channel: "OutputChannel",
96
+ nlg: "NaturalLanguageGenerator",
97
+ tracker: "DialogueStateTracker",
98
+ domain: "Domain",
99
+ metadata: Optional[Dict[Text, Any]] = None,
100
+ ) -> List[Event]:
101
+ """Trigger the flow."""
102
+ events: List[Event] = self.create_events_to_start_flow(tracker)
103
+ events.extend(self.create_events_to_set_flow_slots(metadata))
104
+
105
+ if tracker.active_loop_name:
106
+ # end any active loop to ensure we are progressing the started flow
107
+ events.append(ActiveLoop(None))
108
+
109
+ return events
@@ -0,0 +1,31 @@
1
+ from typing import Optional, Dict, Any, List
2
+
3
+ from rasa.core.actions.action import Action
4
+ from rasa.core.channels import OutputChannel
5
+ from rasa.core.nlg import NaturalLanguageGenerator
6
+ from rasa.dialogue_understanding.stack.frames import SearchStackFrame
7
+ from rasa.shared.core.constants import ACTION_TRIGGER_SEARCH
8
+ from rasa.shared.core.domain import Domain
9
+ from rasa.shared.core.events import Event
10
+ from rasa.shared.core.trackers import DialogueStateTracker
11
+
12
+
13
+ class ActionTriggerSearch(Action):
14
+ """Action which triggers a search"""
15
+
16
+ def name(self) -> str:
17
+ """Return the name of the action."""
18
+ return ACTION_TRIGGER_SEARCH
19
+
20
+ async def run(
21
+ self,
22
+ output_channel: OutputChannel,
23
+ nlg: NaturalLanguageGenerator,
24
+ tracker: DialogueStateTracker,
25
+ domain: Domain,
26
+ metadata: Optional[Dict[str, Any]] = None,
27
+ ) -> List[Event]:
28
+ """Run the predicate checks."""
29
+ stack = tracker.stack
30
+ stack.push(SearchStackFrame())
31
+ return tracker.create_stack_updated_events(stack)
@@ -0,0 +1,5 @@
1
+ DEFAULT_SELECTIVE_DOMAIN = False
2
+ SELECTIVE_DOMAIN = "enable_selective_domain"
3
+
4
+ SSL_CLIENT_CERT_FIELD = "ssl_client_cert"
5
+ SSL_CLIENT_KEY_FIELD = "ssl_client_key"
@@ -0,0 +1,188 @@
1
+ import abc
2
+ import logging
3
+ from typing import TYPE_CHECKING, Any, Dict, Text
4
+
5
+ import rasa
6
+ from rasa.core.actions.action_exceptions import DomainNotFound
7
+ from rasa.core.actions.constants import DEFAULT_SELECTIVE_DOMAIN, SELECTIVE_DOMAIN
8
+ from rasa.shared.constants import DOCS_BASE_URL
9
+ from rasa.shared.exceptions import RasaException
10
+ from rasa.utils.endpoints import EndpointConfig
11
+
12
+ if TYPE_CHECKING:
13
+ from rasa.shared.core.domain import Domain
14
+ from rasa.shared.core.trackers import DialogueStateTracker
15
+
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ class CustomActionExecutor(abc.ABC):
21
+ """Interface for custom action executors.
22
+
23
+ Provides an abstraction layer for executing custom actions
24
+ regardless of the communication protocol.
25
+ """
26
+
27
+ @abc.abstractmethod
28
+ async def run(
29
+ self,
30
+ tracker: "DialogueStateTracker",
31
+ domain: "Domain",
32
+ include_domain: bool = False,
33
+ ) -> Dict[Text, Any]:
34
+ """Executes the custom action.
35
+
36
+ Args:
37
+ tracker: The current state of the dialogue.
38
+ domain: The domain object containing domain-specific information.
39
+ include_domain: If True, the domain information is included in the request.
40
+
41
+ Returns:
42
+ The response from the execution of the custom action.
43
+ """
44
+ pass
45
+
46
+
47
+ class NoEndpointCustomActionExecutor(CustomActionExecutor):
48
+ """Implementation of a custom action executor when endpoint is not set.
49
+
50
+ Used to handle the case where no endpoint is configured.
51
+
52
+ Raises RasaException when executed.
53
+ """
54
+
55
+ def __init__(self, action_name: str) -> None:
56
+ """Initializes the custom action executor.
57
+
58
+ Args:
59
+ action_name: The name of the custom action.
60
+ """
61
+ self.action_name = action_name
62
+
63
+ async def run(
64
+ self,
65
+ tracker: "DialogueStateTracker",
66
+ domain: "Domain",
67
+ include_domain: bool = False,
68
+ ) -> Dict[Text, Any]:
69
+ """Executes the custom action.
70
+
71
+ Args:
72
+ tracker: The current state of the dialogue.
73
+ domain: The domain object containing domain-specific information.
74
+ include_domain: If True, the domain information
75
+ is included in the request.
76
+
77
+ Returns:
78
+ The response from the execution of the custom action.
79
+ """
80
+ raise RasaException(
81
+ f"Failed to execute custom action '{self.action_name}' "
82
+ f"because no endpoint is configured to run this "
83
+ f"custom action. Please take a look at "
84
+ f"the docs and set an endpoint configuration via the "
85
+ f"--endpoints flag. "
86
+ f"{DOCS_BASE_URL}/custom-actions"
87
+ )
88
+
89
+
90
+ class CustomActionRequestWriter:
91
+ """Writes the request payload for a custom action."""
92
+
93
+ def __init__(self, action_name: str, action_endpoint: EndpointConfig) -> None:
94
+ """Initializes the request writer.
95
+
96
+ Args:
97
+ action_name: The name of the custom action.
98
+ action_endpoint: The endpoint configuration for the action server.
99
+ """
100
+ self.action_name = action_name
101
+ self.action_endpoint = action_endpoint
102
+
103
+ def _is_selective_domain_enabled(self) -> bool:
104
+ """Check if selective domain handling is enabled.
105
+
106
+ Returns:
107
+ True if selective domain handling is enabled, otherwise False.
108
+ """
109
+ if self.action_endpoint is None:
110
+ return False
111
+ return bool(
112
+ self.action_endpoint.kwargs.get(SELECTIVE_DOMAIN, DEFAULT_SELECTIVE_DOMAIN)
113
+ )
114
+
115
+ def create(
116
+ self,
117
+ tracker: "DialogueStateTracker",
118
+ domain: "Domain",
119
+ include_domain: bool = False,
120
+ ) -> Dict[str, Any]:
121
+ """Create the JSON payload for the action server request.
122
+
123
+ Args:
124
+ tracker: The current state of the dialogue.
125
+ domain: The domain object containing domain-specific information.
126
+ include_domain: If True, the domain information is included in the request.
127
+
128
+ Returns:
129
+ A JSON payload to be sent to the action server.
130
+ """
131
+ from rasa.shared.core.trackers import EventVerbosity
132
+
133
+ tracker_state = tracker.current_state(EventVerbosity.ALL)
134
+
135
+ result = {
136
+ "next_action": self.action_name,
137
+ "sender_id": tracker.sender_id,
138
+ "tracker": tracker_state,
139
+ "version": rasa.__version__,
140
+ }
141
+
142
+ if include_domain and (
143
+ not self._is_selective_domain_enabled()
144
+ or domain.does_custom_action_explicitly_need_domain(self.action_name)
145
+ ):
146
+ result["domain"] = domain.as_dict()
147
+
148
+ result["domain_digest"] = domain.fingerprint()
149
+
150
+ return result
151
+
152
+
153
+ class RetryCustomActionExecutor(CustomActionExecutor):
154
+ """Retries the execution of a custom action."""
155
+
156
+ def __init__(self, custom_action_executor: CustomActionExecutor) -> None:
157
+ self._custom_action_executor = custom_action_executor
158
+
159
+ async def run(
160
+ self,
161
+ tracker: "DialogueStateTracker",
162
+ domain: "Domain",
163
+ include_domain: bool = False,
164
+ ) -> Dict[Text, Any]:
165
+ """Runs the wrapped custom action executor.
166
+
167
+ First request to the action server is made with/without the domain
168
+ as specified by the `include_domain` parameter.
169
+
170
+ If the action server responds with a `DomainNotFound` error, by running the
171
+ custom action executor again with the domain information.
172
+
173
+ Args:
174
+ tracker: The current state of the dialogue.
175
+ domain: The domain object containing domain-specific information.
176
+ include_domain: If True, the domain information is included in the request
177
+
178
+ Returns:
179
+ The response from the execution of the custom action.
180
+ """
181
+ try:
182
+ return await self._custom_action_executor.run(
183
+ tracker, domain, include_domain=include_domain
184
+ )
185
+ except DomainNotFound:
186
+ return await self._custom_action_executor.run(
187
+ tracker, domain, include_domain=True
188
+ )