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,888 @@
1
+ import copy
2
+ import functools
3
+ import json
4
+ from json import JSONDecodeError
5
+ import logging
6
+ import structlog
7
+ from pathlib import Path
8
+ import re
9
+ from re import Match, Pattern
10
+ from typing import Dict, Text, List, Any, Optional, Union, Tuple
11
+
12
+ from rasa.shared.core.domain import Domain
13
+ import rasa.shared.data
14
+ from rasa.shared.core.slots import TextSlot, ListSlot
15
+ from rasa.shared.exceptions import YamlException
16
+ import rasa.shared.utils.io
17
+ from rasa.shared.core.constants import LOOP_NAME
18
+ from rasa.shared.nlu.constants import (
19
+ ENTITIES,
20
+ ENTITY_ATTRIBUTE_END,
21
+ ENTITY_ATTRIBUTE_START,
22
+ ENTITY_ATTRIBUTE_TYPE,
23
+ ENTITY_ATTRIBUTE_VALUE,
24
+ INTENT,
25
+ INTENT_NAME_KEY,
26
+ INTENT_RANKING_KEY,
27
+ PREDICTED_CONFIDENCE_KEY,
28
+ FULL_RETRIEVAL_INTENT_NAME_KEY,
29
+ ACTION_TEXT,
30
+ TEXT,
31
+ EXTRACTOR,
32
+ )
33
+ from rasa.shared.nlu.training_data import entities_parser
34
+
35
+ from rasa.shared.constants import (
36
+ INTENT_MESSAGE_PREFIX,
37
+ DOCS_URL_STORIES,
38
+ TEST_STORIES_FILE_PREFIX,
39
+ DOCS_URL_RULES,
40
+ DOCS_URL_SLOTS,
41
+ )
42
+
43
+ from rasa.shared.core.constants import RULE_SNIPPET_ACTION_NAME
44
+ from rasa.shared.core.events import (
45
+ UserUttered,
46
+ SlotSet,
47
+ ActiveLoop,
48
+ DialogueStackUpdated,
49
+ )
50
+ from rasa.shared.core.training_data.story_reader.story_reader import StoryReader
51
+ from rasa.shared.core.training_data.structures import StoryStep
52
+ from rasa.shared.nlu.training_data.message import Message
53
+ from rasa.shared.utils.yaml import (
54
+ validate_raw_yaml_using_schema_file,
55
+ read_yaml,
56
+ validate_training_data_format_version,
57
+ is_key_in_yaml,
58
+ )
59
+
60
+ logger = logging.getLogger(__name__)
61
+ structlogger = structlog.get_logger()
62
+
63
+ KEY_STORIES = "stories"
64
+ KEY_STORY_NAME = "story"
65
+ KEY_RULES = "rules"
66
+ KEY_RULE_NAME = "rule"
67
+ KEY_STEPS = "steps"
68
+ KEY_ENTITIES = "entities"
69
+ KEY_USER_INTENT = "intent"
70
+ KEY_USER_MESSAGE = "user"
71
+ KEY_COMMANDS = "commands"
72
+ KEY_SLOT_NAME = "slot_was_set"
73
+ KEY_ACTIVE_LOOP = "active_loop"
74
+ KEY_ACTION = "action"
75
+ KEY_BOT_END_TO_END_MESSAGE = "bot"
76
+ KEY_CHECKPOINT = "checkpoint"
77
+ KEY_CHECKPOINT_SLOTS = "slot_was_set"
78
+ KEY_METADATA = "metadata"
79
+ KEY_OR = "or"
80
+ KEY_RULE_CONDITION = "condition"
81
+ KEY_WAIT_FOR_USER_INPUT_AFTER_RULE = "wait_for_user_input"
82
+ KEY_RULE_FOR_CONVERSATION_START = "conversation_start"
83
+ KEY_STACK_UPDATE = "stack"
84
+
85
+
86
+ CORE_SCHEMA_FILE = "shared/utils/schemas/stories.yml"
87
+ DEFAULT_VALUE_TEXT_SLOTS = "filled"
88
+ DEFAULT_VALUE_LIST_SLOTS = [DEFAULT_VALUE_TEXT_SLOTS]
89
+
90
+ INTENT_ENTITIES_PATTERN = (
91
+ f"^{INTENT_MESSAGE_PREFIX}"
92
+ f"(?P<{INTENT_NAME_KEY}>[^{{@]+)" # "{{" is a masked "{" in an f-string
93
+ f"(?P<{PREDICTED_CONFIDENCE_KEY}>@[0-9.]+)?"
94
+ f"(?P<{ENTITIES}>{{.+}})?" # "{{" is a masked "{" in an f-string
95
+ f"(?P<rest>.*)"
96
+ )
97
+
98
+
99
+ class YAMLStoryReader(StoryReader):
100
+ """Class that reads Core training data and rule data in YAML format."""
101
+
102
+ @classmethod
103
+ def from_reader(cls, reader: "YAMLStoryReader") -> "YAMLStoryReader":
104
+ """Create a reader from another reader.
105
+
106
+ Args:
107
+ reader: Another reader.
108
+
109
+ Returns:
110
+ A new reader instance.
111
+ """
112
+ return cls(reader.domain, reader.source_name)
113
+
114
+ def read_from_file(
115
+ self, filename: Union[Text, Path], skip_validation: bool = False
116
+ ) -> List[StoryStep]:
117
+ """Read stories or rules from file.
118
+
119
+ Args:
120
+ filename: Path to the story/rule file.
121
+ skip_validation: `True` if the file was already validated
122
+ e.g. when it was stored in the database.
123
+
124
+ Returns:
125
+ `StoryStep`s read from `filename`.
126
+ """
127
+ self.source_name = str(filename)
128
+ try:
129
+ return self.read_from_string(
130
+ rasa.shared.utils.io.read_file(
131
+ filename, rasa.shared.utils.io.DEFAULT_ENCODING
132
+ ),
133
+ skip_validation,
134
+ )
135
+ except YamlException as e:
136
+ e.filename = str(filename)
137
+ raise e
138
+
139
+ def read_from_string(
140
+ self, string: Text, skip_validation: bool = False
141
+ ) -> List[StoryStep]:
142
+ """Read stories or rules from a string.
143
+
144
+ Args:
145
+ string: Unprocessed YAML file content.
146
+ skip_validation: `True` if the string was already validated
147
+ e.g. when it was stored in the database.
148
+
149
+ Returns:
150
+ `StoryStep`s read from `string`.
151
+ """
152
+ if not skip_validation:
153
+ validate_raw_yaml_using_schema_file(string, CORE_SCHEMA_FILE)
154
+
155
+ yaml_content = read_yaml(string)
156
+
157
+ return self.read_from_parsed_yaml(yaml_content)
158
+
159
+ def read_from_parsed_yaml(
160
+ self, parsed_content: Dict[Text, Union[Dict, List]]
161
+ ) -> List[StoryStep]:
162
+ """Read stories from parsed YAML.
163
+
164
+ Args:
165
+ parsed_content: The parsed YAML as a dictionary.
166
+
167
+ Returns:
168
+ The parsed stories or rules.
169
+ """
170
+ if not validate_training_data_format_version(parsed_content, self.source_name):
171
+ return []
172
+
173
+ for key, parser_class in {
174
+ KEY_STORIES: StoryParser,
175
+ KEY_RULES: RuleParser,
176
+ }.items():
177
+ data = parsed_content.get(key) or []
178
+ parser = parser_class.from_reader(self)
179
+ parser.parse_data(data)
180
+ self.story_steps.extend(parser.get_steps())
181
+
182
+ return self.story_steps
183
+
184
+ @classmethod
185
+ def is_stories_file(cls, file_path: Union[Text, Path]) -> bool:
186
+ """Check if file contains Core training data or rule data in YAML format.
187
+
188
+ Args:
189
+ file_path: Path of the file to check.
190
+
191
+ Returns:
192
+ `True` in case the file is a Core YAML training data or rule data file,
193
+ `False` otherwise.
194
+
195
+ Raises:
196
+ YamlException: if the file seems to be a YAML file (extension) but
197
+ can not be read / parsed.
198
+ """
199
+ return rasa.shared.data.is_likely_yaml_file(file_path) and is_key_in_yaml(
200
+ file_path, KEY_STORIES, KEY_RULES
201
+ )
202
+
203
+ @classmethod
204
+ def _has_test_prefix(cls, file_path: Text) -> bool:
205
+ """Check if the filename of a file at a path has a certain prefix.
206
+
207
+ Arguments:
208
+ file_path: path to the file
209
+
210
+ Returns:
211
+ `True` if the filename starts with the prefix, `False` otherwise.
212
+ """
213
+ return Path(file_path).name.startswith(TEST_STORIES_FILE_PREFIX)
214
+
215
+ @classmethod
216
+ def is_test_stories_file(cls, file_path: Union[Text, Path]) -> bool:
217
+ """Checks if a file is a test conversations file.
218
+
219
+ Args:
220
+ file_path: Path of the file which should be checked.
221
+
222
+ Returns:
223
+ `True` if it's a conversation test file, otherwise `False`.
224
+ """
225
+ return cls._has_test_prefix(file_path) and cls.is_stories_file(file_path)
226
+
227
+ def get_steps(self) -> List[StoryStep]:
228
+ self._add_current_stories_to_result()
229
+ return self.story_steps
230
+
231
+ def parse_data(self, data: List[Dict[Text, Any]]) -> None:
232
+ item_title = self._get_item_title()
233
+
234
+ for item in data:
235
+ if not isinstance(item, dict):
236
+ rasa.shared.utils.io.raise_warning(
237
+ f"Unexpected block found in '{self.source_name}':\n"
238
+ f"{item}\nItems under the "
239
+ f"'{self._get_plural_item_title()}' key must be YAML "
240
+ f"dictionaries. It will be skipped.",
241
+ docs=self._get_docs_link(),
242
+ )
243
+ continue
244
+
245
+ if item_title in item.keys():
246
+ self._parse_plain_item(item)
247
+
248
+ def _parse_plain_item(self, item: Dict[Text, Any]) -> None:
249
+ item_name = item.get(self._get_item_title(), "")
250
+
251
+ if not item_name:
252
+ rasa.shared.utils.io.raise_warning(
253
+ f"Issue found in '{self.source_name}': \n"
254
+ f"{item}\n"
255
+ f"The {self._get_item_title()} has an empty name. "
256
+ f"{self._get_plural_item_title().capitalize()} should "
257
+ f"have a name defined under '{self._get_item_title()}' "
258
+ f"key. It will be skipped.",
259
+ docs=self._get_docs_link(),
260
+ )
261
+
262
+ steps: List[Union[Text, Dict[Text, Any]]] = item.get(KEY_STEPS, [])
263
+
264
+ if not steps:
265
+ rasa.shared.utils.io.raise_warning(
266
+ f"Issue found in '{self.source_name}': "
267
+ f"The {self._get_item_title()} has no steps. "
268
+ f"It will be skipped.",
269
+ docs=self._get_docs_link(),
270
+ )
271
+ return
272
+
273
+ self._new_part(item_name, item)
274
+
275
+ for step in steps:
276
+ self._parse_step(step)
277
+
278
+ self._close_part(item)
279
+
280
+ def _new_part(self, item_name: Text, item: Dict[Text, Any]) -> None:
281
+ raise NotImplementedError()
282
+
283
+ def _close_part(self, item: Dict[Text, Any]) -> None:
284
+ pass
285
+
286
+ def _parse_step(self, step: Union[Text, Dict[Text, Any]]) -> None:
287
+ if isinstance(step, str):
288
+ rasa.shared.utils.io.raise_warning(
289
+ f"Issue found in '{self.source_name}':\n"
290
+ f"Found an unexpected step in the {self._get_item_title()} "
291
+ f"description:\n{step}\nThe step is of type `str` "
292
+ f"which is only allowed for the rule snippet action "
293
+ f"'{RULE_SNIPPET_ACTION_NAME}'. It will be skipped.",
294
+ docs=self._get_docs_link(),
295
+ )
296
+ elif KEY_USER_INTENT in step.keys() or KEY_USER_MESSAGE in step.keys():
297
+ self._parse_user_utterance(step)
298
+ elif KEY_OR in step.keys():
299
+ self._parse_or_statement(step)
300
+ elif KEY_ACTION in step.keys():
301
+ self._parse_action(step)
302
+ elif KEY_BOT_END_TO_END_MESSAGE in step.keys():
303
+ self._parse_bot_message(step)
304
+ elif KEY_CHECKPOINT in step.keys():
305
+ self._parse_checkpoint(step)
306
+ # This has to be after the checkpoint test as there can be a slot key within
307
+ # a checkpoint.
308
+ elif KEY_SLOT_NAME in step.keys():
309
+ self._parse_slot(step)
310
+ elif KEY_ACTIVE_LOOP in step.keys():
311
+ self._parse_active_loop(step[KEY_ACTIVE_LOOP])
312
+ elif KEY_STACK_UPDATE in step.keys():
313
+ self._parse_stack(step)
314
+ elif KEY_METADATA in step.keys():
315
+ pass
316
+ else:
317
+ rasa.shared.utils.io.raise_warning(
318
+ f"Issue found in '{self.source_name}':\n"
319
+ f"Found an unexpected step in the {self._get_item_title()} "
320
+ f"description:\n{step}\nIt will be skipped.",
321
+ docs=self._get_docs_link(),
322
+ )
323
+
324
+ def _get_item_title(self) -> Text:
325
+ raise NotImplementedError()
326
+
327
+ def _get_plural_item_title(self) -> Text:
328
+ raise NotImplementedError()
329
+
330
+ def _get_docs_link(self) -> Text:
331
+ raise NotImplementedError()
332
+
333
+ def _parse_user_utterance(self, step: Dict[Text, Any]) -> None:
334
+ utterance = self._parse_raw_user_utterance(step)
335
+
336
+ if not utterance:
337
+ return
338
+
339
+ is_end_to_end_utterance = KEY_USER_INTENT not in step
340
+ if is_end_to_end_utterance:
341
+ utterance.intent = {INTENT_NAME_KEY: None}
342
+ else:
343
+ self._validate_that_utterance_is_in_domain(utterance)
344
+
345
+ if self.current_step_builder is not None:
346
+ self.current_step_builder.add_user_messages([utterance])
347
+
348
+ def _validate_that_utterance_is_in_domain(self, utterance: UserUttered) -> None:
349
+ intent_name = utterance.intent.get(INTENT_NAME_KEY)
350
+
351
+ # check if this is a retrieval intent
352
+ # in this case check only for the base intent in domain
353
+ intent_name = Message.separate_intent_response_key(intent_name)[0]
354
+
355
+ if not self.domain:
356
+ logger.debug(
357
+ "Skipped validating if intent is in domain as domain " "is `None`."
358
+ )
359
+ return
360
+
361
+ if intent_name not in self.domain.intents:
362
+ rasa.shared.utils.io.raise_warning(
363
+ f"Issue found in '{self.source_name}': \n"
364
+ f"Found intent '{intent_name}' in stories which is not part of the "
365
+ f"domain.",
366
+ docs=DOCS_URL_STORIES,
367
+ )
368
+
369
+ def _parse_or_statement(self, step: Dict[Text, Any]) -> None:
370
+ events: List = []
371
+
372
+ for item in step.get(KEY_OR, []):
373
+ if KEY_USER_INTENT in item.keys():
374
+ utterance = self._parse_raw_user_utterance(item)
375
+ if utterance:
376
+ events.append(utterance)
377
+ elif KEY_CHECKPOINT_SLOTS in item.keys():
378
+ for slot in item.get(KEY_CHECKPOINT_SLOTS, []):
379
+ if isinstance(slot, dict):
380
+ for key, value in slot.items():
381
+ parsed_events = self._parse_events(
382
+ SlotSet.type_name, {key: value}
383
+ )
384
+ events.extend(parsed_events)
385
+ elif isinstance(slot, str):
386
+ parsed_events = self._parse_events(
387
+ SlotSet.type_name, {slot: self._slot_default_value(slot)}
388
+ )
389
+ events.extend(parsed_events)
390
+ else:
391
+ rasa.shared.utils.io.raise_warning(
392
+ f"Issue found in '{self.source_name}':\n"
393
+ f"Invalid slot: \n{slot}\n"
394
+ f"Items under the '{KEY_CHECKPOINT_SLOTS}' key must be "
395
+ f"YAML dictionaries or Strings. "
396
+ f"The checkpoint will be skipped.",
397
+ docs=self._get_docs_link(),
398
+ )
399
+ return
400
+ else:
401
+ rasa.shared.utils.io.raise_warning(
402
+ f"Issue found in '{self.source_name}': \n"
403
+ f"`OR` statement can have '{KEY_USER_INTENT}' or '{KEY_SLOT_NAME}'"
404
+ f"as a sub-element. This step will be skipped:\n"
405
+ f"'{item}'\n",
406
+ docs=self._get_docs_link(),
407
+ )
408
+ return
409
+
410
+ if events and self.current_step_builder is not None:
411
+ self.current_step_builder.add_events(events)
412
+
413
+ def _user_intent_from_step(
414
+ self, step: Dict[Text, Any]
415
+ ) -> Tuple[Text, Optional[Text]]:
416
+ try:
417
+ user_intent = step.get(KEY_USER_INTENT, "").strip()
418
+ except AttributeError:
419
+ rasa.shared.utils.io.raise_warning(
420
+ f"Issue found in '{self.source_name}':\n"
421
+ f"Missing intent value in {self._get_item_title()} step: {step} .",
422
+ docs=self._get_docs_link(),
423
+ )
424
+ user_intent = ""
425
+
426
+ if not user_intent and KEY_USER_MESSAGE not in step:
427
+ rasa.shared.utils.io.raise_warning(
428
+ f"Issue found in '{self.source_name}':\n"
429
+ f"User utterance cannot be empty. "
430
+ f"This {self._get_item_title()} step will be skipped:\n"
431
+ f"{step}",
432
+ docs=self._get_docs_link(),
433
+ )
434
+
435
+ if user_intent.startswith(INTENT_MESSAGE_PREFIX):
436
+ rasa.shared.utils.io.raise_warning(
437
+ f"Issue found in '{self.source_name}':\n"
438
+ f"User intent '{user_intent}' starts with "
439
+ f"'{INTENT_MESSAGE_PREFIX}'. This is not required.",
440
+ docs=self._get_docs_link(),
441
+ )
442
+ # Remove leading slash
443
+ user_intent = user_intent[1:]
444
+
445
+ # StoryStep should never contain a full retrieval intent, only the base intent.
446
+ # However, users can specify full retrieval intents in their test stories file
447
+ # for the NLU testing purposes.
448
+ base_intent, response_key = Message.separate_intent_response_key(user_intent)
449
+ if response_key and not self.is_test_stories_file(self.source_name):
450
+ rasa.shared.utils.io.raise_warning(
451
+ f"Issue found in '{self.source_name}' while parsing story "
452
+ f"{self._get_item_title()}:\n"
453
+ f"User intent '{user_intent}' is a full retrieval intent. "
454
+ f"Stories shouldn't contain full retrieval intents. "
455
+ f"Rasa Pro will only use base intent '{base_intent}' "
456
+ f"for training.",
457
+ docs=self._get_docs_link(),
458
+ )
459
+
460
+ return (base_intent, user_intent) if response_key else (base_intent, None)
461
+
462
+ def _parse_raw_user_utterance(self, step: Dict[Text, Any]) -> Optional[UserUttered]:
463
+ intent_name, full_retrieval_intent = self._user_intent_from_step(step)
464
+ intent = {
465
+ INTENT_NAME_KEY: intent_name,
466
+ FULL_RETRIEVAL_INTENT_NAME_KEY: full_retrieval_intent,
467
+ PREDICTED_CONFIDENCE_KEY: 1.0,
468
+ }
469
+
470
+ if KEY_USER_MESSAGE in step:
471
+ user_message = step[KEY_USER_MESSAGE].strip()
472
+ entities = entities_parser.find_entities_in_training_example(user_message)
473
+ plain_text = entities_parser.replace_entities(user_message)
474
+
475
+ if plain_text.startswith(INTENT_MESSAGE_PREFIX):
476
+ entities = self.unpack_regex_message(Message({TEXT: plain_text})).get(
477
+ ENTITIES, []
478
+ )
479
+ else:
480
+ raw_entities = step.get(KEY_ENTITIES, [])
481
+ entities = self._parse_raw_entities(raw_entities)
482
+ # set plain_text to None because only intent was provided in the stories
483
+ plain_text = None
484
+ return UserUttered(
485
+ plain_text,
486
+ intent,
487
+ entities,
488
+ parse_data={KEY_COMMANDS: step.get(KEY_COMMANDS, [])}, # type: ignore[misc]
489
+ )
490
+
491
+ @staticmethod
492
+ def _parse_raw_entities(
493
+ raw_entities: Union[List[Dict[Text, Text]], List[Text]],
494
+ ) -> List[Dict[Text, Optional[Text]]]:
495
+ final_entities = []
496
+ for entity in raw_entities:
497
+ if isinstance(entity, dict):
498
+ _entity_type = None
499
+ _entity_value = None
500
+ _entity_role = None
501
+ _entity_group = None
502
+ for key, value in entity.items():
503
+ if key == "role":
504
+ _entity_role = value
505
+ elif key == "group":
506
+ _entity_group = value
507
+ else:
508
+ _entity_type = key
509
+ _entity_value = value
510
+
511
+ _entity_dict = {
512
+ "entity": _entity_type,
513
+ "value": _entity_value,
514
+ "role": _entity_role,
515
+ "group": _entity_group,
516
+ }
517
+ _entity_dict = {k: v for k, v in _entity_dict.items() if v is not None}
518
+ final_entities.append(_entity_dict)
519
+ else:
520
+ final_entities.append({"entity": entity, "value": ""})
521
+
522
+ return final_entities
523
+
524
+ def _parse_slot(self, step: Dict[Text, Any]) -> None:
525
+ for slot in step.get(KEY_CHECKPOINT_SLOTS, []):
526
+ if isinstance(slot, dict):
527
+ for key, value in slot.items():
528
+ self._add_event(SlotSet.type_name, {key: value})
529
+ elif isinstance(slot, str):
530
+ self._add_event(
531
+ SlotSet.type_name, {slot: self._slot_default_value(slot)}
532
+ )
533
+ else:
534
+ rasa.shared.utils.io.raise_warning(
535
+ f"Issue found in '{self.source_name}':\n"
536
+ f"Invalid slot: \n{slot}\n"
537
+ f"Items under the '{KEY_CHECKPOINT_SLOTS}' key must be "
538
+ f"YAML dictionaries or Strings. The checkpoint will be skipped.",
539
+ docs=self._get_docs_link(),
540
+ )
541
+ return
542
+
543
+ @functools.lru_cache()
544
+ def _slot_default_value(self, slot_name: Text) -> Any:
545
+ if not self.domain:
546
+ return None
547
+
548
+ slot_types_with_default_types = {
549
+ TextSlot: DEFAULT_VALUE_TEXT_SLOTS,
550
+ ListSlot: DEFAULT_VALUE_LIST_SLOTS,
551
+ }
552
+ slot = next(slot for slot in self.domain.slots if slot.name == slot_name)
553
+
554
+ default_value = slot_types_with_default_types.get(type(slot))
555
+ if default_value is None and slot.has_features():
556
+ rasa.shared.utils.io.raise_warning(
557
+ f"Slot '{slot_name}' was referenced by its name only. As slot "
558
+ f"'{slot_name}' is of type '{slot.type_name}' you need to specify a "
559
+ f"value for it. Slot '{slot_name}' will be treated as if it's value "
560
+ f"is empty.",
561
+ docs=DOCS_URL_SLOTS,
562
+ )
563
+
564
+ return default_value
565
+
566
+ def _parse_action(self, step: Dict[Text, Any]) -> None:
567
+ action_name = step.get(KEY_ACTION, "")
568
+ if not action_name:
569
+ rasa.shared.utils.io.raise_warning(
570
+ f"Issue found in '{self.source_name}': \n"
571
+ f"Action name cannot be empty. "
572
+ f"This {self._get_item_title()} step will be skipped:\n"
573
+ f"{step}",
574
+ docs=self._get_docs_link(),
575
+ )
576
+ return
577
+
578
+ self._add_event(action_name, {})
579
+
580
+ def _parse_stack(self, step: Dict[Text, Any]) -> None:
581
+ update = step.get(KEY_STACK_UPDATE, [])
582
+ self._add_event(DialogueStackUpdated.type_name, {"update": json.dumps(update)})
583
+
584
+ def _parse_bot_message(self, step: Dict[Text, Any]) -> None:
585
+ bot_message = step.get(KEY_BOT_END_TO_END_MESSAGE, "")
586
+ self._add_event("", {ACTION_TEXT: bot_message})
587
+
588
+ def _parse_active_loop(self, active_loop_name: Optional[Text]) -> None:
589
+ self._add_event(ActiveLoop.type_name, {LOOP_NAME: active_loop_name})
590
+
591
+ def _parse_checkpoint(self, step: Dict[Text, Any]) -> None:
592
+ checkpoint_name = step.get(KEY_CHECKPOINT, "")
593
+ slots = step.get(KEY_CHECKPOINT_SLOTS, [])
594
+
595
+ slots_dict = {}
596
+
597
+ for slot in slots:
598
+ if not isinstance(slot, dict):
599
+ rasa.shared.utils.io.raise_warning(
600
+ f"Issue found in '{self.source_name}':\n"
601
+ f"Checkpoint '{checkpoint_name}' has an invalid slot: "
602
+ f"{slots}\nItems under the '{KEY_CHECKPOINT_SLOTS}' key must be "
603
+ f"YAML dictionaries. The checkpoint will be skipped.",
604
+ docs=self._get_docs_link(),
605
+ )
606
+ return
607
+
608
+ for key, value in slot.items():
609
+ slots_dict[key] = value
610
+
611
+ self._add_checkpoint(checkpoint_name, slots_dict)
612
+
613
+ @staticmethod
614
+ def _regex_message_pattern() -> Pattern:
615
+ """Builds the pattern that matches `TEXT`s of messages that need to be unpacked.
616
+
617
+ Returns:
618
+ pattern with named groups
619
+ """
620
+ return re.compile(INTENT_ENTITIES_PATTERN)
621
+
622
+ @staticmethod
623
+ def unpack_regex_message(
624
+ message: Message,
625
+ domain: Optional[Domain] = None,
626
+ entity_extractor_name: Optional[Text] = None,
627
+ ) -> Message:
628
+ """Unpacks the message if `TEXT` contains an encoding of attributes.
629
+
630
+ Args:
631
+ message: some message
632
+ domain: the domain
633
+ entity_extractor_name: An extractor name which should be added for the
634
+ entities.
635
+
636
+ Returns:
637
+ the given message if that message does not need to be unpacked, and a new
638
+ message with the extracted attributes otherwise
639
+ """
640
+ user_text = message.get(TEXT).strip()
641
+
642
+ # If the prefix doesn't match, we don't even need to try to match the pattern.
643
+ if not user_text.startswith(INTENT_MESSAGE_PREFIX):
644
+ return message
645
+
646
+ # Try to match the pattern.
647
+ match = YAMLStoryReader._regex_message_pattern().match(user_text)
648
+
649
+ # If it doesn't match, then (potentially) something went wrong, because the
650
+ # message text did start with the special prefix -- however, a user might
651
+ # just have decided to start their text this way.
652
+ if not match:
653
+ structlogger.warning(
654
+ "message.parsing.failed", user_text=copy.deepcopy(user_text)
655
+ )
656
+ return message
657
+
658
+ # Extract attributes from the match - and validate it via the domain.
659
+ intent_name = YAMLStoryReader._intent_name_from_regex_match(match, domain)
660
+ confidence = YAMLStoryReader._confidences_from_regex_match(match)
661
+ entities = YAMLStoryReader._entities_from_regex_match(
662
+ match, domain, entity_extractor_name
663
+ )
664
+
665
+ # The intent name is *not* optional, but during parsing we might find out
666
+ # that the given intent is unknown (and warn). In this case, stop here.
667
+ if intent_name is None:
668
+ return message
669
+
670
+ if match.group("rest"):
671
+ rasa.shared.utils.io.raise_warning(
672
+ f"Failed to parse arguments in line '{match.string}'. "
673
+ f"Failed to interpret some parts. "
674
+ f"Make sure your regex string is in the following format:"
675
+ f"{INTENT_MESSAGE_PREFIX}"
676
+ f"<intent_name>@<confidence-value><dictionary of entities> "
677
+ f"Continuing without {match.group('rest')}. "
678
+ )
679
+
680
+ # Add the results to the message.
681
+ intent_data = {
682
+ INTENT_NAME_KEY: intent_name,
683
+ PREDICTED_CONFIDENCE_KEY: confidence,
684
+ }
685
+ intent_ranking = [
686
+ {INTENT_NAME_KEY: intent_name, PREDICTED_CONFIDENCE_KEY: confidence}
687
+ ]
688
+ message_data = {}
689
+ message_data[TEXT] = user_text
690
+ message_data[INTENT] = intent_data
691
+ message_data[INTENT_RANKING_KEY] = intent_ranking
692
+ message_data[ENTITIES] = entities
693
+ return Message(message_data, output_properties=set(message_data.keys()))
694
+
695
+ @staticmethod
696
+ def _intent_name_from_regex_match(match: Match, domain: Domain) -> Optional[Text]:
697
+ intent_name = match.group(INTENT_NAME_KEY).strip()
698
+ if domain and intent_name not in domain.intents:
699
+ rasa.shared.utils.io.raise_warning(
700
+ f"Failed to parse arguments in line '{match.string}'. "
701
+ f"Expected the intent to be one of [{domain.intents}] "
702
+ f"but found {intent_name}."
703
+ f"Continuing with given line as user text.",
704
+ docs=DOCS_URL_STORIES,
705
+ )
706
+ intent_name = None
707
+ return intent_name
708
+
709
+ @staticmethod
710
+ def _entities_from_regex_match(
711
+ match: Match, domain: Domain, extractor_name: Optional[Text]
712
+ ) -> List[Dict[Text, Any]]:
713
+ """Extracts the optional entity information from the given pattern match.
714
+
715
+ If no entities are specified or if the extraction fails, then an empty list
716
+ is returned.
717
+
718
+ Args:
719
+ match: a match produced by `self.pattern`
720
+ domain: the domain
721
+ extractor_name: A extractor name which should be added for the entities
722
+
723
+ Returns:
724
+ some list of entities
725
+ """
726
+ entities_str = match.group(ENTITIES)
727
+ if entities_str is None:
728
+ return []
729
+
730
+ try:
731
+ parsed_entities = json.loads(entities_str)
732
+ if not isinstance(parsed_entities, dict):
733
+ raise ValueError(
734
+ f"Parsed value isn't a json object "
735
+ f"(instead parser found '{type(parsed_entities)}')"
736
+ )
737
+ except (JSONDecodeError, ValueError) as e:
738
+ rasa.shared.utils.io.raise_warning(
739
+ f"Failed to parse arguments in line '{match.string}'. "
740
+ f"Failed to decode parameters as a json object (dict). "
741
+ f"Make sure the intent is followed by a proper json object (dict). "
742
+ f"Continuing without entities. "
743
+ f"Error: {e}",
744
+ docs=DOCS_URL_STORIES,
745
+ )
746
+ parsed_entities = dict()
747
+
748
+ # validate the given entity types
749
+ if domain:
750
+ entity_types = set(parsed_entities.keys())
751
+ unknown_entity_types = entity_types.difference(domain.entities)
752
+ if unknown_entity_types:
753
+ rasa.shared.utils.io.raise_warning(
754
+ f"Failed to parse arguments in line '{match.string}'. "
755
+ f"Expected entities from {domain.entities} "
756
+ f"but found {unknown_entity_types}. "
757
+ f"Continuing without unknown entity types. ",
758
+ docs=DOCS_URL_STORIES,
759
+ )
760
+ parsed_entities = {
761
+ key: value
762
+ for key, value in parsed_entities.items()
763
+ if key not in unknown_entity_types
764
+ }
765
+
766
+ # convert them into the list of dictionaries that we expect
767
+ entities: List[Dict[Text, Any]] = []
768
+ default_properties = {}
769
+ if extractor_name:
770
+ default_properties = {EXTRACTOR: extractor_name}
771
+
772
+ for entity_type, entity_values in parsed_entities.items():
773
+ if not isinstance(entity_values, list):
774
+ entity_values = [entity_values]
775
+
776
+ for entity_value in entity_values:
777
+ entities.append(
778
+ {
779
+ ENTITY_ATTRIBUTE_TYPE: entity_type,
780
+ ENTITY_ATTRIBUTE_VALUE: entity_value,
781
+ ENTITY_ATTRIBUTE_START: match.start(ENTITIES),
782
+ ENTITY_ATTRIBUTE_END: match.end(ENTITIES),
783
+ **default_properties,
784
+ }
785
+ )
786
+ return entities
787
+
788
+ @staticmethod
789
+ def _confidences_from_regex_match(match: Match) -> float:
790
+ """Extracts the optional confidence information from the given pattern match.
791
+
792
+ If no confidence is specified, then this method returns the maximum
793
+ confidence `1.0`.
794
+ If a confidence is specified but extraction fails, then this method defaults
795
+ to a confidence of `0.0`.
796
+
797
+ Args:
798
+ match: a match produced by `self.pattern`
799
+ domain: the domain
800
+
801
+ Returns:
802
+ some confidence value
803
+ """
804
+ confidence_str = match.group(PREDICTED_CONFIDENCE_KEY)
805
+ if confidence_str is None:
806
+ return 1.0
807
+ try:
808
+ confidence_str = confidence_str.strip()[1:] # remove the "@"
809
+ try:
810
+ confidence = float(confidence_str)
811
+ except ValueError:
812
+ confidence = 0.0
813
+ raise ValueError(
814
+ f"Expected confidence to be a non-negative decimal number but "
815
+ f"found {confidence}. Continuing with 0.0 instead."
816
+ )
817
+ if confidence > 1.0:
818
+ # Due to the pattern we know that this cannot be a negative number.
819
+ original_confidence = confidence
820
+ confidence = min(1.0, confidence)
821
+ raise ValueError(
822
+ f"Expected confidence to be at most 1.0. "
823
+ f"but found {original_confidence}. "
824
+ f"Continuing with {confidence} instead."
825
+ )
826
+ return confidence
827
+
828
+ except ValueError as e:
829
+ rasa.shared.utils.io.raise_warning(
830
+ f"Failed to parse arguments in line '{match.string}'. "
831
+ f"Could not extract confidence value from `{confidence_str}'. "
832
+ f"Make sure the intent confidence is an @ followed "
833
+ f"by a decimal number that not negative and at most 1.0. "
834
+ f"Error: {e}",
835
+ docs=DOCS_URL_STORIES,
836
+ )
837
+ return confidence
838
+
839
+
840
+ class StoryParser(YAMLStoryReader):
841
+ """Encapsulate story-specific parser behavior."""
842
+
843
+ def _new_part(self, item_name: Text, item: Dict[Text, Any]) -> None:
844
+ self._new_story_part(item_name, self.source_name)
845
+
846
+ def _get_item_title(self) -> Text:
847
+ return KEY_STORY_NAME
848
+
849
+ def _get_plural_item_title(self) -> Text:
850
+ return KEY_STORIES
851
+
852
+ def _get_docs_link(self) -> Text:
853
+ return DOCS_URL_STORIES
854
+
855
+
856
+ class RuleParser(YAMLStoryReader):
857
+ """Encapsulate rule-specific parser behavior."""
858
+
859
+ def _new_part(self, item_name: Text, item: Dict[Text, Any]) -> None:
860
+ self._new_rule_part(item_name, self.source_name)
861
+ conditions = item.get(KEY_RULE_CONDITION, [])
862
+ self._parse_rule_conditions(conditions)
863
+ if not item.get(KEY_RULE_FOR_CONVERSATION_START):
864
+ self._parse_rule_snippet_action()
865
+
866
+ def _parse_rule_conditions(
867
+ self, conditions: List[Union[Text, Dict[Text, Any]]]
868
+ ) -> None:
869
+ self._is_parsing_conditions = True
870
+ for condition in conditions:
871
+ self._parse_step(condition)
872
+ self._is_parsing_conditions = False
873
+
874
+ def _close_part(self, item: Dict[Text, Any]) -> None:
875
+ if item.get(KEY_WAIT_FOR_USER_INPUT_AFTER_RULE) is False:
876
+ self._parse_rule_snippet_action()
877
+
878
+ def _get_item_title(self) -> Text:
879
+ return KEY_RULE_NAME
880
+
881
+ def _get_plural_item_title(self) -> Text:
882
+ return KEY_RULES
883
+
884
+ def _get_docs_link(self) -> Text:
885
+ return DOCS_URL_RULES
886
+
887
+ def _parse_rule_snippet_action(self) -> None:
888
+ self._add_event(RULE_SNIPPET_ACTION_NAME, {})