rasa-pro 3.8.16__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rasa-pro might be problematic. Click here for more details.

Files changed (644) hide show
  1. README.md +380 -0
  2. rasa/__init__.py +10 -0
  3. rasa/__main__.py +151 -0
  4. rasa/anonymization/__init__.py +2 -0
  5. rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
  6. rasa/anonymization/anonymization_pipeline.py +287 -0
  7. rasa/anonymization/anonymization_rule_executor.py +260 -0
  8. rasa/anonymization/anonymization_rule_orchestrator.py +120 -0
  9. rasa/anonymization/schemas/config.yml +47 -0
  10. rasa/anonymization/utils.py +117 -0
  11. rasa/api.py +146 -0
  12. rasa/cli/__init__.py +5 -0
  13. rasa/cli/arguments/__init__.py +0 -0
  14. rasa/cli/arguments/data.py +81 -0
  15. rasa/cli/arguments/default_arguments.py +165 -0
  16. rasa/cli/arguments/evaluate.py +65 -0
  17. rasa/cli/arguments/export.py +51 -0
  18. rasa/cli/arguments/interactive.py +74 -0
  19. rasa/cli/arguments/run.py +204 -0
  20. rasa/cli/arguments/shell.py +13 -0
  21. rasa/cli/arguments/test.py +211 -0
  22. rasa/cli/arguments/train.py +263 -0
  23. rasa/cli/arguments/visualize.py +34 -0
  24. rasa/cli/arguments/x.py +30 -0
  25. rasa/cli/data.py +292 -0
  26. rasa/cli/e2e_test.py +566 -0
  27. rasa/cli/evaluate.py +222 -0
  28. rasa/cli/export.py +251 -0
  29. rasa/cli/inspect.py +63 -0
  30. rasa/cli/interactive.py +164 -0
  31. rasa/cli/license.py +65 -0
  32. rasa/cli/markers.py +78 -0
  33. rasa/cli/project_templates/__init__.py +0 -0
  34. rasa/cli/project_templates/calm/actions/__init__.py +0 -0
  35. rasa/cli/project_templates/calm/actions/action_template.py +27 -0
  36. rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
  37. rasa/cli/project_templates/calm/actions/db.py +57 -0
  38. rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
  39. rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
  40. rasa/cli/project_templates/calm/config.yml +12 -0
  41. rasa/cli/project_templates/calm/credentials.yml +33 -0
  42. rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
  43. rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
  44. rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
  45. rasa/cli/project_templates/calm/db/contacts.json +10 -0
  46. rasa/cli/project_templates/calm/domain/add_contact.yml +33 -0
  47. rasa/cli/project_templates/calm/domain/list_contacts.yml +14 -0
  48. rasa/cli/project_templates/calm/domain/remove_contact.yml +31 -0
  49. rasa/cli/project_templates/calm/domain/shared.yml +5 -0
  50. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
  51. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
  52. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
  53. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
  54. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
  55. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
  56. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
  57. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
  58. rasa/cli/project_templates/calm/endpoints.yml +45 -0
  59. rasa/cli/project_templates/default/actions/__init__.py +0 -0
  60. rasa/cli/project_templates/default/actions/actions.py +27 -0
  61. rasa/cli/project_templates/default/config.yml +44 -0
  62. rasa/cli/project_templates/default/credentials.yml +33 -0
  63. rasa/cli/project_templates/default/data/nlu.yml +91 -0
  64. rasa/cli/project_templates/default/data/rules.yml +13 -0
  65. rasa/cli/project_templates/default/data/stories.yml +30 -0
  66. rasa/cli/project_templates/default/domain.yml +34 -0
  67. rasa/cli/project_templates/default/endpoints.yml +42 -0
  68. rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
  69. rasa/cli/project_templates/tutorial/actions.py +22 -0
  70. rasa/cli/project_templates/tutorial/config.yml +11 -0
  71. rasa/cli/project_templates/tutorial/credentials.yml +33 -0
  72. rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
  73. rasa/cli/project_templates/tutorial/domain.yml +17 -0
  74. rasa/cli/project_templates/tutorial/endpoints.yml +45 -0
  75. rasa/cli/run.py +136 -0
  76. rasa/cli/scaffold.py +268 -0
  77. rasa/cli/shell.py +141 -0
  78. rasa/cli/studio/__init__.py +0 -0
  79. rasa/cli/studio/download.py +51 -0
  80. rasa/cli/studio/studio.py +110 -0
  81. rasa/cli/studio/train.py +59 -0
  82. rasa/cli/studio/upload.py +85 -0
  83. rasa/cli/telemetry.py +90 -0
  84. rasa/cli/test.py +280 -0
  85. rasa/cli/train.py +260 -0
  86. rasa/cli/utils.py +453 -0
  87. rasa/cli/visualize.py +40 -0
  88. rasa/cli/x.py +205 -0
  89. rasa/constants.py +37 -0
  90. rasa/core/__init__.py +17 -0
  91. rasa/core/actions/__init__.py +0 -0
  92. rasa/core/actions/action.py +1450 -0
  93. rasa/core/actions/action_clean_stack.py +59 -0
  94. rasa/core/actions/action_run_slot_rejections.py +207 -0
  95. rasa/core/actions/action_trigger_chitchat.py +31 -0
  96. rasa/core/actions/action_trigger_flow.py +109 -0
  97. rasa/core/actions/action_trigger_search.py +31 -0
  98. rasa/core/actions/constants.py +2 -0
  99. rasa/core/actions/forms.py +737 -0
  100. rasa/core/actions/loops.py +111 -0
  101. rasa/core/actions/two_stage_fallback.py +186 -0
  102. rasa/core/agent.py +557 -0
  103. rasa/core/auth_retry_tracker_store.py +122 -0
  104. rasa/core/brokers/__init__.py +0 -0
  105. rasa/core/brokers/broker.py +126 -0
  106. rasa/core/brokers/file.py +58 -0
  107. rasa/core/brokers/kafka.py +322 -0
  108. rasa/core/brokers/pika.py +387 -0
  109. rasa/core/brokers/sql.py +86 -0
  110. rasa/core/channels/__init__.py +55 -0
  111. rasa/core/channels/audiocodes.py +463 -0
  112. rasa/core/channels/botframework.py +339 -0
  113. rasa/core/channels/callback.py +85 -0
  114. rasa/core/channels/channel.py +419 -0
  115. rasa/core/channels/console.py +243 -0
  116. rasa/core/channels/development_inspector.py +93 -0
  117. rasa/core/channels/facebook.py +422 -0
  118. rasa/core/channels/hangouts.py +335 -0
  119. rasa/core/channels/inspector/.eslintrc.cjs +25 -0
  120. rasa/core/channels/inspector/.gitignore +23 -0
  121. rasa/core/channels/inspector/README.md +54 -0
  122. rasa/core/channels/inspector/assets/favicon.ico +0 -0
  123. rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
  124. rasa/core/channels/inspector/custom.d.ts +3 -0
  125. rasa/core/channels/inspector/dist/assets/arc-5623b6dc.js +1 -0
  126. rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
  127. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-685c106a.js +10 -0
  128. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-8cbed007.js +2 -0
  129. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-5889cf12.js +2 -0
  130. rasa/core/channels/inspector/dist/assets/createText-62fc7601-24c249d7.js +7 -0
  131. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-7dd06a75.js +4 -0
  132. rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-62c1e54c.js +51 -0
  133. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-ce49b86f.js +6 -0
  134. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-4067e48f.js +4 -0
  135. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-85583a23.js +1 -0
  136. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-59fe4051.js +139 -0
  137. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-47e3a43b.js +266 -0
  138. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-5a2ac0d9.js +70 -0
  139. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
  140. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
  141. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
  142. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
  143. rasa/core/channels/inspector/dist/assets/index-268a75c0.js +1040 -0
  144. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-dfb8efc4.js +1 -0
  145. rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
  146. rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-b0c470f2.js +7 -0
  147. rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
  148. rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-2edb829a.js +139 -0
  149. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
  150. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
  151. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
  152. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
  153. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
  154. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
  155. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
  156. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
  157. rasa/core/channels/inspector/dist/assets/layout-b6873d69.js +1 -0
  158. rasa/core/channels/inspector/dist/assets/line-1efc5781.js +1 -0
  159. rasa/core/channels/inspector/dist/assets/linear-661e9b94.js +1 -0
  160. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-2d2e727f.js +109 -0
  161. rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
  162. rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
  163. rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-9d3ea93d.js +35 -0
  164. rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-06a178a2.js +7 -0
  165. rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-0bfedffc.js +52 -0
  166. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-d76d0a04.js +8 -0
  167. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-37bb4341.js +122 -0
  168. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-f52f7f57.js +1 -0
  169. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-4a986a20.js +1 -0
  170. rasa/core/channels/inspector/dist/assets/styles-080da4f6-7dd9ae12.js +110 -0
  171. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-46e1ca14.js +159 -0
  172. rasa/core/channels/inspector/dist/assets/styles-9c745c82-4a97439a.js +207 -0
  173. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-823917a3.js +1 -0
  174. rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-9ea72896.js +61 -0
  175. rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-b631a8b6.js +7 -0
  176. rasa/core/channels/inspector/dist/index.html +39 -0
  177. rasa/core/channels/inspector/index.html +37 -0
  178. rasa/core/channels/inspector/jest.config.ts +13 -0
  179. rasa/core/channels/inspector/package.json +48 -0
  180. rasa/core/channels/inspector/setupTests.ts +2 -0
  181. rasa/core/channels/inspector/src/App.tsx +170 -0
  182. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +97 -0
  183. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
  184. rasa/core/channels/inspector/src/components/DialogueStack.tsx +151 -0
  185. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
  186. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
  187. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +19 -0
  188. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
  189. rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
  190. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
  191. rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
  192. rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
  193. rasa/core/channels/inspector/src/helpers/formatters.test.ts +385 -0
  194. rasa/core/channels/inspector/src/helpers/formatters.ts +239 -0
  195. rasa/core/channels/inspector/src/helpers/utils.ts +42 -0
  196. rasa/core/channels/inspector/src/main.tsx +13 -0
  197. rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
  198. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
  199. rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
  200. rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
  201. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
  202. rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
  203. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
  204. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
  205. rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
  206. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
  207. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
  208. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
  209. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
  210. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
  211. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
  212. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
  213. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
  214. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
  215. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
  216. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
  217. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
  218. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
  219. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
  220. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
  221. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
  222. rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
  223. rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
  224. rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
  225. rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
  226. rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
  227. rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
  228. rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
  229. rasa/core/channels/inspector/src/theme/index.ts +101 -0
  230. rasa/core/channels/inspector/src/types.ts +64 -0
  231. rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
  232. rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
  233. rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
  234. rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
  235. rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
  236. rasa/core/channels/inspector/tsconfig.json +26 -0
  237. rasa/core/channels/inspector/tsconfig.node.json +10 -0
  238. rasa/core/channels/inspector/vite.config.ts +8 -0
  239. rasa/core/channels/inspector/yarn.lock +6156 -0
  240. rasa/core/channels/mattermost.py +229 -0
  241. rasa/core/channels/rasa_chat.py +126 -0
  242. rasa/core/channels/rest.py +210 -0
  243. rasa/core/channels/rocketchat.py +175 -0
  244. rasa/core/channels/slack.py +620 -0
  245. rasa/core/channels/socketio.py +274 -0
  246. rasa/core/channels/telegram.py +298 -0
  247. rasa/core/channels/twilio.py +169 -0
  248. rasa/core/channels/twilio_voice.py +367 -0
  249. rasa/core/channels/vier_cvg.py +374 -0
  250. rasa/core/channels/webexteams.py +135 -0
  251. rasa/core/concurrent_lock_store.py +210 -0
  252. rasa/core/constants.py +107 -0
  253. rasa/core/evaluation/__init__.py +0 -0
  254. rasa/core/evaluation/marker.py +267 -0
  255. rasa/core/evaluation/marker_base.py +925 -0
  256. rasa/core/evaluation/marker_stats.py +294 -0
  257. rasa/core/evaluation/marker_tracker_loader.py +103 -0
  258. rasa/core/exceptions.py +29 -0
  259. rasa/core/exporter.py +284 -0
  260. rasa/core/featurizers/__init__.py +0 -0
  261. rasa/core/featurizers/precomputation.py +410 -0
  262. rasa/core/featurizers/single_state_featurizer.py +402 -0
  263. rasa/core/featurizers/tracker_featurizers.py +1172 -0
  264. rasa/core/http_interpreter.py +89 -0
  265. rasa/core/information_retrieval/__init__.py +0 -0
  266. rasa/core/information_retrieval/faiss.py +116 -0
  267. rasa/core/information_retrieval/information_retrieval.py +72 -0
  268. rasa/core/information_retrieval/milvus.py +59 -0
  269. rasa/core/information_retrieval/qdrant.py +102 -0
  270. rasa/core/jobs.py +63 -0
  271. rasa/core/lock.py +139 -0
  272. rasa/core/lock_store.py +344 -0
  273. rasa/core/migrate.py +404 -0
  274. rasa/core/nlg/__init__.py +3 -0
  275. rasa/core/nlg/callback.py +147 -0
  276. rasa/core/nlg/contextual_response_rephraser.py +270 -0
  277. rasa/core/nlg/generator.py +230 -0
  278. rasa/core/nlg/interpolator.py +143 -0
  279. rasa/core/nlg/response.py +155 -0
  280. rasa/core/nlg/summarize.py +69 -0
  281. rasa/core/policies/__init__.py +0 -0
  282. rasa/core/policies/ensemble.py +329 -0
  283. rasa/core/policies/enterprise_search_policy.py +717 -0
  284. rasa/core/policies/enterprise_search_prompt_template.jinja2 +62 -0
  285. rasa/core/policies/flow_policy.py +205 -0
  286. rasa/core/policies/flows/__init__.py +0 -0
  287. rasa/core/policies/flows/flow_exceptions.py +44 -0
  288. rasa/core/policies/flows/flow_executor.py +582 -0
  289. rasa/core/policies/flows/flow_step_result.py +43 -0
  290. rasa/core/policies/intentless_policy.py +924 -0
  291. rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
  292. rasa/core/policies/memoization.py +538 -0
  293. rasa/core/policies/policy.py +716 -0
  294. rasa/core/policies/rule_policy.py +1276 -0
  295. rasa/core/policies/ted_policy.py +2146 -0
  296. rasa/core/policies/unexpected_intent_policy.py +1015 -0
  297. rasa/core/processor.py +1331 -0
  298. rasa/core/run.py +315 -0
  299. rasa/core/secrets_manager/__init__.py +0 -0
  300. rasa/core/secrets_manager/constants.py +32 -0
  301. rasa/core/secrets_manager/endpoints.py +391 -0
  302. rasa/core/secrets_manager/factory.py +233 -0
  303. rasa/core/secrets_manager/secret_manager.py +262 -0
  304. rasa/core/secrets_manager/vault.py +576 -0
  305. rasa/core/test.py +1337 -0
  306. rasa/core/tracker_store.py +1664 -0
  307. rasa/core/train.py +107 -0
  308. rasa/core/training/__init__.py +89 -0
  309. rasa/core/training/converters/__init__.py +0 -0
  310. rasa/core/training/converters/responses_prefix_converter.py +119 -0
  311. rasa/core/training/interactive.py +1742 -0
  312. rasa/core/training/story_conflict.py +381 -0
  313. rasa/core/training/training.py +93 -0
  314. rasa/core/utils.py +344 -0
  315. rasa/core/visualize.py +70 -0
  316. rasa/dialogue_understanding/__init__.py +0 -0
  317. rasa/dialogue_understanding/coexistence/__init__.py +0 -0
  318. rasa/dialogue_understanding/coexistence/constants.py +4 -0
  319. rasa/dialogue_understanding/coexistence/intent_based_router.py +189 -0
  320. rasa/dialogue_understanding/coexistence/llm_based_router.py +261 -0
  321. rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
  322. rasa/dialogue_understanding/commands/__init__.py +45 -0
  323. rasa/dialogue_understanding/commands/can_not_handle_command.py +61 -0
  324. rasa/dialogue_understanding/commands/cancel_flow_command.py +116 -0
  325. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +48 -0
  326. rasa/dialogue_understanding/commands/clarify_command.py +77 -0
  327. rasa/dialogue_understanding/commands/command.py +85 -0
  328. rasa/dialogue_understanding/commands/correct_slots_command.py +288 -0
  329. rasa/dialogue_understanding/commands/error_command.py +67 -0
  330. rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
  331. rasa/dialogue_understanding/commands/handle_code_change_command.py +64 -0
  332. rasa/dialogue_understanding/commands/human_handoff_command.py +57 -0
  333. rasa/dialogue_understanding/commands/knowledge_answer_command.py +48 -0
  334. rasa/dialogue_understanding/commands/noop_command.py +45 -0
  335. rasa/dialogue_understanding/commands/set_slot_command.py +125 -0
  336. rasa/dialogue_understanding/commands/skip_question_command.py +66 -0
  337. rasa/dialogue_understanding/commands/start_flow_command.py +98 -0
  338. rasa/dialogue_understanding/generator/__init__.py +6 -0
  339. rasa/dialogue_understanding/generator/command_generator.py +257 -0
  340. rasa/dialogue_understanding/generator/command_prompt_template.jinja2 +57 -0
  341. rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
  342. rasa/dialogue_understanding/generator/flow_retrieval.py +410 -0
  343. rasa/dialogue_understanding/generator/llm_command_generator.py +637 -0
  344. rasa/dialogue_understanding/generator/nlu_command_adapter.py +157 -0
  345. rasa/dialogue_understanding/patterns/__init__.py +0 -0
  346. rasa/dialogue_understanding/patterns/cancel.py +111 -0
  347. rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
  348. rasa/dialogue_understanding/patterns/chitchat.py +37 -0
  349. rasa/dialogue_understanding/patterns/clarify.py +97 -0
  350. rasa/dialogue_understanding/patterns/code_change.py +41 -0
  351. rasa/dialogue_understanding/patterns/collect_information.py +90 -0
  352. rasa/dialogue_understanding/patterns/completed.py +40 -0
  353. rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
  354. rasa/dialogue_understanding/patterns/correction.py +278 -0
  355. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +243 -0
  356. rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
  357. rasa/dialogue_understanding/patterns/internal_error.py +47 -0
  358. rasa/dialogue_understanding/patterns/search.py +37 -0
  359. rasa/dialogue_understanding/patterns/skip_question.py +38 -0
  360. rasa/dialogue_understanding/processor/__init__.py +0 -0
  361. rasa/dialogue_understanding/processor/command_processor.py +578 -0
  362. rasa/dialogue_understanding/processor/command_processor_component.py +39 -0
  363. rasa/dialogue_understanding/stack/__init__.py +0 -0
  364. rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
  365. rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
  366. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
  367. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
  368. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
  369. rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
  370. rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
  371. rasa/dialogue_understanding/stack/utils.py +211 -0
  372. rasa/e2e_test/__init__.py +0 -0
  373. rasa/e2e_test/constants.py +10 -0
  374. rasa/e2e_test/e2e_test_case.py +322 -0
  375. rasa/e2e_test/e2e_test_result.py +34 -0
  376. rasa/e2e_test/e2e_test_runner.py +659 -0
  377. rasa/e2e_test/e2e_test_schema.yml +67 -0
  378. rasa/engine/__init__.py +0 -0
  379. rasa/engine/caching.py +464 -0
  380. rasa/engine/constants.py +17 -0
  381. rasa/engine/exceptions.py +14 -0
  382. rasa/engine/graph.py +625 -0
  383. rasa/engine/loader.py +36 -0
  384. rasa/engine/recipes/__init__.py +0 -0
  385. rasa/engine/recipes/config_files/default_config.yml +44 -0
  386. rasa/engine/recipes/default_components.py +99 -0
  387. rasa/engine/recipes/default_recipe.py +1252 -0
  388. rasa/engine/recipes/graph_recipe.py +79 -0
  389. rasa/engine/recipes/recipe.py +93 -0
  390. rasa/engine/runner/__init__.py +0 -0
  391. rasa/engine/runner/dask.py +256 -0
  392. rasa/engine/runner/interface.py +49 -0
  393. rasa/engine/storage/__init__.py +0 -0
  394. rasa/engine/storage/local_model_storage.py +248 -0
  395. rasa/engine/storage/resource.py +110 -0
  396. rasa/engine/storage/storage.py +203 -0
  397. rasa/engine/training/__init__.py +0 -0
  398. rasa/engine/training/components.py +176 -0
  399. rasa/engine/training/fingerprinting.py +64 -0
  400. rasa/engine/training/graph_trainer.py +256 -0
  401. rasa/engine/training/hooks.py +164 -0
  402. rasa/engine/validation.py +839 -0
  403. rasa/env.py +5 -0
  404. rasa/exceptions.py +69 -0
  405. rasa/graph_components/__init__.py +0 -0
  406. rasa/graph_components/converters/__init__.py +0 -0
  407. rasa/graph_components/converters/nlu_message_converter.py +48 -0
  408. rasa/graph_components/providers/__init__.py +0 -0
  409. rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
  410. rasa/graph_components/providers/domain_provider.py +71 -0
  411. rasa/graph_components/providers/flows_provider.py +74 -0
  412. rasa/graph_components/providers/forms_provider.py +44 -0
  413. rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
  414. rasa/graph_components/providers/responses_provider.py +44 -0
  415. rasa/graph_components/providers/rule_only_provider.py +49 -0
  416. rasa/graph_components/providers/story_graph_provider.py +43 -0
  417. rasa/graph_components/providers/training_tracker_provider.py +55 -0
  418. rasa/graph_components/validators/__init__.py +0 -0
  419. rasa/graph_components/validators/default_recipe_validator.py +552 -0
  420. rasa/graph_components/validators/finetuning_validator.py +302 -0
  421. rasa/hooks.py +113 -0
  422. rasa/jupyter.py +63 -0
  423. rasa/keys +1 -0
  424. rasa/markers/__init__.py +0 -0
  425. rasa/markers/marker.py +269 -0
  426. rasa/markers/marker_base.py +828 -0
  427. rasa/markers/upload.py +74 -0
  428. rasa/markers/validate.py +21 -0
  429. rasa/model.py +118 -0
  430. rasa/model_testing.py +457 -0
  431. rasa/model_training.py +535 -0
  432. rasa/nlu/__init__.py +7 -0
  433. rasa/nlu/classifiers/__init__.py +3 -0
  434. rasa/nlu/classifiers/classifier.py +5 -0
  435. rasa/nlu/classifiers/diet_classifier.py +1874 -0
  436. rasa/nlu/classifiers/fallback_classifier.py +192 -0
  437. rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
  438. rasa/nlu/classifiers/llm_intent_classifier.py +519 -0
  439. rasa/nlu/classifiers/logistic_regression_classifier.py +240 -0
  440. rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
  441. rasa/nlu/classifiers/regex_message_handler.py +56 -0
  442. rasa/nlu/classifiers/sklearn_intent_classifier.py +309 -0
  443. rasa/nlu/constants.py +77 -0
  444. rasa/nlu/convert.py +40 -0
  445. rasa/nlu/emulators/__init__.py +0 -0
  446. rasa/nlu/emulators/dialogflow.py +55 -0
  447. rasa/nlu/emulators/emulator.py +49 -0
  448. rasa/nlu/emulators/luis.py +86 -0
  449. rasa/nlu/emulators/no_emulator.py +10 -0
  450. rasa/nlu/emulators/wit.py +56 -0
  451. rasa/nlu/extractors/__init__.py +0 -0
  452. rasa/nlu/extractors/crf_entity_extractor.py +672 -0
  453. rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
  454. rasa/nlu/extractors/entity_synonyms.py +178 -0
  455. rasa/nlu/extractors/extractor.py +470 -0
  456. rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
  457. rasa/nlu/extractors/regex_entity_extractor.py +220 -0
  458. rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
  459. rasa/nlu/featurizers/__init__.py +0 -0
  460. rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
  461. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +449 -0
  462. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
  463. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +772 -0
  464. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
  465. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
  466. rasa/nlu/featurizers/featurizer.py +89 -0
  467. rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
  468. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +840 -0
  469. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +539 -0
  470. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +269 -0
  471. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
  472. rasa/nlu/model.py +24 -0
  473. rasa/nlu/persistor.py +240 -0
  474. rasa/nlu/run.py +27 -0
  475. rasa/nlu/selectors/__init__.py +0 -0
  476. rasa/nlu/selectors/response_selector.py +990 -0
  477. rasa/nlu/test.py +1943 -0
  478. rasa/nlu/tokenizers/__init__.py +0 -0
  479. rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
  480. rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
  481. rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
  482. rasa/nlu/tokenizers/tokenizer.py +239 -0
  483. rasa/nlu/tokenizers/whitespace_tokenizer.py +106 -0
  484. rasa/nlu/utils/__init__.py +35 -0
  485. rasa/nlu/utils/bilou_utils.py +462 -0
  486. rasa/nlu/utils/hugging_face/__init__.py +0 -0
  487. rasa/nlu/utils/hugging_face/registry.py +108 -0
  488. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
  489. rasa/nlu/utils/mitie_utils.py +113 -0
  490. rasa/nlu/utils/pattern_utils.py +168 -0
  491. rasa/nlu/utils/spacy_utils.py +312 -0
  492. rasa/plugin.py +90 -0
  493. rasa/server.py +1536 -0
  494. rasa/shared/__init__.py +0 -0
  495. rasa/shared/constants.py +181 -0
  496. rasa/shared/core/__init__.py +0 -0
  497. rasa/shared/core/constants.py +168 -0
  498. rasa/shared/core/conversation.py +46 -0
  499. rasa/shared/core/domain.py +2106 -0
  500. rasa/shared/core/events.py +2507 -0
  501. rasa/shared/core/flows/__init__.py +7 -0
  502. rasa/shared/core/flows/flow.py +353 -0
  503. rasa/shared/core/flows/flow_step.py +146 -0
  504. rasa/shared/core/flows/flow_step_links.py +319 -0
  505. rasa/shared/core/flows/flow_step_sequence.py +70 -0
  506. rasa/shared/core/flows/flows_list.py +211 -0
  507. rasa/shared/core/flows/flows_yaml_schema.json +217 -0
  508. rasa/shared/core/flows/nlu_trigger.py +117 -0
  509. rasa/shared/core/flows/steps/__init__.py +24 -0
  510. rasa/shared/core/flows/steps/action.py +51 -0
  511. rasa/shared/core/flows/steps/call.py +64 -0
  512. rasa/shared/core/flows/steps/collect.py +112 -0
  513. rasa/shared/core/flows/steps/constants.py +5 -0
  514. rasa/shared/core/flows/steps/continuation.py +36 -0
  515. rasa/shared/core/flows/steps/end.py +22 -0
  516. rasa/shared/core/flows/steps/internal.py +44 -0
  517. rasa/shared/core/flows/steps/link.py +51 -0
  518. rasa/shared/core/flows/steps/no_operation.py +48 -0
  519. rasa/shared/core/flows/steps/set_slots.py +50 -0
  520. rasa/shared/core/flows/steps/start.py +30 -0
  521. rasa/shared/core/flows/validation.py +527 -0
  522. rasa/shared/core/flows/yaml_flows_io.py +278 -0
  523. rasa/shared/core/generator.py +907 -0
  524. rasa/shared/core/slot_mappings.py +235 -0
  525. rasa/shared/core/slots.py +647 -0
  526. rasa/shared/core/trackers.py +1159 -0
  527. rasa/shared/core/training_data/__init__.py +0 -0
  528. rasa/shared/core/training_data/loading.py +90 -0
  529. rasa/shared/core/training_data/story_reader/__init__.py +0 -0
  530. rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
  531. rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
  532. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
  533. rasa/shared/core/training_data/story_writer/__init__.py +0 -0
  534. rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
  535. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +442 -0
  536. rasa/shared/core/training_data/structures.py +838 -0
  537. rasa/shared/core/training_data/visualization.html +146 -0
  538. rasa/shared/core/training_data/visualization.py +603 -0
  539. rasa/shared/data.py +192 -0
  540. rasa/shared/engine/__init__.py +0 -0
  541. rasa/shared/engine/caching.py +26 -0
  542. rasa/shared/exceptions.py +129 -0
  543. rasa/shared/importers/__init__.py +0 -0
  544. rasa/shared/importers/importer.py +705 -0
  545. rasa/shared/importers/multi_project.py +203 -0
  546. rasa/shared/importers/rasa.py +100 -0
  547. rasa/shared/importers/utils.py +34 -0
  548. rasa/shared/nlu/__init__.py +0 -0
  549. rasa/shared/nlu/constants.py +45 -0
  550. rasa/shared/nlu/interpreter.py +10 -0
  551. rasa/shared/nlu/training_data/__init__.py +0 -0
  552. rasa/shared/nlu/training_data/entities_parser.py +209 -0
  553. rasa/shared/nlu/training_data/features.py +374 -0
  554. rasa/shared/nlu/training_data/formats/__init__.py +10 -0
  555. rasa/shared/nlu/training_data/formats/dialogflow.py +162 -0
  556. rasa/shared/nlu/training_data/formats/luis.py +87 -0
  557. rasa/shared/nlu/training_data/formats/rasa.py +135 -0
  558. rasa/shared/nlu/training_data/formats/rasa_yaml.py +605 -0
  559. rasa/shared/nlu/training_data/formats/readerwriter.py +245 -0
  560. rasa/shared/nlu/training_data/formats/wit.py +52 -0
  561. rasa/shared/nlu/training_data/loading.py +137 -0
  562. rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
  563. rasa/shared/nlu/training_data/message.py +477 -0
  564. rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
  565. rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
  566. rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
  567. rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
  568. rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
  569. rasa/shared/nlu/training_data/training_data.py +732 -0
  570. rasa/shared/nlu/training_data/util.py +223 -0
  571. rasa/shared/providers/__init__.py +0 -0
  572. rasa/shared/providers/openai/__init__.py +0 -0
  573. rasa/shared/providers/openai/clients.py +43 -0
  574. rasa/shared/providers/openai/session_handler.py +110 -0
  575. rasa/shared/utils/__init__.py +0 -0
  576. rasa/shared/utils/cli.py +72 -0
  577. rasa/shared/utils/common.py +308 -0
  578. rasa/shared/utils/constants.py +1 -0
  579. rasa/shared/utils/io.py +403 -0
  580. rasa/shared/utils/llm.py +405 -0
  581. rasa/shared/utils/pykwalify_extensions.py +26 -0
  582. rasa/shared/utils/schemas/__init__.py +0 -0
  583. rasa/shared/utils/schemas/config.yml +2 -0
  584. rasa/shared/utils/schemas/domain.yml +142 -0
  585. rasa/shared/utils/schemas/events.py +212 -0
  586. rasa/shared/utils/schemas/model_config.yml +46 -0
  587. rasa/shared/utils/schemas/stories.yml +173 -0
  588. rasa/shared/utils/yaml.py +777 -0
  589. rasa/studio/__init__.py +0 -0
  590. rasa/studio/auth.py +252 -0
  591. rasa/studio/config.py +127 -0
  592. rasa/studio/constants.py +16 -0
  593. rasa/studio/data_handler.py +352 -0
  594. rasa/studio/download.py +350 -0
  595. rasa/studio/train.py +136 -0
  596. rasa/studio/upload.py +408 -0
  597. rasa/telemetry.py +1583 -0
  598. rasa/tracing/__init__.py +0 -0
  599. rasa/tracing/config.py +338 -0
  600. rasa/tracing/constants.py +38 -0
  601. rasa/tracing/instrumentation/__init__.py +0 -0
  602. rasa/tracing/instrumentation/attribute_extractors.py +663 -0
  603. rasa/tracing/instrumentation/instrumentation.py +939 -0
  604. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +142 -0
  605. rasa/tracing/instrumentation/metrics.py +206 -0
  606. rasa/tracing/metric_instrument_provider.py +125 -0
  607. rasa/utils/__init__.py +0 -0
  608. rasa/utils/beta.py +83 -0
  609. rasa/utils/cli.py +27 -0
  610. rasa/utils/common.py +635 -0
  611. rasa/utils/converter.py +53 -0
  612. rasa/utils/endpoints.py +303 -0
  613. rasa/utils/io.py +326 -0
  614. rasa/utils/licensing.py +319 -0
  615. rasa/utils/log_utils.py +174 -0
  616. rasa/utils/mapper.py +210 -0
  617. rasa/utils/ml_utils.py +145 -0
  618. rasa/utils/plotting.py +362 -0
  619. rasa/utils/singleton.py +23 -0
  620. rasa/utils/tensorflow/__init__.py +0 -0
  621. rasa/utils/tensorflow/callback.py +112 -0
  622. rasa/utils/tensorflow/constants.py +116 -0
  623. rasa/utils/tensorflow/crf.py +492 -0
  624. rasa/utils/tensorflow/data_generator.py +440 -0
  625. rasa/utils/tensorflow/environment.py +161 -0
  626. rasa/utils/tensorflow/exceptions.py +5 -0
  627. rasa/utils/tensorflow/layers.py +1565 -0
  628. rasa/utils/tensorflow/layers_utils.py +113 -0
  629. rasa/utils/tensorflow/metrics.py +281 -0
  630. rasa/utils/tensorflow/model_data.py +991 -0
  631. rasa/utils/tensorflow/model_data_utils.py +500 -0
  632. rasa/utils/tensorflow/models.py +936 -0
  633. rasa/utils/tensorflow/rasa_layers.py +1094 -0
  634. rasa/utils/tensorflow/transformer.py +640 -0
  635. rasa/utils/tensorflow/types.py +6 -0
  636. rasa/utils/train_utils.py +572 -0
  637. rasa/utils/yaml.py +54 -0
  638. rasa/validator.py +1035 -0
  639. rasa/version.py +3 -0
  640. rasa_pro-3.8.16.dist-info/METADATA +528 -0
  641. rasa_pro-3.8.16.dist-info/NOTICE +5 -0
  642. rasa_pro-3.8.16.dist-info/RECORD +644 -0
  643. rasa_pro-3.8.16.dist-info/WHEEL +4 -0
  644. rasa_pro-3.8.16.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,374 @@
1
+ from __future__ import annotations
2
+ from typing import Iterable, Union, Text, Optional, List, Any, Tuple, Dict, Set
3
+ import itertools
4
+
5
+ import numpy as np
6
+ import scipy.sparse
7
+
8
+ import rasa.shared.utils.io
9
+ import rasa.shared.nlu.training_data.util
10
+ from rasa.shared.nlu.constants import FEATURE_TYPE_SEQUENCE, FEATURE_TYPE_SENTENCE
11
+
12
+
13
+ class Features:
14
+ """Stores the features produced by any featurizer."""
15
+
16
+ def __init__(
17
+ self,
18
+ features: Union[np.ndarray, scipy.sparse.spmatrix],
19
+ feature_type: Text,
20
+ attribute: Text,
21
+ origin: Union[Text, List[Text]],
22
+ ) -> None:
23
+ """Initializes the Features object.
24
+
25
+ Args:
26
+ features: The features.
27
+ feature_type: Type of the feature, e.g. FEATURE_TYPE_SENTENCE.
28
+ attribute: Message attribute, e.g. INTENT or TEXT.
29
+ origin: Name of the component that created the features.
30
+ """
31
+ self.features = features
32
+ self.type = feature_type
33
+ self.origin = origin
34
+ self.attribute = attribute
35
+ self._cached_fingerprint: Optional[Text] = None
36
+ if not self.is_dense() and not self.is_sparse():
37
+ raise ValueError(
38
+ "Features must either be a numpy array for dense "
39
+ "features or a scipy sparse matrix for sparse features."
40
+ )
41
+
42
+ def __repr__(self) -> Text:
43
+ return (
44
+ f"{self.__class__.__name__}("
45
+ f"features={self.features}, "
46
+ f"type={self.type}, "
47
+ f"origin={self.origin}, "
48
+ f"attribute={self.attribute})"
49
+ )
50
+
51
+ def __str__(self) -> Text:
52
+ return (
53
+ f"{self.__class__.__name__}("
54
+ f"features.shape={self.features.shape}, "
55
+ f"is_sparse={self.is_sparse()}, "
56
+ f"type={self.type}, "
57
+ f"origin={self.origin}, "
58
+ f"attribute={self.attribute})"
59
+ )
60
+
61
+ def is_sparse(self) -> bool:
62
+ """Checks if features are sparse or not.
63
+
64
+ Returns:
65
+ True, if features are sparse, false otherwise.
66
+ """
67
+ return isinstance(self.features, scipy.sparse.spmatrix)
68
+
69
+ def is_dense(self) -> bool:
70
+ """Checks if features are dense or not.
71
+
72
+ Returns:
73
+ True, if features are dense, false otherwise.
74
+ """
75
+ return not self.is_sparse()
76
+
77
+ def combine_with_features(self, additional_features: Optional[Features]) -> None:
78
+ """Combine the incoming features with this instance's features.
79
+
80
+ Args:
81
+ additional_features: additional features to add
82
+
83
+ Returns:
84
+ Combined features.
85
+ """
86
+ if additional_features is None:
87
+ return
88
+
89
+ if self.is_dense() and additional_features.is_dense():
90
+ self._combine_dense_features(additional_features)
91
+ elif self.is_sparse() and additional_features.is_sparse():
92
+ self._combine_sparse_features(additional_features)
93
+ else:
94
+ raise ValueError("Cannot combine sparse and dense features.")
95
+
96
+ def _combine_dense_features(self, additional_features: Features) -> None:
97
+ if self.features.ndim != additional_features.features.ndim:
98
+ raise ValueError(
99
+ f"Cannot combine dense features as sequence dimensions do not "
100
+ f"match: {self.features.ndim} != {additional_features.features.ndim}."
101
+ )
102
+ self.features = np.concatenate(
103
+ (self.features, additional_features.features), axis=-1
104
+ )
105
+ self._cached_fingerprint = None
106
+
107
+ def _combine_sparse_features(self, additional_features: Features) -> None:
108
+ from scipy.sparse import hstack
109
+
110
+ if self.features.shape[0] != additional_features.features.shape[0]:
111
+ raise ValueError(
112
+ f"Cannot combine sparse features as sequence dimensions do not "
113
+ f"match: {self.features.shape[0]} != "
114
+ f"{additional_features.features.shape[0]}."
115
+ )
116
+
117
+ self.features = hstack([self.features, additional_features.features])
118
+ self._cached_fingerprint = None
119
+
120
+ def __key__(
121
+ self,
122
+ ) -> Tuple[
123
+ Text, Text, Union[np.ndarray, scipy.sparse.spmatrix], Union[Text, List[Text]]
124
+ ]:
125
+ """Returns a 4-tuple of defining properties.
126
+
127
+ Returns:
128
+ Tuple of type, attribute, features, and origin properties.
129
+ """
130
+ return self.type, self.attribute, self.features, self.origin
131
+
132
+ def __eq__(self, other: Any) -> bool:
133
+ """Tests if the `self` `Feature` equals to the `other`.
134
+
135
+ Args:
136
+ other: The other object.
137
+
138
+ Returns:
139
+ `True` when the other object is a `Feature` and has the same
140
+ type, attribute, and feature tensors.
141
+ """
142
+ if not isinstance(other, Features):
143
+ return False
144
+
145
+ return (
146
+ other.type == self.type
147
+ and other.attribute == self.attribute
148
+ and other.features == self.features
149
+ )
150
+
151
+ def fingerprint(self) -> Text:
152
+ """Calculate a stable string fingerprint for the features."""
153
+ if self._cached_fingerprint is None:
154
+ if self.is_dense():
155
+ f_as_text = self.features.tobytes()
156
+ else:
157
+ f_as_text = rasa.shared.nlu.training_data.util.sparse_matrix_to_string(
158
+ self.features
159
+ )
160
+ self._cached_fingerprint = rasa.shared.utils.io.deep_container_fingerprint(
161
+ [self.type, self.origin, self.attribute, f_as_text]
162
+ )
163
+ return self._cached_fingerprint
164
+
165
+ @staticmethod
166
+ def filter(
167
+ features_list: List[Features],
168
+ attributes: Optional[Iterable[Text]] = None,
169
+ type: Optional[Text] = None,
170
+ origin: Optional[List[Text]] = None,
171
+ is_sparse: Optional[bool] = None,
172
+ ) -> List[Features]:
173
+ """Filters the given list of features.
174
+
175
+ Args:
176
+ features_list: list of features to be filtered
177
+ attributes: List of attributes that we're interested in. Set this to `None`
178
+ to disable this filter.
179
+ type: The type of feature we're interested in. Set this to `None`
180
+ to disable this filter.
181
+ origin: If specified, this method will check that the exact order of origins
182
+ matches the given list of origins. The reason for this is that if
183
+ multiple origins are listed for a Feature, this means that this feature
184
+ has been created by concatenating Features from the listed origins in
185
+ that particular order.
186
+ is_sparse: Defines whether all features that we're interested in should be
187
+ sparse. Set this to `None` to disable this filter.
188
+
189
+ Returns:
190
+ sub-list of features with the desired properties
191
+ """
192
+ filtered = features_list
193
+ if attributes is not None:
194
+ attributes = set(attributes)
195
+ filtered = [f for f in filtered if f.attribute in attributes]
196
+ if origin is not None:
197
+ filtered = [
198
+ f
199
+ for f in filtered
200
+ if (f.origin if not isinstance(f.origin, Text) else list([f.origin]))
201
+ == origin
202
+ ]
203
+ if type is not None:
204
+ filtered = [f for f in filtered if f.type == type]
205
+ if is_sparse is not None:
206
+ filtered = [f for f in filtered if f.is_sparse() == is_sparse]
207
+ return filtered
208
+
209
+ @staticmethod
210
+ def groupby_attribute(
211
+ features_list: List[Features], attributes: Optional[Iterable[Text]] = None
212
+ ) -> Dict[Text, List[Features]]:
213
+ """Groups the given features according to their attribute.
214
+
215
+ Args:
216
+ features_list: list of features to be grouped
217
+ attributes: If specified, the result will be a grouping with respect to
218
+ the given attributes. If some specified attribute has no features attached
219
+ to it, then the resulting dictionary will map it to an empty list.
220
+ If this is None, the result will be a grouping according to all attributes
221
+ for which features can be found.
222
+
223
+ Returns:
224
+ a mapping from the requested attributes to the list of correspoding
225
+ features
226
+ """
227
+ # ensure all requested attributes are present in the output - regardless
228
+ # of whether we find features later
229
+ extracted: Dict[Text, List[Features]] = (
230
+ dict()
231
+ if attributes is None
232
+ else {attribute: [] for attribute in attributes}
233
+ )
234
+ # extract features for all (requested) attributes
235
+ for feat in features_list:
236
+ if attributes is None or feat.attribute in attributes:
237
+ extracted.setdefault(feat.attribute, []).append(feat)
238
+ return extracted
239
+
240
+ @staticmethod
241
+ def combine(
242
+ features_list: List[Features], expected_origins: Optional[List[Text]] = None
243
+ ) -> Features:
244
+ """Combine features of the same type and level that describe the same attribute.
245
+
246
+ If sequence features are to be combined, then they must have the same
247
+ sequence dimension.
248
+
249
+ Args:
250
+ features: Non-empty list of Features of the same type and level that
251
+ describe the same attribute.
252
+ expected_origins: The expected origins of the given features. This method
253
+ will check that the origin information of each feature is as expected, i.e.
254
+ the origin of the i-th feature in the given list is the i-th origin
255
+ in this list of origins.
256
+
257
+ Raises:
258
+ `ValueError` will be raised
259
+ - if the given list is empty
260
+ - if there are inconsistencies in the given list of `Features`
261
+ - if the origins aren't as expected
262
+ """
263
+ if len(features_list) == 0:
264
+ raise ValueError("Expected a non-empty list of Features.")
265
+ if len(features_list) == 1:
266
+ # nothing to combine here
267
+ return features_list[0]
268
+
269
+ # Un-Pack the Origin information
270
+ origin_of_combination = [f.origin for f in features_list]
271
+ origin_of_combination = [
272
+ featurizer_name
273
+ for origin in origin_of_combination
274
+ for featurizer_name in (origin if isinstance(origin, List) else [origin])
275
+ ]
276
+
277
+ # Sanity Checks
278
+ # (1) origins must be as expected
279
+ if expected_origins is not None:
280
+ if origin_of_combination is not None:
281
+ for idx, (expected, actual) in enumerate(
282
+ itertools.zip_longest(expected_origins, origin_of_combination)
283
+ ):
284
+ if expected != actual:
285
+ raise ValueError(
286
+ f"Expected '{expected}' to be the origin of the {idx}-th "
287
+ f"feature (because of `origin_of_combination`) but found a "
288
+ f"feature from '{actual}'."
289
+ )
290
+ # (2) attributes (is_sparse, type, attribute) must coincide
291
+ # Note: we could also use `filter` for this check, but then the error msgs
292
+ # aren't as nice.
293
+ sparseness: Set[bool] = set(f.is_sparse() for f in features_list)
294
+ if len(sparseness) > 1:
295
+ raise ValueError(
296
+ "Expected all Features to have the same sparseness property but "
297
+ "found both (sparse and dense)."
298
+ )
299
+ types: Set[Text] = set(f.type for f in features_list)
300
+ if len(types) > 1:
301
+ raise ValueError(
302
+ f"Expected all Features to have the same type but found the "
303
+ f"following types {types}."
304
+ )
305
+ attributes: Set[Text] = set(f.attribute for f in features_list)
306
+ if len(attributes) > 1:
307
+ raise ValueError(
308
+ f"Expected all Features to describe the same attribute but found "
309
+ f"attributes: {attributes}."
310
+ )
311
+ # (3) dimensions must match
312
+ # Note: We shouldn't have to check sentence-level features here but it doesn't
313
+ # hurt either.
314
+ dimensions = set(f.features.shape[0] for f in features_list)
315
+ if len(dimensions) > 1:
316
+ raise ValueError(
317
+ f"Expected all sequence dimensions to match but found {dimensions}."
318
+ )
319
+
320
+ # Combine the features
321
+ arbitrary_feature = features_list[0]
322
+ if not arbitrary_feature.is_sparse():
323
+ features = np.concatenate([f.features for f in features_list], axis=-1)
324
+ else:
325
+ features = scipy.sparse.hstack([f.features for f in features_list])
326
+ return Features(
327
+ features=features,
328
+ feature_type=arbitrary_feature.type,
329
+ attribute=arbitrary_feature.attribute,
330
+ origin=origin_of_combination,
331
+ )
332
+
333
+ @staticmethod
334
+ def reduce(
335
+ features_list: List[Features], expected_origins: Optional[List[Text]] = None
336
+ ) -> List[Features]:
337
+ """Combines features of same type and level into one Feature.
338
+
339
+ Args:
340
+ features_list: list of Features which must all describe the same attribute
341
+ expected_origins: if specified, this list will be used to validate that
342
+ the features from the right featurizers are combined in the right order
343
+ (cf. `Features.combine`)
344
+
345
+ Returns:
346
+ a list of the combined Features, i.e. at most 4 Features, where
347
+ - all the sparse features are listed before the dense features
348
+ - sequence feature is always listed before the sentence feature with the
349
+ same sparseness property
350
+ """
351
+ if len(features_list) == 1:
352
+ return features_list
353
+ # sanity check
354
+ different_settings = set(f.attribute for f in features_list)
355
+ if len(different_settings) > 1:
356
+ raise ValueError(
357
+ f"Expected all Features to describe the same attribute but found "
358
+ f" {different_settings}."
359
+ )
360
+ output = []
361
+ for is_sparse in [True, False]:
362
+ # all sparse features before all dense features
363
+ for type in [FEATURE_TYPE_SEQUENCE, FEATURE_TYPE_SENTENCE]:
364
+ # sequence feature that is (not) sparse before sentence feature that is
365
+ # (not) sparse
366
+ sublist = Features.filter(
367
+ features_list=features_list, type=type, is_sparse=is_sparse
368
+ )
369
+ if sublist:
370
+ combined_feature = Features.combine(
371
+ sublist, expected_origins=expected_origins
372
+ )
373
+ output.append(combined_feature)
374
+ return output
@@ -0,0 +1,10 @@
1
+ from rasa.shared.nlu.training_data.formats.rasa_yaml import RasaYAMLReader # noqa: F401
2
+ from rasa.shared.nlu.training_data.formats.dialogflow import ( # noqa: F401
3
+ DialogflowReader,
4
+ )
5
+ from rasa.shared.nlu.training_data.formats.luis import LuisReader # noqa: F401
6
+ from rasa.shared.nlu.training_data.formats.rasa import ( # noqa: F401
7
+ RasaReader,
8
+ RasaWriter,
9
+ )
10
+ from rasa.shared.nlu.training_data.formats.wit import WitReader # noqa: F401
@@ -0,0 +1,162 @@
1
+ import logging
2
+ import os
3
+ from pathlib import Path
4
+ from typing import Any, Dict, Optional, Text, List, Tuple, Union
5
+
6
+ import rasa.shared.nlu.training_data.util
7
+ from rasa.shared.constants import DOCS_BASE_URL
8
+ from rasa.shared.nlu.training_data.formats.readerwriter import TrainingDataReader
9
+ from rasa.shared.nlu.training_data.util import transform_entity_synonyms
10
+ import rasa.shared.utils.io
11
+
12
+ from rasa.shared.nlu.training_data.training_data import TrainingData
13
+ from rasa.shared.nlu.training_data.message import Message
14
+
15
+ logger = logging.getLogger(__name__)
16
+
17
+ DOCS_URL_MIGRATE_GOOGLE = DOCS_BASE_URL + "/migrate-from/google-dialogflow-to-rasa/"
18
+
19
+ DIALOGFLOW_PACKAGE = "dialogflow_package"
20
+ DIALOGFLOW_AGENT = "dialogflow_agent"
21
+ DIALOGFLOW_INTENT = "dialogflow_intent"
22
+ DIALOGFLOW_INTENT_EXAMPLES = "dialogflow_intent_examples"
23
+ DIALOGFLOW_ENTITIES = "dialogflow_entities"
24
+ DIALOGFLOW_ENTITY_ENTRIES = "dialogflow_entity_entries"
25
+
26
+
27
+ class DialogflowReader(TrainingDataReader):
28
+ """Reader for NLU training data."""
29
+
30
+ def read(self, filename: Union[Text, Path], **kwargs: Any) -> "TrainingData":
31
+ """Loads training data stored in the Dialogflow data format."""
32
+ language = kwargs["language"]
33
+ fformat = kwargs["fformat"]
34
+
35
+ if fformat not in {DIALOGFLOW_INTENT, DIALOGFLOW_ENTITIES}:
36
+ raise ValueError(
37
+ "fformat must be either {}, or {}"
38
+ "".format(DIALOGFLOW_INTENT, DIALOGFLOW_ENTITIES)
39
+ )
40
+
41
+ root_js = rasa.shared.utils.io.read_json_file(filename)
42
+
43
+ if isinstance(filename, Path):
44
+ filename = str(filename)
45
+
46
+ examples = self._read_examples(filename, language, fformat)
47
+
48
+ if not examples:
49
+ rasa.shared.utils.io.raise_warning(
50
+ f"No training examples found for dialogflow file {filename}!",
51
+ docs=DOCS_URL_MIGRATE_GOOGLE,
52
+ )
53
+ return TrainingData()
54
+ elif fformat == DIALOGFLOW_INTENT:
55
+ return self._read_intent(root_js, examples)
56
+ else: # path for DIALOGFLOW_ENTITIES
57
+ return self._read_entities(root_js, examples)
58
+
59
+ def _read_intent(
60
+ self, intent: Dict[Text, Any], examples: List[Dict[Text, Any]]
61
+ ) -> "TrainingData":
62
+ """Reads the intent and examples from respective jsons."""
63
+ intent_name = intent.get("name")
64
+
65
+ training_examples = []
66
+ for ex in examples:
67
+ text, entities = self._join_text_chunks(ex["data"])
68
+ training_examples.append(Message.build(text, intent_name, entities))
69
+
70
+ return TrainingData(training_examples)
71
+
72
+ def _join_text_chunks(
73
+ self, chunks: List[Dict[Text, Any]]
74
+ ) -> Tuple[Text, List[Dict[Text, Any]]]:
75
+ """Combines text chunks and extracts entities."""
76
+ utterance = ""
77
+ entities = []
78
+ for chunk in chunks:
79
+ entity = self._extract_entity(chunk, len(utterance))
80
+ if entity:
81
+ entities.append(entity)
82
+ utterance += chunk["text"]
83
+
84
+ return utterance, entities
85
+
86
+ @staticmethod
87
+ def _extract_entity(
88
+ chunk: Dict[Text, Any], current_offset: int
89
+ ) -> Optional[Dict[Text, Any]]:
90
+ """Extract an entity from a chunk if present."""
91
+ entity = None
92
+ if "meta" in chunk or "alias" in chunk:
93
+ start = current_offset
94
+ text = chunk["text"]
95
+ end = start + len(text)
96
+ entity_type = chunk.get("alias", chunk["meta"])
97
+ if entity_type != "@sys.ignore":
98
+ entity = rasa.shared.nlu.training_data.util.build_entity(
99
+ start, end, text, entity_type
100
+ )
101
+
102
+ return entity
103
+
104
+ @staticmethod
105
+ def _flatten(list_of_lists: List[List[Any]]) -> List[Any]:
106
+ return [item for items in list_of_lists for item in items]
107
+
108
+ @staticmethod
109
+ def _extract_lookup_tables(
110
+ entity: Dict[Text, Any], examples: List[Dict[Text, Any]]
111
+ ) -> Optional[List[Dict[Text, Any]]]:
112
+ """Extracts the lookup table from the entity synonyms."""
113
+ synonyms = [e["synonyms"] for e in examples if "synonyms" in e]
114
+ synonyms = DialogflowReader._flatten(synonyms)
115
+ elements = [synonym for synonym in synonyms if "@" not in synonym]
116
+
117
+ if len(elements) == 0:
118
+ return None
119
+ return [{"name": entity.get("name"), "elements": elements}]
120
+
121
+ @staticmethod
122
+ def _extract_regex_features(
123
+ entity: Dict[Text, Any], examples: List[Dict[Text, Any]]
124
+ ) -> List[Dict[Text, Any]]:
125
+ """Extract the regex features from the entity synonyms."""
126
+ synonyms = [e["synonyms"] for e in examples if "synonyms" in e]
127
+ synonyms = DialogflowReader._flatten(synonyms)
128
+ return [
129
+ {"name": entity.get("name"), "pattern": synonym} for synonym in synonyms
130
+ ]
131
+
132
+ @staticmethod
133
+ def _read_entities(
134
+ entity: Dict[Text, Any], examples: List[Dict[Text, Any]]
135
+ ) -> "TrainingData":
136
+ entity_synonyms = transform_entity_synonyms(examples)
137
+
138
+ if entity["isRegexp"]:
139
+ regex_features = DialogflowReader._extract_regex_features(entity, examples)
140
+ return TrainingData([], entity_synonyms, regex_features, [])
141
+ else:
142
+ lookup_tables = DialogflowReader._extract_lookup_tables(entity, examples)
143
+ return TrainingData([], entity_synonyms, [], lookup_tables)
144
+
145
+ @staticmethod
146
+ def _read_examples(
147
+ fn: Text, language: Text, fformat: Text
148
+ ) -> Optional[List[Dict[Text, Any]]]:
149
+ """Infer and load example file based on root filename and root format."""
150
+ if fformat == DIALOGFLOW_INTENT:
151
+ examples_type = "usersays"
152
+ else:
153
+ examples_type = "entries"
154
+ examples_fn_ending = f"_{examples_type}_{language}.json"
155
+ examples_fn = fn.replace(".json", examples_fn_ending)
156
+ if os.path.isfile(examples_fn):
157
+ return rasa.shared.utils.io.read_json_file(examples_fn)
158
+ else:
159
+ return None
160
+
161
+ def reads(self, s: Text, **kwargs: Any) -> "TrainingData":
162
+ raise NotImplementedError
@@ -0,0 +1,87 @@
1
+ import logging
2
+ from typing import Any, Dict, List, Text
3
+
4
+ from rasa.shared.nlu.constants import (
5
+ TEXT,
6
+ INTENT,
7
+ ENTITIES,
8
+ ENTITY_ATTRIBUTE_TYPE,
9
+ ENTITY_ATTRIBUTE_ROLE,
10
+ ENTITY_ATTRIBUTE_VALUE,
11
+ ENTITY_ATTRIBUTE_START,
12
+ ENTITY_ATTRIBUTE_END,
13
+ NO_ENTITY_TAG,
14
+ )
15
+ from rasa.shared.nlu.training_data.formats.readerwriter import JsonTrainingDataReader
16
+ import rasa.shared.utils.io
17
+
18
+ from rasa.shared.nlu.training_data.training_data import TrainingData
19
+ from rasa.shared.nlu.training_data.message import Message
20
+
21
+ logger = logging.getLogger(__name__)
22
+
23
+
24
+ class LuisReader(JsonTrainingDataReader):
25
+ """Reads LUIS training data."""
26
+
27
+ @staticmethod
28
+ def _extract_regex_features(js: Dict[Text, Any]) -> List[Dict[Text, Any]]:
29
+ regex_features: List[Dict[Text, Any]] = []
30
+
31
+ for r in js.get("regex_features", []):
32
+ if r.get("activated", False):
33
+ regex_features.append(
34
+ {"name": r.get("name"), "pattern": r.get("pattern")}
35
+ )
36
+
37
+ # LUIS removed `regex_features` and exports regular expressions in `
38
+ # regex_entities` now:
39
+ # https://stackoverflow.com/questions/48170631/what-happened-to-the-regex-features # noqa: E501
40
+ for r in js.get("regex_entities", []):
41
+ regex_features.append(
42
+ {"name": r.get("name"), "pattern": r.get("regexPattern")}
43
+ )
44
+
45
+ return regex_features
46
+
47
+ def read_from_json(self, js: Dict[Text, Any], **kwargs: Any) -> "TrainingData":
48
+ """Loads training data stored in the LUIS.ai data format."""
49
+ training_examples = []
50
+
51
+ max_tested_luis_schema_version = 7
52
+ major_version = int(js["luis_schema_version"].split(".")[0])
53
+ if major_version > max_tested_luis_schema_version:
54
+ rasa.shared.utils.io.raise_warning(
55
+ f"Your luis data schema version {js['luis_schema_version']} "
56
+ f"is higher than 7.x.x. "
57
+ f"Training may not be performed correctly. "
58
+ )
59
+
60
+ for s in js["utterances"]:
61
+ text = s.get("text")
62
+ intent = s.get("intent")
63
+ entities = []
64
+ for e in s.get("entities") or []:
65
+ start, end = e["startPos"], e["endPos"] + 1
66
+ val = text[start:end]
67
+
68
+ entities.append(
69
+ {
70
+ ENTITY_ATTRIBUTE_TYPE: e.get("entity"),
71
+ ENTITY_ATTRIBUTE_VALUE: val,
72
+ ENTITY_ATTRIBUTE_START: start,
73
+ ENTITY_ATTRIBUTE_END: end,
74
+ ENTITY_ATTRIBUTE_ROLE: e.get("role", NO_ENTITY_TAG),
75
+ }
76
+ )
77
+
78
+ data = {ENTITIES: entities}
79
+ if intent:
80
+ data[INTENT] = intent
81
+ data[TEXT] = text
82
+
83
+ training_examples.append(Message(data=data))
84
+
85
+ return TrainingData(
86
+ training_examples, regex_features=self._extract_regex_features(js)
87
+ )