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,725 @@
1
+ from __future__ import annotations
2
+
3
+ import abc
4
+ import copy
5
+ import logging
6
+ from enum import Enum
7
+ from pathlib import Path
8
+ from typing import (
9
+ Any,
10
+ List,
11
+ Optional,
12
+ Text,
13
+ Dict,
14
+ Callable,
15
+ Tuple,
16
+ TypeVar,
17
+ TYPE_CHECKING,
18
+ )
19
+
20
+ import numpy as np
21
+
22
+ from rasa.shared.constants import ROUTE_TO_CALM_SLOT
23
+ from rasa.shared.core.events import Event
24
+ from rasa.engine.graph import GraphComponent, ExecutionContext
25
+ from rasa.engine.storage.resource import Resource
26
+ from rasa.engine.storage.storage import ModelStorage
27
+ from rasa.core.featurizers.precomputation import MessageContainerForCoreFeaturization
28
+ import rasa.utils.common
29
+ import rasa.shared.utils.io
30
+ from rasa.shared.exceptions import RasaException, FileIOException
31
+ from rasa.shared.nlu.constants import ENTITIES, INTENT, TEXT, ACTION_TEXT, ACTION_NAME
32
+ from rasa.shared.core.domain import Domain, State
33
+ from rasa.shared.core.trackers import DialogueStateTracker
34
+ from rasa.shared.core.generator import TrackerWithCachedStates
35
+ from rasa.core.constants import (
36
+ DEFAULT_POLICY_PRIORITY,
37
+ POLICY_PRIORITY,
38
+ POLICY_MAX_HISTORY,
39
+ )
40
+ from rasa.shared.core.constants import USER, SLOTS, PREVIOUS_ACTION, ACTIVE_LOOP
41
+ import rasa.shared.utils.common
42
+
43
+ if TYPE_CHECKING:
44
+ from rasa.shared.nlu.training_data.features import Features
45
+ from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
46
+ from rasa.core.featurizers.tracker_featurizers import MaxHistoryTrackerFeaturizer
47
+ from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
48
+
49
+ logger = logging.getLogger(__name__)
50
+
51
+ TrackerListTypeVar = TypeVar(
52
+ "TrackerListTypeVar", List[DialogueStateTracker], List[TrackerWithCachedStates]
53
+ )
54
+
55
+
56
+ class SupportedData(Enum):
57
+ """Enumeration of a policy's supported training data type."""
58
+
59
+ # policy only supports ML-based training data ("stories")
60
+ ML_DATA = 1
61
+
62
+ # policy only supports rule-based data ("rules")
63
+ RULE_DATA = 2
64
+
65
+ # policy supports both ML-based and rule-based data ("stories" as well as "rules")
66
+ ML_AND_RULE_DATA = 3
67
+
68
+ @staticmethod
69
+ def trackers_for_supported_data(
70
+ supported_data: SupportedData,
71
+ trackers: TrackerListTypeVar,
72
+ ) -> TrackerListTypeVar:
73
+ """Return trackers for a given policy.
74
+
75
+ Args:
76
+ supported_data: Supported data filter for the `trackers`.
77
+ trackers: Trackers to split.
78
+
79
+ Returns:
80
+ Trackers from ML-based training data and/or rule-based data.
81
+ """
82
+ if supported_data == SupportedData.RULE_DATA:
83
+ return [tracker for tracker in trackers if tracker.is_rule_tracker]
84
+
85
+ if supported_data == SupportedData.ML_DATA:
86
+ return [tracker for tracker in trackers if not tracker.is_rule_tracker]
87
+
88
+ # `supported_data` is `SupportedData.ML_AND_RULE_DATA`
89
+ return trackers
90
+
91
+
92
+ class Policy(GraphComponent):
93
+ """Common parent class for all dialogue policies."""
94
+
95
+ @staticmethod
96
+ def supported_data() -> SupportedData:
97
+ """The type of data supported by this policy.
98
+
99
+ By default, this is only ML-based training data. If policies support rule data,
100
+ or both ML-based data and rule data, they need to override this method.
101
+
102
+ Returns:
103
+ The data type supported by this policy (ML-based training data).
104
+ """
105
+ return SupportedData.ML_DATA
106
+
107
+ @staticmethod
108
+ def does_support_stack_frame(frame: "DialogueStackFrame") -> bool:
109
+ """Determine whether a stack frame is supported by the policy."""
110
+ return False
111
+
112
+ def supports_current_stack_frame(
113
+ self,
114
+ tracker: DialogueStateTracker,
115
+ only_after_user_message: bool = True,
116
+ empty_stack_behavior: bool = True,
117
+ ) -> bool:
118
+ """Check whether the policy is allowed to act.
119
+
120
+ Args:
121
+ tracker: The tracker.
122
+ only_after_user_message: Whether to only allow actions after a user message.
123
+ empty_stack_behavior: Whether to allow actions if the stack is empty.
124
+
125
+ Returns:
126
+ `True` if the policy is allowed to act, `False` otherwise.
127
+ """
128
+ if top_frame := tracker.stack.top():
129
+ return self.does_support_stack_frame(top_frame)
130
+ elif only_after_user_message and len(tracker.events) > 0:
131
+ return not tracker.has_action_after_latest_user_message()
132
+ else:
133
+ return empty_stack_behavior
134
+
135
+ def should_abstain_in_coexistence(
136
+ self, tracker: DialogueStateTracker, is_calm_policy: bool
137
+ ) -> bool:
138
+ """Whether a policy should abstain making predictions in coexistence.
139
+
140
+ A calm policy should run when the routing slot is set to True.
141
+ A nlu-based policy should run when the routing slot is set to False or None.
142
+ """
143
+ if is_calm_policy:
144
+ return tracker.has_coexistence_routing_slot and (
145
+ tracker.get_slot(ROUTE_TO_CALM_SLOT) is False
146
+ or tracker.get_slot(ROUTE_TO_CALM_SLOT) is None
147
+ )
148
+
149
+ return (
150
+ tracker.has_coexistence_routing_slot
151
+ and tracker.get_slot(ROUTE_TO_CALM_SLOT) is True
152
+ )
153
+
154
+ def __init__(
155
+ self,
156
+ config: Dict[Text, Any],
157
+ model_storage: ModelStorage,
158
+ resource: Resource,
159
+ execution_context: ExecutionContext,
160
+ featurizer: Optional["TrackerFeaturizer"] = None,
161
+ ) -> None:
162
+ """Constructs a new Policy object."""
163
+ self.config = config
164
+ if featurizer is None:
165
+ featurizer = self._create_featurizer()
166
+ self.__featurizer = featurizer
167
+
168
+ self.priority = config.get(POLICY_PRIORITY, DEFAULT_POLICY_PRIORITY)
169
+ self.finetune_mode = execution_context.is_finetuning
170
+
171
+ self._model_storage = model_storage
172
+ self._resource = resource
173
+
174
+ @classmethod
175
+ def create(
176
+ cls,
177
+ config: Dict[Text, Any],
178
+ model_storage: ModelStorage,
179
+ resource: Resource,
180
+ execution_context: ExecutionContext,
181
+ **kwargs: Any,
182
+ ) -> Policy:
183
+ """Creates a new untrained policy (see parent class for full docstring)."""
184
+ return cls(config, model_storage, resource, execution_context)
185
+
186
+ def _create_featurizer(self) -> "TrackerFeaturizer":
187
+ from rasa.core.featurizers.tracker_featurizers import (
188
+ MaxHistoryTrackerFeaturizer,
189
+ )
190
+
191
+ policy_config = copy.deepcopy(self.config)
192
+
193
+ featurizer_configs = policy_config.get("featurizer")
194
+
195
+ if not featurizer_configs:
196
+ return self._standard_featurizer()
197
+
198
+ featurizer_func = _get_featurizer_from_config(
199
+ featurizer_configs,
200
+ self.__class__.__name__,
201
+ lookup_path="rasa.core.featurizers.tracker_featurizers",
202
+ )
203
+ featurizer_config = featurizer_configs[0]
204
+
205
+ state_featurizer_configs = featurizer_config.pop("state_featurizer", None)
206
+ if state_featurizer_configs:
207
+ state_featurizer_func = _get_featurizer_from_config(
208
+ state_featurizer_configs,
209
+ self.__class__.__name__,
210
+ lookup_path="rasa.core.featurizers.single_state_featurizer",
211
+ )
212
+ state_featurizer_config = state_featurizer_configs[0]
213
+
214
+ featurizer_config["state_featurizer"] = state_featurizer_func(
215
+ **state_featurizer_config
216
+ )
217
+
218
+ featurizer = featurizer_func(**featurizer_config)
219
+ if (
220
+ isinstance(featurizer, MaxHistoryTrackerFeaturizer)
221
+ and POLICY_MAX_HISTORY in policy_config
222
+ and POLICY_MAX_HISTORY not in featurizer_config
223
+ ):
224
+ featurizer.max_history = policy_config[POLICY_MAX_HISTORY]
225
+ return featurizer
226
+
227
+ def _standard_featurizer(self) -> "MaxHistoryTrackerFeaturizer":
228
+ """Initializes the standard featurizer for this policy."""
229
+ from rasa.core.featurizers.single_state_featurizer import SingleStateFeaturizer
230
+ from rasa.core.featurizers.tracker_featurizers import (
231
+ MaxHistoryTrackerFeaturizer,
232
+ )
233
+
234
+ return MaxHistoryTrackerFeaturizer(
235
+ SingleStateFeaturizer(), self.config.get(POLICY_MAX_HISTORY)
236
+ )
237
+
238
+ @property
239
+ def featurizer(self) -> "TrackerFeaturizer":
240
+ """Returns the policy's featurizer."""
241
+ return self.__featurizer
242
+
243
+ @staticmethod
244
+ def _get_valid_params(func: Callable, **kwargs: Any) -> Dict:
245
+ """Filters out kwargs that cannot be passed to func.
246
+
247
+ Args:
248
+ func: a callable function
249
+ **kwargs: the dictionary of parameters
250
+
251
+ Returns:
252
+ the dictionary of parameters
253
+ """
254
+ valid_keys = rasa.shared.utils.common.arguments_of(func)
255
+
256
+ params = {key: kwargs.get(key) for key in valid_keys if kwargs.get(key)}
257
+ ignored_params = {
258
+ key: kwargs.get(key) for key in kwargs.keys() if not params.get(key)
259
+ }
260
+ logger.debug(f"Parameters ignored by `model.fit(...)`: {ignored_params}")
261
+ return params
262
+
263
+ def _featurize_for_training(
264
+ self,
265
+ training_trackers: List[DialogueStateTracker],
266
+ domain: Domain,
267
+ precomputations: Optional[MessageContainerForCoreFeaturization],
268
+ bilou_tagging: bool = False,
269
+ **kwargs: Any,
270
+ ) -> Tuple[
271
+ List[List[Dict[Text, List[Features]]]],
272
+ np.ndarray,
273
+ List[List[Dict[Text, List[Features]]]],
274
+ ]:
275
+ """Transform training trackers into a vector representation.
276
+
277
+ The trackers, consisting of multiple turns, will be transformed
278
+ into a float vector which can be used by a ML model.
279
+
280
+ Args:
281
+ training_trackers:
282
+ the list of the :class:`rasa.core.trackers.DialogueStateTracker`
283
+ domain: the :class:`rasa.shared.core.domain.Domain`
284
+ precomputations: Contains precomputed features and attributes.
285
+ bilou_tagging: indicates whether BILOU tagging should be used or not
286
+ **kwargs: Additional arguments.
287
+
288
+ Returns:
289
+ - a dictionary of attribute (INTENT, TEXT, ACTION_NAME, ACTION_TEXT,
290
+ ENTITIES, SLOTS, FORM) to a list of features for all dialogue turns in
291
+ all training trackers
292
+ - the label ids (e.g. action ids) for every dialogue turn in all training
293
+ trackers
294
+ - A dictionary of entity type (ENTITY_TAGS) to a list of features
295
+ containing entity tag ids for text user inputs otherwise empty dict
296
+ for all dialogue turns in all training trackers
297
+ """
298
+ state_features, label_ids, entity_tags = self.featurizer.featurize_trackers(
299
+ training_trackers,
300
+ domain,
301
+ precomputations=precomputations,
302
+ bilou_tagging=bilou_tagging,
303
+ ignore_action_unlikely_intent=self.supported_data()
304
+ == SupportedData.ML_DATA,
305
+ )
306
+
307
+ max_training_samples = kwargs.get("max_training_samples")
308
+ if max_training_samples is not None:
309
+ logger.debug(
310
+ "Limit training data to {} training samples.".format(
311
+ max_training_samples
312
+ )
313
+ )
314
+ state_features = state_features[:max_training_samples]
315
+ label_ids = label_ids[:max_training_samples]
316
+ entity_tags = entity_tags[:max_training_samples]
317
+
318
+ return state_features, label_ids, entity_tags
319
+
320
+ def _prediction_states(
321
+ self,
322
+ tracker: DialogueStateTracker,
323
+ domain: Domain,
324
+ use_text_for_last_user_input: bool = False,
325
+ rule_only_data: Optional[Dict[Text, Any]] = None,
326
+ ) -> List[State]:
327
+ """Transforms tracker to states for prediction.
328
+
329
+ Args:
330
+ tracker: The tracker to be featurized.
331
+ domain: The Domain.
332
+ use_text_for_last_user_input: Indicates whether to use text or intent label
333
+ for featurizing last user input.
334
+ rule_only_data: Slots and loops which are specific to rules and hence
335
+ should be ignored by this policy.
336
+
337
+ Returns:
338
+ A list of states.
339
+ """
340
+ return self.featurizer.prediction_states(
341
+ [tracker],
342
+ domain,
343
+ use_text_for_last_user_input=use_text_for_last_user_input,
344
+ ignore_rule_only_turns=self.supported_data() == SupportedData.ML_DATA,
345
+ rule_only_data=rule_only_data,
346
+ ignore_action_unlikely_intent=self.supported_data()
347
+ == SupportedData.ML_DATA,
348
+ )[0]
349
+
350
+ def _featurize_for_prediction(
351
+ self,
352
+ tracker: DialogueStateTracker,
353
+ domain: Domain,
354
+ precomputations: Optional[MessageContainerForCoreFeaturization],
355
+ rule_only_data: Optional[Dict[Text, Any]],
356
+ use_text_for_last_user_input: bool = False,
357
+ ) -> List[List[Dict[Text, List[Features]]]]:
358
+ """Transforms training tracker into a vector representation.
359
+
360
+ The trackers, consisting of multiple turns, will be transformed
361
+ into a float vector which can be used by a ML model.
362
+
363
+ Args:
364
+ tracker: The tracker to be featurized.
365
+ domain: The Domain.
366
+ precomputations: Contains precomputed features and attributes.
367
+ use_text_for_last_user_input: Indicates whether to use text or intent label
368
+ for featurizing last user input.
369
+ rule_only_data: Slots and loops which are specific to rules and hence
370
+ should be ignored by this policy.
371
+
372
+ Returns:
373
+ A list (corresponds to the list of trackers)
374
+ of lists (corresponds to all dialogue turns)
375
+ of dictionaries of state type (INTENT, TEXT, ACTION_NAME, ACTION_TEXT,
376
+ ENTITIES, SLOTS, ACTIVE_LOOP) to a list of features for all dialogue
377
+ turns in all trackers.
378
+ """
379
+ return self.featurizer.create_state_features(
380
+ [tracker],
381
+ domain,
382
+ precomputations=precomputations,
383
+ use_text_for_last_user_input=use_text_for_last_user_input,
384
+ ignore_rule_only_turns=self.supported_data() == SupportedData.ML_DATA,
385
+ rule_only_data=rule_only_data,
386
+ ignore_action_unlikely_intent=self.supported_data()
387
+ == SupportedData.ML_DATA,
388
+ )
389
+
390
+ @abc.abstractmethod
391
+ def train(
392
+ self,
393
+ training_trackers: List[TrackerWithCachedStates],
394
+ domain: Domain,
395
+ **kwargs: Any,
396
+ ) -> Resource:
397
+ """Trains a policy.
398
+
399
+ Args:
400
+ training_trackers: The story and rules trackers from the training data.
401
+ domain: The model's domain.
402
+ **kwargs: Depending on the specified `needs` section and the resulting
403
+ graph structure the policy can use different input to train itself.
404
+
405
+ Returns:
406
+ A policy must return its resource locator so that potential children nodes
407
+ can load the policy from the resource.
408
+ """
409
+ raise NotImplementedError("Policy must have the capacity to train.")
410
+
411
+ @abc.abstractmethod
412
+ async def predict_action_probabilities(
413
+ self,
414
+ tracker: DialogueStateTracker,
415
+ domain: Domain,
416
+ rule_only_data: Optional[Dict[Text, Any]] = None,
417
+ **kwargs: Any,
418
+ ) -> PolicyPrediction:
419
+ """Predicts the next action the bot should take after seeing the tracker.
420
+
421
+ Backwards compatibility: this method can also be implemented without
422
+ `async`. In that case, the method will be run in a synchronous way.
423
+
424
+ Args:
425
+ tracker: The tracker containing the conversation history up to now.
426
+ domain: The model's domain.
427
+ rule_only_data: Slots and loops which are specific to rules and hence
428
+ should be ignored by this policy.
429
+ **kwargs: Depending on the specified `needs` section and the resulting
430
+ graph structure the policy can use different input to make predictions.
431
+
432
+ Returns:
433
+ The prediction.
434
+ """
435
+ raise NotImplementedError("Policy must have the capacity to predict.")
436
+
437
+ def _prediction(
438
+ self,
439
+ probabilities: List[float],
440
+ events: Optional[List[Event]] = None,
441
+ optional_events: Optional[List[Event]] = None,
442
+ is_end_to_end_prediction: bool = False,
443
+ is_no_user_prediction: bool = False,
444
+ diagnostic_data: Optional[Dict[Text, Any]] = None,
445
+ action_metadata: Optional[Dict[Text, Any]] = None,
446
+ ) -> PolicyPrediction:
447
+ return PolicyPrediction(
448
+ probabilities,
449
+ self.__class__.__name__,
450
+ self.priority,
451
+ events,
452
+ optional_events,
453
+ is_end_to_end_prediction,
454
+ is_no_user_prediction,
455
+ diagnostic_data,
456
+ action_metadata=action_metadata,
457
+ )
458
+
459
+ @classmethod
460
+ def load(
461
+ cls,
462
+ config: Dict[Text, Any],
463
+ model_storage: ModelStorage,
464
+ resource: Resource,
465
+ execution_context: ExecutionContext,
466
+ **kwargs: Any,
467
+ ) -> Policy:
468
+ """Loads a trained policy (see parent class for full docstring)."""
469
+ from rasa.core.featurizers.tracker_featurizers import (
470
+ TrackerFeaturizer,
471
+ FEATURIZER_FILE,
472
+ )
473
+
474
+ featurizer = None
475
+
476
+ try:
477
+ with model_storage.read_from(resource) as path:
478
+ if (Path(path) / FEATURIZER_FILE).is_file():
479
+ featurizer = TrackerFeaturizer.load(path)
480
+
481
+ config.update(kwargs)
482
+
483
+ except (ValueError, FileNotFoundError, FileIOException):
484
+ logger.debug(
485
+ f"Couldn't load metadata for policy '{cls.__name__}' as the persisted "
486
+ f"metadata couldn't be loaded."
487
+ )
488
+
489
+ return cls(
490
+ config, model_storage, resource, execution_context, featurizer=featurizer
491
+ )
492
+
493
+ def _default_predictions(self, domain: Domain) -> List[float]:
494
+ """Creates a list of zeros.
495
+
496
+ Args:
497
+ domain: the :class:`rasa.shared.core.domain.Domain`
498
+ Returns:
499
+ the list of the length of the number of actions
500
+ """
501
+ return [0.0] * domain.num_actions
502
+
503
+ @staticmethod
504
+ def format_tracker_states(states: List[Dict]) -> Text:
505
+ """Format tracker states to human readable format on debug log.
506
+
507
+ Args:
508
+ states: list of tracker states dicts
509
+
510
+ Returns:
511
+ the string of the states with user intents and actions
512
+ """
513
+ # empty string to insert line break before first state
514
+ formatted_states = [""]
515
+ if states:
516
+ for index, state in enumerate(states):
517
+ state_messages = []
518
+ if state:
519
+ if USER in state:
520
+ if TEXT in state[USER]:
521
+ state_messages.append(f"user text: {state[USER][TEXT]!s}")
522
+ if INTENT in state[USER]:
523
+ state_messages.append(
524
+ f"user intent: {state[USER][INTENT]!s}"
525
+ )
526
+ if ENTITIES in state[USER]:
527
+ state_messages.append(
528
+ f"user entities: {state[USER][ENTITIES]!s}"
529
+ )
530
+ if PREVIOUS_ACTION in state:
531
+ if ACTION_NAME in state[PREVIOUS_ACTION]:
532
+ state_messages.append(
533
+ f"previous action name: "
534
+ f"{state[PREVIOUS_ACTION][ACTION_NAME]!s}"
535
+ )
536
+ if ACTION_TEXT in state[PREVIOUS_ACTION]:
537
+ state_messages.append(
538
+ f"previous action text: "
539
+ f"{state[PREVIOUS_ACTION][ACTION_TEXT]!s}"
540
+ )
541
+ if ACTIVE_LOOP in state:
542
+ state_messages.append(f"active loop: {state[ACTIVE_LOOP]!s}")
543
+ if SLOTS in state:
544
+ state_messages.append(f"slots: {state[SLOTS]!s}")
545
+ state_message_formatted = " | ".join(state_messages)
546
+ state_formatted = f"[state {index!s}] {state_message_formatted}"
547
+ formatted_states.append(state_formatted)
548
+
549
+ return "\n".join(formatted_states)
550
+
551
+ def __repr__(self) -> Text:
552
+ """Returns text representation of object."""
553
+ return f"{self.__class__.__name__}@{id(self)}"
554
+
555
+
556
+ class PolicyPrediction:
557
+ """Stores information about the prediction of a `Policy`."""
558
+
559
+ def __init__(
560
+ self,
561
+ probabilities: List[float],
562
+ policy_name: Optional[Text],
563
+ policy_priority: int = 1,
564
+ events: Optional[List[Event]] = None,
565
+ optional_events: Optional[List[Event]] = None,
566
+ is_end_to_end_prediction: bool = False,
567
+ is_no_user_prediction: bool = False,
568
+ diagnostic_data: Optional[Dict[Text, Any]] = None,
569
+ hide_rule_turn: bool = False,
570
+ action_metadata: Optional[Dict[Text, Any]] = None,
571
+ ) -> None:
572
+ """Creates a `PolicyPrediction`.
573
+
574
+ Args:
575
+ probabilities: The probabilities for each action.
576
+ policy_name: Name of the policy which made the prediction.
577
+ policy_priority: The priority of the policy which made the prediction.
578
+ events: Events which the `Policy` needs to have applied to the tracker
579
+ after the prediction. These events are applied independent of whether
580
+ the policy wins against other policies or not. Be careful which events
581
+ you return as they can potentially influence the conversation flow.
582
+ optional_events: Events which the `Policy` needs to have applied to the
583
+ tracker after the prediction in case it wins. These events are only
584
+ applied in case the policy's prediction wins. Be careful which events
585
+ you return as they can potentially influence the conversation flow.
586
+ is_end_to_end_prediction: `True` if the prediction used the text of the
587
+ user message instead of the intent.
588
+ is_no_user_prediction: `True` if the prediction uses neither the text
589
+ of the user message nor the intent. This is for the example the case
590
+ for happy loop paths.
591
+ diagnostic_data: Intermediate results or other information that is not
592
+ necessary for Rasa to function, but intended for debugging and
593
+ fine-tuning purposes.
594
+ hide_rule_turn: `True` if the prediction was made by the rules which
595
+ do not appear in the stories
596
+ action_metadata: Specifies additional metadata that can be passed
597
+ by policies.
598
+ """
599
+ self.probabilities = probabilities
600
+ self.policy_name = policy_name
601
+ self.policy_priority = policy_priority
602
+ self.events = events or []
603
+ self.optional_events = optional_events or []
604
+ self.is_end_to_end_prediction = is_end_to_end_prediction
605
+ self.is_no_user_prediction = is_no_user_prediction
606
+ self.diagnostic_data = diagnostic_data or {}
607
+ self.hide_rule_turn = hide_rule_turn
608
+ self.action_metadata = action_metadata
609
+
610
+ @staticmethod
611
+ def for_action_name(
612
+ domain: Domain,
613
+ action_name: Text,
614
+ policy_name: Optional[Text] = None,
615
+ confidence: float = 1.0,
616
+ action_metadata: Optional[Dict[Text, Any]] = None,
617
+ ) -> "PolicyPrediction":
618
+ """Create a prediction for a given action.
619
+
620
+ Args:
621
+ domain: The current model domain
622
+ action_name: The action which should be predicted.
623
+ policy_name: The policy which did the prediction.
624
+ confidence: The prediction confidence.
625
+ action_metadata: Additional metadata to be attached with the prediction.
626
+
627
+ Returns:
628
+ The prediction.
629
+ """
630
+ probabilities = confidence_scores_for(action_name, confidence, domain)
631
+
632
+ return PolicyPrediction(
633
+ probabilities, policy_name, action_metadata=action_metadata
634
+ )
635
+
636
+ def __eq__(self, other: Any) -> bool:
637
+ """Checks if the two objects are equal.
638
+
639
+ Args:
640
+ other: Any other object.
641
+
642
+ Returns:
643
+ `True` if other has the same type and the values are the same.
644
+ """
645
+ if not isinstance(other, PolicyPrediction):
646
+ return False
647
+
648
+ return (
649
+ self.probabilities == other.probabilities
650
+ and self.policy_name == other.policy_name
651
+ and self.policy_priority == other.policy_priority
652
+ and self.events == other.events
653
+ and self.optional_events == other.optional_events
654
+ and self.is_end_to_end_prediction == other.is_end_to_end_prediction
655
+ and self.is_no_user_prediction == other.is_no_user_prediction
656
+ and self.hide_rule_turn == other.hide_rule_turn
657
+ and self.action_metadata == other.action_metadata
658
+ # We do not compare `diagnostic_data`, because it has no effect on the
659
+ # action prediction.
660
+ )
661
+
662
+ @property
663
+ def max_confidence_index(self) -> int:
664
+ """Gets the index of the action prediction with the highest confidence.
665
+
666
+ Returns:
667
+ The index of the action with the highest confidence.
668
+ """
669
+ return self.probabilities.index(self.max_confidence)
670
+
671
+ @property
672
+ def max_confidence(self) -> float:
673
+ """Gets the highest predicted confidence.
674
+
675
+ Returns:
676
+ The highest predicted confidence.
677
+ """
678
+ return max(self.probabilities, default=0.0)
679
+
680
+
681
+ def confidence_scores_for(
682
+ action_name: Text, value: float, domain: Domain
683
+ ) -> List[float]:
684
+ """Returns confidence scores if a single action is predicted.
685
+
686
+ Args:
687
+ action_name: the name of the action for which the score should be set
688
+ value: the confidence for `action_name`
689
+ domain: the :class:`rasa.shared.core.domain.Domain`
690
+
691
+ Returns:
692
+ the list of the length of the number of actions
693
+ """
694
+ results = [0.0] * domain.num_actions
695
+ idx = domain.index_for_action(action_name)
696
+ results[idx] = value
697
+
698
+ return results
699
+
700
+
701
+ class InvalidPolicyConfig(RasaException):
702
+ """Exception that can be raised when policy config is not valid."""
703
+
704
+
705
+ def _get_featurizer_from_config(
706
+ config: List[Dict[Text, Any]], policy_name: Text, lookup_path: Text
707
+ ) -> Callable[..., "TrackerFeaturizer"]:
708
+ """Gets the featurizer initializer and its arguments from a policy config."""
709
+ # Only 1 featurizer is allowed
710
+ if len(config) > 1:
711
+ featurizer_names = [
712
+ featurizer_config.get("name") for featurizer_config in config
713
+ ]
714
+ raise InvalidPolicyConfig(
715
+ f"Every policy can only have 1 featurizer but '{policy_name}' "
716
+ f"uses {len(config)} featurizers ('{', '.join(featurizer_names)}')."
717
+ )
718
+
719
+ featurizer_config = config[0]
720
+ featurizer_name = featurizer_config.pop("name")
721
+ featurizer_func = rasa.shared.utils.common.class_from_module_path(
722
+ featurizer_name, lookup_path=lookup_path
723
+ )
724
+
725
+ return featurizer_func