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,271 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ import re
5
+ from typing import Any, Dict, List, Optional, Text, Tuple, Type
6
+
7
+ import numpy as np
8
+ import scipy.sparse
9
+
10
+ from rasa.nlu.tokenizers.tokenizer import Tokenizer
11
+ import rasa.shared.utils.io
12
+ import rasa.utils.io
13
+ import rasa.nlu.utils.pattern_utils as pattern_utils
14
+ from rasa.engine.graph import ExecutionContext, GraphComponent
15
+ from rasa.engine.recipes.default_recipe import DefaultV1Recipe
16
+ from rasa.engine.storage.resource import Resource
17
+ from rasa.engine.storage.storage import ModelStorage
18
+ from rasa.nlu.constants import TOKENS_NAMES
19
+ from rasa.nlu.featurizers.sparse_featurizer.sparse_featurizer import SparseFeaturizer
20
+ from rasa.shared.nlu.constants import TEXT, RESPONSE, ACTION_TEXT
21
+ from rasa.shared.nlu.training_data.training_data import TrainingData
22
+ from rasa.shared.nlu.training_data.message import Message
23
+
24
+ logger = logging.getLogger(__name__)
25
+
26
+
27
+ @DefaultV1Recipe.register(
28
+ DefaultV1Recipe.ComponentType.MESSAGE_FEATURIZER, is_trainable=True
29
+ )
30
+ class RegexFeaturizer(SparseFeaturizer, GraphComponent):
31
+ """Adds message features based on regex expressions."""
32
+
33
+ @classmethod
34
+ def required_components(cls) -> List[Type]:
35
+ """Components that should be included in the pipeline before this component."""
36
+ return [Tokenizer]
37
+
38
+ @staticmethod
39
+ def get_default_config() -> Dict[Text, Any]:
40
+ """Returns the component's default config."""
41
+ return {
42
+ **SparseFeaturizer.get_default_config(),
43
+ # text will be processed with case sensitive as default
44
+ "case_sensitive": True,
45
+ # use lookup tables to generate features
46
+ "use_lookup_tables": True,
47
+ # use regexes to generate features
48
+ "use_regexes": True,
49
+ # use match word boundaries for lookup table
50
+ "use_word_boundaries": True,
51
+ }
52
+
53
+ def __init__(
54
+ self,
55
+ config: Dict[Text, Any],
56
+ model_storage: ModelStorage,
57
+ resource: Resource,
58
+ execution_context: ExecutionContext,
59
+ known_patterns: Optional[List[Dict[Text, Text]]] = None,
60
+ ) -> None:
61
+ """Constructs new features for regexes and lookup table using regex expressions.
62
+
63
+ Args:
64
+ config: Configuration for the component.
65
+ model_storage: Storage which graph components can use to persist and load
66
+ themselves.
67
+ resource: Resource locator for this component which can be used to persist
68
+ and load itself from the `model_storage`.
69
+ execution_context: Information about the current graph run.
70
+ known_patterns: Regex Patterns the component should pre-load itself with.
71
+ """
72
+ super().__init__(execution_context.node_name, config)
73
+
74
+ self._model_storage = model_storage
75
+ self._resource = resource
76
+
77
+ self.known_patterns = known_patterns if known_patterns else []
78
+ self.case_sensitive = config["case_sensitive"]
79
+ self.finetune_mode = execution_context.is_finetuning
80
+
81
+ @classmethod
82
+ def create(
83
+ cls,
84
+ config: Dict[Text, Any],
85
+ model_storage: ModelStorage,
86
+ resource: Resource,
87
+ execution_context: ExecutionContext,
88
+ ) -> RegexFeaturizer:
89
+ """Creates a new untrained component (see parent class for full docstring)."""
90
+ return cls(config, model_storage, resource, execution_context)
91
+
92
+ def _merge_new_patterns(self, new_patterns: List[Dict[Text, Text]]) -> None:
93
+ """Updates already known patterns with new patterns extracted from data.
94
+
95
+ New patterns should always be added to the end of the existing
96
+ patterns and the order of the existing patterns should not be disturbed.
97
+
98
+ Args:
99
+ new_patterns: Patterns extracted from training data and to be merged with
100
+ known patterns.
101
+ """
102
+ pattern_name_index_map = {
103
+ pattern["name"]: index for index, pattern in enumerate(self.known_patterns)
104
+ }
105
+ for extra_pattern in new_patterns:
106
+ new_pattern_name = extra_pattern["name"]
107
+
108
+ # Some patterns may have just new examples added
109
+ # to them. These do not count as additional pattern.
110
+ if new_pattern_name in pattern_name_index_map:
111
+ self.known_patterns[pattern_name_index_map[new_pattern_name]][
112
+ "pattern"
113
+ ] = extra_pattern["pattern"]
114
+ else:
115
+ self.known_patterns.append(extra_pattern)
116
+
117
+ def train(self, training_data: TrainingData) -> Resource:
118
+ """Trains the component with all patterns extracted from training data."""
119
+ patterns_from_data = pattern_utils.extract_patterns(
120
+ training_data,
121
+ use_lookup_tables=self._config["use_lookup_tables"],
122
+ use_regexes=self._config["use_regexes"],
123
+ use_word_boundaries=self._config["use_word_boundaries"],
124
+ )
125
+ if self.finetune_mode:
126
+ # Merge patterns extracted from data with known patterns
127
+ self._merge_new_patterns(patterns_from_data)
128
+ else:
129
+ self.known_patterns = patterns_from_data
130
+
131
+ self._persist()
132
+ return self._resource
133
+
134
+ def process_training_data(self, training_data: TrainingData) -> TrainingData:
135
+ """Processes the training examples (see parent class for full docstring)."""
136
+ for example in training_data.training_examples:
137
+ for attribute in [TEXT, RESPONSE, ACTION_TEXT]:
138
+ self._text_features_with_regex(example, attribute)
139
+
140
+ return training_data
141
+
142
+ def process(self, messages: List[Message]) -> List[Message]:
143
+ """Featurizes all given messages in-place.
144
+
145
+ Returns:
146
+ the given list of messages which have been modified in-place
147
+ """
148
+ for message in messages:
149
+ self._text_features_with_regex(message, TEXT)
150
+
151
+ return messages
152
+
153
+ def _text_features_with_regex(self, message: Message, attribute: Text) -> None:
154
+ """Helper method to extract features and set them appropriately in the message.
155
+
156
+ Args:
157
+ message: Message to be featurized.
158
+ attribute: Attribute of message to be featurized.
159
+ """
160
+ if self.known_patterns:
161
+ sequence_features, sentence_features = self._features_for_patterns(
162
+ message, attribute
163
+ )
164
+
165
+ self.add_features_to_message(
166
+ sequence_features, sentence_features, attribute, message
167
+ )
168
+
169
+ def _features_for_patterns(
170
+ self, message: Message, attribute: Text
171
+ ) -> Tuple[Optional[scipy.sparse.coo_matrix], Optional[scipy.sparse.coo_matrix]]:
172
+ """Checks which known patterns match the message.
173
+
174
+ Given a sentence, returns a vector of {1,0} values indicating which
175
+ regexes did match. Furthermore, if the
176
+ message is tokenized, the function will mark all tokens with a dict
177
+ relating the name of the regex to whether it was matched.
178
+
179
+ Args:
180
+ message: Message to be featurized.
181
+ attribute: Attribute of message to be featurized.
182
+
183
+ Returns:
184
+ Token and sentence level features of message attribute.
185
+ """
186
+ # Attribute not set (e.g. response not present)
187
+ if not message.get(attribute):
188
+ return None, None
189
+
190
+ tokens = message.get(TOKENS_NAMES[attribute], [])
191
+
192
+ if not tokens:
193
+ # nothing to featurize
194
+ return None, None
195
+
196
+ flags = 0 # default flag
197
+ if not self.case_sensitive:
198
+ flags = re.IGNORECASE
199
+
200
+ sequence_length = len(tokens)
201
+
202
+ num_patterns = len(self.known_patterns)
203
+
204
+ sequence_features = np.zeros([sequence_length, num_patterns])
205
+ sentence_features = np.zeros([1, num_patterns])
206
+
207
+ for pattern_index, pattern in enumerate(self.known_patterns):
208
+ matches = list(
209
+ re.finditer(pattern["pattern"], message.get(attribute), flags=flags)
210
+ )
211
+
212
+ for token_index, t in enumerate(tokens):
213
+ patterns = t.get("pattern", default={})
214
+ patterns[pattern["name"]] = False
215
+
216
+ for match in matches:
217
+ if t.start < match.end() and t.end > match.start():
218
+ patterns[pattern["name"]] = True
219
+ sequence_features[token_index][pattern_index] = 1.0
220
+ if attribute in [RESPONSE, TEXT, ACTION_TEXT]:
221
+ # sentence vector should contain all patterns
222
+ sentence_features[0][pattern_index] = 1.0
223
+
224
+ t.set("pattern", patterns)
225
+
226
+ return (
227
+ scipy.sparse.coo_matrix(sequence_features),
228
+ scipy.sparse.coo_matrix(sentence_features),
229
+ )
230
+
231
+ @classmethod
232
+ def load(
233
+ cls,
234
+ config: Dict[Text, Any],
235
+ model_storage: ModelStorage,
236
+ resource: Resource,
237
+ execution_context: ExecutionContext,
238
+ **kwargs: Any,
239
+ ) -> RegexFeaturizer:
240
+ """Loads trained component (see parent class for full docstring)."""
241
+ known_patterns = None
242
+
243
+ try:
244
+ with model_storage.read_from(resource) as model_dir:
245
+ patterns_file_name = model_dir / "patterns.json"
246
+ known_patterns = rasa.shared.utils.io.read_json_file(patterns_file_name)
247
+ except (ValueError, FileNotFoundError):
248
+ logger.warning(
249
+ f"Failed to load `{cls.__class__.__name__}` from model storage. "
250
+ f"Resource '{resource.name}' doesn't exist."
251
+ )
252
+
253
+ return cls(
254
+ config,
255
+ model_storage,
256
+ resource,
257
+ execution_context,
258
+ known_patterns=known_patterns,
259
+ )
260
+
261
+ def _persist(self) -> None:
262
+ with self._model_storage.write_to(self._resource) as model_dir:
263
+ regex_file = model_dir / "patterns.json"
264
+ rasa.shared.utils.io.dump_obj_as_json_to_file(
265
+ regex_file, self.known_patterns
266
+ )
267
+
268
+ @classmethod
269
+ def validate_config(cls, config: Dict[Text, Any]) -> None:
270
+ """Validates that the component is configured properly."""
271
+ pass
@@ -0,0 +1,9 @@
1
+ from abc import ABC
2
+ import scipy.sparse
3
+ from rasa.nlu.featurizers.featurizer import Featurizer
4
+
5
+
6
+ class SparseFeaturizer(Featurizer[scipy.sparse.spmatrix], ABC):
7
+ """Base class for all sparse featurizers."""
8
+
9
+ pass
rasa/nlu/model.py ADDED
@@ -0,0 +1,24 @@
1
+ import logging
2
+ from typing import Text
3
+
4
+ from rasa.shared.exceptions import RasaException
5
+
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+
10
+ # TODO: remove/move
11
+ class InvalidModelError(RasaException):
12
+ """Raised when a model failed to load.
13
+
14
+ Attributes:
15
+ message -- explanation of why the model is invalid
16
+ """
17
+
18
+ def __init__(self, message: Text) -> None:
19
+ """Initialize message attribute."""
20
+ self.message = message
21
+ super(InvalidModelError, self).__init__(message)
22
+
23
+ def __str__(self) -> Text:
24
+ return self.message
rasa/nlu/persistor.py ADDED
@@ -0,0 +1,282 @@
1
+ import abc
2
+ import structlog
3
+ import os
4
+ import shutil
5
+ from typing import Optional, Text, Tuple, TYPE_CHECKING
6
+
7
+ from rasa.shared.exceptions import RasaException
8
+
9
+ import rasa.shared.utils.common
10
+ import rasa.utils.common
11
+
12
+ if TYPE_CHECKING:
13
+ from azure.storage.blob import ContainerClient
14
+
15
+ structlogger = structlog.get_logger()
16
+
17
+
18
+ def get_persistor(name: Text) -> Optional["Persistor"]:
19
+ """Returns an instance of the requested persistor.
20
+
21
+ Currently, `aws`, `gcs`, `azure` and providing module paths are supported remote
22
+ storages.
23
+ """
24
+ if name == "aws":
25
+ return AWSPersistor(
26
+ os.environ.get("BUCKET_NAME"), os.environ.get("AWS_ENDPOINT_URL")
27
+ )
28
+ if name == "gcs":
29
+ return GCSPersistor(os.environ.get("BUCKET_NAME"))
30
+
31
+ if name == "azure":
32
+ return AzurePersistor(
33
+ os.environ.get("AZURE_CONTAINER"),
34
+ os.environ.get("AZURE_ACCOUNT_NAME"),
35
+ os.environ.get("AZURE_ACCOUNT_KEY"),
36
+ )
37
+ if name:
38
+ try:
39
+ persistor = rasa.shared.utils.common.class_from_module_path(name)
40
+ return persistor()
41
+ except ImportError:
42
+ raise ImportError(
43
+ f"Unknown model persistor {name}. Please make sure to "
44
+ "either use an included model persistor (`aws`, `gcs` "
45
+ "or `azure`) or specify the module path to an external "
46
+ "model persistor."
47
+ )
48
+ return None
49
+
50
+
51
+ class Persistor(abc.ABC):
52
+ """Store models in cloud and fetch them when needed."""
53
+
54
+ def persist(self, model_directory: Text, model_name: Text) -> None:
55
+ """Uploads a model persisted in the `target_dir` to cloud storage."""
56
+ if not os.path.isdir(model_directory):
57
+ raise ValueError(f"Target directory '{model_directory}' not found.")
58
+
59
+ file_key, tar_path = self._compress(model_directory, model_name)
60
+ self._persist_tar(file_key, tar_path)
61
+
62
+ def retrieve(self, model_name: Text, target_path: Text) -> None:
63
+ """Downloads a model that has been persisted to cloud storage."""
64
+ tar_name = model_name
65
+
66
+ if not model_name.endswith("tar.gz"):
67
+ # ensure backward compatibility
68
+ tar_name = self._tar_name(model_name)
69
+
70
+ self._retrieve_tar(tar_name)
71
+ self._copy(os.path.basename(tar_name), target_path)
72
+
73
+ @abc.abstractmethod
74
+ def _retrieve_tar(self, filename: Text) -> None:
75
+ """Downloads a model previously persisted to cloud storage."""
76
+ raise NotImplementedError
77
+
78
+ @abc.abstractmethod
79
+ def _persist_tar(self, filekey: Text, tarname: Text) -> None:
80
+ """Uploads a model persisted in the `target_dir` to cloud storage."""
81
+ raise NotImplementedError
82
+
83
+ def _compress(self, model_directory: Text, model_name: Text) -> Tuple[Text, Text]:
84
+ """Creates a compressed archive and returns key and tar."""
85
+ import tempfile
86
+
87
+ dirpath = tempfile.mkdtemp()
88
+ base_name = self._tar_name(model_name, include_extension=False)
89
+ tar_name = shutil.make_archive(
90
+ os.path.join(dirpath, base_name),
91
+ "gztar",
92
+ root_dir=model_directory,
93
+ base_dir=".",
94
+ )
95
+ file_key = os.path.basename(tar_name)
96
+ return file_key, tar_name
97
+
98
+ @staticmethod
99
+ def _tar_name(model_name: Text, include_extension: bool = True) -> Text:
100
+ ext = ".tar.gz" if include_extension else ""
101
+ return f"{model_name}{ext}"
102
+
103
+ @staticmethod
104
+ def _copy(compressed_path: Text, target_path: Text) -> None:
105
+ shutil.copy2(compressed_path, target_path)
106
+
107
+
108
+ class AWSPersistor(Persistor):
109
+ """Store models on S3.
110
+
111
+ Fetches them when needed, instead of storing them on the local disk.
112
+ """
113
+
114
+ def __init__(
115
+ self,
116
+ bucket_name: Text,
117
+ endpoint_url: Optional[Text] = None,
118
+ region_name: Optional[Text] = None,
119
+ ) -> None:
120
+ import boto3
121
+
122
+ super().__init__()
123
+ self.s3 = boto3.resource(
124
+ "s3", endpoint_url=endpoint_url, region_name=region_name
125
+ )
126
+ self._ensure_bucket_exists(bucket_name, region_name)
127
+ self.bucket_name = bucket_name
128
+ self.bucket = self.s3.Bucket(bucket_name)
129
+
130
+ def _ensure_bucket_exists(
131
+ self, bucket_name: Text, region_name: Optional[Text] = None
132
+ ) -> None:
133
+ import botocore
134
+
135
+ # noinspection PyUnresolvedReferences
136
+ try:
137
+ self.s3.meta.client.head_bucket(Bucket=bucket_name)
138
+ except botocore.exceptions.ClientError as e:
139
+ error_code = int(e.response["Error"]["Code"])
140
+ if error_code == 403:
141
+ log = (
142
+ f"Access to the specified bucket '{bucket_name}' is forbidden. "
143
+ "Please make sure you have the necessary "
144
+ "permission to access the bucket."
145
+ )
146
+ structlogger.error(
147
+ "aws_persistor.ensure_bucket_exists.bucket_access_forbidden",
148
+ bucket_name=bucket_name,
149
+ event_info=log,
150
+ )
151
+ raise RasaException(log)
152
+ elif error_code == 404:
153
+ log = (
154
+ f"The specified bucket '{bucket_name}' does not exist. "
155
+ "Please make sure to create the bucket first."
156
+ )
157
+ structlogger.error(
158
+ "aws_persistor.ensure_bucket_exists.bucket_not_found",
159
+ bucket_name=bucket_name,
160
+ event_info=log,
161
+ )
162
+ raise RasaException(log)
163
+
164
+ def _persist_tar(self, file_key: Text, tar_path: Text) -> None:
165
+ """Uploads a model persisted in the `target_dir` to s3."""
166
+ with open(tar_path, "rb") as f:
167
+ self.s3.Object(self.bucket_name, file_key).put(Body=f)
168
+
169
+ def _retrieve_tar(self, model_path: Text) -> None:
170
+ """Downloads a model that has previously been persisted to s3."""
171
+ tar_name = os.path.basename(model_path)
172
+ with open(tar_name, "wb") as f:
173
+ self.bucket.download_fileobj(model_path, f)
174
+
175
+
176
+ class GCSPersistor(Persistor):
177
+ """Store models on Google Cloud Storage.
178
+
179
+ Fetches them when needed, instead of storing them on the local disk.
180
+ """
181
+
182
+ def __init__(self, bucket_name: Text) -> None:
183
+ """Initialise class with client and bucket."""
184
+ # there are no type hints in this repo for now
185
+ # https://github.com/googleapis/python-storage/issues/393
186
+ from google.cloud import storage # type: ignore[attr-defined]
187
+
188
+ super().__init__()
189
+
190
+ self.storage_client = storage.Client()
191
+ self._ensure_bucket_exists(bucket_name)
192
+
193
+ self.bucket_name = bucket_name
194
+ self.bucket = self.storage_client.bucket(bucket_name)
195
+
196
+ def _ensure_bucket_exists(self, bucket_name: Text) -> None:
197
+ from google.cloud import exceptions
198
+
199
+ try:
200
+ self.storage_client.get_bucket(bucket_name)
201
+ except exceptions.NotFound:
202
+ log = (
203
+ f"The specified bucket '{bucket_name}' does not exist. "
204
+ "Please make sure to create the bucket first."
205
+ )
206
+ structlogger.error(
207
+ "gcp_persistor.ensure_bucket_exists.bucket_not_found",
208
+ bucket_name=bucket_name,
209
+ event_info=log,
210
+ )
211
+ raise RasaException(log)
212
+ except exceptions.Forbidden:
213
+ log = (
214
+ f"Access to the specified bucket '{bucket_name}' is forbidden. "
215
+ "Please make sure you have the necessary "
216
+ "permission to access the bucket. "
217
+ )
218
+ structlogger.error(
219
+ "gcp_persistor.ensure_bucket_exists.bucket_access_forbidden",
220
+ bucket_name=bucket_name,
221
+ event_info=log,
222
+ )
223
+ raise RasaException(log)
224
+
225
+ def _persist_tar(self, file_key: Text, tar_path: Text) -> None:
226
+ """Uploads a model persisted in the `target_dir` to GCS."""
227
+ blob = self.bucket.blob(file_key)
228
+ blob.upload_from_filename(tar_path)
229
+
230
+ def _retrieve_tar(self, target_filename: Text) -> None:
231
+ """Downloads a model that has previously been persisted to GCS."""
232
+ blob = self.bucket.blob(target_filename)
233
+ blob.download_to_filename(target_filename)
234
+
235
+
236
+ class AzurePersistor(Persistor):
237
+ """Store models on Azure."""
238
+
239
+ def __init__(
240
+ self, azure_container: Text, azure_account_name: Text, azure_account_key: Text
241
+ ) -> None:
242
+ from azure.storage.blob import BlobServiceClient
243
+
244
+ super().__init__()
245
+
246
+ self.blob_service = BlobServiceClient(
247
+ account_url=f"https://{azure_account_name}.blob.core.windows.net/",
248
+ credential=azure_account_key,
249
+ )
250
+ self.container_name = azure_container
251
+ self._ensure_container_exists()
252
+
253
+ def _ensure_container_exists(self) -> None:
254
+ if self._container_client().exists():
255
+ pass
256
+ else:
257
+ log = (
258
+ f"The specified container '{self.container_name}' does not exist."
259
+ "Please make sure to create the container first."
260
+ )
261
+ structlogger.error(
262
+ "azure_persistor.ensure_container_exists.container_not_found",
263
+ container_name=self.container_name,
264
+ event_info=log,
265
+ )
266
+ raise RasaException(log)
267
+
268
+ def _container_client(self) -> "ContainerClient":
269
+ return self.blob_service.get_container_client(self.container_name)
270
+
271
+ def _persist_tar(self, file_key: Text, tar_path: Text) -> None:
272
+ """Uploads a model persisted in the `target_dir` to Azure."""
273
+ with open(tar_path, "rb") as data:
274
+ self._container_client().upload_blob(name=file_key, data=data)
275
+
276
+ def _retrieve_tar(self, target_filename: Text) -> None:
277
+ """Downloads a model that has previously been persisted to Azure."""
278
+ blob_client = self._container_client().get_blob_client(target_filename)
279
+
280
+ with open(target_filename, "wb") as blob:
281
+ download_stream = blob_client.download_blob()
282
+ blob.write(download_stream.readall())
rasa/nlu/run.py ADDED
@@ -0,0 +1,27 @@
1
+ import asyncio
2
+ import logging
3
+ from typing import Text
4
+
5
+ from rasa.core.agent import Agent
6
+ from rasa.shared.utils.cli import print_info, print_success
7
+ from rasa.shared.utils.io import json_to_string
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ def run_cmdline(model_path: Text) -> None:
13
+ """Loops over CLI input, passing each message to a loaded NLU model."""
14
+ agent = Agent.load(model_path)
15
+
16
+ print_success("NLU model loaded. Type a message and press enter to parse it.")
17
+ while True:
18
+ print_success("Next message:")
19
+ try:
20
+ message = input().strip()
21
+ except (EOFError, KeyboardInterrupt):
22
+ print_info("Wrapping up command line chat...")
23
+ break
24
+
25
+ result = asyncio.run(agent.parse_message(message))
26
+
27
+ print(json_to_string(result))
File without changes