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
rasa/cli/train.py ADDED
@@ -0,0 +1,260 @@
1
+ import argparse
2
+ import structlog
3
+ import sys
4
+ import asyncio
5
+ from pathlib import Path
6
+ from typing import Dict, List, Optional, Text, Union
7
+
8
+ from rasa.cli import SubParsersAction
9
+ import rasa.cli.arguments.train as train_arguments
10
+
11
+ import rasa.cli.utils
12
+ import rasa.core.utils
13
+ from rasa.shared.importers.importer import TrainingDataImporter
14
+ import rasa.utils.common
15
+ from rasa.core.nlg.generator import NaturalLanguageGenerator
16
+ from rasa.core.train import do_compare_training
17
+ from rasa.shared.constants import (
18
+ CONFIG_MANDATORY_KEYS_CORE,
19
+ CONFIG_MANDATORY_KEYS_NLU,
20
+ CONFIG_MANDATORY_KEYS,
21
+ DEFAULT_DATA_PATH,
22
+ DEFAULT_DOMAIN_PATHS,
23
+ )
24
+
25
+ structlogger = structlog.getLogger(__name__)
26
+
27
+
28
+ def add_subparser(
29
+ subparsers: SubParsersAction, parents: List[argparse.ArgumentParser]
30
+ ) -> None:
31
+ """Add all training parsers.
32
+
33
+ Args:
34
+ subparsers: subparser we are going to attach to
35
+ parents: Parent parsers, needed to ensure tree structure in argparse
36
+ """
37
+ train_parser = subparsers.add_parser(
38
+ "train",
39
+ help="Trains a Rasa model using your NLU data and stories.",
40
+ parents=parents,
41
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
42
+ )
43
+
44
+ train_arguments.set_train_arguments(train_parser)
45
+
46
+ train_subparsers = train_parser.add_subparsers()
47
+ train_core_parser = train_subparsers.add_parser(
48
+ "core",
49
+ parents=parents,
50
+ conflict_handler="resolve",
51
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
52
+ help="Trains a Rasa Core model using your stories.",
53
+ )
54
+ train_core_parser.set_defaults(func=run_core_training)
55
+
56
+ train_nlu_parser = train_subparsers.add_parser(
57
+ "nlu",
58
+ parents=parents,
59
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
60
+ help="Trains a Rasa NLU model using your NLU data.",
61
+ )
62
+ train_nlu_parser.set_defaults(func=run_nlu_training)
63
+
64
+ train_parser.set_defaults(func=lambda args: run_training(args, can_exit=True))
65
+
66
+ train_arguments.set_train_core_arguments(train_core_parser)
67
+ train_arguments.set_train_nlu_arguments(train_nlu_parser)
68
+
69
+
70
+ def _check_nlg_endpoint_validity(endpoint: Union[Path, str]) -> None:
71
+ try:
72
+ endpoints = rasa.core.utils.read_endpoints_from_path(endpoint)
73
+ NaturalLanguageGenerator.create(endpoints.nlg)
74
+ except Exception as e:
75
+ structlogger.error(
76
+ "cli.train.nlg_failed_to_initialise.validation_error",
77
+ exception=f"{e}",
78
+ event_info=(
79
+ f"The validation failed for NLG configuration defined in "
80
+ f"{endpoint}. Please make sure the NLG configuration is correct."
81
+ ),
82
+ )
83
+ sys.exit(1)
84
+
85
+
86
+ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[Text]:
87
+ """Trains a model.
88
+
89
+ Args:
90
+ args: Namespace arguments.
91
+ can_exit: If `True`, the operation can send `sys.exit` in the case
92
+ training was not successful.
93
+
94
+ Returns:
95
+ Path to a trained model or `None` if training was not successful.
96
+ """
97
+ from rasa import train as train_all
98
+
99
+ domain = rasa.cli.utils.get_validated_path(
100
+ args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
101
+ )
102
+ config = rasa.cli.utils.get_validated_config(args.config, CONFIG_MANDATORY_KEYS)
103
+
104
+ _check_nlg_endpoint_validity(args.endpoints)
105
+
106
+ training_files = [
107
+ rasa.cli.utils.get_validated_path(
108
+ f, "data", DEFAULT_DATA_PATH, none_is_valid=True
109
+ )
110
+ for f in args.data
111
+ ]
112
+
113
+ if not args.skip_validation:
114
+ structlogger.info(
115
+ "cli.train.run_training",
116
+ event_info="Started validating domain and training data...",
117
+ )
118
+ importer = TrainingDataImporter.load_from_config(
119
+ domain_path=domain, training_data_paths=args.data, config_path=config
120
+ )
121
+ rasa.cli.utils.validate_files(
122
+ args.fail_on_validation_warnings, args.validation_max_history, importer
123
+ )
124
+
125
+ training_result = train_all(
126
+ domain=domain,
127
+ config=config,
128
+ training_files=training_files,
129
+ output=args.out,
130
+ dry_run=args.dry_run,
131
+ force_training=args.force,
132
+ fixed_model_name=args.fixed_model_name,
133
+ persist_nlu_training_data=args.persist_nlu_data,
134
+ core_additional_arguments={
135
+ **extract_core_additional_arguments(args),
136
+ },
137
+ nlu_additional_arguments=extract_nlu_additional_arguments(args),
138
+ model_to_finetune=_model_for_finetuning(args),
139
+ finetuning_epoch_fraction=args.epoch_fraction,
140
+ )
141
+ if training_result.code != 0 and can_exit:
142
+ sys.exit(training_result.code)
143
+
144
+ return training_result.model
145
+
146
+
147
+ def _model_for_finetuning(args: argparse.Namespace) -> Optional[Text]:
148
+ if args.finetune == train_arguments.USE_LATEST_MODEL_FOR_FINE_TUNING:
149
+ # We use this constant to signal that the user specified `--finetune` but
150
+ # didn't provide a path to a model. In this case we try to load the latest
151
+ # model from the output directory (that's usually models/).
152
+ return args.out
153
+ else:
154
+ return args.finetune
155
+
156
+
157
+ def run_core_training(args: argparse.Namespace) -> Optional[Text]:
158
+ """Trains a Rasa Core model only.
159
+
160
+ Args:
161
+ args: Command-line arguments to configure training.
162
+
163
+ Returns:
164
+ Path to a trained model or `None` if training was not successful.
165
+ """
166
+ from rasa.model_training import train_core
167
+
168
+ args.domain = rasa.cli.utils.get_validated_path(
169
+ args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
170
+ )
171
+ story_file = rasa.cli.utils.get_validated_path(
172
+ args.stories, "stories", DEFAULT_DATA_PATH, none_is_valid=True
173
+ )
174
+ additional_arguments = {
175
+ **extract_core_additional_arguments(args),
176
+ }
177
+
178
+ # Policies might be a list for the compare training. Do normal training
179
+ # if only list item was passed.
180
+ if not isinstance(args.config, list) or len(args.config) == 1:
181
+ if isinstance(args.config, list):
182
+ args.config = args.config[0]
183
+
184
+ config = rasa.cli.utils.get_validated_config(
185
+ args.config, CONFIG_MANDATORY_KEYS_CORE
186
+ )
187
+
188
+ return asyncio.run(
189
+ train_core(
190
+ domain=args.domain,
191
+ config=config,
192
+ stories=story_file,
193
+ output=args.out,
194
+ fixed_model_name=args.fixed_model_name,
195
+ additional_arguments=additional_arguments,
196
+ model_to_finetune=_model_for_finetuning(args),
197
+ finetuning_epoch_fraction=args.epoch_fraction,
198
+ )
199
+ )
200
+ else:
201
+ asyncio.run(do_compare_training(args, story_file, additional_arguments))
202
+ return None
203
+
204
+
205
+ def run_nlu_training(args: argparse.Namespace) -> Optional[Text]:
206
+ """Trains an NLU model.
207
+
208
+ Args:
209
+ args: Namespace arguments.
210
+
211
+ Returns:
212
+ Path to a trained model or `None` if training was not successful.
213
+ """
214
+ from rasa.model_training import train_nlu
215
+
216
+ config = rasa.cli.utils.get_validated_config(args.config, CONFIG_MANDATORY_KEYS_NLU)
217
+ nlu_data = rasa.cli.utils.get_validated_path(
218
+ args.nlu, "nlu", DEFAULT_DATA_PATH, none_is_valid=True
219
+ )
220
+
221
+ if args.domain:
222
+ args.domain = rasa.cli.utils.get_validated_path(
223
+ args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
224
+ )
225
+
226
+ return asyncio.run(
227
+ train_nlu(
228
+ config=config,
229
+ nlu_data=nlu_data,
230
+ output=args.out,
231
+ fixed_model_name=args.fixed_model_name,
232
+ persist_nlu_training_data=args.persist_nlu_data,
233
+ additional_arguments={
234
+ **extract_nlu_additional_arguments(args),
235
+ },
236
+ domain=args.domain,
237
+ model_to_finetune=_model_for_finetuning(args),
238
+ finetuning_epoch_fraction=args.epoch_fraction,
239
+ )
240
+ )
241
+
242
+
243
+ def extract_core_additional_arguments(args: argparse.Namespace) -> Dict:
244
+ arguments = {}
245
+
246
+ if "augmentation" in args:
247
+ arguments["augmentation_factor"] = args.augmentation
248
+ if "debug_plots" in args:
249
+ arguments["debug_plots"] = args.debug_plots
250
+
251
+ return arguments
252
+
253
+
254
+ def extract_nlu_additional_arguments(args: argparse.Namespace) -> Dict:
255
+ arguments = {}
256
+
257
+ if "num_threads" in args:
258
+ arguments["num_threads"] = args.num_threads
259
+
260
+ return arguments
rasa/cli/utils.py ADDED
@@ -0,0 +1,453 @@
1
+ import json
2
+ import argparse
3
+ import structlog
4
+ import importlib
5
+ import os
6
+ import sys
7
+ import time
8
+ from pathlib import Path
9
+ from types import FrameType
10
+ from typing import Any, Dict, List, Optional, TYPE_CHECKING, Text, Union, overload
11
+ import randomname
12
+
13
+ import rasa.shared.utils.cli
14
+ import rasa.shared.utils.io
15
+ from rasa.shared.importers.importer import TrainingDataImporter
16
+ from rasa.shared.constants import (
17
+ ASSISTANT_ID_DEFAULT_VALUE,
18
+ ASSISTANT_ID_KEY,
19
+ DEFAULT_CONFIG_PATH,
20
+ )
21
+ from rasa import telemetry
22
+ from rasa.shared.utils.yaml import read_config_file
23
+ from rasa.utils.io import write_yaml
24
+
25
+ if TYPE_CHECKING:
26
+
27
+ from questionary import Question
28
+ from typing_extensions import Literal
29
+ from rasa.validator import Validator
30
+
31
+ structlogger = structlog.get_logger()
32
+
33
+ FREE_TEXT_INPUT_PROMPT = "Type out your own message..."
34
+
35
+
36
+ @overload
37
+ def get_validated_path(
38
+ current: Optional[Union[Path, Text]],
39
+ parameter: Text,
40
+ default: Optional[Union[Path, Text, List[Text]]] = ...,
41
+ none_is_valid: "Literal[False]" = ...,
42
+ ) -> Union[Path, Text]:
43
+ ...
44
+
45
+
46
+ @overload
47
+ def get_validated_path(
48
+ current: Optional[Union[Path, Text]],
49
+ parameter: Text,
50
+ default: Optional[Union[Path, Text, List[Text]]] = ...,
51
+ none_is_valid: "Literal[True]" = ...,
52
+ ) -> Optional[Union[Path, Text]]:
53
+ ...
54
+
55
+
56
+ def get_validated_path(
57
+ current: Optional[Union[Path, Text]],
58
+ parameter: Text,
59
+ default: Optional[Union[Path, Text, List[Text]]] = None,
60
+ none_is_valid: bool = False,
61
+ ) -> Optional[Union[Path, Text]]:
62
+ """Checks whether a file path or its default value is valid and returns it.
63
+
64
+ Args:
65
+ current: The parsed value.
66
+ parameter: The name of the parameter.
67
+ default: one or multiple default values of the parameter.
68
+ none_is_valid: `True` if `None` is valid value for the path,
69
+ else `False``
70
+
71
+ Returns:
72
+ The current value if valid,
73
+ otherwise one of the default values of the argument if valid,
74
+ otherwise `None` if allowed,
75
+ otherwise raises an error and exits.
76
+ """
77
+ if current and os.path.exists(current):
78
+ return current
79
+
80
+ # try to find a valid option among the defaults
81
+ if isinstance(default, str) or isinstance(default, Path):
82
+ default_options = [str(default)]
83
+ elif isinstance(default, list):
84
+ default_options = default
85
+ else:
86
+ default_options = []
87
+
88
+ valid_options = (option for option in default_options if os.path.exists(option))
89
+ chosen_option = next(valid_options, None)
90
+
91
+ # warn and log if user-chosen parameter wasn't found and thus overwritten
92
+ if chosen_option:
93
+ shared_info = f"Using default location '{chosen_option}' instead."
94
+ if current is None:
95
+ structlogger.debug(
96
+ "cli.get_validated_path.parameter_not_set",
97
+ parameter=parameter,
98
+ event_info=(f"Parameter '{parameter}' was not set. {shared_info}"),
99
+ )
100
+ else:
101
+ structlogger.warn(
102
+ "cli.get_validated_path.path_does_not_exists",
103
+ path=current,
104
+ event_info=(
105
+ f"The path '{current}' does not seem to exist. {shared_info}"
106
+ ),
107
+ )
108
+
109
+ if chosen_option is None and not none_is_valid:
110
+ cancel_cause_not_found(current, parameter, default)
111
+
112
+ return chosen_option
113
+
114
+
115
+ def missing_config_keys(
116
+ path: Union["Path", Text], mandatory_keys: List[Text]
117
+ ) -> List[Text]:
118
+ """Checks whether the config file at `path` contains the `mandatory_keys`.
119
+
120
+ Args:
121
+ path: The path to the config file.
122
+ mandatory_keys: A list of mandatory config keys.
123
+
124
+ Returns:
125
+ The list of missing config keys.
126
+ """
127
+ if not os.path.exists(path):
128
+ return mandatory_keys
129
+
130
+ config_data = read_config_file(path)
131
+
132
+ return [k for k in mandatory_keys if k not in config_data or config_data[k] is None]
133
+
134
+
135
+ def validate_assistant_id_in_config(config_file: Union["Path", Text]) -> None:
136
+ """Verifies that the assistant_id key exists and has a unique value in config.
137
+
138
+ Issues a warning if the key does not exist or has the default value and replaces it
139
+ with a pseudo-random string value.
140
+ """
141
+ config_data = read_config_file(config_file, reader_type=["safe", "rt"])
142
+ assistant_id = config_data.get(ASSISTANT_ID_KEY)
143
+
144
+ if assistant_id is None or assistant_id == ASSISTANT_ID_DEFAULT_VALUE:
145
+ structlogger.warn(
146
+ "cli.validate_assistant_id_in_config.missing_unique_assistant_id_key",
147
+ config=config_file,
148
+ missing_key=ASSISTANT_ID_KEY,
149
+ event_info=(
150
+ f"The config file '{config_file!s}' is "
151
+ f"missing a unique value for the "
152
+ f"'{ASSISTANT_ID_KEY}' mandatory key. "
153
+ f"Proceeding with generating a random "
154
+ f"value and overwriting the '{ASSISTANT_ID_KEY}'"
155
+ f" in the config file."
156
+ ),
157
+ )
158
+
159
+ # add random value for assistant id, overwrite config file
160
+ time_format = "%Y%m%d-%H%M%S"
161
+ config_data[
162
+ ASSISTANT_ID_KEY
163
+ ] = f"{time.strftime(time_format)}-{randomname.get_name()}"
164
+
165
+ write_yaml(data=config_data, target=config_file, should_preserve_key_order=True)
166
+
167
+ return
168
+
169
+
170
+ def validate_config_path(
171
+ config: Optional[Union[Text, "Path"]],
172
+ default_config: Text = DEFAULT_CONFIG_PATH,
173
+ ) -> Text:
174
+ """Verifies that the config path exists.
175
+
176
+ Exit if the config file does not exist.
177
+
178
+ Args:
179
+ config: Path to the config file.
180
+ default_config: default config to use if the file at `config` doesn't exist.
181
+
182
+ Returns: The path to the config file.
183
+ """
184
+ config = rasa.cli.utils.get_validated_path(config, "config", default_config)
185
+
186
+ if not config or not os.path.exists(config):
187
+ structlogger.error(
188
+ "cli.validate_config_path.does_not_exists",
189
+ config=config,
190
+ event_info=(
191
+ f"The config file '{config}' does not exist. "
192
+ f"Use '--config' to specify a valid config file."
193
+ ),
194
+ )
195
+ sys.exit(1)
196
+
197
+ return str(config)
198
+
199
+
200
+ def validate_mandatory_config_keys(
201
+ config: Union[Text, "Path"],
202
+ mandatory_keys: List[Text],
203
+ ) -> Text:
204
+ """Get a config from a config file and check if it is valid.
205
+
206
+ Exit if the config isn't valid.
207
+
208
+ Args:
209
+ config: Path to the config file.
210
+ mandatory_keys: The keys that have to be specified in the config file.
211
+
212
+ Returns: The path to the config file if the config is valid.
213
+ """
214
+ missing_keys = set(rasa.cli.utils.missing_config_keys(config, mandatory_keys))
215
+ if missing_keys:
216
+ structlogger.error(
217
+ "cli.validate_mandatory_config_keys.missing_keys",
218
+ config=config,
219
+ missing_keys=missing_keys,
220
+ event_info=(
221
+ "The config file '{}' is missing mandatory parameters: "
222
+ "'{}'. Add missing parameters to config file and try again.".format(
223
+ config, "', '".join(missing_keys)
224
+ )
225
+ ),
226
+ )
227
+ sys.exit(1)
228
+
229
+ return str(config)
230
+
231
+
232
+ def get_validated_config(
233
+ config: Optional[Union[Text, "Path"]],
234
+ mandatory_keys: List[Text],
235
+ default_config: Text = DEFAULT_CONFIG_PATH,
236
+ ) -> Text:
237
+ """Validates config and returns path to validated config file."""
238
+ config = validate_config_path(config, default_config)
239
+ validate_assistant_id_in_config(config)
240
+
241
+ config = validate_mandatory_config_keys(config, mandatory_keys)
242
+
243
+ return config
244
+
245
+
246
+ def validate_files(
247
+ fail_on_warnings: bool,
248
+ max_history: Optional[int],
249
+ importer: TrainingDataImporter,
250
+ stories_only: bool = False,
251
+ flows_only: bool = False,
252
+ ) -> None:
253
+ """Validates either the story structure or the entire project.
254
+
255
+ Args:
256
+ fail_on_warnings: `True` if the process should exit with a non-zero status
257
+ max_history: The max history to use when validating the story structure.
258
+ importer: The `TrainingDataImporter` to use to load the training data.
259
+ stories_only: If `True`, only the story structure is validated.
260
+ flows_only: If `True`, only the flows are validated.
261
+ """
262
+ from rasa.validator import Validator
263
+
264
+ validator = Validator.from_importer(importer)
265
+
266
+ if stories_only:
267
+ all_good = _validate_story_structure(validator, max_history, fail_on_warnings)
268
+ elif flows_only:
269
+ all_good = validator.verify_flows()
270
+ else:
271
+ if importer.get_domain().is_empty():
272
+ structlogger.error(
273
+ "cli.validate_files.empty_domain",
274
+ event_info="Encountered empty domain during validation.",
275
+ )
276
+ sys.exit(1)
277
+
278
+ valid_domain = _validate_domain(validator)
279
+ valid_nlu = _validate_nlu(validator, fail_on_warnings)
280
+ valid_stories = _validate_story_structure(
281
+ validator, max_history, fail_on_warnings
282
+ )
283
+ valid_flows = validator.verify_flows()
284
+
285
+ all_good = valid_domain and valid_nlu and valid_stories and valid_flows
286
+
287
+ validator.warn_if_config_mandatory_keys_are_not_set()
288
+
289
+ telemetry.track_validate_files(all_good)
290
+ if not all_good:
291
+ structlogger.error(
292
+ "cli.validate_files.project_validation_error",
293
+ event_info="Project validation completed with errors.",
294
+ )
295
+ sys.exit(1)
296
+
297
+
298
+ def _validate_domain(validator: "Validator") -> bool:
299
+ valid_domain_validity = validator.verify_domain_validity()
300
+ valid_actions_in_stories_rules = validator.verify_actions_in_stories_rules()
301
+ valid_forms_in_stories_rules = validator.verify_forms_in_stories_rules()
302
+ valid_form_slots = validator.verify_form_slots()
303
+ valid_slot_mappings = validator.verify_slot_mappings()
304
+ valid_responses = validator.check_for_no_empty_paranthesis_in_responses()
305
+ return (
306
+ valid_domain_validity
307
+ and valid_actions_in_stories_rules
308
+ and valid_forms_in_stories_rules
309
+ and valid_form_slots
310
+ and valid_slot_mappings
311
+ and valid_responses
312
+ )
313
+
314
+
315
+ def _validate_nlu(validator: "Validator", fail_on_warnings: bool) -> bool:
316
+ return validator.verify_nlu(not fail_on_warnings)
317
+
318
+
319
+ def _validate_story_structure(
320
+ validator: "Validator", max_history: Optional[int], fail_on_warnings: bool
321
+ ) -> bool:
322
+ # Check if a valid setting for `max_history` was given
323
+ if isinstance(max_history, int) and max_history < 1:
324
+ raise argparse.ArgumentTypeError(
325
+ f"The value of `--max-history {max_history}` " f"is not a positive integer."
326
+ )
327
+
328
+ return validator.verify_story_structure(
329
+ not fail_on_warnings, max_history=max_history
330
+ )
331
+
332
+
333
+ def cancel_cause_not_found(
334
+ current: Optional[Union["Path", Text]],
335
+ parameter: Text,
336
+ default: Optional[Union["Path", Text, List[Text]]],
337
+ ) -> None:
338
+ """Exits with an error because the given path was not valid.
339
+
340
+ Args:
341
+ current: The path given by the user.
342
+ parameter: The name of the parameter.
343
+ default: The default value of the parameter.
344
+
345
+ """
346
+ default_clause = ""
347
+ if default and isinstance(default, str):
348
+ default_clause = f"use the default location ('{default}') or"
349
+ elif default and isinstance(default, list):
350
+ default_clause = f"use one of the default locations ({', '.join(default)}) or"
351
+
352
+ structlogger.error(
353
+ "cli.path_does_not_exist",
354
+ path=current,
355
+ event_info=(
356
+ f"The path '{current}' does not exist. "
357
+ f"Please make sure to {default_clause} specify it "
358
+ f"with '--{parameter}'."
359
+ ),
360
+ )
361
+ sys.exit(1)
362
+
363
+
364
+ def parse_last_positional_argument_as_model_path() -> None:
365
+ """Fixes the parsing of a potential positional model path argument."""
366
+ if (
367
+ len(sys.argv) >= 2
368
+ # support relevant commands ...
369
+ and sys.argv[1] in ["run", "shell", "interactive"]
370
+ # but avoid interpreting subparser commands as model paths
371
+ and sys.argv[1:] != ["run", "actions"]
372
+ and not sys.argv[-2].startswith("-")
373
+ and os.path.exists(sys.argv[-1])
374
+ ):
375
+ sys.argv.append(sys.argv[-1])
376
+ sys.argv[-2] = "--model"
377
+
378
+
379
+ def button_to_string(button: Dict[Text, Any], idx: int = 0) -> Text:
380
+ """Create a string representation of a button."""
381
+ title = button.pop("title", "")
382
+
383
+ if "payload" in button:
384
+ payload = " ({})".format(button.pop("payload"))
385
+ else:
386
+ payload = ""
387
+
388
+ # if there are any additional attributes, we append them to the output
389
+ if button:
390
+ details = " - {}".format(json.dumps(button, sort_keys=True))
391
+ else:
392
+ details = ""
393
+
394
+ button_string = "{idx}: {title}{payload}{details}".format(
395
+ idx=idx + 1, title=title, payload=payload, details=details
396
+ )
397
+
398
+ return button_string
399
+
400
+
401
+ def element_to_string(element: Dict[Text, Any], idx: int = 0) -> Text:
402
+ """Create a string representation of an element."""
403
+ title = element.pop("title", "")
404
+
405
+ element_string = "{idx}: {title} - {element}".format(
406
+ idx=idx + 1, title=title, element=json.dumps(element, sort_keys=True)
407
+ )
408
+
409
+ return element_string
410
+
411
+
412
+ def button_choices_from_message_data(
413
+ message: Dict[Text, Any], allow_free_text_input: bool = True
414
+ ) -> List[Text]:
415
+ """Return list of choices to present to the user.
416
+
417
+ If allow_free_text_input is True, an additional option is added
418
+ at the end along with the response buttons that allows the user
419
+ to type in free text.
420
+ """
421
+ choices = [
422
+ button_to_string(button, idx)
423
+ for idx, button in enumerate(message.get("buttons"))
424
+ ]
425
+ if allow_free_text_input:
426
+ choices.append(FREE_TEXT_INPUT_PROMPT)
427
+ return choices
428
+
429
+
430
+ async def payload_from_button_question(button_question: "Question") -> Text:
431
+ """Prompt user with a button question and returns the nlu payload."""
432
+ response = await button_question.ask_async()
433
+ if response != FREE_TEXT_INPUT_PROMPT:
434
+ # Extract intent slash command if it's a button
435
+ response = response[response.rfind("(") + 1 : response.rfind(")")]
436
+ return response
437
+
438
+
439
+ def signal_handler(_: int, __: FrameType) -> None:
440
+ """Kills Rasa when OS signal is received."""
441
+ print("Goodbye 👋")
442
+ sys.exit(0)
443
+
444
+
445
+ def warn_if_rasa_plus_package_installed() -> None:
446
+ """Issue a user warning in case the `rasa_plus` package is installed."""
447
+ rasa_plus_package = "rasa_plus"
448
+ if importlib.util.find_spec(rasa_plus_package) is not None:
449
+ rasa.shared.utils.io.raise_warning(
450
+ f"{rasa_plus_package} python package is no longer necessary "
451
+ f"for using Rasa Pro. Please uninstall it.",
452
+ UserWarning,
453
+ )