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,605 @@
1
+ import logging
2
+ from collections import OrderedDict
3
+ from pathlib import Path
4
+ from typing import Text, Any, List, Dict, Tuple, Union, Iterator, Optional, Callable
5
+
6
+ import rasa.shared.data
7
+ from rasa.shared.core.domain import Domain
8
+ from rasa.shared.exceptions import YamlException
9
+ from ruamel.yaml import StringIO
10
+ from ruamel.yaml.scalarstring import LiteralScalarString
11
+
12
+ from rasa.shared.constants import (
13
+ DOCS_URL_TRAINING_DATA,
14
+ LATEST_TRAINING_DATA_FORMAT_VERSION,
15
+ )
16
+ from rasa.shared.nlu.constants import METADATA_INTENT, METADATA_EXAMPLE
17
+ from rasa.shared.nlu.training_data.formats.readerwriter import (
18
+ TrainingDataReader,
19
+ TrainingDataWriter,
20
+ )
21
+ import rasa.shared.utils.io
22
+ import rasa.shared.nlu.training_data.util
23
+ from rasa.shared.nlu.training_data.training_data import TrainingData
24
+ from rasa.shared.nlu.training_data.message import Message
25
+ from rasa.shared.utils.yaml import (
26
+ validate_raw_yaml_using_schema_file_with_responses,
27
+ validate_training_data_format_version,
28
+ read_yaml,
29
+ is_key_in_yaml,
30
+ write_yaml,
31
+ )
32
+
33
+ logger = logging.getLogger(__name__)
34
+
35
+ KEY_NLU = "nlu"
36
+ KEY_RESPONSES = "responses"
37
+ KEY_INTENT = "intent"
38
+ KEY_INTENT_EXAMPLES = "examples"
39
+ KEY_INTENT_TEXT = "text"
40
+ KEY_SYNONYM = "synonym"
41
+ KEY_SYNONYM_EXAMPLES = "examples"
42
+ KEY_REGEX = "regex"
43
+ KEY_REGEX_EXAMPLES = "examples"
44
+ KEY_LOOKUP = "lookup"
45
+ KEY_LOOKUP_EXAMPLES = "examples"
46
+ KEY_METADATA = "metadata"
47
+
48
+ MULTILINE_TRAINING_EXAMPLE_LEADING_SYMBOL = "-"
49
+
50
+ NLU_SCHEMA_FILE = "shared/nlu/training_data/schemas/nlu.yml"
51
+
52
+ STRIP_SYMBOLS = "\n\r "
53
+
54
+
55
+ class RasaYAMLReader(TrainingDataReader):
56
+ """Reads YAML training data and creates a TrainingData object."""
57
+
58
+ def __init__(self) -> None:
59
+ super().__init__()
60
+ self.training_examples: List[Message] = []
61
+ self.entity_synonyms: Dict[Text, Text] = {}
62
+ self.regex_features: List[Dict[Text, Text]] = []
63
+ self.lookup_tables: List[Dict[Text, Any]] = []
64
+ self.responses: Dict[Text, List[Dict[Text, Any]]] = {}
65
+
66
+ def validate(self, string: Text) -> None:
67
+ """Check if the string adheres to the NLU yaml data schema.
68
+
69
+ If the string is not in the right format, an exception will be raised.
70
+ """
71
+ try:
72
+ validate_raw_yaml_using_schema_file_with_responses(string, NLU_SCHEMA_FILE)
73
+ except YamlException as e:
74
+ e.filename = self.filename
75
+ raise e
76
+
77
+ def reads( # type: ignore[override]
78
+ self, string: Text, **kwargs: Any
79
+ ) -> "TrainingData":
80
+ """Reads TrainingData in YAML format from a string.
81
+
82
+ Args:
83
+ string: String with YAML training data.
84
+ **kwargs: Keyword arguments.
85
+
86
+ Returns:
87
+ New `TrainingData` object with parsed training data.
88
+ """
89
+ self.validate(string)
90
+
91
+ yaml_content = read_yaml(string)
92
+
93
+ if not validate_training_data_format_version(yaml_content, self.filename):
94
+ return TrainingData()
95
+
96
+ for key, value in yaml_content.items():
97
+ if key == KEY_NLU:
98
+ self._parse_nlu(value)
99
+ elif key == KEY_RESPONSES:
100
+ self.responses = value
101
+
102
+ return TrainingData(
103
+ self.training_examples,
104
+ self.entity_synonyms,
105
+ self.regex_features,
106
+ self.lookup_tables,
107
+ self.responses,
108
+ )
109
+
110
+ def _parse_nlu(self, nlu_data: Optional[List[Dict[Text, Any]]]) -> None:
111
+
112
+ if not nlu_data:
113
+ return
114
+
115
+ for nlu_item in nlu_data:
116
+ if not isinstance(nlu_item, dict):
117
+ rasa.shared.utils.io.raise_warning(
118
+ f"Unexpected block found in '{self.filename}':\n"
119
+ f"{nlu_item}\n"
120
+ f"Items under the '{KEY_NLU}' key must be YAML dictionaries. "
121
+ f"This block will be skipped.",
122
+ docs=DOCS_URL_TRAINING_DATA,
123
+ )
124
+ continue
125
+
126
+ if KEY_INTENT in nlu_item.keys():
127
+ self._parse_intent(nlu_item)
128
+ elif KEY_SYNONYM in nlu_item.keys():
129
+ self._parse_synonym(nlu_item)
130
+ elif KEY_REGEX in nlu_item.keys():
131
+ self._parse_regex(nlu_item)
132
+ elif KEY_LOOKUP in nlu_item.keys():
133
+ self._parse_lookup(nlu_item)
134
+ else:
135
+ rasa.shared.utils.io.raise_warning(
136
+ f"Issue found while processing '{self.filename}': "
137
+ f"Could not find supported key in the section:\n"
138
+ f"{nlu_item}\n"
139
+ f"Supported keys are: '{KEY_INTENT}', '{KEY_SYNONYM}', "
140
+ f"'{KEY_REGEX}', '{KEY_LOOKUP}'. "
141
+ f"This section will be skipped.",
142
+ docs=DOCS_URL_TRAINING_DATA,
143
+ )
144
+
145
+ def _parse_intent(self, intent_data: Dict[Text, Any]) -> None:
146
+ import rasa.shared.nlu.training_data.entities_parser as entities_parser
147
+ import rasa.shared.nlu.training_data.synonyms_parser as synonyms_parser
148
+
149
+ intent = intent_data.get(KEY_INTENT, "")
150
+ if not intent:
151
+ rasa.shared.utils.io.raise_warning(
152
+ f"Issue found while processing '{self.filename}': "
153
+ f"The intent has an empty name. "
154
+ f"Intents should have a name defined under the {KEY_INTENT} key. "
155
+ f"It will be skipped.",
156
+ docs=DOCS_URL_TRAINING_DATA,
157
+ )
158
+ return
159
+
160
+ examples = intent_data.get(KEY_INTENT_EXAMPLES, "")
161
+ intent_metadata = intent_data.get(KEY_METADATA)
162
+ for example, entities, metadata in self._parse_training_examples(
163
+ examples, intent
164
+ ):
165
+
166
+ plain_text = entities_parser.replace_entities(example)
167
+
168
+ synonyms_parser.add_synonyms_from_entities(
169
+ plain_text, entities, self.entity_synonyms
170
+ )
171
+
172
+ self.training_examples.append(
173
+ Message.build(plain_text, intent, entities, intent_metadata, metadata)
174
+ )
175
+
176
+ def _parse_training_examples(
177
+ self, examples: Union[Text, List[Dict[Text, Any]]], intent: Text
178
+ ) -> List[Tuple[Text, List[Dict[Text, Any]], Optional[Any]]]:
179
+ import rasa.shared.nlu.training_data.entities_parser as entities_parser
180
+
181
+ if isinstance(examples, list):
182
+ example_tuples = [
183
+ (
184
+ example.get(KEY_INTENT_TEXT, "").strip(STRIP_SYMBOLS),
185
+ example.get(KEY_METADATA),
186
+ )
187
+ for example in examples
188
+ if example
189
+ ]
190
+ elif isinstance(examples, str):
191
+ example_tuples = [
192
+ (example, None)
193
+ for example in self._parse_multiline_example(intent, examples)
194
+ ]
195
+ else:
196
+ rasa.shared.utils.io.raise_warning(
197
+ f"Unexpected block found in '{self.filename}' "
198
+ f"while processing intent '{intent}':\n"
199
+ f"{examples}\n"
200
+ f"This block will be skipped.",
201
+ docs=DOCS_URL_TRAINING_DATA,
202
+ )
203
+ return []
204
+
205
+ if not example_tuples:
206
+ rasa.shared.utils.io.raise_warning(
207
+ f"Issue found while processing '{self.filename}': "
208
+ f"Intent '{intent}' has no examples.",
209
+ docs=DOCS_URL_TRAINING_DATA,
210
+ )
211
+
212
+ results = []
213
+ for example, metadata in example_tuples:
214
+ entities = entities_parser.find_entities_in_training_example(example)
215
+ results.append((example, entities, metadata))
216
+
217
+ return results
218
+
219
+ def _parse_synonym(self, nlu_item: Dict[Text, Any]) -> None:
220
+ import rasa.shared.nlu.training_data.synonyms_parser as synonyms_parser
221
+
222
+ synonym_name = nlu_item[KEY_SYNONYM]
223
+ if not synonym_name:
224
+ rasa.shared.utils.io.raise_warning(
225
+ f"Issue found while processing '{self.filename}': "
226
+ f"The synonym has an empty name. "
227
+ f"Synonyms should have a name defined under the {KEY_SYNONYM} key. "
228
+ f"It will be skipped.",
229
+ docs=DOCS_URL_TRAINING_DATA,
230
+ )
231
+ return
232
+
233
+ examples = nlu_item.get(KEY_SYNONYM_EXAMPLES, "")
234
+
235
+ if not examples:
236
+ rasa.shared.utils.io.raise_warning(
237
+ f"Issue found while processing '{self.filename}': "
238
+ f"{KEY_SYNONYM}: {synonym_name} doesn't have any examples. "
239
+ f"It will be skipped.",
240
+ docs=DOCS_URL_TRAINING_DATA,
241
+ )
242
+ return
243
+
244
+ if not isinstance(examples, str):
245
+ rasa.shared.utils.io.raise_warning(
246
+ f"Unexpected block found in '{self.filename}':\n"
247
+ f"{examples}\n"
248
+ f"It will be skipped.",
249
+ docs=DOCS_URL_TRAINING_DATA,
250
+ )
251
+ return
252
+
253
+ for example in self._parse_multiline_example(synonym_name, examples):
254
+ synonyms_parser.add_synonym(example, synonym_name, self.entity_synonyms)
255
+
256
+ def _parse_regex(self, nlu_item: Dict[Text, Any]) -> None:
257
+ regex_name = nlu_item[KEY_REGEX]
258
+ if not regex_name:
259
+ rasa.shared.utils.io.raise_warning(
260
+ f"Issue found while processing '{self.filename}': "
261
+ f"The regex has an empty name."
262
+ f"Regex should have a name defined under the '{KEY_REGEX}' key. "
263
+ f"It will be skipped.",
264
+ docs=DOCS_URL_TRAINING_DATA,
265
+ )
266
+ return
267
+
268
+ examples = nlu_item.get(KEY_REGEX_EXAMPLES, "")
269
+ if not examples:
270
+ rasa.shared.utils.io.raise_warning(
271
+ f"Issue found while processing '{self.filename}': "
272
+ f"'{KEY_REGEX}: {regex_name}' doesn't have any examples. "
273
+ f"It will be skipped.",
274
+ docs=DOCS_URL_TRAINING_DATA,
275
+ )
276
+ return
277
+
278
+ if not isinstance(examples, str):
279
+ rasa.shared.utils.io.raise_warning(
280
+ f"Unexpected block found in '{self.filename}':\n"
281
+ f"{examples}\n"
282
+ f"This block will be skipped.",
283
+ docs=DOCS_URL_TRAINING_DATA,
284
+ )
285
+ return
286
+
287
+ for example in self._parse_multiline_example(regex_name, examples):
288
+ self.regex_features.append({"name": regex_name, "pattern": example})
289
+
290
+ def _parse_lookup(self, nlu_item: Dict[Text, Any]) -> None:
291
+ import rasa.shared.nlu.training_data.lookup_tables_parser as lookup_tables_parser # noqa: E501
292
+
293
+ lookup_item_name = nlu_item[KEY_LOOKUP]
294
+ if not lookup_item_name:
295
+ rasa.shared.utils.io.raise_warning(
296
+ f"Issue found while processing '{self.filename}': "
297
+ f"The lookup item has an empty name. "
298
+ f"Lookup items should have a name defined under the '{KEY_LOOKUP}' "
299
+ f"key. It will be skipped.",
300
+ docs=DOCS_URL_TRAINING_DATA,
301
+ )
302
+ return
303
+
304
+ examples = nlu_item.get(KEY_LOOKUP_EXAMPLES, "")
305
+ if not examples:
306
+ rasa.shared.utils.io.raise_warning(
307
+ f"Issue found while processing '{self.filename}': "
308
+ f"'{KEY_LOOKUP}: {lookup_item_name}' doesn't have any examples. "
309
+ f"It will be skipped.",
310
+ docs=DOCS_URL_TRAINING_DATA,
311
+ )
312
+ return
313
+
314
+ if not isinstance(examples, str):
315
+ rasa.shared.utils.io.raise_warning(
316
+ f"Unexpected block found in '{self.filename}':\n"
317
+ f"{examples}\n"
318
+ f"This block will be skipped.",
319
+ docs=DOCS_URL_TRAINING_DATA,
320
+ )
321
+ return
322
+
323
+ for example in self._parse_multiline_example(lookup_item_name, examples):
324
+ lookup_tables_parser.add_item_to_lookup_tables(
325
+ lookup_item_name, example, self.lookup_tables
326
+ )
327
+
328
+ def _parse_multiline_example(self, item: Text, examples: Text) -> Iterator[Text]:
329
+ for example in examples.splitlines():
330
+ if not example.startswith(MULTILINE_TRAINING_EXAMPLE_LEADING_SYMBOL):
331
+ rasa.shared.utils.io.raise_warning(
332
+ f"Issue found while processing '{self.filename}': "
333
+ f"The item '{item}' contains an example that doesn't start with a "
334
+ f"'{MULTILINE_TRAINING_EXAMPLE_LEADING_SYMBOL}' symbol: "
335
+ f"{example}\n"
336
+ f"This training example will be skipped.",
337
+ docs=DOCS_URL_TRAINING_DATA,
338
+ )
339
+ continue
340
+ yield example[1:].strip(STRIP_SYMBOLS)
341
+
342
+ @staticmethod
343
+ def is_yaml_nlu_file(filename: Union[Text, Path]) -> bool:
344
+ """Checks if the specified file possibly contains NLU training data in YAML.
345
+
346
+ Args:
347
+ filename: name of the file to check.
348
+
349
+ Returns:
350
+ `True` if the `filename` is possibly a valid YAML NLU file,
351
+ `False` otherwise.
352
+
353
+ Raises:
354
+ YamlException: if the file seems to be a YAML file (extension) but
355
+ can not be read / parsed.
356
+ """
357
+ if not rasa.shared.data.is_likely_yaml_file(filename):
358
+ return False
359
+
360
+ return is_key_in_yaml(filename, KEY_NLU, KEY_RESPONSES)
361
+
362
+
363
+ class RasaYAMLWriter(TrainingDataWriter):
364
+ """Writes training data into a file in a YAML format."""
365
+
366
+ def dumps(self, training_data: "TrainingData") -> Text:
367
+ """Turns TrainingData into a string."""
368
+ stream = StringIO()
369
+ self.dump(stream, training_data)
370
+ return stream.getvalue()
371
+
372
+ def dump(
373
+ self, target: Union[Text, Path, StringIO], training_data: "TrainingData"
374
+ ) -> None:
375
+ """Writes training data into a file in a YAML format.
376
+
377
+ Args:
378
+ target: Name of the target object to write the YAML to.
379
+ training_data: TrainingData object.
380
+ """
381
+ result = self.training_data_to_dict(training_data)
382
+
383
+ if result:
384
+ write_yaml(result, target, True)
385
+
386
+ @classmethod
387
+ def training_data_to_dict(
388
+ cls, training_data: "TrainingData"
389
+ ) -> Optional[OrderedDict]:
390
+ """Represents NLU training data to a dict/list structure ready to be
391
+ serialized as YAML.
392
+
393
+ Args:
394
+ training_data: `TrainingData` to convert.
395
+
396
+ Returns:
397
+ `OrderedDict` containing all training data.
398
+ """
399
+ from rasa.shared.utils.yaml import KEY_TRAINING_DATA_FORMAT_VERSION
400
+ from ruamel.yaml.scalarstring import DoubleQuotedScalarString
401
+
402
+ nlu_items = []
403
+ nlu_items.extend(cls.process_intents(training_data))
404
+ nlu_items.extend(cls.process_synonyms(training_data))
405
+ nlu_items.extend(cls.process_regexes(training_data))
406
+ nlu_items.extend(cls.process_lookup_tables(training_data))
407
+
408
+ if not any([nlu_items, training_data.responses]):
409
+ return None
410
+
411
+ result: OrderedDict[Text, Any] = OrderedDict()
412
+ result[KEY_TRAINING_DATA_FORMAT_VERSION] = DoubleQuotedScalarString(
413
+ LATEST_TRAINING_DATA_FORMAT_VERSION
414
+ )
415
+
416
+ if nlu_items:
417
+ result[KEY_NLU] = nlu_items
418
+
419
+ if training_data.responses:
420
+ result[KEY_RESPONSES] = Domain.get_responses_with_multilines(
421
+ training_data.responses
422
+ )
423
+
424
+ return result
425
+
426
+ @classmethod
427
+ def process_intents(cls, training_data: "TrainingData") -> List[OrderedDict]:
428
+ """Serializes the intents."""
429
+ return RasaYAMLWriter.process_training_examples_by_key(
430
+ cls.prepare_training_examples(training_data),
431
+ KEY_INTENT,
432
+ KEY_INTENT_EXAMPLES,
433
+ TrainingDataWriter.generate_message,
434
+ )
435
+
436
+ @classmethod
437
+ def process_synonyms(cls, training_data: "TrainingData") -> List[OrderedDict]:
438
+ """Serializes the synonyms."""
439
+ inverted_synonyms: Dict[Text, List[Dict]] = OrderedDict()
440
+ for example, synonym in training_data.entity_synonyms.items():
441
+ if not inverted_synonyms.get(synonym):
442
+ inverted_synonyms[synonym] = []
443
+ inverted_synonyms[synonym].append(example)
444
+
445
+ return cls.process_training_examples_by_key(
446
+ inverted_synonyms,
447
+ KEY_SYNONYM,
448
+ KEY_SYNONYM_EXAMPLES,
449
+ example_extraction_predicate=lambda x: str(x),
450
+ )
451
+
452
+ @classmethod
453
+ def process_regexes(cls, training_data: "TrainingData") -> List[OrderedDict]:
454
+ """Serializes the regexes."""
455
+ inverted_regexes: Dict[Text, List[Text]] = OrderedDict()
456
+ for regex in training_data.regex_features:
457
+ if not inverted_regexes.get(regex["name"]):
458
+ inverted_regexes[regex["name"]] = []
459
+ inverted_regexes[regex["name"]].append(regex["pattern"])
460
+
461
+ return cls.process_training_examples_by_key(
462
+ inverted_regexes,
463
+ KEY_REGEX,
464
+ KEY_REGEX_EXAMPLES,
465
+ example_extraction_predicate=lambda x: str(x),
466
+ )
467
+
468
+ @classmethod
469
+ def process_lookup_tables(cls, training_data: "TrainingData") -> List[OrderedDict]:
470
+ """Serializes the look up tables.
471
+
472
+ Args:
473
+ training_data: The training data object with potential look up tables.
474
+
475
+ Returns:
476
+ The serialized lookup tables.
477
+ """
478
+ prepared_lookup_tables: Dict[Text, List[Text]] = OrderedDict()
479
+ for lookup_table in training_data.lookup_tables:
480
+ # this is a lookup table filename
481
+ if isinstance(lookup_table["elements"], str):
482
+ continue
483
+ prepared_lookup_tables[lookup_table["name"]] = lookup_table["elements"]
484
+
485
+ return cls.process_training_examples_by_key(
486
+ prepared_lookup_tables,
487
+ KEY_LOOKUP,
488
+ KEY_LOOKUP_EXAMPLES,
489
+ example_extraction_predicate=lambda x: str(x),
490
+ )
491
+
492
+ @staticmethod
493
+ def process_training_examples_by_key(
494
+ training_examples: Dict[Text, List[Union[Dict, Text]]],
495
+ key_name: Text,
496
+ key_examples: Text,
497
+ example_extraction_predicate: Callable[[Dict[Text, Any]], Text],
498
+ ) -> List[OrderedDict]:
499
+ """Prepares training examples to be written to YAML.
500
+
501
+ This can be any NLU training data (intent examples, lookup tables, etc.)
502
+
503
+ Args:
504
+ training_examples: Multiple training examples. Mappings in case additional
505
+ values were specified for an example (e.g. metadata) or just the plain
506
+ value.
507
+ key_name: The top level key which the examples belong to (e.g. `intents`)
508
+ key_examples: The sub key which the examples should be added to
509
+ (e.g. `examples`).
510
+ example_extraction_predicate: Function to extract example value (e.g. the
511
+ the text for an intent example)
512
+
513
+ Returns:
514
+ NLU training data examples prepared for writing to YAML.
515
+ """
516
+ intents = []
517
+
518
+ for intent_name, examples in training_examples.items():
519
+ converted, intent_metadata = RasaYAMLWriter._convert_training_examples(
520
+ examples, example_extraction_predicate
521
+ )
522
+
523
+ intent: OrderedDict[Text, Any] = OrderedDict()
524
+ intent[key_name] = intent_name
525
+ if intent_metadata:
526
+ intent[KEY_METADATA] = intent_metadata
527
+
528
+ examples_have_metadata = any(KEY_METADATA in ex for ex in converted)
529
+ example_texts_have_escape_chars = any(
530
+ rasa.shared.nlu.training_data.util.has_string_escape_chars(
531
+ ex.get(KEY_INTENT_TEXT, "")
532
+ )
533
+ for ex in converted
534
+ )
535
+
536
+ if examples_have_metadata or example_texts_have_escape_chars:
537
+ intent[
538
+ key_examples
539
+ ] = RasaYAMLWriter._render_training_examples_as_objects(converted)
540
+ else:
541
+ intent[key_examples] = RasaYAMLWriter._render_training_examples_as_text(
542
+ converted
543
+ )
544
+
545
+ intents.append(intent)
546
+
547
+ return intents
548
+
549
+ @staticmethod
550
+ def _convert_training_examples(
551
+ training_examples: List[Union[Dict, List[Text]]],
552
+ example_extraction_predicate: Callable[[Dict[Text, Any]], Text],
553
+ ) -> Tuple[List[Dict], Optional[Dict]]:
554
+ """Returns converted training examples and potential intent metadata."""
555
+ converted_examples = []
556
+ intent_metadata = None
557
+
558
+ for example in training_examples:
559
+ converted = {
560
+ KEY_INTENT_TEXT: example_extraction_predicate(example).strip(
561
+ STRIP_SYMBOLS
562
+ )
563
+ }
564
+
565
+ if isinstance(example, dict) and KEY_METADATA in example:
566
+ metadata = example[KEY_METADATA]
567
+
568
+ if METADATA_EXAMPLE in metadata:
569
+ converted[KEY_METADATA] = metadata[METADATA_EXAMPLE]
570
+
571
+ if intent_metadata is None and METADATA_INTENT in metadata:
572
+ intent_metadata = metadata[METADATA_INTENT]
573
+
574
+ converted_examples.append(converted)
575
+
576
+ return converted_examples, intent_metadata
577
+
578
+ @staticmethod
579
+ def _render_training_examples_as_objects(examples: List[Dict]) -> List[Dict]:
580
+ """Renders training examples as objects.
581
+
582
+ The `text` item is rendered as a literal scalar string.
583
+
584
+ Given the input of a single example:
585
+ {'text': 'how much CO2 will that use?'}
586
+ Its return value is a dictionary that will be rendered in YAML as:
587
+ ```
588
+ text: |
589
+ how much CO2 will that use?
590
+ ```
591
+ """
592
+
593
+ def render(example: Dict) -> Dict:
594
+ text = example[KEY_INTENT_TEXT]
595
+ example[KEY_INTENT_TEXT] = LiteralScalarString(text + "\n")
596
+ return example
597
+
598
+ return [render(ex) for ex in examples]
599
+
600
+ @staticmethod
601
+ def _render_training_examples_as_text(examples: List[Dict]) -> LiteralScalarString:
602
+ def render(example: Dict) -> Text:
603
+ return TrainingDataWriter.generate_list_item(example[KEY_INTENT_TEXT])
604
+
605
+ return LiteralScalarString("".join([render(example) for example in examples]))