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,715 @@
1
+ from __future__ import annotations
2
+
3
+ from collections import OrderedDict
4
+ from enum import Enum
5
+ import logging
6
+ import typing
7
+ from typing import Any, Dict, List, Optional, Text, Tuple, Callable, Type
8
+
9
+ import numpy as np
10
+
11
+ import rasa.nlu.utils.bilou_utils as bilou_utils
12
+ import rasa.shared.utils.io
13
+ import rasa.utils.train_utils
14
+ from rasa.engine.graph import GraphComponent, ExecutionContext
15
+ from rasa.engine.recipes.default_recipe import DefaultV1Recipe
16
+ from rasa.engine.storage.resource import Resource
17
+ from rasa.engine.storage.storage import ModelStorage
18
+ from rasa.nlu.test import determine_token_labels
19
+ from rasa.nlu.tokenizers.spacy_tokenizer import POS_TAG_KEY
20
+ from rasa.nlu.extractors.extractor import EntityExtractorMixin
21
+ from rasa.nlu.tokenizers.tokenizer import Token, Tokenizer
22
+ from rasa.shared.nlu.training_data.training_data import TrainingData
23
+ from rasa.shared.nlu.training_data.message import Message
24
+ from rasa.nlu.constants import TOKENS_NAMES
25
+ from rasa.shared.nlu.constants import (
26
+ TEXT,
27
+ ENTITIES,
28
+ ENTITY_ATTRIBUTE_TYPE,
29
+ ENTITY_ATTRIBUTE_GROUP,
30
+ ENTITY_ATTRIBUTE_ROLE,
31
+ NO_ENTITY_TAG,
32
+ SPLIT_ENTITIES_BY_COMMA,
33
+ SPLIT_ENTITIES_BY_COMMA_DEFAULT_VALUE,
34
+ )
35
+ from rasa.shared.constants import DOCS_URL_COMPONENTS
36
+ from rasa.utils.tensorflow.constants import BILOU_FLAG, FEATURIZERS
37
+
38
+ logger = logging.getLogger(__name__)
39
+
40
+ if typing.TYPE_CHECKING:
41
+ from sklearn_crfsuite import CRF
42
+
43
+
44
+ CONFIG_FEATURES = "features"
45
+
46
+
47
+ class CRFToken:
48
+ def __init__(
49
+ self,
50
+ text: Text,
51
+ pos_tag: Text,
52
+ pattern: Dict[Text, Any],
53
+ dense_features: np.ndarray,
54
+ entity_tag: Text,
55
+ entity_role_tag: Text,
56
+ entity_group_tag: Text,
57
+ ):
58
+ self.text = text
59
+ self.pos_tag = pos_tag
60
+ self.pattern = pattern
61
+ self.dense_features = dense_features
62
+ self.entity_tag = entity_tag
63
+ self.entity_role_tag = entity_role_tag
64
+ self.entity_group_tag = entity_group_tag
65
+
66
+ def to_dict(self) -> Dict[str, Any]:
67
+ return {
68
+ "text": self.text,
69
+ "pos_tag": self.pos_tag,
70
+ "pattern": self.pattern,
71
+ "dense_features": [str(x) for x in list(self.dense_features)],
72
+ "entity_tag": self.entity_tag,
73
+ "entity_role_tag": self.entity_role_tag,
74
+ "entity_group_tag": self.entity_group_tag,
75
+ }
76
+
77
+ @classmethod
78
+ def create_from_dict(cls, data: Dict[str, Any]) -> "CRFToken":
79
+ return cls(
80
+ data["text"],
81
+ data["pos_tag"],
82
+ data["pattern"],
83
+ np.array([float(x) for x in data["dense_features"]]),
84
+ data["entity_tag"],
85
+ data["entity_role_tag"],
86
+ data["entity_group_tag"],
87
+ )
88
+
89
+
90
+ class CRFEntityExtractorOptions(str, Enum):
91
+ """Features that can be used for the 'CRFEntityExtractor'."""
92
+
93
+ PATTERN = "pattern"
94
+ LOW = "low"
95
+ TITLE = "title"
96
+ PREFIX5 = "prefix5"
97
+ PREFIX2 = "prefix2"
98
+ SUFFIX5 = "suffix5"
99
+ SUFFIX3 = "suffix3"
100
+ SUFFIX2 = "suffix2"
101
+ SUFFIX1 = "suffix1"
102
+ BIAS = "bias"
103
+ POS = "pos"
104
+ POS2 = "pos2"
105
+ UPPER = "upper"
106
+ DIGIT = "digit"
107
+ TEXT_DENSE_FEATURES = "text_dense_features"
108
+ ENTITY = "entity"
109
+
110
+
111
+ @DefaultV1Recipe.register(
112
+ DefaultV1Recipe.ComponentType.ENTITY_EXTRACTOR, is_trainable=True
113
+ )
114
+ class CRFEntityExtractor(GraphComponent, EntityExtractorMixin):
115
+ """Implements conditional random fields (CRF) to do named entity recognition."""
116
+
117
+ function_dict: Dict[Text, Callable[[CRFToken], Any]] = { # noqa: RUF012
118
+ CRFEntityExtractorOptions.LOW: lambda crf_token: crf_token.text.lower(),
119
+ CRFEntityExtractorOptions.TITLE: lambda crf_token: crf_token.text.istitle(),
120
+ CRFEntityExtractorOptions.PREFIX5: lambda crf_token: crf_token.text[:5],
121
+ CRFEntityExtractorOptions.PREFIX2: lambda crf_token: crf_token.text[:2],
122
+ CRFEntityExtractorOptions.SUFFIX5: lambda crf_token: crf_token.text[-5:],
123
+ CRFEntityExtractorOptions.SUFFIX3: lambda crf_token: crf_token.text[-3:],
124
+ CRFEntityExtractorOptions.SUFFIX2: lambda crf_token: crf_token.text[-2:],
125
+ CRFEntityExtractorOptions.SUFFIX1: lambda crf_token: crf_token.text[-1:],
126
+ CRFEntityExtractorOptions.BIAS: lambda _: "bias",
127
+ CRFEntityExtractorOptions.POS: lambda crf_token: crf_token.pos_tag,
128
+ CRFEntityExtractorOptions.POS2: lambda crf_token: crf_token.pos_tag[:2]
129
+ if crf_token.pos_tag is not None
130
+ else None,
131
+ CRFEntityExtractorOptions.UPPER: lambda crf_token: crf_token.text.isupper(),
132
+ CRFEntityExtractorOptions.DIGIT: lambda crf_token: crf_token.text.isdigit(),
133
+ CRFEntityExtractorOptions.PATTERN: lambda crf_token: crf_token.pattern,
134
+ CRFEntityExtractorOptions.TEXT_DENSE_FEATURES: (
135
+ lambda crf_token: CRFEntityExtractor._convert_dense_features_for_crfsuite(
136
+ crf_token
137
+ )
138
+ ),
139
+ CRFEntityExtractorOptions.ENTITY: lambda crf_token: crf_token.entity_tag,
140
+ }
141
+
142
+ @classmethod
143
+ def required_components(cls) -> List[Type]:
144
+ """Components that should be included in the pipeline before this component."""
145
+ return [Tokenizer]
146
+
147
+ @staticmethod
148
+ def get_default_config() -> Dict[Text, Any]:
149
+ """The component's default config (see parent class for full docstring)."""
150
+ return {
151
+ # BILOU_flag determines whether to use BILOU tagging or not.
152
+ # More rigorous however requires more examples per entity
153
+ # rule of thumb: use only if more than 100 egs. per entity
154
+ BILOU_FLAG: True,
155
+ # Split entities by comma, this makes sense e.g. for a list of ingredients
156
+ # in a recipie, but it doesn't make sense for the parts of an address
157
+ SPLIT_ENTITIES_BY_COMMA: True,
158
+ # crf_features is [before, token, after] array with before, token,
159
+ # after holding keys about which features to use for each token,
160
+ # for example, 'title' in array before will have the feature
161
+ # "is the preceding token in title case?"
162
+ # POS features require SpacyTokenizer
163
+ # pattern feature require RegexFeaturizer
164
+ CONFIG_FEATURES: [
165
+ [
166
+ CRFEntityExtractorOptions.LOW,
167
+ CRFEntityExtractorOptions.TITLE,
168
+ CRFEntityExtractorOptions.UPPER,
169
+ ],
170
+ [
171
+ CRFEntityExtractorOptions.LOW,
172
+ CRFEntityExtractorOptions.BIAS,
173
+ CRFEntityExtractorOptions.PREFIX5,
174
+ CRFEntityExtractorOptions.PREFIX2,
175
+ CRFEntityExtractorOptions.SUFFIX5,
176
+ CRFEntityExtractorOptions.SUFFIX3,
177
+ CRFEntityExtractorOptions.SUFFIX2,
178
+ CRFEntityExtractorOptions.UPPER,
179
+ CRFEntityExtractorOptions.TITLE,
180
+ CRFEntityExtractorOptions.DIGIT,
181
+ CRFEntityExtractorOptions.PATTERN,
182
+ ],
183
+ [
184
+ CRFEntityExtractorOptions.LOW,
185
+ CRFEntityExtractorOptions.TITLE,
186
+ CRFEntityExtractorOptions.UPPER,
187
+ ],
188
+ ],
189
+ # The maximum number of iterations for optimization algorithms.
190
+ "max_iterations": 50,
191
+ # weight of the L1 regularization
192
+ "L1_c": 0.1,
193
+ # weight of the L2 regularization
194
+ "L2_c": 0.1,
195
+ # Name of dense featurizers to use.
196
+ # If list is empty all available dense features are used.
197
+ "featurizers": [],
198
+ }
199
+
200
+ def __init__(
201
+ self,
202
+ config: Dict[Text, Any],
203
+ model_storage: ModelStorage,
204
+ resource: Resource,
205
+ entity_taggers: Optional[Dict[Text, "CRF"]] = None,
206
+ ) -> None:
207
+ """Creates an instance of entity extractor."""
208
+ self.component_config = config
209
+ self._model_storage = model_storage
210
+ self._resource = resource
211
+
212
+ self.entity_taggers = entity_taggers
213
+
214
+ self.crf_order = [
215
+ ENTITY_ATTRIBUTE_TYPE,
216
+ ENTITY_ATTRIBUTE_ROLE,
217
+ ENTITY_ATTRIBUTE_GROUP,
218
+ ]
219
+
220
+ self._validate_configuration()
221
+
222
+ self.split_entities_config = rasa.utils.train_utils.init_split_entities(
223
+ config[SPLIT_ENTITIES_BY_COMMA], SPLIT_ENTITIES_BY_COMMA_DEFAULT_VALUE
224
+ )
225
+
226
+ def _validate_configuration(self) -> None:
227
+ if len(self.component_config.get(CONFIG_FEATURES, [])) % 2 != 1:
228
+ raise ValueError(
229
+ "Need an odd number of crf feature lists to have a center word."
230
+ )
231
+
232
+ @classmethod
233
+ def create(
234
+ cls,
235
+ config: Dict[Text, Any],
236
+ model_storage: ModelStorage,
237
+ resource: Resource,
238
+ execution_context: ExecutionContext,
239
+ ) -> CRFEntityExtractor:
240
+ """Creates a new untrained component (see parent class for full docstring)."""
241
+ return cls(config, model_storage, resource)
242
+
243
+ @staticmethod
244
+ def required_packages() -> List[Text]:
245
+ """Any extra python dependencies required for this component to run."""
246
+ return ["sklearn_crfsuite", "sklearn"]
247
+
248
+ def train(self, training_data: TrainingData) -> Resource:
249
+ """Trains the extractor on a data set."""
250
+ # checks whether there is at least one
251
+ # example with an entity annotation
252
+ if not training_data.entity_examples:
253
+ logger.debug(
254
+ "No training examples with entities present. Skip training"
255
+ "of 'CRFEntityExtractor'."
256
+ )
257
+ return self._resource
258
+
259
+ self.check_correct_entity_annotations(training_data)
260
+
261
+ if self.component_config[BILOU_FLAG]:
262
+ bilou_utils.apply_bilou_schema(training_data)
263
+
264
+ # only keep the CRFs for tags we actually have training data for
265
+ self._update_crf_order(training_data)
266
+
267
+ # filter out pre-trained entity examples
268
+ entity_examples = self.filter_trainable_entities(training_data.nlu_examples)
269
+ entity_examples = [
270
+ message
271
+ for message in entity_examples
272
+ if message.features_present(
273
+ attribute=TEXT, featurizers=self.component_config.get(FEATURIZERS)
274
+ )
275
+ ]
276
+ dataset = [self._convert_to_crf_tokens(example) for example in entity_examples]
277
+
278
+ self.entity_taggers = self.train_model(
279
+ dataset, self.component_config, self.crf_order
280
+ )
281
+
282
+ self.persist(dataset)
283
+
284
+ return self._resource
285
+
286
+ def _update_crf_order(self, training_data: TrainingData) -> None:
287
+ """Train only CRFs we actually have training data for."""
288
+ _crf_order = []
289
+
290
+ for tag_name in self.crf_order:
291
+ if tag_name == ENTITY_ATTRIBUTE_TYPE and training_data.entities:
292
+ _crf_order.append(ENTITY_ATTRIBUTE_TYPE)
293
+ elif tag_name == ENTITY_ATTRIBUTE_ROLE and training_data.entity_roles:
294
+ _crf_order.append(ENTITY_ATTRIBUTE_ROLE)
295
+ elif tag_name == ENTITY_ATTRIBUTE_GROUP and training_data.entity_groups:
296
+ _crf_order.append(ENTITY_ATTRIBUTE_GROUP)
297
+
298
+ self.crf_order = _crf_order
299
+
300
+ def process(self, messages: List[Message]) -> List[Message]:
301
+ """Augments messages with entities."""
302
+ for message in messages:
303
+ entities = self.extract_entities(message)
304
+ entities = self.add_extractor_name(entities)
305
+ message.set(
306
+ ENTITIES, message.get(ENTITIES, []) + entities, add_to_output=True
307
+ )
308
+
309
+ return messages
310
+
311
+ def extract_entities(self, message: Message) -> List[Dict[Text, Any]]:
312
+ """Extract entities from the given message using the trained model(s)."""
313
+ if self.entity_taggers is None or not message.features_present(
314
+ attribute=TEXT, featurizers=self.component_config.get(FEATURIZERS)
315
+ ):
316
+ return []
317
+
318
+ tokens = message.get(TOKENS_NAMES[TEXT])
319
+ crf_tokens = self._convert_to_crf_tokens(message)
320
+
321
+ predictions: Dict[Text, List[Dict[Text, float]]] = {}
322
+ for tag_name, entity_tagger in self.entity_taggers.items():
323
+ # use predicted entity tags as features for second level CRFs
324
+ include_tag_features = tag_name != ENTITY_ATTRIBUTE_TYPE
325
+ if include_tag_features:
326
+ self._add_tag_to_crf_token(crf_tokens, predictions)
327
+
328
+ features = self._crf_tokens_to_features(
329
+ crf_tokens, self.component_config, include_tag_features
330
+ )
331
+ predictions[tag_name] = entity_tagger.predict_marginals_single(features)
332
+
333
+ # convert predictions into a list of tags and a list of confidences
334
+ tags, confidences = self._tag_confidences(tokens, predictions)
335
+
336
+ return self.convert_predictions_into_entities(
337
+ message.get(TEXT), tokens, tags, self.split_entities_config, confidences
338
+ )
339
+
340
+ def _add_tag_to_crf_token(
341
+ self,
342
+ crf_tokens: List[CRFToken],
343
+ predictions: Dict[Text, List[Dict[Text, float]]],
344
+ ) -> None:
345
+ """Add predicted entity tags to CRF tokens."""
346
+ if ENTITY_ATTRIBUTE_TYPE in predictions:
347
+ _tags, _ = self._most_likely_tag(predictions[ENTITY_ATTRIBUTE_TYPE])
348
+ for tag, token in zip(_tags, crf_tokens):
349
+ token.entity_tag = tag
350
+
351
+ def _most_likely_tag(
352
+ self, predictions: List[Dict[Text, float]]
353
+ ) -> Tuple[List[Text], List[float]]:
354
+ """Get the entity tags with the highest confidence.
355
+
356
+ Args:
357
+ predictions: list of mappings from entity tag to confidence value
358
+
359
+ Returns:
360
+ List of entity tags and list of confidence values.
361
+ """
362
+ _tags = []
363
+ _confidences = []
364
+
365
+ for token_predictions in predictions:
366
+ tag = max(token_predictions, key=lambda key: token_predictions[key])
367
+ _tags.append(tag)
368
+
369
+ if self.component_config[BILOU_FLAG]:
370
+ # if we are using BILOU flags, we will sum up the prob
371
+ # of the B, I, L and U tags for an entity
372
+ _confidences.append(
373
+ sum(
374
+ _confidence
375
+ for _tag, _confidence in token_predictions.items()
376
+ if bilou_utils.tag_without_prefix(tag)
377
+ == bilou_utils.tag_without_prefix(_tag)
378
+ )
379
+ )
380
+ else:
381
+ _confidences.append(token_predictions[tag])
382
+
383
+ return _tags, _confidences
384
+
385
+ def _tag_confidences(
386
+ self, tokens: List[Token], predictions: Dict[Text, List[Dict[Text, float]]]
387
+ ) -> Tuple[Dict[Text, List[Text]], Dict[Text, List[float]]]:
388
+ """Get most likely tag predictions with confidence values for tokens."""
389
+ tags = {}
390
+ confidences = {}
391
+
392
+ for tag_name, predicted_tags in predictions.items():
393
+ if len(tokens) != len(predicted_tags):
394
+ raise Exception(
395
+ "Inconsistency in amount of tokens between crfsuite and message"
396
+ )
397
+
398
+ _tags, _confidences = self._most_likely_tag(predicted_tags)
399
+
400
+ if self.component_config[BILOU_FLAG]:
401
+ _tags, _confidences = bilou_utils.ensure_consistent_bilou_tagging(
402
+ _tags, _confidences
403
+ )
404
+
405
+ confidences[tag_name] = _confidences
406
+ tags[tag_name] = _tags
407
+
408
+ return tags, confidences
409
+
410
+ @classmethod
411
+ def load(
412
+ cls,
413
+ config: Dict[Text, Any],
414
+ model_storage: ModelStorage,
415
+ resource: Resource,
416
+ execution_context: ExecutionContext,
417
+ **kwargs: Any,
418
+ ) -> CRFEntityExtractor:
419
+ """Loads trained component (see parent class for full docstring)."""
420
+ try:
421
+ with model_storage.read_from(resource) as model_dir:
422
+ dataset = rasa.shared.utils.io.read_json_file(
423
+ model_dir / "crf_dataset.json"
424
+ )
425
+ crf_order = rasa.shared.utils.io.read_json_file(
426
+ model_dir / "crf_order.json"
427
+ )
428
+
429
+ dataset = [
430
+ [CRFToken.create_from_dict(token_data) for token_data in sub_list]
431
+ for sub_list in dataset
432
+ ]
433
+
434
+ entity_taggers = cls.train_model(dataset, config, crf_order)
435
+
436
+ entity_extractor = cls(config, model_storage, resource, entity_taggers)
437
+ entity_extractor.crf_order = crf_order
438
+ return entity_extractor
439
+ except ValueError:
440
+ logger.warning(
441
+ f"Failed to load {cls.__name__} from model storage. Resource "
442
+ f"'{resource.name}' doesn't exist."
443
+ )
444
+ return cls(config, model_storage, resource)
445
+
446
+ def persist(self, dataset: List[List[CRFToken]]) -> None:
447
+ """Persist this model into the passed directory."""
448
+ with self._model_storage.write_to(self._resource) as model_dir:
449
+ data_to_store = [
450
+ [token.to_dict() for token in sub_list] for sub_list in dataset
451
+ ]
452
+
453
+ rasa.shared.utils.io.dump_obj_as_json_to_file(
454
+ model_dir / "crf_dataset.json", data_to_store
455
+ )
456
+ rasa.shared.utils.io.dump_obj_as_json_to_file(
457
+ model_dir / "crf_order.json", self.crf_order
458
+ )
459
+
460
+ @classmethod
461
+ def _crf_tokens_to_features(
462
+ cls,
463
+ crf_tokens: List[CRFToken],
464
+ config: Dict[str, Any],
465
+ include_tag_features: bool = False,
466
+ ) -> List[Dict[Text, Any]]:
467
+ """Convert the list of tokens into discrete features."""
468
+ configured_features = config[CONFIG_FEATURES]
469
+ sentence_features = []
470
+
471
+ for token_idx in range(len(crf_tokens)):
472
+ # the features for the current token include features of the token
473
+ # before and after the current features (if defined in the config)
474
+ # token before (-1), current token (0), token after (+1)
475
+ window_size = len(configured_features)
476
+ half_window_size = window_size // 2
477
+ window_range = range(-half_window_size, half_window_size + 1)
478
+
479
+ token_features = cls._create_features_for_token(
480
+ crf_tokens,
481
+ token_idx,
482
+ half_window_size,
483
+ window_range,
484
+ include_tag_features,
485
+ config,
486
+ )
487
+
488
+ sentence_features.append(token_features)
489
+
490
+ return sentence_features
491
+
492
+ @classmethod
493
+ def _create_features_for_token(
494
+ cls,
495
+ crf_tokens: List[CRFToken],
496
+ token_idx: int,
497
+ half_window_size: int,
498
+ window_range: range,
499
+ include_tag_features: bool,
500
+ config: Dict[str, Any],
501
+ ) -> Dict[Text, Any]:
502
+ """Convert a token into discrete features including words before and after."""
503
+ configured_features = config[CONFIG_FEATURES]
504
+ prefixes = [str(i) for i in window_range]
505
+
506
+ token_features = {}
507
+
508
+ # iterate over the tokens in the window range (-1, 0, +1) to collect the
509
+ # features for the token at token_idx
510
+ for pointer_position in window_range:
511
+ current_token_idx = token_idx + pointer_position
512
+
513
+ if current_token_idx >= len(crf_tokens):
514
+ # token is at the end of the sentence
515
+ token_features["EOS"] = True
516
+ elif current_token_idx < 0:
517
+ # token is at the beginning of the sentence
518
+ token_features["BOS"] = True
519
+ else:
520
+ token = crf_tokens[current_token_idx]
521
+
522
+ # get the features to extract for the token we are currently looking at
523
+ current_feature_idx = pointer_position + half_window_size
524
+ features = configured_features[current_feature_idx]
525
+
526
+ prefix = prefixes[current_feature_idx]
527
+
528
+ # we add the 'entity' feature to include the entity type as features
529
+ # for the role and group CRFs
530
+ # (do not modify features, otherwise we will end up adding 'entity'
531
+ # over and over again, making training very slow)
532
+ additional_features = []
533
+ if include_tag_features:
534
+ additional_features.append(CRFEntityExtractorOptions.ENTITY)
535
+
536
+ for feature in features + additional_features:
537
+ if feature == CRFEntityExtractorOptions.PATTERN:
538
+ # add all regexes extracted from the 'RegexFeaturizer' as a
539
+ # feature: 'pattern_name' is the name of the pattern the user
540
+ # set in the training data, 'matched' is either 'True' or
541
+ # 'False' depending on whether the token actually matches the
542
+ # pattern or not
543
+ regex_patterns = cls.function_dict[feature](token)
544
+ for pattern_name, matched in regex_patterns.items():
545
+ token_features[f"{prefix}:{feature}:{pattern_name}"] = (
546
+ matched
547
+ )
548
+ else:
549
+ value = cls.function_dict[feature](token)
550
+ token_features[f"{prefix}:{feature}"] = value
551
+
552
+ return token_features
553
+
554
+ @staticmethod
555
+ def _crf_tokens_to_tags(crf_tokens: List[CRFToken], tag_name: Text) -> List[Text]:
556
+ """Return the list of tags for the given tag name."""
557
+ if tag_name == ENTITY_ATTRIBUTE_ROLE:
558
+ return [crf_token.entity_role_tag for crf_token in crf_tokens]
559
+ if tag_name == ENTITY_ATTRIBUTE_GROUP:
560
+ return [crf_token.entity_group_tag for crf_token in crf_tokens]
561
+
562
+ return [crf_token.entity_tag for crf_token in crf_tokens]
563
+
564
+ @staticmethod
565
+ def _pattern_of_token(message: Message, idx: int) -> Dict[Text, bool]:
566
+ """Get the patterns of the token at the given index extracted by the
567
+ 'RegexFeaturizer'.
568
+
569
+ The 'RegexFeaturizer' adds all patterns listed in the training data to the
570
+ token. The pattern name is mapped to either 'True' (pattern applies to token) or
571
+ 'False' (pattern does not apply to token).
572
+
573
+ Args:
574
+ message: The message.
575
+ idx: The token index.
576
+
577
+ Returns:
578
+ The pattern dict.
579
+ """
580
+ if message.get(TOKENS_NAMES[TEXT]) is not None:
581
+ return message.get(TOKENS_NAMES[TEXT])[idx].get(
582
+ CRFEntityExtractorOptions.PATTERN, {}
583
+ )
584
+ return {}
585
+
586
+ def _get_dense_features(self, message: Message) -> Optional[np.ndarray]:
587
+ """Convert dense features to python-crfsuite feature format."""
588
+ features, _ = message.get_dense_features(
589
+ TEXT, self.component_config["featurizers"]
590
+ )
591
+
592
+ if features is None:
593
+ return None
594
+
595
+ tokens = message.get(TOKENS_NAMES[TEXT])
596
+ if len(tokens) != len(features.features):
597
+ rasa.shared.utils.io.raise_warning(
598
+ f"Number of dense features ({len(features.features)}) for attribute "
599
+ f"'{TEXT}' does not match number of tokens ({len(tokens)}).",
600
+ docs=DOCS_URL_COMPONENTS + "#crfentityextractor",
601
+ )
602
+ return None
603
+
604
+ return features.features
605
+
606
+ @staticmethod
607
+ def _convert_dense_features_for_crfsuite(
608
+ crf_token: CRFToken,
609
+ ) -> Dict[Text, Dict[Text, float]]:
610
+ """Converts dense features of CRFTokens to dicts for the crfsuite."""
611
+ feature_dict = {
612
+ str(index): token_features
613
+ for index, token_features in enumerate(crf_token.dense_features)
614
+ }
615
+ converted = {"text_dense_features": feature_dict}
616
+ return converted
617
+
618
+ def _convert_to_crf_tokens(self, message: Message) -> List[CRFToken]:
619
+ """Take a message and convert it to crfsuite format."""
620
+ crf_format = []
621
+ tokens = message.get(TOKENS_NAMES[TEXT])
622
+
623
+ text_dense_features = self._get_dense_features(message)
624
+ tags = self._get_tags(message)
625
+
626
+ for i, token in enumerate(tokens):
627
+ pattern = self._pattern_of_token(message, i)
628
+ entity = self.get_tag_for(tags, ENTITY_ATTRIBUTE_TYPE, i)
629
+ group = self.get_tag_for(tags, ENTITY_ATTRIBUTE_GROUP, i)
630
+ role = self.get_tag_for(tags, ENTITY_ATTRIBUTE_ROLE, i)
631
+ pos_tag = token.get(POS_TAG_KEY)
632
+ dense_features = (
633
+ text_dense_features[i] if text_dense_features is not None else []
634
+ )
635
+
636
+ crf_format.append(
637
+ CRFToken(
638
+ text=token.text,
639
+ pos_tag=pos_tag,
640
+ entity_tag=entity,
641
+ entity_group_tag=group,
642
+ entity_role_tag=role,
643
+ pattern=pattern,
644
+ dense_features=dense_features,
645
+ )
646
+ )
647
+
648
+ return crf_format
649
+
650
+ def _get_tags(self, message: Message) -> Dict[Text, List[Text]]:
651
+ """Get assigned entity tags of message."""
652
+ tokens = message.get(TOKENS_NAMES[TEXT])
653
+ tags = {}
654
+
655
+ for tag_name in self.crf_order:
656
+ if self.component_config[BILOU_FLAG]:
657
+ bilou_key = bilou_utils.get_bilou_key_for_tag(tag_name)
658
+ if message.get(bilou_key):
659
+ _tags = message.get(bilou_key)
660
+ else:
661
+ _tags = [NO_ENTITY_TAG for _ in tokens]
662
+ else:
663
+ _tags = [
664
+ determine_token_labels(
665
+ token, message.get(ENTITIES), attribute_key=tag_name
666
+ )
667
+ for token in tokens
668
+ ]
669
+ tags[tag_name] = _tags
670
+
671
+ return tags
672
+
673
+ @classmethod
674
+ def train_model(
675
+ cls,
676
+ df_train: List[List[CRFToken]],
677
+ config: Dict[str, Any],
678
+ crf_order: List[str],
679
+ ) -> OrderedDict[str, CRF]:
680
+ """Train the crf tagger based on the training data."""
681
+ import sklearn_crfsuite
682
+
683
+ entity_taggers = OrderedDict()
684
+
685
+ for tag_name in crf_order:
686
+ logger.debug(f"Training CRF for '{tag_name}'.")
687
+
688
+ # add entity tag features for second level CRFs
689
+ include_tag_features = tag_name != ENTITY_ATTRIBUTE_TYPE
690
+ X_train = (
691
+ cls._crf_tokens_to_features(sentence, config, include_tag_features)
692
+ for sentence in df_train
693
+ )
694
+ y_train = (
695
+ cls._crf_tokens_to_tags(sentence, tag_name) for sentence in df_train
696
+ )
697
+
698
+ entity_tagger = sklearn_crfsuite.CRF(
699
+ algorithm="lbfgs",
700
+ # coefficient for L1 penalty
701
+ c1=config["L1_c"],
702
+ # coefficient for L2 penalty
703
+ c2=config["L2_c"],
704
+ # stop earlier
705
+ max_iterations=config["max_iterations"],
706
+ # include transitions that are possible, but not observed
707
+ all_possible_transitions=True,
708
+ )
709
+ entity_tagger.fit(X_train, y_train)
710
+
711
+ entity_taggers[tag_name] = entity_tagger
712
+
713
+ logger.debug("Training finished.")
714
+
715
+ return entity_taggers