rasa-pro 3.12.0.dev1__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 (790) hide show
  1. README.md +41 -0
  2. rasa/__init__.py +9 -0
  3. rasa/__main__.py +177 -0
  4. rasa/anonymization/__init__.py +2 -0
  5. rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
  6. rasa/anonymization/anonymization_pipeline.py +286 -0
  7. rasa/anonymization/anonymization_rule_executor.py +260 -0
  8. rasa/anonymization/anonymization_rule_orchestrator.py +120 -0
  9. rasa/anonymization/schemas/config.yml +47 -0
  10. rasa/anonymization/utils.py +118 -0
  11. rasa/api.py +160 -0
  12. rasa/cli/__init__.py +5 -0
  13. rasa/cli/arguments/__init__.py +0 -0
  14. rasa/cli/arguments/data.py +106 -0
  15. rasa/cli/arguments/default_arguments.py +207 -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 +219 -0
  20. rasa/cli/arguments/shell.py +17 -0
  21. rasa/cli/arguments/test.py +211 -0
  22. rasa/cli/arguments/train.py +279 -0
  23. rasa/cli/arguments/visualize.py +34 -0
  24. rasa/cli/arguments/x.py +30 -0
  25. rasa/cli/data.py +354 -0
  26. rasa/cli/dialogue_understanding_test.py +251 -0
  27. rasa/cli/e2e_test.py +259 -0
  28. rasa/cli/evaluate.py +222 -0
  29. rasa/cli/export.py +250 -0
  30. rasa/cli/inspect.py +75 -0
  31. rasa/cli/interactive.py +166 -0
  32. rasa/cli/license.py +65 -0
  33. rasa/cli/llm_fine_tuning.py +403 -0
  34. rasa/cli/markers.py +78 -0
  35. rasa/cli/project_templates/__init__.py +0 -0
  36. rasa/cli/project_templates/calm/actions/__init__.py +0 -0
  37. rasa/cli/project_templates/calm/actions/action_template.py +27 -0
  38. rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
  39. rasa/cli/project_templates/calm/actions/db.py +57 -0
  40. rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
  41. rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
  42. rasa/cli/project_templates/calm/config.yml +10 -0
  43. rasa/cli/project_templates/calm/credentials.yml +33 -0
  44. rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
  45. rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
  46. rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
  47. rasa/cli/project_templates/calm/db/contacts.json +10 -0
  48. rasa/cli/project_templates/calm/domain/add_contact.yml +39 -0
  49. rasa/cli/project_templates/calm/domain/list_contacts.yml +17 -0
  50. rasa/cli/project_templates/calm/domain/remove_contact.yml +38 -0
  51. rasa/cli/project_templates/calm/domain/shared.yml +10 -0
  52. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
  53. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
  54. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
  55. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
  56. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
  57. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
  58. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
  59. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
  60. rasa/cli/project_templates/calm/endpoints.yml +58 -0
  61. rasa/cli/project_templates/default/actions/__init__.py +0 -0
  62. rasa/cli/project_templates/default/actions/actions.py +27 -0
  63. rasa/cli/project_templates/default/config.yml +44 -0
  64. rasa/cli/project_templates/default/credentials.yml +33 -0
  65. rasa/cli/project_templates/default/data/nlu.yml +91 -0
  66. rasa/cli/project_templates/default/data/rules.yml +13 -0
  67. rasa/cli/project_templates/default/data/stories.yml +30 -0
  68. rasa/cli/project_templates/default/domain.yml +34 -0
  69. rasa/cli/project_templates/default/endpoints.yml +42 -0
  70. rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
  71. rasa/cli/project_templates/tutorial/actions/__init__.py +0 -0
  72. rasa/cli/project_templates/tutorial/actions/actions.py +22 -0
  73. rasa/cli/project_templates/tutorial/config.yml +12 -0
  74. rasa/cli/project_templates/tutorial/credentials.yml +33 -0
  75. rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
  76. rasa/cli/project_templates/tutorial/data/patterns.yml +11 -0
  77. rasa/cli/project_templates/tutorial/domain.yml +35 -0
  78. rasa/cli/project_templates/tutorial/endpoints.yml +55 -0
  79. rasa/cli/run.py +143 -0
  80. rasa/cli/scaffold.py +273 -0
  81. rasa/cli/shell.py +141 -0
  82. rasa/cli/studio/__init__.py +0 -0
  83. rasa/cli/studio/download.py +62 -0
  84. rasa/cli/studio/studio.py +296 -0
  85. rasa/cli/studio/train.py +59 -0
  86. rasa/cli/studio/upload.py +62 -0
  87. rasa/cli/telemetry.py +102 -0
  88. rasa/cli/test.py +280 -0
  89. rasa/cli/train.py +278 -0
  90. rasa/cli/utils.py +484 -0
  91. rasa/cli/visualize.py +40 -0
  92. rasa/cli/x.py +206 -0
  93. rasa/constants.py +45 -0
  94. rasa/core/__init__.py +17 -0
  95. rasa/core/actions/__init__.py +0 -0
  96. rasa/core/actions/action.py +1318 -0
  97. rasa/core/actions/action_clean_stack.py +59 -0
  98. rasa/core/actions/action_exceptions.py +24 -0
  99. rasa/core/actions/action_hangup.py +29 -0
  100. rasa/core/actions/action_repeat_bot_messages.py +89 -0
  101. rasa/core/actions/action_run_slot_rejections.py +210 -0
  102. rasa/core/actions/action_trigger_chitchat.py +31 -0
  103. rasa/core/actions/action_trigger_flow.py +109 -0
  104. rasa/core/actions/action_trigger_search.py +31 -0
  105. rasa/core/actions/constants.py +5 -0
  106. rasa/core/actions/custom_action_executor.py +191 -0
  107. rasa/core/actions/direct_custom_actions_executor.py +109 -0
  108. rasa/core/actions/e2e_stub_custom_action_executor.py +72 -0
  109. rasa/core/actions/forms.py +741 -0
  110. rasa/core/actions/grpc_custom_action_executor.py +251 -0
  111. rasa/core/actions/http_custom_action_executor.py +145 -0
  112. rasa/core/actions/loops.py +114 -0
  113. rasa/core/actions/two_stage_fallback.py +186 -0
  114. rasa/core/agent.py +559 -0
  115. rasa/core/auth_retry_tracker_store.py +122 -0
  116. rasa/core/brokers/__init__.py +0 -0
  117. rasa/core/brokers/broker.py +126 -0
  118. rasa/core/brokers/file.py +58 -0
  119. rasa/core/brokers/kafka.py +324 -0
  120. rasa/core/brokers/pika.py +388 -0
  121. rasa/core/brokers/sql.py +86 -0
  122. rasa/core/channels/__init__.py +61 -0
  123. rasa/core/channels/botframework.py +338 -0
  124. rasa/core/channels/callback.py +84 -0
  125. rasa/core/channels/channel.py +456 -0
  126. rasa/core/channels/console.py +241 -0
  127. rasa/core/channels/development_inspector.py +197 -0
  128. rasa/core/channels/facebook.py +419 -0
  129. rasa/core/channels/hangouts.py +329 -0
  130. rasa/core/channels/inspector/.eslintrc.cjs +25 -0
  131. rasa/core/channels/inspector/.gitignore +23 -0
  132. rasa/core/channels/inspector/README.md +54 -0
  133. rasa/core/channels/inspector/assets/favicon.ico +0 -0
  134. rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
  135. rasa/core/channels/inspector/custom.d.ts +3 -0
  136. rasa/core/channels/inspector/dist/assets/arc-861ddd57.js +1 -0
  137. rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
  138. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-921f02db.js +10 -0
  139. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-b436c4f8.js +2 -0
  140. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-511a23cb.js +2 -0
  141. rasa/core/channels/inspector/dist/assets/createText-62fc7601-ef476ecd.js +7 -0
  142. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-f1878e0a.js +4 -0
  143. rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-fac75185.js +51 -0
  144. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-201c5bbc.js +6 -0
  145. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-f904ae41.js +4 -0
  146. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +1 -0
  147. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-1813da66.js +139 -0
  148. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-872af172.js +266 -0
  149. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-34a0af5a.js +70 -0
  150. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
  151. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
  152. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
  153. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
  154. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-42ba3e3d.js +1 -0
  155. rasa/core/channels/inspector/dist/assets/index-37817b51.js +1317 -0
  156. rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
  157. rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-6b731386.js +7 -0
  158. rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
  159. rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-e8579ac6.js +139 -0
  160. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
  161. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
  162. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
  163. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
  164. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
  165. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
  166. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
  167. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
  168. rasa/core/channels/inspector/dist/assets/layout-89e6403a.js +1 -0
  169. rasa/core/channels/inspector/dist/assets/line-dc73d3fc.js +1 -0
  170. rasa/core/channels/inspector/dist/assets/linear-f5b1d2bc.js +1 -0
  171. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-82cb74fa.js +109 -0
  172. rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
  173. rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
  174. rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-bdf5f29b.js +35 -0
  175. rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-c7a0cbe4.js +7 -0
  176. rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-7ec5410f.js +52 -0
  177. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-caee5554.js +8 -0
  178. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-2935f8db.js +122 -0
  179. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-8f5d9693.js +1 -0
  180. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-d565d1de.js +1 -0
  181. rasa/core/channels/inspector/dist/assets/styles-080da4f6-75ad421d.js +110 -0
  182. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-7e764226.js +159 -0
  183. rasa/core/channels/inspector/dist/assets/styles-9c745c82-7a4e0e61.js +207 -0
  184. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-4019d1bf.js +1 -0
  185. rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-01ea12df.js +61 -0
  186. rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-89407137.js +7 -0
  187. rasa/core/channels/inspector/dist/index.html +42 -0
  188. rasa/core/channels/inspector/index.html +40 -0
  189. rasa/core/channels/inspector/jest.config.ts +13 -0
  190. rasa/core/channels/inspector/package.json +52 -0
  191. rasa/core/channels/inspector/setupTests.ts +2 -0
  192. rasa/core/channels/inspector/src/App.tsx +220 -0
  193. rasa/core/channels/inspector/src/components/Chat.tsx +95 -0
  194. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +108 -0
  195. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
  196. rasa/core/channels/inspector/src/components/DialogueStack.tsx +136 -0
  197. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
  198. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
  199. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +22 -0
  200. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
  201. rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
  202. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
  203. rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
  204. rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
  205. rasa/core/channels/inspector/src/helpers/audiostream.ts +191 -0
  206. rasa/core/channels/inspector/src/helpers/formatters.test.ts +392 -0
  207. rasa/core/channels/inspector/src/helpers/formatters.ts +306 -0
  208. rasa/core/channels/inspector/src/helpers/utils.ts +127 -0
  209. rasa/core/channels/inspector/src/main.tsx +13 -0
  210. rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
  211. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
  212. rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
  213. rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
  214. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
  215. rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
  216. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
  217. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
  218. rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
  219. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
  220. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
  221. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
  222. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
  223. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
  224. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
  225. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
  226. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
  227. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
  228. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
  229. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
  230. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
  231. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
  232. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
  233. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
  234. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
  235. rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
  236. rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
  237. rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
  238. rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
  239. rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
  240. rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
  241. rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
  242. rasa/core/channels/inspector/src/theme/index.ts +101 -0
  243. rasa/core/channels/inspector/src/types.ts +84 -0
  244. rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
  245. rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
  246. rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
  247. rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
  248. rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
  249. rasa/core/channels/inspector/tsconfig.json +26 -0
  250. rasa/core/channels/inspector/tsconfig.node.json +10 -0
  251. rasa/core/channels/inspector/vite.config.ts +8 -0
  252. rasa/core/channels/inspector/yarn.lock +6249 -0
  253. rasa/core/channels/mattermost.py +229 -0
  254. rasa/core/channels/rasa_chat.py +126 -0
  255. rasa/core/channels/rest.py +230 -0
  256. rasa/core/channels/rocketchat.py +174 -0
  257. rasa/core/channels/slack.py +620 -0
  258. rasa/core/channels/socketio.py +302 -0
  259. rasa/core/channels/telegram.py +298 -0
  260. rasa/core/channels/twilio.py +169 -0
  261. rasa/core/channels/vier_cvg.py +374 -0
  262. rasa/core/channels/voice_ready/__init__.py +0 -0
  263. rasa/core/channels/voice_ready/audiocodes.py +501 -0
  264. rasa/core/channels/voice_ready/jambonz.py +121 -0
  265. rasa/core/channels/voice_ready/jambonz_protocol.py +396 -0
  266. rasa/core/channels/voice_ready/twilio_voice.py +403 -0
  267. rasa/core/channels/voice_ready/utils.py +37 -0
  268. rasa/core/channels/voice_stream/__init__.py +0 -0
  269. rasa/core/channels/voice_stream/asr/__init__.py +0 -0
  270. rasa/core/channels/voice_stream/asr/asr_engine.py +89 -0
  271. rasa/core/channels/voice_stream/asr/asr_event.py +18 -0
  272. rasa/core/channels/voice_stream/asr/azure.py +130 -0
  273. rasa/core/channels/voice_stream/asr/deepgram.py +90 -0
  274. rasa/core/channels/voice_stream/audio_bytes.py +8 -0
  275. rasa/core/channels/voice_stream/browser_audio.py +107 -0
  276. rasa/core/channels/voice_stream/call_state.py +23 -0
  277. rasa/core/channels/voice_stream/tts/__init__.py +0 -0
  278. rasa/core/channels/voice_stream/tts/azure.py +106 -0
  279. rasa/core/channels/voice_stream/tts/cartesia.py +118 -0
  280. rasa/core/channels/voice_stream/tts/tts_cache.py +27 -0
  281. rasa/core/channels/voice_stream/tts/tts_engine.py +58 -0
  282. rasa/core/channels/voice_stream/twilio_media_streams.py +173 -0
  283. rasa/core/channels/voice_stream/util.py +57 -0
  284. rasa/core/channels/voice_stream/voice_channel.py +427 -0
  285. rasa/core/channels/webexteams.py +134 -0
  286. rasa/core/concurrent_lock_store.py +210 -0
  287. rasa/core/constants.py +112 -0
  288. rasa/core/evaluation/__init__.py +0 -0
  289. rasa/core/evaluation/marker.py +267 -0
  290. rasa/core/evaluation/marker_base.py +923 -0
  291. rasa/core/evaluation/marker_stats.py +293 -0
  292. rasa/core/evaluation/marker_tracker_loader.py +103 -0
  293. rasa/core/exceptions.py +29 -0
  294. rasa/core/exporter.py +284 -0
  295. rasa/core/featurizers/__init__.py +0 -0
  296. rasa/core/featurizers/precomputation.py +410 -0
  297. rasa/core/featurizers/single_state_featurizer.py +421 -0
  298. rasa/core/featurizers/tracker_featurizers.py +1262 -0
  299. rasa/core/http_interpreter.py +89 -0
  300. rasa/core/information_retrieval/__init__.py +7 -0
  301. rasa/core/information_retrieval/faiss.py +124 -0
  302. rasa/core/information_retrieval/information_retrieval.py +137 -0
  303. rasa/core/information_retrieval/milvus.py +59 -0
  304. rasa/core/information_retrieval/qdrant.py +96 -0
  305. rasa/core/jobs.py +63 -0
  306. rasa/core/lock.py +139 -0
  307. rasa/core/lock_store.py +343 -0
  308. rasa/core/migrate.py +403 -0
  309. rasa/core/nlg/__init__.py +3 -0
  310. rasa/core/nlg/callback.py +146 -0
  311. rasa/core/nlg/contextual_response_rephraser.py +320 -0
  312. rasa/core/nlg/generator.py +230 -0
  313. rasa/core/nlg/interpolator.py +143 -0
  314. rasa/core/nlg/response.py +155 -0
  315. rasa/core/nlg/summarize.py +70 -0
  316. rasa/core/persistor.py +538 -0
  317. rasa/core/policies/__init__.py +0 -0
  318. rasa/core/policies/ensemble.py +329 -0
  319. rasa/core/policies/enterprise_search_policy.py +905 -0
  320. rasa/core/policies/enterprise_search_prompt_template.jinja2 +25 -0
  321. rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +60 -0
  322. rasa/core/policies/flow_policy.py +205 -0
  323. rasa/core/policies/flows/__init__.py +0 -0
  324. rasa/core/policies/flows/flow_exceptions.py +44 -0
  325. rasa/core/policies/flows/flow_executor.py +754 -0
  326. rasa/core/policies/flows/flow_step_result.py +43 -0
  327. rasa/core/policies/intentless_policy.py +1031 -0
  328. rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
  329. rasa/core/policies/memoization.py +538 -0
  330. rasa/core/policies/policy.py +725 -0
  331. rasa/core/policies/rule_policy.py +1273 -0
  332. rasa/core/policies/ted_policy.py +2169 -0
  333. rasa/core/policies/unexpected_intent_policy.py +1022 -0
  334. rasa/core/processor.py +1465 -0
  335. rasa/core/run.py +342 -0
  336. rasa/core/secrets_manager/__init__.py +0 -0
  337. rasa/core/secrets_manager/constants.py +36 -0
  338. rasa/core/secrets_manager/endpoints.py +391 -0
  339. rasa/core/secrets_manager/factory.py +241 -0
  340. rasa/core/secrets_manager/secret_manager.py +262 -0
  341. rasa/core/secrets_manager/vault.py +584 -0
  342. rasa/core/test.py +1335 -0
  343. rasa/core/tracker_store.py +1703 -0
  344. rasa/core/train.py +105 -0
  345. rasa/core/training/__init__.py +89 -0
  346. rasa/core/training/converters/__init__.py +0 -0
  347. rasa/core/training/converters/responses_prefix_converter.py +119 -0
  348. rasa/core/training/interactive.py +1744 -0
  349. rasa/core/training/story_conflict.py +381 -0
  350. rasa/core/training/training.py +93 -0
  351. rasa/core/utils.py +366 -0
  352. rasa/core/visualize.py +70 -0
  353. rasa/dialogue_understanding/__init__.py +0 -0
  354. rasa/dialogue_understanding/coexistence/__init__.py +0 -0
  355. rasa/dialogue_understanding/coexistence/constants.py +4 -0
  356. rasa/dialogue_understanding/coexistence/intent_based_router.py +196 -0
  357. rasa/dialogue_understanding/coexistence/llm_based_router.py +327 -0
  358. rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
  359. rasa/dialogue_understanding/commands/__init__.py +61 -0
  360. rasa/dialogue_understanding/commands/can_not_handle_command.py +70 -0
  361. rasa/dialogue_understanding/commands/cancel_flow_command.py +125 -0
  362. rasa/dialogue_understanding/commands/change_flow_command.py +44 -0
  363. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +57 -0
  364. rasa/dialogue_understanding/commands/clarify_command.py +86 -0
  365. rasa/dialogue_understanding/commands/command.py +85 -0
  366. rasa/dialogue_understanding/commands/correct_slots_command.py +297 -0
  367. rasa/dialogue_understanding/commands/error_command.py +79 -0
  368. rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
  369. rasa/dialogue_understanding/commands/handle_code_change_command.py +73 -0
  370. rasa/dialogue_understanding/commands/human_handoff_command.py +66 -0
  371. rasa/dialogue_understanding/commands/knowledge_answer_command.py +57 -0
  372. rasa/dialogue_understanding/commands/noop_command.py +54 -0
  373. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +60 -0
  374. rasa/dialogue_understanding/commands/restart_command.py +58 -0
  375. rasa/dialogue_understanding/commands/session_end_command.py +61 -0
  376. rasa/dialogue_understanding/commands/session_start_command.py +59 -0
  377. rasa/dialogue_understanding/commands/set_slot_command.py +160 -0
  378. rasa/dialogue_understanding/commands/skip_question_command.py +75 -0
  379. rasa/dialogue_understanding/commands/start_flow_command.py +107 -0
  380. rasa/dialogue_understanding/commands/user_silence_command.py +59 -0
  381. rasa/dialogue_understanding/commands/utils.py +45 -0
  382. rasa/dialogue_understanding/generator/__init__.py +21 -0
  383. rasa/dialogue_understanding/generator/command_generator.py +464 -0
  384. rasa/dialogue_understanding/generator/constants.py +27 -0
  385. rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
  386. rasa/dialogue_understanding/generator/flow_retrieval.py +466 -0
  387. rasa/dialogue_understanding/generator/llm_based_command_generator.py +500 -0
  388. rasa/dialogue_understanding/generator/llm_command_generator.py +67 -0
  389. rasa/dialogue_understanding/generator/multi_step/__init__.py +0 -0
  390. rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2 +62 -0
  391. rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2 +38 -0
  392. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +920 -0
  393. rasa/dialogue_understanding/generator/nlu_command_adapter.py +261 -0
  394. rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
  395. rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +60 -0
  396. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +486 -0
  397. rasa/dialogue_understanding/patterns/__init__.py +0 -0
  398. rasa/dialogue_understanding/patterns/cancel.py +111 -0
  399. rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
  400. rasa/dialogue_understanding/patterns/chitchat.py +37 -0
  401. rasa/dialogue_understanding/patterns/clarify.py +97 -0
  402. rasa/dialogue_understanding/patterns/code_change.py +41 -0
  403. rasa/dialogue_understanding/patterns/collect_information.py +90 -0
  404. rasa/dialogue_understanding/patterns/completed.py +40 -0
  405. rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
  406. rasa/dialogue_understanding/patterns/correction.py +278 -0
  407. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +301 -0
  408. rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
  409. rasa/dialogue_understanding/patterns/internal_error.py +47 -0
  410. rasa/dialogue_understanding/patterns/repeat.py +37 -0
  411. rasa/dialogue_understanding/patterns/restart.py +37 -0
  412. rasa/dialogue_understanding/patterns/search.py +37 -0
  413. rasa/dialogue_understanding/patterns/session_start.py +37 -0
  414. rasa/dialogue_understanding/patterns/skip_question.py +38 -0
  415. rasa/dialogue_understanding/patterns/user_silence.py +37 -0
  416. rasa/dialogue_understanding/processor/__init__.py +0 -0
  417. rasa/dialogue_understanding/processor/command_processor.py +720 -0
  418. rasa/dialogue_understanding/processor/command_processor_component.py +43 -0
  419. rasa/dialogue_understanding/stack/__init__.py +0 -0
  420. rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
  421. rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
  422. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
  423. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
  424. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
  425. rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
  426. rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
  427. rasa/dialogue_understanding/stack/utils.py +211 -0
  428. rasa/dialogue_understanding/utils.py +14 -0
  429. rasa/dialogue_understanding_test/__init__.py +0 -0
  430. rasa/dialogue_understanding_test/command_metric_calculation.py +12 -0
  431. rasa/dialogue_understanding_test/constants.py +17 -0
  432. rasa/dialogue_understanding_test/du_test_case.py +118 -0
  433. rasa/dialogue_understanding_test/du_test_result.py +11 -0
  434. rasa/dialogue_understanding_test/du_test_runner.py +93 -0
  435. rasa/dialogue_understanding_test/io.py +54 -0
  436. rasa/dialogue_understanding_test/validation.py +22 -0
  437. rasa/e2e_test/__init__.py +0 -0
  438. rasa/e2e_test/aggregate_test_stats_calculator.py +134 -0
  439. rasa/e2e_test/assertions.py +1345 -0
  440. rasa/e2e_test/assertions_schema.yml +129 -0
  441. rasa/e2e_test/constants.py +31 -0
  442. rasa/e2e_test/e2e_config.py +220 -0
  443. rasa/e2e_test/e2e_config_schema.yml +26 -0
  444. rasa/e2e_test/e2e_test_case.py +569 -0
  445. rasa/e2e_test/e2e_test_converter.py +363 -0
  446. rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
  447. rasa/e2e_test/e2e_test_coverage_report.py +364 -0
  448. rasa/e2e_test/e2e_test_result.py +54 -0
  449. rasa/e2e_test/e2e_test_runner.py +1192 -0
  450. rasa/e2e_test/e2e_test_schema.yml +181 -0
  451. rasa/e2e_test/pykwalify_extensions.py +39 -0
  452. rasa/e2e_test/stub_custom_action.py +70 -0
  453. rasa/e2e_test/utils/__init__.py +0 -0
  454. rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
  455. rasa/e2e_test/utils/io.py +598 -0
  456. rasa/e2e_test/utils/validation.py +178 -0
  457. rasa/engine/__init__.py +0 -0
  458. rasa/engine/caching.py +463 -0
  459. rasa/engine/constants.py +17 -0
  460. rasa/engine/exceptions.py +14 -0
  461. rasa/engine/graph.py +642 -0
  462. rasa/engine/loader.py +48 -0
  463. rasa/engine/recipes/__init__.py +0 -0
  464. rasa/engine/recipes/config_files/default_config.yml +41 -0
  465. rasa/engine/recipes/default_components.py +97 -0
  466. rasa/engine/recipes/default_recipe.py +1272 -0
  467. rasa/engine/recipes/graph_recipe.py +79 -0
  468. rasa/engine/recipes/recipe.py +93 -0
  469. rasa/engine/runner/__init__.py +0 -0
  470. rasa/engine/runner/dask.py +250 -0
  471. rasa/engine/runner/interface.py +49 -0
  472. rasa/engine/storage/__init__.py +0 -0
  473. rasa/engine/storage/local_model_storage.py +244 -0
  474. rasa/engine/storage/resource.py +110 -0
  475. rasa/engine/storage/storage.py +199 -0
  476. rasa/engine/training/__init__.py +0 -0
  477. rasa/engine/training/components.py +176 -0
  478. rasa/engine/training/fingerprinting.py +64 -0
  479. rasa/engine/training/graph_trainer.py +256 -0
  480. rasa/engine/training/hooks.py +164 -0
  481. rasa/engine/validation.py +1451 -0
  482. rasa/env.py +14 -0
  483. rasa/exceptions.py +69 -0
  484. rasa/graph_components/__init__.py +0 -0
  485. rasa/graph_components/converters/__init__.py +0 -0
  486. rasa/graph_components/converters/nlu_message_converter.py +48 -0
  487. rasa/graph_components/providers/__init__.py +0 -0
  488. rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
  489. rasa/graph_components/providers/domain_provider.py +71 -0
  490. rasa/graph_components/providers/flows_provider.py +74 -0
  491. rasa/graph_components/providers/forms_provider.py +44 -0
  492. rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
  493. rasa/graph_components/providers/responses_provider.py +44 -0
  494. rasa/graph_components/providers/rule_only_provider.py +49 -0
  495. rasa/graph_components/providers/story_graph_provider.py +96 -0
  496. rasa/graph_components/providers/training_tracker_provider.py +55 -0
  497. rasa/graph_components/validators/__init__.py +0 -0
  498. rasa/graph_components/validators/default_recipe_validator.py +550 -0
  499. rasa/graph_components/validators/finetuning_validator.py +302 -0
  500. rasa/hooks.py +111 -0
  501. rasa/jupyter.py +63 -0
  502. rasa/llm_fine_tuning/__init__.py +0 -0
  503. rasa/llm_fine_tuning/annotation_module.py +241 -0
  504. rasa/llm_fine_tuning/conversations.py +144 -0
  505. rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
  506. rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
  507. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
  508. rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
  509. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
  510. rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
  511. rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
  512. rasa/llm_fine_tuning/storage.py +174 -0
  513. rasa/llm_fine_tuning/train_test_split_module.py +441 -0
  514. rasa/markers/__init__.py +0 -0
  515. rasa/markers/marker.py +269 -0
  516. rasa/markers/marker_base.py +828 -0
  517. rasa/markers/upload.py +74 -0
  518. rasa/markers/validate.py +21 -0
  519. rasa/model.py +118 -0
  520. rasa/model_manager/__init__.py +0 -0
  521. rasa/model_manager/config.py +40 -0
  522. rasa/model_manager/model_api.py +559 -0
  523. rasa/model_manager/runner_service.py +286 -0
  524. rasa/model_manager/socket_bridge.py +146 -0
  525. rasa/model_manager/studio_jwt_auth.py +86 -0
  526. rasa/model_manager/trainer_service.py +325 -0
  527. rasa/model_manager/utils.py +87 -0
  528. rasa/model_manager/warm_rasa_process.py +187 -0
  529. rasa/model_service.py +112 -0
  530. rasa/model_testing.py +457 -0
  531. rasa/model_training.py +596 -0
  532. rasa/nlu/__init__.py +7 -0
  533. rasa/nlu/classifiers/__init__.py +3 -0
  534. rasa/nlu/classifiers/classifier.py +5 -0
  535. rasa/nlu/classifiers/diet_classifier.py +1881 -0
  536. rasa/nlu/classifiers/fallback_classifier.py +192 -0
  537. rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
  538. rasa/nlu/classifiers/logistic_regression_classifier.py +253 -0
  539. rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
  540. rasa/nlu/classifiers/regex_message_handler.py +56 -0
  541. rasa/nlu/classifiers/sklearn_intent_classifier.py +330 -0
  542. rasa/nlu/constants.py +77 -0
  543. rasa/nlu/convert.py +40 -0
  544. rasa/nlu/emulators/__init__.py +0 -0
  545. rasa/nlu/emulators/dialogflow.py +55 -0
  546. rasa/nlu/emulators/emulator.py +49 -0
  547. rasa/nlu/emulators/luis.py +86 -0
  548. rasa/nlu/emulators/no_emulator.py +10 -0
  549. rasa/nlu/emulators/wit.py +56 -0
  550. rasa/nlu/extractors/__init__.py +0 -0
  551. rasa/nlu/extractors/crf_entity_extractor.py +715 -0
  552. rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
  553. rasa/nlu/extractors/entity_synonyms.py +178 -0
  554. rasa/nlu/extractors/extractor.py +470 -0
  555. rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
  556. rasa/nlu/extractors/regex_entity_extractor.py +220 -0
  557. rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
  558. rasa/nlu/featurizers/__init__.py +0 -0
  559. rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
  560. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +445 -0
  561. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
  562. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +768 -0
  563. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
  564. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
  565. rasa/nlu/featurizers/featurizer.py +89 -0
  566. rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
  567. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +867 -0
  568. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +571 -0
  569. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +271 -0
  570. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
  571. rasa/nlu/model.py +24 -0
  572. rasa/nlu/run.py +27 -0
  573. rasa/nlu/selectors/__init__.py +0 -0
  574. rasa/nlu/selectors/response_selector.py +987 -0
  575. rasa/nlu/test.py +1940 -0
  576. rasa/nlu/tokenizers/__init__.py +0 -0
  577. rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
  578. rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
  579. rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
  580. rasa/nlu/tokenizers/tokenizer.py +239 -0
  581. rasa/nlu/tokenizers/whitespace_tokenizer.py +95 -0
  582. rasa/nlu/utils/__init__.py +35 -0
  583. rasa/nlu/utils/bilou_utils.py +462 -0
  584. rasa/nlu/utils/hugging_face/__init__.py +0 -0
  585. rasa/nlu/utils/hugging_face/registry.py +108 -0
  586. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
  587. rasa/nlu/utils/mitie_utils.py +113 -0
  588. rasa/nlu/utils/pattern_utils.py +168 -0
  589. rasa/nlu/utils/spacy_utils.py +310 -0
  590. rasa/plugin.py +90 -0
  591. rasa/server.py +1588 -0
  592. rasa/shared/__init__.py +0 -0
  593. rasa/shared/constants.py +311 -0
  594. rasa/shared/core/__init__.py +0 -0
  595. rasa/shared/core/command_payload_reader.py +109 -0
  596. rasa/shared/core/constants.py +180 -0
  597. rasa/shared/core/conversation.py +46 -0
  598. rasa/shared/core/domain.py +2172 -0
  599. rasa/shared/core/events.py +2559 -0
  600. rasa/shared/core/flows/__init__.py +7 -0
  601. rasa/shared/core/flows/flow.py +562 -0
  602. rasa/shared/core/flows/flow_path.py +84 -0
  603. rasa/shared/core/flows/flow_step.py +146 -0
  604. rasa/shared/core/flows/flow_step_links.py +319 -0
  605. rasa/shared/core/flows/flow_step_sequence.py +70 -0
  606. rasa/shared/core/flows/flows_list.py +258 -0
  607. rasa/shared/core/flows/flows_yaml_schema.json +303 -0
  608. rasa/shared/core/flows/nlu_trigger.py +117 -0
  609. rasa/shared/core/flows/steps/__init__.py +24 -0
  610. rasa/shared/core/flows/steps/action.py +56 -0
  611. rasa/shared/core/flows/steps/call.py +64 -0
  612. rasa/shared/core/flows/steps/collect.py +112 -0
  613. rasa/shared/core/flows/steps/constants.py +5 -0
  614. rasa/shared/core/flows/steps/continuation.py +36 -0
  615. rasa/shared/core/flows/steps/end.py +22 -0
  616. rasa/shared/core/flows/steps/internal.py +44 -0
  617. rasa/shared/core/flows/steps/link.py +51 -0
  618. rasa/shared/core/flows/steps/no_operation.py +48 -0
  619. rasa/shared/core/flows/steps/set_slots.py +50 -0
  620. rasa/shared/core/flows/steps/start.py +30 -0
  621. rasa/shared/core/flows/utils.py +39 -0
  622. rasa/shared/core/flows/validation.py +735 -0
  623. rasa/shared/core/flows/yaml_flows_io.py +405 -0
  624. rasa/shared/core/generator.py +908 -0
  625. rasa/shared/core/slot_mappings.py +526 -0
  626. rasa/shared/core/slots.py +654 -0
  627. rasa/shared/core/trackers.py +1183 -0
  628. rasa/shared/core/training_data/__init__.py +0 -0
  629. rasa/shared/core/training_data/loading.py +89 -0
  630. rasa/shared/core/training_data/story_reader/__init__.py +0 -0
  631. rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
  632. rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
  633. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
  634. rasa/shared/core/training_data/story_writer/__init__.py +0 -0
  635. rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
  636. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +444 -0
  637. rasa/shared/core/training_data/structures.py +858 -0
  638. rasa/shared/core/training_data/visualization.html +146 -0
  639. rasa/shared/core/training_data/visualization.py +603 -0
  640. rasa/shared/data.py +249 -0
  641. rasa/shared/engine/__init__.py +0 -0
  642. rasa/shared/engine/caching.py +26 -0
  643. rasa/shared/exceptions.py +167 -0
  644. rasa/shared/importers/__init__.py +0 -0
  645. rasa/shared/importers/importer.py +770 -0
  646. rasa/shared/importers/multi_project.py +215 -0
  647. rasa/shared/importers/rasa.py +108 -0
  648. rasa/shared/importers/remote_importer.py +196 -0
  649. rasa/shared/importers/utils.py +36 -0
  650. rasa/shared/nlu/__init__.py +0 -0
  651. rasa/shared/nlu/constants.py +53 -0
  652. rasa/shared/nlu/interpreter.py +10 -0
  653. rasa/shared/nlu/training_data/__init__.py +0 -0
  654. rasa/shared/nlu/training_data/entities_parser.py +208 -0
  655. rasa/shared/nlu/training_data/features.py +492 -0
  656. rasa/shared/nlu/training_data/formats/__init__.py +10 -0
  657. rasa/shared/nlu/training_data/formats/dialogflow.py +163 -0
  658. rasa/shared/nlu/training_data/formats/luis.py +87 -0
  659. rasa/shared/nlu/training_data/formats/rasa.py +135 -0
  660. rasa/shared/nlu/training_data/formats/rasa_yaml.py +618 -0
  661. rasa/shared/nlu/training_data/formats/readerwriter.py +244 -0
  662. rasa/shared/nlu/training_data/formats/wit.py +52 -0
  663. rasa/shared/nlu/training_data/loading.py +137 -0
  664. rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
  665. rasa/shared/nlu/training_data/message.py +490 -0
  666. rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
  667. rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
  668. rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
  669. rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
  670. rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
  671. rasa/shared/nlu/training_data/training_data.py +729 -0
  672. rasa/shared/nlu/training_data/util.py +223 -0
  673. rasa/shared/providers/__init__.py +0 -0
  674. rasa/shared/providers/_configs/__init__.py +0 -0
  675. rasa/shared/providers/_configs/azure_openai_client_config.py +677 -0
  676. rasa/shared/providers/_configs/client_config.py +59 -0
  677. rasa/shared/providers/_configs/default_litellm_client_config.py +132 -0
  678. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +236 -0
  679. rasa/shared/providers/_configs/litellm_router_client_config.py +222 -0
  680. rasa/shared/providers/_configs/model_group_config.py +173 -0
  681. rasa/shared/providers/_configs/openai_client_config.py +177 -0
  682. rasa/shared/providers/_configs/rasa_llm_client_config.py +75 -0
  683. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +178 -0
  684. rasa/shared/providers/_configs/utils.py +117 -0
  685. rasa/shared/providers/_ssl_verification_utils.py +124 -0
  686. rasa/shared/providers/_utils.py +79 -0
  687. rasa/shared/providers/constants.py +7 -0
  688. rasa/shared/providers/embedding/__init__.py +0 -0
  689. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +243 -0
  690. rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
  691. rasa/shared/providers/embedding/azure_openai_embedding_client.py +335 -0
  692. rasa/shared/providers/embedding/default_litellm_embedding_client.py +126 -0
  693. rasa/shared/providers/embedding/embedding_client.py +90 -0
  694. rasa/shared/providers/embedding/embedding_response.py +41 -0
  695. rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
  696. rasa/shared/providers/embedding/litellm_router_embedding_client.py +138 -0
  697. rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
  698. rasa/shared/providers/llm/__init__.py +0 -0
  699. rasa/shared/providers/llm/_base_litellm_client.py +265 -0
  700. rasa/shared/providers/llm/azure_openai_llm_client.py +415 -0
  701. rasa/shared/providers/llm/default_litellm_llm_client.py +110 -0
  702. rasa/shared/providers/llm/litellm_router_llm_client.py +202 -0
  703. rasa/shared/providers/llm/llm_client.py +78 -0
  704. rasa/shared/providers/llm/llm_response.py +50 -0
  705. rasa/shared/providers/llm/openai_llm_client.py +161 -0
  706. rasa/shared/providers/llm/rasa_llm_client.py +120 -0
  707. rasa/shared/providers/llm/self_hosted_llm_client.py +276 -0
  708. rasa/shared/providers/mappings.py +94 -0
  709. rasa/shared/providers/router/__init__.py +0 -0
  710. rasa/shared/providers/router/_base_litellm_router_client.py +185 -0
  711. rasa/shared/providers/router/router_client.py +75 -0
  712. rasa/shared/utils/__init__.py +0 -0
  713. rasa/shared/utils/cli.py +102 -0
  714. rasa/shared/utils/common.py +324 -0
  715. rasa/shared/utils/constants.py +4 -0
  716. rasa/shared/utils/health_check/__init__.py +0 -0
  717. rasa/shared/utils/health_check/embeddings_health_check_mixin.py +31 -0
  718. rasa/shared/utils/health_check/health_check.py +258 -0
  719. rasa/shared/utils/health_check/llm_health_check_mixin.py +31 -0
  720. rasa/shared/utils/io.py +499 -0
  721. rasa/shared/utils/llm.py +764 -0
  722. rasa/shared/utils/pykwalify_extensions.py +27 -0
  723. rasa/shared/utils/schemas/__init__.py +0 -0
  724. rasa/shared/utils/schemas/config.yml +2 -0
  725. rasa/shared/utils/schemas/domain.yml +145 -0
  726. rasa/shared/utils/schemas/events.py +214 -0
  727. rasa/shared/utils/schemas/model_config.yml +36 -0
  728. rasa/shared/utils/schemas/stories.yml +173 -0
  729. rasa/shared/utils/yaml.py +1068 -0
  730. rasa/studio/__init__.py +0 -0
  731. rasa/studio/auth.py +270 -0
  732. rasa/studio/config.py +136 -0
  733. rasa/studio/constants.py +19 -0
  734. rasa/studio/data_handler.py +368 -0
  735. rasa/studio/download.py +489 -0
  736. rasa/studio/results_logger.py +137 -0
  737. rasa/studio/train.py +134 -0
  738. rasa/studio/upload.py +563 -0
  739. rasa/telemetry.py +1876 -0
  740. rasa/tracing/__init__.py +0 -0
  741. rasa/tracing/config.py +355 -0
  742. rasa/tracing/constants.py +62 -0
  743. rasa/tracing/instrumentation/__init__.py +0 -0
  744. rasa/tracing/instrumentation/attribute_extractors.py +765 -0
  745. rasa/tracing/instrumentation/instrumentation.py +1306 -0
  746. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +144 -0
  747. rasa/tracing/instrumentation/metrics.py +294 -0
  748. rasa/tracing/metric_instrument_provider.py +205 -0
  749. rasa/utils/__init__.py +0 -0
  750. rasa/utils/beta.py +83 -0
  751. rasa/utils/cli.py +28 -0
  752. rasa/utils/common.py +639 -0
  753. rasa/utils/converter.py +53 -0
  754. rasa/utils/endpoints.py +331 -0
  755. rasa/utils/io.py +252 -0
  756. rasa/utils/json_utils.py +60 -0
  757. rasa/utils/licensing.py +542 -0
  758. rasa/utils/log_utils.py +181 -0
  759. rasa/utils/mapper.py +210 -0
  760. rasa/utils/ml_utils.py +147 -0
  761. rasa/utils/plotting.py +362 -0
  762. rasa/utils/sanic_error_handler.py +32 -0
  763. rasa/utils/singleton.py +23 -0
  764. rasa/utils/tensorflow/__init__.py +0 -0
  765. rasa/utils/tensorflow/callback.py +112 -0
  766. rasa/utils/tensorflow/constants.py +116 -0
  767. rasa/utils/tensorflow/crf.py +492 -0
  768. rasa/utils/tensorflow/data_generator.py +440 -0
  769. rasa/utils/tensorflow/environment.py +161 -0
  770. rasa/utils/tensorflow/exceptions.py +5 -0
  771. rasa/utils/tensorflow/feature_array.py +366 -0
  772. rasa/utils/tensorflow/layers.py +1565 -0
  773. rasa/utils/tensorflow/layers_utils.py +113 -0
  774. rasa/utils/tensorflow/metrics.py +281 -0
  775. rasa/utils/tensorflow/model_data.py +798 -0
  776. rasa/utils/tensorflow/model_data_utils.py +499 -0
  777. rasa/utils/tensorflow/models.py +935 -0
  778. rasa/utils/tensorflow/rasa_layers.py +1094 -0
  779. rasa/utils/tensorflow/transformer.py +640 -0
  780. rasa/utils/tensorflow/types.py +6 -0
  781. rasa/utils/train_utils.py +572 -0
  782. rasa/utils/url_tools.py +53 -0
  783. rasa/utils/yaml.py +54 -0
  784. rasa/validator.py +1644 -0
  785. rasa/version.py +3 -0
  786. rasa_pro-3.12.0.dev1.dist-info/METADATA +199 -0
  787. rasa_pro-3.12.0.dev1.dist-info/NOTICE +5 -0
  788. rasa_pro-3.12.0.dev1.dist-info/RECORD +790 -0
  789. rasa_pro-3.12.0.dev1.dist-info/WHEEL +4 -0
  790. rasa_pro-3.12.0.dev1.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,798 @@
1
+ import logging
2
+ from typing import (
3
+ Optional,
4
+ DefaultDict,
5
+ Dict,
6
+ Iterable,
7
+ Text,
8
+ List,
9
+ Tuple,
10
+ Any,
11
+ Union,
12
+ NamedTuple,
13
+ ItemsView,
14
+ overload,
15
+ cast,
16
+ )
17
+ from collections import defaultdict, OrderedDict
18
+
19
+ import numpy as np
20
+ import scipy.sparse
21
+ from sklearn.model_selection import train_test_split
22
+
23
+ from rasa.utils.tensorflow.feature_array import FeatureArray
24
+
25
+ logger = logging.getLogger(__name__)
26
+
27
+
28
+ def ragged_array_to_ndarray(ragged_array: Iterable[np.ndarray]) -> np.ndarray:
29
+ """Converts ragged array to numpy array.
30
+
31
+ Ragged array, also known as a jagged array, irregular array is an array of
32
+ arrays of which the member arrays can be of different lengths.
33
+ Try to convert as is (preserves type), if it fails because not all numpy arrays have
34
+ the same shape, then creates numpy array of objects.
35
+ """
36
+ try:
37
+ return np.array(ragged_array)
38
+ except ValueError:
39
+ return np.array(ragged_array, dtype=object)
40
+
41
+
42
+ class FeatureSignature(NamedTuple):
43
+ """Signature of feature arrays.
44
+
45
+ Stores the number of units, the type (sparse vs dense), and the number of
46
+ dimensions of features.
47
+ """
48
+
49
+ is_sparse: bool
50
+ units: Optional[int]
51
+ number_of_dimensions: int
52
+
53
+
54
+ # Mapping of attribute name and feature name to a list of feature arrays representing
55
+ # the actual features
56
+ # For example:
57
+ # "text" -> { "sentence": [
58
+ # "feature array containing dense features for every training example",
59
+ # "feature array containing sparse features for every training example"
60
+ # ]}
61
+ Data = Dict[Text, Dict[Text, List[FeatureArray]]]
62
+
63
+
64
+ class RasaModelData:
65
+ """Data object used for all RasaModels.
66
+
67
+ It contains all features needed to train the models.
68
+ 'data' is a mapping of attribute name, e.g. TEXT, INTENT, etc., and feature name,
69
+ e.g. SENTENCE, SEQUENCE, etc., to a list of feature arrays representing the actual
70
+ features.
71
+ 'label_key' and 'label_sub_key' point to the labels inside 'data'. For
72
+ example, if your intent labels are stored under INTENT -> IDS, 'label_key' would
73
+ be "INTENT" and 'label_sub_key' would be "IDS".
74
+ """
75
+
76
+ def __init__(
77
+ self,
78
+ label_key: Optional[Text] = None,
79
+ label_sub_key: Optional[Text] = None,
80
+ data: Optional[Data] = None,
81
+ ) -> None:
82
+ """Initializes the RasaModelData object.
83
+
84
+ Args:
85
+ label_key: the key of a label used for balancing, etc.
86
+ label_sub_key: the sub key of a label used for balancing, etc.
87
+ data: the data holding the features
88
+ """
89
+ self.data = data or defaultdict(lambda: defaultdict(list))
90
+ self.label_key = label_key
91
+ self.label_sub_key = label_sub_key
92
+ # should be updated when features are added
93
+ self.num_examples = self.number_of_examples()
94
+ self.sparse_feature_sizes: Dict[Text, Dict[Text, List[int]]] = {}
95
+
96
+ @overload
97
+ def get(self, key: Text, sub_key: Text) -> List[FeatureArray]: ...
98
+
99
+ @overload
100
+ def get(self, key: Text, sub_key: None = ...) -> Dict[Text, List[FeatureArray]]: ...
101
+
102
+ def get(
103
+ self, key: Text, sub_key: Optional[Text] = None
104
+ ) -> Union[Dict[Text, List[FeatureArray]], List[FeatureArray]]:
105
+ """Get the data under the given keys.
106
+
107
+ Args:
108
+ key: The key.
109
+ sub_key: The optional sub key.
110
+
111
+ Returns:
112
+ The requested data.
113
+ """
114
+ if sub_key is None and key in self.data:
115
+ return self.data[key]
116
+
117
+ if sub_key and key in self.data and sub_key in self.data[key]:
118
+ return self.data[key][sub_key]
119
+
120
+ return []
121
+
122
+ def items(self) -> ItemsView:
123
+ """Return the items of the data attribute.
124
+
125
+ Returns:
126
+ The items of data.
127
+ """
128
+ return self.data.items()
129
+
130
+ def values(self) -> Any:
131
+ """Return the values of the data attribute.
132
+
133
+ Returns:
134
+ The values of data.
135
+ """
136
+ return self.data.values()
137
+
138
+ def keys(self, key: Optional[Text] = None) -> List[Text]:
139
+ """Return the keys of the data attribute.
140
+
141
+ Args:
142
+ key: The optional key.
143
+
144
+ Returns:
145
+ The keys of the data.
146
+ """
147
+ if key is None:
148
+ return list(self.data.keys())
149
+
150
+ if key in self.data:
151
+ return list(self.data[key].keys())
152
+
153
+ return []
154
+
155
+ def sort(self) -> None:
156
+ """Sorts data according to its keys."""
157
+ for key, attribute_data in self.data.items():
158
+ self.data[key] = OrderedDict(sorted(attribute_data.items()))
159
+ self.data = OrderedDict(sorted(self.data.items()))
160
+
161
+ def first_data_example(self) -> Data:
162
+ """Return the data with just one feature example per key, sub-key.
163
+
164
+ Returns:
165
+ The simplified data.
166
+ """
167
+ out_data: Data = {}
168
+ for key, attribute_data in self.data.items():
169
+ out_data[key] = {}
170
+ for sub_key, features in attribute_data.items():
171
+ feature_slices = [feature[:1] for feature in features]
172
+ out_data[key][sub_key] = cast(List[FeatureArray], feature_slices)
173
+ return out_data
174
+
175
+ def does_feature_exist(self, key: Text, sub_key: Optional[Text] = None) -> bool:
176
+ """Check if feature key (and sub-key) is present and features are available.
177
+
178
+ Args:
179
+ key: The key.
180
+ sub_key: The optional sub-key.
181
+
182
+ Returns:
183
+ False, if no features for the given keys exists, True otherwise.
184
+ """
185
+ return not self.does_feature_not_exist(key, sub_key)
186
+
187
+ def does_feature_not_exist(self, key: Text, sub_key: Optional[Text] = None) -> bool:
188
+ """Check if feature key (and sub-key) is present and features are available.
189
+
190
+ Args:
191
+ key: The key.
192
+ sub_key: The optional sub-key.
193
+
194
+ Returns:
195
+ True, if no features for the given keys exists, False otherwise.
196
+ """
197
+ if sub_key:
198
+ return (
199
+ key not in self.data
200
+ or not self.data[key]
201
+ or sub_key not in self.data[key]
202
+ or not self.data[key][sub_key]
203
+ )
204
+
205
+ return key not in self.data or not self.data[key]
206
+
207
+ def is_empty(self) -> bool:
208
+ """Checks if data is set."""
209
+ return not self.data
210
+
211
+ def number_of_examples(self, data: Optional[Data] = None) -> int:
212
+ """Obtain number of examples in data.
213
+
214
+ Args:
215
+ data: The data.
216
+
217
+ Raises: A ValueError if number of examples differ for different features.
218
+
219
+ Returns:
220
+ The number of examples in data.
221
+ """
222
+ if not data:
223
+ data = self.data
224
+
225
+ if not data:
226
+ return 0
227
+
228
+ example_lengths = [
229
+ len(f)
230
+ for attribute_data in data.values()
231
+ for features in attribute_data.values()
232
+ for f in features
233
+ ]
234
+
235
+ if not example_lengths:
236
+ return 0
237
+
238
+ # check if number of examples is the same for all values
239
+ if not all(length == example_lengths[0] for length in example_lengths):
240
+ raise ValueError(
241
+ f"Number of examples differs for keys '{data.keys()}'. Number of "
242
+ f"examples should be the same for all data."
243
+ )
244
+
245
+ return example_lengths[0]
246
+
247
+ def number_of_units(self, key: Text, sub_key: Text) -> int:
248
+ """Get the number of units of the given key.
249
+
250
+ Args:
251
+ key: The key.
252
+ sub_key: The optional sub-key.
253
+
254
+ Returns:
255
+ The number of units.
256
+ """
257
+ if key not in self.data or sub_key not in self.data[key]:
258
+ return 0
259
+
260
+ units = 0
261
+ for features in self.data[key][sub_key]:
262
+ if len(features) > 0:
263
+ units += features.units # type: ignore[operator]
264
+
265
+ return units
266
+
267
+ def add_data(self, data: Data, key_prefix: Optional[Text] = None) -> None:
268
+ """Add incoming data to data.
269
+
270
+ Args:
271
+ data: The data to add.
272
+ key_prefix: Optional key prefix to use in front of the key value.
273
+ """
274
+ for key, attribute_data in data.items():
275
+ for sub_key, features in attribute_data.items():
276
+ if key_prefix:
277
+ self.add_features(f"{key_prefix}{key}", sub_key, features)
278
+ else:
279
+ self.add_features(key, sub_key, features)
280
+
281
+ def update_key(
282
+ self, from_key: Text, from_sub_key: Text, to_key: Text, to_sub_key: Text
283
+ ) -> None:
284
+ """Copies the features under the given keys to the new keys and deletes the old.
285
+
286
+ Args:
287
+ from_key: current feature key
288
+ from_sub_key: current feature sub-key
289
+ to_key: new key for feature
290
+ to_sub_key: new sub-key for feature
291
+ """
292
+ if from_key not in self.data or from_sub_key not in self.data[from_key]:
293
+ return
294
+
295
+ if to_key not in self.data:
296
+ self.data[to_key] = {}
297
+ self.data[to_key][to_sub_key] = self.get(from_key, from_sub_key)
298
+ del self.data[from_key][from_sub_key]
299
+
300
+ if not self.data[from_key]:
301
+ del self.data[from_key]
302
+
303
+ def add_features(
304
+ self, key: Text, sub_key: Text, features: Optional[List[FeatureArray]]
305
+ ) -> None:
306
+ """Add list of features to data under specified key.
307
+
308
+ Should update number of examples.
309
+
310
+ Args:
311
+ key: The key
312
+ sub_key: The sub-key
313
+ features: The features to add.
314
+ """
315
+ if features is None:
316
+ return
317
+
318
+ for feature_array in features:
319
+ if len(feature_array) > 0:
320
+ self.data[key][sub_key].append(feature_array)
321
+
322
+ if not self.data[key][sub_key]:
323
+ del self.data[key][sub_key]
324
+
325
+ # update number of examples
326
+ self.num_examples = self.number_of_examples()
327
+
328
+ def add_lengths(
329
+ self, key: Text, sub_key: Text, from_key: Text, from_sub_key: Text
330
+ ) -> None:
331
+ """Adds a feature array of lengths of sequences to data under given key.
332
+
333
+ Args:
334
+ key: The key to add the lengths to
335
+ sub_key: The sub-key to add the lengths to
336
+ from_key: The key to take the lengths from
337
+ from_sub_key: The sub-key to take the lengths from
338
+ """
339
+ if not self.data.get(from_key) or not self.data.get(from_key, {}).get(
340
+ from_sub_key
341
+ ):
342
+ return
343
+
344
+ self.data[key][sub_key] = []
345
+
346
+ for features in self.data[from_key][from_sub_key]:
347
+ if len(features) == 0:
348
+ continue
349
+
350
+ if features.number_of_dimensions == 4:
351
+ lengths = FeatureArray(
352
+ ragged_array_to_ndarray(
353
+ [
354
+ # add one more dim so that dialogue dim
355
+ # would be a sequence
356
+ np.array([[[x.shape[0]]] for x in _features])
357
+ for _features in features
358
+ ]
359
+ ),
360
+ number_of_dimensions=4,
361
+ )
362
+ else:
363
+ lengths = FeatureArray(
364
+ np.array([x.shape[0] for x in features]), number_of_dimensions=1
365
+ )
366
+ self.data[key][sub_key].extend([lengths])
367
+ break
368
+
369
+ def add_sparse_feature_sizes(
370
+ self, sparse_feature_sizes: Dict[Text, Dict[Text, List[int]]]
371
+ ) -> None:
372
+ """Adds a dictionary of feature sizes for different attributes.
373
+
374
+ Args:
375
+ sparse_feature_sizes: a dictionary of attribute that has sparse
376
+ features to a dictionary of a feature type
377
+ to a list of different sparse feature sizes.
378
+ """
379
+ self.sparse_feature_sizes = sparse_feature_sizes
380
+
381
+ def get_sparse_feature_sizes(self) -> Dict[Text, Dict[Text, List[int]]]:
382
+ """Get feature sizes of the model.
383
+
384
+ sparse_feature_sizes is a dictionary of attribute that has sparse features to
385
+ a dictionary of a feature type to a list of different sparse feature sizes.
386
+
387
+ Returns:
388
+ A dictionary of key and sub-key to a list of feature signatures
389
+ (same structure as the data attribute).
390
+ """
391
+ return self.sparse_feature_sizes
392
+
393
+ def split(
394
+ self, number_of_test_examples: int, random_seed: int
395
+ ) -> Tuple["RasaModelData", "RasaModelData"]:
396
+ """Create random hold out test set using stratified split.
397
+
398
+ Args:
399
+ number_of_test_examples: Number of test examples.
400
+ random_seed: Random seed.
401
+
402
+ Returns:
403
+ A tuple of train and test RasaModelData.
404
+ """
405
+ self._check_label_key()
406
+
407
+ if self.label_key is None or self.label_sub_key is None:
408
+ # randomly split data as no label key is set
409
+ multi_values = [
410
+ v
411
+ for attribute_data in self.data.values()
412
+ for data in attribute_data.values()
413
+ for v in data
414
+ ]
415
+ solo_values: List[Any] = [
416
+ []
417
+ for attribute_data in self.data.values()
418
+ for data in attribute_data.values()
419
+ for _ in data
420
+ ]
421
+ stratify = None
422
+ else:
423
+ # make sure that examples for each label value are in both split sets
424
+ label_ids = self._create_label_ids(
425
+ self.data[self.label_key][self.label_sub_key][0]
426
+ )
427
+ label_counts: Dict[int, int] = dict(
428
+ zip(
429
+ *np.unique(
430
+ label_ids,
431
+ return_counts=True,
432
+ axis=0,
433
+ )
434
+ )
435
+ )
436
+
437
+ self._check_train_test_sizes(number_of_test_examples, label_counts)
438
+
439
+ counts = np.array([label_counts[label] for label in label_ids])
440
+ # we perform stratified train test split,
441
+ # which insures every label is present in the train and test data
442
+ # this operation can be performed only for labels
443
+ # that contain several data points
444
+ multi_values = [
445
+ f[counts > 1].view(FeatureArray)
446
+ for attribute_data in self.data.values()
447
+ for features in attribute_data.values()
448
+ for f in features
449
+ ]
450
+ # collect data points that are unique for their label
451
+ solo_values = [
452
+ f[counts == 1]
453
+ for attribute_data in self.data.values()
454
+ for features in attribute_data.values()
455
+ for f in features
456
+ ]
457
+
458
+ stratify = label_ids[counts > 1]
459
+
460
+ output_values = train_test_split(
461
+ *multi_values,
462
+ test_size=number_of_test_examples,
463
+ random_state=random_seed,
464
+ stratify=stratify,
465
+ )
466
+
467
+ return self._convert_train_test_split(output_values, solo_values)
468
+
469
+ def get_signature(
470
+ self, data: Optional[Data] = None
471
+ ) -> Dict[Text, Dict[Text, List[FeatureSignature]]]:
472
+ """Get signature of RasaModelData.
473
+
474
+ Signature stores the shape and whether features are sparse or not for every key.
475
+
476
+ Returns:
477
+ A dictionary of key and sub-key to a list of feature signatures
478
+ (same structure as the data attribute).
479
+ """
480
+ if not data:
481
+ data = self.data
482
+
483
+ return {
484
+ key: {
485
+ sub_key: [
486
+ FeatureSignature(f.is_sparse, f.units, f.number_of_dimensions)
487
+ for f in features
488
+ ]
489
+ for sub_key, features in attribute_data.items()
490
+ }
491
+ for key, attribute_data in data.items()
492
+ }
493
+
494
+ def shuffled_data(self, data: Data) -> Data:
495
+ """Shuffle model data.
496
+
497
+ Args:
498
+ data: The data to shuffle
499
+
500
+ Returns:
501
+ The shuffled data.
502
+ """
503
+ ids = np.random.permutation(self.num_examples)
504
+ return self._data_for_ids(data, ids)
505
+
506
+ def balanced_data(self, data: Data, batch_size: int, shuffle: bool) -> Data:
507
+ """Mix model data to account for class imbalance.
508
+
509
+ This batching strategy puts rare classes approximately in every other batch,
510
+ by repeating them. Mimics stratified batching, but also takes into account
511
+ that more populated classes should appear more often.
512
+
513
+ Args:
514
+ data: The data.
515
+ batch_size: The batch size.
516
+ shuffle: Boolean indicating whether to shuffle the data or not.
517
+
518
+ Returns:
519
+ The balanced data.
520
+ """
521
+ self._check_label_key()
522
+
523
+ # skip balancing if labels are token based
524
+ if (
525
+ self.label_key is None
526
+ or self.label_sub_key is None
527
+ or data[self.label_key][self.label_sub_key][0][0].size > 1
528
+ ):
529
+ return data
530
+
531
+ label_ids = self._create_label_ids(data[self.label_key][self.label_sub_key][0])
532
+
533
+ unique_label_ids, counts_label_ids = np.unique(
534
+ label_ids, return_counts=True, axis=0
535
+ )
536
+ num_label_ids = len(unique_label_ids)
537
+
538
+ # group data points by their label
539
+ # need to call every time, so that the data is shuffled inside each class
540
+ data_by_label = self._split_by_label_ids(data, label_ids, unique_label_ids)
541
+
542
+ # running index inside each data grouped by labels
543
+ data_idx = [0] * num_label_ids
544
+ # number of cycles each label was passed
545
+ num_data_cycles = [0] * num_label_ids
546
+ # if a label was skipped in current batch
547
+ skipped = [False] * num_label_ids
548
+
549
+ new_data: DefaultDict[Text, DefaultDict[Text, List[List[FeatureArray]]]] = (
550
+ defaultdict(lambda: defaultdict(list))
551
+ )
552
+
553
+ while min(num_data_cycles) == 0:
554
+ if shuffle:
555
+ indices_of_labels = np.random.permutation(num_label_ids)
556
+ else:
557
+ indices_of_labels = np.asarray(range(num_label_ids))
558
+
559
+ for index in indices_of_labels:
560
+ if num_data_cycles[index] > 0 and not skipped[index]:
561
+ skipped[index] = True
562
+ continue
563
+
564
+ skipped[index] = False
565
+
566
+ index_batch_size = (
567
+ int(counts_label_ids[index] / self.num_examples * batch_size) + 1
568
+ )
569
+
570
+ for key, attribute_data in data_by_label[index].items():
571
+ for sub_key, features in attribute_data.items():
572
+ for i, f in enumerate(features):
573
+ if len(new_data[key][sub_key]) < i + 1:
574
+ new_data[key][sub_key].append([])
575
+ new_data[key][sub_key][i].append(
576
+ f[data_idx[index] : data_idx[index] + index_batch_size]
577
+ )
578
+
579
+ data_idx[index] += index_batch_size
580
+ if data_idx[index] >= counts_label_ids[index]:
581
+ num_data_cycles[index] += 1
582
+ data_idx[index] = 0
583
+
584
+ if min(num_data_cycles) > 0:
585
+ break
586
+
587
+ final_data: Data = defaultdict(lambda: defaultdict(list))
588
+ for key, attribute_data in new_data.items():
589
+ for sub_key, features in attribute_data.items():
590
+ for f in features:
591
+ final_data[key][sub_key].append(
592
+ FeatureArray(
593
+ np.concatenate(f),
594
+ number_of_dimensions=f[0].number_of_dimensions,
595
+ )
596
+ )
597
+
598
+ return final_data
599
+
600
+ def _check_train_test_sizes(
601
+ self, number_of_test_examples: int, label_counts: Dict[Any, int]
602
+ ) -> None:
603
+ """Check whether the test data set is too large or too small.
604
+
605
+ Args:
606
+ number_of_test_examples: number of test examples
607
+ label_counts: number of labels
608
+
609
+ Raises:
610
+ A ValueError if the number of examples does not fit.
611
+ """
612
+ if number_of_test_examples >= self.num_examples - len(label_counts):
613
+ raise ValueError(
614
+ f"Test set of {number_of_test_examples} is too large. Remaining "
615
+ f"train set should be at least equal to number of classes "
616
+ f"{len(label_counts)}."
617
+ )
618
+ if number_of_test_examples < len(label_counts):
619
+ raise ValueError(
620
+ f"Test set of {number_of_test_examples} is too small. It should "
621
+ f"be at least equal to number of classes {label_counts}."
622
+ )
623
+
624
+ @staticmethod
625
+ def _data_for_ids(data: Optional[Data], ids: np.ndarray) -> Data:
626
+ """Filter model data by ids.
627
+
628
+ Args:
629
+ data: The data to filter
630
+ ids: The ids
631
+
632
+ Returns:
633
+ The filtered data
634
+ """
635
+ new_data: Data = defaultdict(lambda: defaultdict(list))
636
+
637
+ if data is None:
638
+ return new_data
639
+
640
+ for key, attribute_data in data.items():
641
+ for sub_key, features in attribute_data.items():
642
+ for f in features:
643
+ new_data[key][sub_key].append(f[ids])
644
+ return new_data
645
+
646
+ def _split_by_label_ids(
647
+ self, data: Optional[Data], label_ids: np.ndarray, unique_label_ids: np.ndarray
648
+ ) -> List["RasaModelData"]:
649
+ """Reorganize model data into a list of model data with the same labels.
650
+
651
+ Args:
652
+ data: The data
653
+ label_ids: The label ids
654
+ unique_label_ids: The unique label ids
655
+
656
+ Returns:
657
+ Reorganized RasaModelData
658
+ """
659
+ label_data = []
660
+ for label_id in unique_label_ids:
661
+ matching_ids = np.array(label_ids) == label_id
662
+ label_data.append(
663
+ RasaModelData(
664
+ self.label_key,
665
+ self.label_sub_key,
666
+ self._data_for_ids(data, matching_ids),
667
+ )
668
+ )
669
+ return label_data
670
+
671
+ def _check_label_key(self) -> None:
672
+ """Check if the label key exists.
673
+
674
+ Raises:
675
+ ValueError if the label key and sub-key is not in data.
676
+ """
677
+ if (
678
+ self.label_key is not None
679
+ and self.label_sub_key is not None
680
+ and (
681
+ self.label_key not in self.data
682
+ or self.label_sub_key not in self.data[self.label_key]
683
+ or len(self.data[self.label_key][self.label_sub_key]) > 1
684
+ )
685
+ ):
686
+ raise ValueError(
687
+ f"Key '{self.label_key}.{self.label_sub_key}' not in RasaModelData."
688
+ )
689
+
690
+ def _convert_train_test_split(
691
+ self, output_values: List[Any], solo_values: List[Any]
692
+ ) -> Tuple["RasaModelData", "RasaModelData"]:
693
+ """Converts the output of sklearn's train_test_split into model data.
694
+
695
+ Args:
696
+ output_values: output values of sklearn's train_test_split
697
+ solo_values: list of solo values
698
+
699
+ Returns:
700
+ The test and train RasaModelData
701
+ """
702
+ data_train: DefaultDict[Text, DefaultDict[Text, List[FeatureArray]]] = (
703
+ defaultdict(lambda: defaultdict(list))
704
+ )
705
+ data_val: DefaultDict[Text, DefaultDict[Text, List[Any]]] = defaultdict(
706
+ lambda: defaultdict(list)
707
+ )
708
+
709
+ # output_values = x_train, x_val, y_train, y_val, z_train, z_val, etc.
710
+ # order is kept, e.g. same order as model data keys
711
+
712
+ # train datasets have an even index
713
+ index = 0
714
+ for key, attribute_data in self.data.items():
715
+ for sub_key, features in attribute_data.items():
716
+ for f in features:
717
+ data_train[key][sub_key].append(
718
+ self._combine_features(
719
+ output_values[index * 2],
720
+ solo_values[index],
721
+ f.number_of_dimensions,
722
+ )
723
+ )
724
+ index += 1
725
+
726
+ # val datasets have an odd index
727
+ index = 0
728
+ for key, attribute_data in self.data.items():
729
+ for sub_key, features in attribute_data.items():
730
+ for _ in features:
731
+ data_val[key][sub_key].append(output_values[(index * 2) + 1])
732
+ index += 1
733
+
734
+ return (
735
+ RasaModelData(self.label_key, self.label_sub_key, data_train),
736
+ RasaModelData(self.label_key, self.label_sub_key, data_val),
737
+ )
738
+
739
+ @staticmethod
740
+ def _combine_features(
741
+ feature_1: Union[np.ndarray, scipy.sparse.spmatrix],
742
+ feature_2: Union[np.ndarray, scipy.sparse.spmatrix],
743
+ number_of_dimensions: Optional[int] = 1,
744
+ ) -> FeatureArray:
745
+ """Concatenate features.
746
+
747
+ Args:
748
+ feature_1: Features to concatenate.
749
+ feature_2: Features to concatenate.
750
+
751
+ Returns:
752
+ The combined features.
753
+ """
754
+ if isinstance(feature_1, scipy.sparse.spmatrix) and isinstance(
755
+ feature_2, scipy.sparse.spmatrix
756
+ ):
757
+ if feature_2.shape[0] == 0:
758
+ return FeatureArray(feature_1, number_of_dimensions)
759
+ if feature_1.shape[0] == 0:
760
+ return FeatureArray(feature_2, number_of_dimensions)
761
+ return FeatureArray(
762
+ scipy.sparse.vstack([feature_1, feature_2]), number_of_dimensions
763
+ )
764
+ return FeatureArray(
765
+ np.concatenate([feature_1, feature_2]),
766
+ number_of_dimensions,
767
+ )
768
+
769
+ @staticmethod
770
+ def _create_label_ids(label_ids: FeatureArray) -> np.ndarray:
771
+ """Convert various size label_ids into single dim array.
772
+
773
+ For multi-label y, map each distinct row to a string representation
774
+ using join because str(row) uses an ellipsis if len(row) > 1000.
775
+ Idea taken from sklearn's stratify split.
776
+
777
+ Args:
778
+ label_ids: The label ids.
779
+
780
+ Raises:
781
+ ValueError if dimensionality of label ids is not supported
782
+
783
+ Returns:
784
+ The single dim label array.
785
+ """
786
+ if label_ids.ndim == 1:
787
+ return label_ids
788
+
789
+ if label_ids.ndim == 2 and label_ids.shape[-1] == 1:
790
+ return label_ids[:, 0]
791
+
792
+ if label_ids.ndim == 2:
793
+ return np.array([" ".join(row.astype("str")) for row in label_ids])
794
+
795
+ if label_ids.ndim == 3 and label_ids.shape[-1] == 1:
796
+ return np.array([" ".join(row.astype("str")) for row in label_ids[:, :, 0]])
797
+
798
+ raise ValueError("Unsupported label_ids dimensions")