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,210 @@
1
+ import json
2
+ import logging
3
+ import time
4
+ from collections import deque
5
+ from typing import Deque, Optional, Text
6
+
7
+ from rasa.core.lock import Ticket, TicketLock
8
+ from rasa.core.lock_store import (
9
+ DEFAULT_SOCKET_TIMEOUT_IN_SECONDS,
10
+ LOCK_LIFETIME,
11
+ LockError,
12
+ LockStore,
13
+ )
14
+ from rasa.utils.endpoints import EndpointConfig
15
+
16
+ DEFAULT_REDIS_DB = 1
17
+
18
+ DEFAULT_PORT = 6379
19
+
20
+ DEFAULT_HOSTNAME = "localhost"
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+ LAST_ISSUED_TICKET_NUMBER_SUFFIX = "last_issued_ticket_number"
25
+
26
+ DEFAULT_CONCURRENT_REDIS_LOCK_STORE_KEY_PREFIX = "concurrent_lock:"
27
+
28
+
29
+ class ConcurrentTicketLock(TicketLock):
30
+ def concurrent_issue_ticket(self, lifetime: float, ticket_number: int) -> int:
31
+ """Issue a new ticket and return its number.
32
+
33
+ Args:
34
+ lifetime: The length of time after which the ticket expires.
35
+ ticket_number: Integer representing the ticket number.
36
+
37
+ Returns:
38
+ ticket_number integer.
39
+
40
+ """
41
+ ticket = Ticket(ticket_number, time.time() + lifetime)
42
+ self.tickets.append(ticket)
43
+
44
+ return ticket_number
45
+
46
+
47
+ class ConcurrentRedisLockStore(LockStore):
48
+ """Concurrent implementation of a Redis store for ticket locks."""
49
+
50
+ def __init__(
51
+ self,
52
+ endpoint_config: EndpointConfig,
53
+ ) -> None:
54
+ """Create a lock store which uses Redis for persistence.
55
+
56
+ Args:
57
+ endpoint_config: The endpointConfig defined the lock store.
58
+
59
+ Can contain the following properties:
60
+ host - The host of the redis server.
61
+ port - The port of the redis server.
62
+ db - The name of the database within Redis which should be used by Rasa
63
+ Open Source.
64
+ username - The username which should be used for authentication with the
65
+ Redis database.
66
+ password - The password which should be used for authentication with the
67
+ Redis database.
68
+ use_ssl - `True` if SSL should be used for the connection to Redis.
69
+ ssl_certfile - Path to the SSL certificate file.
70
+ ssl_keyfile - Path to the SSL private key file.
71
+ ssl_ca_certs - Path to the SSL CA certificate file.
72
+ key_prefix - prefix to prepend to all keys used by the lock store. Must be
73
+ alphanumeric.
74
+ socket_timeout - Timeout in seconds after which an exception will be raised
75
+ in case Redis doesn't respond within `socket_timeout` seconds.
76
+ """
77
+ import redis
78
+
79
+ host = endpoint_config.kwargs.get("host", DEFAULT_HOSTNAME)
80
+ port = endpoint_config.kwargs.get("port", DEFAULT_PORT)
81
+ db = endpoint_config.kwargs.get("db", DEFAULT_REDIS_DB)
82
+ username = endpoint_config.kwargs.get("username")
83
+ password = endpoint_config.kwargs.get("password")
84
+ use_ssl = bool(endpoint_config.kwargs.get("use_ssl", False))
85
+ ssl_certfile = endpoint_config.kwargs.get("ssl_certfile")
86
+ ssl_keyfile = endpoint_config.kwargs.get("ssl_keyfile")
87
+ ssl_ca_certs = endpoint_config.kwargs.get("ssl_ca_certs")
88
+ key_prefix = endpoint_config.kwargs.get("key_prefix")
89
+ socket_timeout = endpoint_config.kwargs.get(
90
+ "socket_timeout", DEFAULT_SOCKET_TIMEOUT_IN_SECONDS
91
+ )
92
+
93
+ self.red = redis.StrictRedis(
94
+ host=host,
95
+ port=int(port),
96
+ db=int(db),
97
+ username=username,
98
+ password=password,
99
+ ssl=use_ssl,
100
+ ssl_certfile=ssl_certfile,
101
+ ssl_keyfile=ssl_keyfile,
102
+ ssl_ca_certs=ssl_ca_certs,
103
+ socket_timeout=socket_timeout,
104
+ )
105
+
106
+ self.key_prefix = DEFAULT_CONCURRENT_REDIS_LOCK_STORE_KEY_PREFIX
107
+ if key_prefix:
108
+ logger.debug(f"Setting non-default redis key prefix: '{key_prefix}'.")
109
+ self._set_key_prefix(key_prefix)
110
+
111
+ super().__init__()
112
+
113
+ def _set_key_prefix(self, key_prefix: Text) -> None:
114
+ if isinstance(key_prefix, str) and key_prefix.isalnum():
115
+ self.key_prefix = (
116
+ key_prefix + ":" + DEFAULT_CONCURRENT_REDIS_LOCK_STORE_KEY_PREFIX
117
+ )
118
+ else:
119
+ logger.warning(
120
+ f"Omitting provided non-alphanumeric redis key prefix: '{key_prefix}'. "
121
+ f"Using default '{self.key_prefix}' instead."
122
+ )
123
+
124
+ def issue_ticket(
125
+ self, conversation_id: Text, lock_lifetime: float = LOCK_LIFETIME
126
+ ) -> int:
127
+ """Issue new ticket for a conversation.
128
+
129
+ It's configured with `lock_lifetime` and associated with `conversation_id`.
130
+ Creates a new lock if none is found.
131
+ """
132
+ logger.debug(f"Issuing ticket for conversation '{conversation_id}'.")
133
+ try:
134
+ lock = self.get_or_create_lock(conversation_id)
135
+ lock.remove_expired_tickets()
136
+ ticket_number = self.increment_ticket_number(lock)
137
+ ticket = lock.concurrent_issue_ticket(lock_lifetime, ticket_number) # type: ignore[attr-defined]
138
+ self.save_lock(lock)
139
+
140
+ return ticket
141
+ except Exception as e:
142
+ raise LockError(f"Error while acquiring lock. Error:\n{e}")
143
+
144
+ def get_lock(self, conversation_id: Text) -> Optional[ConcurrentTicketLock]:
145
+ """Retrieves lock (see parent docstring for more information)."""
146
+ tickets: Deque[Ticket] = deque()
147
+
148
+ pattern = self.key_prefix + conversation_id + ":" + "[0-9]*"
149
+ redis_keys = self.red.keys(pattern)
150
+
151
+ for key in redis_keys:
152
+ serialised_ticket = self.red.get(key)
153
+ if serialised_ticket:
154
+ ticket = Ticket.from_dict(json.loads(serialised_ticket))
155
+ tickets.appendleft(ticket)
156
+
157
+ tickets = deque(sorted(tickets, key=lambda x: x.number))
158
+
159
+ return ConcurrentTicketLock(conversation_id, tickets)
160
+
161
+ def delete_lock(self, conversation_id: Text) -> None:
162
+ """Deletes lock for conversation ID."""
163
+ pattern = self.key_prefix + conversation_id + ":*"
164
+ redis_keys = self.red.keys(pattern)
165
+
166
+ if not redis_keys:
167
+ logger.debug(
168
+ f"The lock store does not contain any key-value "
169
+ f"items for conversation '{conversation_id}'."
170
+ )
171
+ return None
172
+
173
+ deletion_successful = self.red.delete(*redis_keys)
174
+ if deletion_successful == 0:
175
+ self._log_deletion(conversation_id, False)
176
+ else:
177
+ self._log_deletion(conversation_id, True)
178
+
179
+ def save_lock(self, lock: TicketLock) -> None:
180
+ """Commit individual tickets and last issued ticket number to storage."""
181
+ last_issued_ticket = lock.tickets[-1]
182
+ serialised_ticket = last_issued_ticket.dumps()
183
+ key = (
184
+ self.key_prefix
185
+ + lock.conversation_id
186
+ + ":"
187
+ + str(last_issued_ticket.number)
188
+ )
189
+ self.red.set(
190
+ name=key, value=serialised_ticket, ex=int(last_issued_ticket.expires)
191
+ )
192
+
193
+ def increment_ticket_number(self, lock: TicketLock) -> int:
194
+ """Uses Redis atomic transaction to increment ticket number."""
195
+ last_issued_key = (
196
+ self.key_prefix
197
+ + lock.conversation_id
198
+ + ":"
199
+ + LAST_ISSUED_TICKET_NUMBER_SUFFIX
200
+ )
201
+
202
+ return self.red.incr(name=last_issued_key)
203
+
204
+ def finish_serving(self, conversation_id: Text, ticket_number: int) -> None:
205
+ """Finish serving ticket with `ticket_number` for `conversation_id`.
206
+
207
+ Removes ticket from storage.
208
+ """
209
+ ticket_key = self.key_prefix + conversation_id + ":" + str(ticket_number)
210
+ self.red.delete(ticket_key)
rasa/core/constants.py ADDED
@@ -0,0 +1,107 @@
1
+ DEFAULT_SERVER_PORT = 5005
2
+
3
+ DEFAULT_SERVER_INTERFACE = "0.0.0.0"
4
+
5
+ DEFAULT_SERVER_FORMAT = "{}://localhost:{}"
6
+
7
+ DEFAULT_SERVER_URL = DEFAULT_SERVER_FORMAT.format("http", DEFAULT_SERVER_PORT)
8
+
9
+ DEFAULT_INTERACTIVE_SERVER_URL = "{}://localhost:{}"
10
+
11
+ DEFAULT_NLU_FALLBACK_THRESHOLD = 0.3
12
+
13
+ DEFAULT_NLU_FALLBACK_AMBIGUITY_THRESHOLD = 0.1
14
+
15
+ DEFAULT_CORE_FALLBACK_THRESHOLD = 0.3
16
+
17
+ DEFAULT_MAX_HISTORY = None # Core policy history is unbounded by default.
18
+
19
+ DEFAULT_RESPONSE_TIMEOUT = 60 * 60 # 1 hour
20
+
21
+ DEFAULT_REQUEST_TIMEOUT = 60 * 5 # 5 minutes
22
+
23
+ DEFAULT_STREAM_READING_TIMEOUT = 10 # in seconds
24
+
25
+ DEFAULT_LOCK_LIFETIME = 60 # in seconds
26
+
27
+ DEFAULT_KEEP_ALIVE_TIMEOUT = 120 # in seconds
28
+
29
+ BEARER_TOKEN_PREFIX = "Bearer "
30
+
31
+ # The lowest priority is intended to be used by machine learning policies.
32
+ DEFAULT_POLICY_PRIORITY = 1
33
+
34
+ # The priority of intent-prediction policies.
35
+ # This should be below all rule based policies but higher than ML
36
+ # based policies. This enables a loop inside ensemble where if none
37
+ # of the rule based policies predict an action and intent prediction
38
+ # policy predicts one, its prediction is chosen by the ensemble and
39
+ # then the ML based policies are again run to get the prediction for
40
+ # an actual action. To prevent an infinite loop, intent prediction
41
+ # policies only predict an action if the last event in
42
+ # the tracker is of type `UserUttered`. Hence, they make at most
43
+ # one action prediction in each conversation turn. This allows other
44
+ # policies to predict a winning action prediction.
45
+ UNLIKELY_INTENT_POLICY_PRIORITY = DEFAULT_POLICY_PRIORITY + 1
46
+
47
+ # The priority intended to be used by memoization policies.
48
+ # It is higher than default to prioritize training stories.
49
+ MEMOIZATION_POLICY_PRIORITY = UNLIKELY_INTENT_POLICY_PRIORITY + 1
50
+
51
+ # The priority of the `RulePolicy` is higher than all other policies since
52
+ # rule execution takes precedence over training stories or predicted actions.
53
+ RULE_POLICY_PRIORITY = MEMOIZATION_POLICY_PRIORITY + 1
54
+
55
+ # chat policy priority
56
+ CHAT_POLICY_PRIORITY = RULE_POLICY_PRIORITY + 1
57
+
58
+ # search policy priority
59
+ SEARCH_POLICY_PRIORITY = CHAT_POLICY_PRIORITY + 1
60
+
61
+ # flow policy priority
62
+ FLOW_POLICY_PRIORITY = SEARCH_POLICY_PRIORITY + 1
63
+
64
+
65
+ DIALOGUE = "dialogue"
66
+
67
+ # RabbitMQ message property header added to events published using `rasa export`
68
+ RASA_EXPORT_PROCESS_ID_HEADER_NAME = "rasa-export-process-id"
69
+
70
+ # Name of the environment variable defining the PostgreSQL schema to access. See
71
+ # https://www.postgresql.org/docs/9.1/ddl-schemas.html for more details.
72
+ POSTGRESQL_SCHEMA = "POSTGRESQL_SCHEMA"
73
+
74
+ # Names of the environment variables defining PostgreSQL pool size and max overflow
75
+ POSTGRESQL_POOL_SIZE = "SQL_POOL_SIZE"
76
+ POSTGRESQL_MAX_OVERFLOW = "SQL_MAX_OVERFLOW"
77
+
78
+ # File names for testing
79
+ CONFUSION_MATRIX_STORIES_FILE = "story_confusion_matrix.png"
80
+ REPORT_STORIES_FILE = "story_report.json"
81
+ FAILED_STORIES_FILE = "failed_test_stories.yml"
82
+ SUCCESSFUL_STORIES_FILE = "successful_test_stories.yml"
83
+ STORIES_WITH_WARNINGS_FILE = "stories_with_warnings.yml"
84
+
85
+ POLICY_PRIORITY = "priority"
86
+ POLICY_FEATURIZER = "featurizer"
87
+ POLICY_MAX_HISTORY = "max_history"
88
+
89
+ DEFAULT_PROTOCOL = "UDP"
90
+ DEFAULT_SYSLOG_HOST = "localhost"
91
+ DEFAULT_SYSLOG_PORT = 514
92
+
93
+ COMPRESS_ACTION_SERVER_REQUEST_ENV_NAME = "COMPRESS_ACTION_SERVER_REQUEST"
94
+ DEFAULT_COMPRESS_ACTION_SERVER_REQUEST = False
95
+
96
+ # uses python like string formatting for the interpolation of templates
97
+ RASA_FORMAT_TEMPLATE_ENGINE = "format"
98
+
99
+ # uses jinja for the interpolation of templates
100
+ JINJA2_TEMPLATE_ENGINE = "jinja"
101
+
102
+ # default engine used if no engine is specified in the response
103
+ DEFAULT_TEMPLATE_ENGINE = RASA_FORMAT_TEMPLATE_ENGINE
104
+
105
+ # configuration parameter used to specify the template engine to use
106
+ # for a response
107
+ TEMPLATE_ENGINE_CONFIG_KEY = "template"
File without changes
@@ -0,0 +1,267 @@
1
+ from rasa.shared.core.domain import Domain
2
+ from typing import Optional, Text, List
3
+ from rasa.core.evaluation.marker_base import (
4
+ OperatorMarker,
5
+ ConditionMarker,
6
+ MarkerRegistry,
7
+ Marker,
8
+ )
9
+ from rasa.shared.core.events import ActionExecuted, SlotSet, UserUttered, Event
10
+ import logging
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ @MarkerRegistry.configurable_marker
16
+ class AndMarker(OperatorMarker):
17
+ """Checks that all sub-markers apply."""
18
+
19
+ @staticmethod
20
+ def positive_tag() -> Text:
21
+ """Returns the tag to be used in a config file."""
22
+ return "and"
23
+
24
+ @staticmethod
25
+ def negated_tag() -> Text:
26
+ """Returns the tag to be used in a config file for the negated version."""
27
+ return "at_least_one_not"
28
+
29
+ def _non_negated_version_applies_at(self, event: Event) -> bool:
30
+ return all(marker.history[-1] for marker in self.sub_markers)
31
+
32
+
33
+ @MarkerRegistry.configurable_marker
34
+ class OrMarker(OperatorMarker):
35
+ """Checks that at least one sub-marker applies."""
36
+
37
+ @staticmethod
38
+ def positive_tag() -> Text:
39
+ """Returns the tag to be used in a config file."""
40
+ return "or"
41
+
42
+ def _non_negated_version_applies_at(self, event: Event) -> bool:
43
+ return any(marker.history[-1] for marker in self.sub_markers)
44
+
45
+
46
+ @MarkerRegistry.configurable_marker
47
+ class NotMarker(OperatorMarker):
48
+ """Checks that at least one sub-marker applies."""
49
+
50
+ @staticmethod
51
+ def positive_tag() -> Text:
52
+ """Returns the tag to be used in a config file."""
53
+ return "not"
54
+
55
+ @staticmethod
56
+ def expected_number_of_sub_markers() -> Optional[int]:
57
+ """Returns the expected number of sub-markers (if there is any)."""
58
+ return 1
59
+
60
+ def _non_negated_version_applies_at(self, event: Event) -> bool:
61
+ return not self.sub_markers[0].history[-1]
62
+
63
+
64
+ @MarkerRegistry.configurable_marker
65
+ class SequenceMarker(OperatorMarker):
66
+ """Checks that all sub-markers apply consecutively in the specified order.
67
+
68
+ The sequence marker application follows two rules:
69
+ (1) Given a sequence of sub-markers `m_0, m_1,...,m_n`, the sequence marker applies
70
+ at the `i`-th event if all sub-markers successively applied to some previous
71
+ events and the last sub-marker applies at the current `i`-th events.
72
+ (2) If the sequence marker applies at the `i`-th event, then for it's next
73
+ application the events up to the `i`-th event will be ignored.
74
+
75
+ """
76
+
77
+ def __init__(
78
+ self, markers: List[Marker], negated: bool = False, name: Optional[Text] = None
79
+ ) -> None:
80
+ """Instantiate a new sequence marker.
81
+
82
+ Args:
83
+ markers: the sub-markers listed in the expected order
84
+ negated: whether this marker should be negated (i.e. a negated marker
85
+ applies if and only if the non-negated marker does not apply)
86
+ name: a custom name that can be used to replace the default string
87
+ conversion of this marker
88
+ """
89
+ super().__init__(markers=markers, negated=negated, name=name)
90
+ self._progress: int = 0
91
+
92
+ @staticmethod
93
+ def positive_tag() -> Text:
94
+ """Returns the tag to be used in a config file."""
95
+ return "seq"
96
+
97
+ def _to_str_with(self, tag: Text) -> Text:
98
+ sub_markers_str = " -> ".join(str(marker) for marker in self.sub_markers)
99
+ return f"{tag}({sub_markers_str})"
100
+
101
+ def _non_negated_version_applies_at(self, event: Event) -> bool:
102
+ # Remember that all the sub-markers have been updated before this tracker.
103
+ # Hence, whether the sub-markers apply to the current `event` is stored in the
104
+ # last item of their history. Hence, to check if we made some progress in
105
+ # identifying a sequence, we can simply check:
106
+ if self.sub_markers[self._progress].history[-1]:
107
+ self._progress += 1
108
+ # If we were able to apply every sub-marker once, we reset our progress:
109
+ if self._progress == len(self.sub_markers):
110
+ self._progress = 0
111
+ return True
112
+ return False
113
+
114
+
115
+ @MarkerRegistry.configurable_marker
116
+ class OccurrenceMarker(OperatorMarker):
117
+ """Checks that all sub-markers applied at least once in history.
118
+
119
+ It doesn't matter if the sub markers stop applying later in history. If they
120
+ applied at least once they will always evaluate to `True`.
121
+ """
122
+
123
+ @staticmethod
124
+ def positive_tag() -> Text:
125
+ """Returns the tag to be used in a config file."""
126
+ return "at_least_once"
127
+
128
+ @staticmethod
129
+ def negated_tag() -> Optional[Text]:
130
+ """Returns the tag to be used in a config file for the negated version."""
131
+ return "never"
132
+
133
+ @staticmethod
134
+ def expected_number_of_sub_markers() -> Optional[int]:
135
+ """Returns the expected number of sub-markers (if there is any)."""
136
+ return 1
137
+
138
+ def _non_negated_version_applies_at(self, event: Event) -> bool:
139
+ occurred_before = False
140
+
141
+ if self.history:
142
+ occurred_before = self.history[-1]
143
+ if self.negated:
144
+ occurred_before = not occurred_before
145
+
146
+ return occurred_before or self.sub_markers[0].history[-1]
147
+
148
+ def relevant_events(self) -> List[int]:
149
+ """Only return index of first match (see parent class for full docstring)."""
150
+ try:
151
+ return [self.history.index(True)]
152
+ except ValueError:
153
+ return []
154
+
155
+
156
+ @MarkerRegistry.configurable_marker
157
+ class ActionExecutedMarker(ConditionMarker):
158
+ """Checks whether an action is executed at the current step."""
159
+
160
+ @staticmethod
161
+ def positive_tag() -> Text:
162
+ """Returns the tag to be used in a config file."""
163
+ return "action"
164
+
165
+ @staticmethod
166
+ def negated_tag() -> Optional[Text]:
167
+ """Returns the tag to be used in a config file for the negated version."""
168
+ return "not_action"
169
+
170
+ def validate_against_domain(self, domain: Domain) -> bool:
171
+ """Checks that this marker (and its children) refer to entries in the domain.
172
+
173
+ Args:
174
+ domain: The domain to check against
175
+ """
176
+ valid = self.text in domain.action_names_or_texts
177
+
178
+ if not valid:
179
+ logger.error(
180
+ f"Referenced action '{self.text}' does not exist in the domain"
181
+ )
182
+
183
+ return valid
184
+
185
+ def _non_negated_version_applies_at(self, event: Event) -> bool:
186
+ return isinstance(event, ActionExecuted) and event.action_name == self.text
187
+
188
+
189
+ @MarkerRegistry.configurable_marker
190
+ class IntentDetectedMarker(ConditionMarker):
191
+ """Checks whether an intent is expressed at the current step.
192
+
193
+ More precisely it applies at an event if this event is a `UserUttered` event
194
+ where either (1) the retrieval intent or (2) just the intent coincides with
195
+ the specified text.
196
+ """
197
+
198
+ @staticmethod
199
+ def positive_tag() -> Text:
200
+ """Returns the tag to be used in a config file."""
201
+ return "intent"
202
+
203
+ @staticmethod
204
+ def negated_tag() -> Optional[Text]:
205
+ """Returns the tag to be used in a config file for the negated version."""
206
+ return "not_intent"
207
+
208
+ def validate_against_domain(self, domain: Domain) -> bool:
209
+ """Checks that this marker (and its children) refer to entries in the domain.
210
+
211
+ Args:
212
+ domain: The domain to check against
213
+ """
214
+ valid = self.text in domain.intent_properties
215
+
216
+ if not valid:
217
+ logger.error(
218
+ f"Referenced intent '{self.text}' does not exist in the domain"
219
+ )
220
+
221
+ return valid
222
+
223
+ def _non_negated_version_applies_at(self, event: Event) -> bool:
224
+ return isinstance(event, UserUttered) and self.text in [
225
+ event.intent_name,
226
+ event.full_retrieval_intent_name,
227
+ ]
228
+
229
+
230
+ @MarkerRegistry.configurable_marker
231
+ class SlotSetMarker(ConditionMarker):
232
+ """Checks whether a slot is set at the current step.
233
+
234
+ The actual `SlotSet` event might have happened at an earlier step.
235
+ """
236
+
237
+ @staticmethod
238
+ def positive_tag() -> Text:
239
+ """Returns the tag to be used in a config file."""
240
+ return "slot_was_set"
241
+
242
+ @staticmethod
243
+ def negated_tag() -> Optional[Text]:
244
+ """Returns the tag to be used in a config file for the negated version."""
245
+ return "slot_was_not_set"
246
+
247
+ def validate_against_domain(self, domain: Domain) -> bool:
248
+ """Checks that this marker (and its children) refer to entries in the domain.
249
+
250
+ Args:
251
+ domain: The domain to check against.
252
+ """
253
+ valid = any(self.text == slot.name for slot in domain.slots)
254
+
255
+ if not valid:
256
+ logger.error(f"Referenced slot '{self.text}' does not exist in the domain")
257
+
258
+ return valid
259
+
260
+ def _non_negated_version_applies_at(self, event: Event) -> bool:
261
+ if isinstance(event, SlotSet) and event.key == self.text:
262
+ # slot is set if and only if it's value is not `None`
263
+ return event.value is not None
264
+ if self.history:
265
+ was_set = self.history[-1] if not self.negated else not self.history[-1]
266
+ return was_set
267
+ return False