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,764 @@
1
+ import json
2
+ from copy import deepcopy
3
+ from functools import wraps
4
+ from typing import (
5
+ TYPE_CHECKING,
6
+ Any,
7
+ Callable,
8
+ Dict,
9
+ Optional,
10
+ Text,
11
+ Type,
12
+ TypeVar,
13
+ Union,
14
+ cast,
15
+ )
16
+
17
+ import litellm
18
+ import structlog
19
+
20
+ import rasa.shared.utils.io
21
+ from rasa.core.utils import AvailableEndpoints
22
+ from rasa.shared.constants import (
23
+ MODEL_GROUP_CONFIG_KEY,
24
+ MODEL_GROUP_ID_CONFIG_KEY,
25
+ MODELS_CONFIG_KEY,
26
+ PROVIDER_CONFIG_KEY,
27
+ RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_EMPTY,
28
+ RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG,
29
+ ROUTER_CONFIG_KEY,
30
+ )
31
+ from rasa.shared.core.events import BotUttered, UserUttered
32
+ from rasa.shared.core.slots import BooleanSlot, CategoricalSlot, Slot
33
+ from rasa.shared.engine.caching import (
34
+ get_local_cache_location,
35
+ )
36
+ from rasa.shared.exceptions import (
37
+ FileIOException,
38
+ FileNotFoundException,
39
+ InvalidConfigException,
40
+ )
41
+ from rasa.shared.providers._configs.azure_openai_client_config import (
42
+ is_azure_openai_config,
43
+ )
44
+ from rasa.shared.providers._configs.huggingface_local_embedding_client_config import (
45
+ is_huggingface_local_config,
46
+ )
47
+ from rasa.shared.providers._configs.openai_client_config import is_openai_config
48
+ from rasa.shared.providers._configs.self_hosted_llm_client_config import (
49
+ is_self_hosted_config,
50
+ )
51
+ from rasa.shared.providers.embedding.embedding_client import EmbeddingClient
52
+ from rasa.shared.providers.llm.llm_client import LLMClient
53
+ from rasa.shared.providers.mappings import (
54
+ AZURE_OPENAI_PROVIDER,
55
+ HUGGINGFACE_LOCAL_EMBEDDING_PROVIDER,
56
+ OPENAI_PROVIDER,
57
+ SELF_HOSTED_PROVIDER,
58
+ get_client_config_class_from_provider,
59
+ get_embedding_client_from_provider,
60
+ get_llm_client_from_provider,
61
+ )
62
+
63
+ if TYPE_CHECKING:
64
+ from rasa.shared.core.trackers import DialogueStateTracker
65
+
66
+
67
+ structlogger = structlog.get_logger()
68
+
69
+ USER = "USER"
70
+
71
+ AI = "AI"
72
+
73
+ DEFAULT_OPENAI_GENERATE_MODEL_NAME = "gpt-3.5-turbo"
74
+
75
+ DEFAULT_OPENAI_CHAT_MODEL_NAME = "gpt-3.5-turbo"
76
+
77
+ DEFAULT_OPENAI_CHAT_MODEL_NAME_ADVANCED = "gpt-4"
78
+
79
+ DEFAULT_OPENAI_EMBEDDING_MODEL_NAME = "text-embedding-ada-002"
80
+
81
+ DEFAULT_OPENAI_TEMPERATURE = 0.7
82
+
83
+ DEFAULT_OPENAI_MAX_GENERATED_TOKENS = 256
84
+
85
+ DEFAULT_MAX_USER_INPUT_CHARACTERS = 420
86
+
87
+ DEPLOYMENT_CENTRIC_PROVIDERS = [AZURE_OPENAI_PROVIDER]
88
+
89
+ # Placeholder messages used in the transcript for
90
+ # instances where user input results in an error
91
+ ERROR_PLACEHOLDER = {
92
+ RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG: "[User sent really long message]",
93
+ RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_EMPTY: "",
94
+ "default": "[User input triggered an error]",
95
+ }
96
+
97
+ _Factory_F = TypeVar(
98
+ "_Factory_F",
99
+ bound=Callable[[Dict[str, Any], Dict[str, Any]], Union[EmbeddingClient, LLMClient]],
100
+ )
101
+ _CombineConfigs_F = TypeVar(
102
+ "_CombineConfigs_F",
103
+ bound=Callable[[Dict[str, Any], Dict[str, Any]], Dict[str, Any]],
104
+ )
105
+
106
+
107
+ litellm.set_verbose = True
108
+
109
+
110
+ def _compute_hash_for_cache_from_configs(
111
+ config_x: Dict[str, Any], config_y: Dict[str, Any]
112
+ ) -> int:
113
+ """Get a unique hash of the default and custom configs."""
114
+ return hash(
115
+ json.dumps(config_x, sort_keys=True) + json.dumps(config_y, sort_keys=True)
116
+ )
117
+
118
+
119
+ def _retrieve_from_cache(
120
+ cache: Dict[int, Any], unique_hash: int, function: Callable, function_kwargs: dict
121
+ ) -> Any:
122
+ """Retrieve the value from the cache if it exists. If it does not exist, cache it"""
123
+ if unique_hash in cache:
124
+ return cache[unique_hash]
125
+ else:
126
+ return_value = function(**function_kwargs)
127
+ cache[unique_hash] = return_value
128
+ return return_value
129
+
130
+
131
+ def _cache_factory(function: _Factory_F) -> _Factory_F:
132
+ """Memoize the factory methods based on the arguments."""
133
+ cache: Dict[int, Union[EmbeddingClient, LLMClient]] = {}
134
+
135
+ @wraps(function)
136
+ def factory_method_wrapper(
137
+ config_x: Dict[str, Any], config_y: Dict[str, Any]
138
+ ) -> Union[EmbeddingClient, LLMClient]:
139
+ # Get a unique hash of the default and custom configs.
140
+ unique_hash = _compute_hash_for_cache_from_configs(config_x, config_y)
141
+ return _retrieve_from_cache(
142
+ cache=cache,
143
+ unique_hash=unique_hash,
144
+ function=function,
145
+ function_kwargs={"custom_config": config_x, "default_config": config_y},
146
+ )
147
+
148
+ def clear_cache() -> None:
149
+ cache.clear()
150
+ structlogger.debug(
151
+ "Cleared cache for factory method",
152
+ function_name=function.__name__,
153
+ )
154
+
155
+ setattr(factory_method_wrapper, "clear_cache", clear_cache)
156
+ return cast(_Factory_F, factory_method_wrapper)
157
+
158
+
159
+ def _cache_combine_custom_and_default_configs(
160
+ function: _CombineConfigs_F,
161
+ ) -> _CombineConfigs_F:
162
+ """Memoize the combine_custom_and_default_config method based on the arguments."""
163
+ cache: Dict[int, dict] = {}
164
+
165
+ @wraps(function)
166
+ def combine_configs_wrapper(
167
+ config_x: Dict[str, Any], config_y: Dict[str, Any]
168
+ ) -> dict:
169
+ # Get a unique hash of the default and custom configs.
170
+ unique_hash = _compute_hash_for_cache_from_configs(config_x, config_y)
171
+ return _retrieve_from_cache(
172
+ cache=cache,
173
+ unique_hash=unique_hash,
174
+ function=function,
175
+ function_kwargs={"custom_config": config_x, "default_config": config_y},
176
+ )
177
+
178
+ def clear_cache() -> None:
179
+ cache.clear()
180
+ structlogger.debug(
181
+ "Cleared cache for combine_custom_and_default_config method",
182
+ function_name=function.__name__,
183
+ )
184
+
185
+ setattr(combine_configs_wrapper, "clear_cache", clear_cache)
186
+ return cast(_CombineConfigs_F, combine_configs_wrapper)
187
+
188
+
189
+ def tracker_as_readable_transcript(
190
+ tracker: "DialogueStateTracker",
191
+ human_prefix: str = USER,
192
+ ai_prefix: str = AI,
193
+ max_turns: Optional[int] = 20,
194
+ ) -> str:
195
+ """Creates a readable dialogue from a tracker.
196
+
197
+ Args:
198
+ tracker: the tracker to convert
199
+ human_prefix: the prefix to use for human utterances
200
+ ai_prefix: the prefix to use for ai utterances
201
+ max_turns: the maximum number of turns to include in the transcript
202
+
203
+ Example:
204
+ >>> tracker = Tracker(
205
+ ... sender_id="test",
206
+ ... slots=[],
207
+ ... events=[
208
+ ... UserUttered("hello"),
209
+ ... BotUttered("hi"),
210
+ ... ],
211
+ ... )
212
+ >>> tracker_as_readable_transcript(tracker)
213
+ USER: hello
214
+ AI: hi
215
+
216
+ Returns:
217
+ A string representing the transcript of the tracker
218
+ """
219
+ transcript = []
220
+
221
+ # using `applied_events` rather than `events` means that only events after the
222
+ # most recent `Restart` or `SessionStarted` are included in the transcript
223
+ for event in tracker.applied_events():
224
+ if isinstance(event, UserUttered):
225
+ if event.has_triggered_error:
226
+ first_error = event.error_commands[0]
227
+ error_type = first_error.get("error_type")
228
+ message = ERROR_PLACEHOLDER.get(
229
+ error_type, ERROR_PLACEHOLDER["default"]
230
+ )
231
+ else:
232
+ message = sanitize_message_for_prompt(event.text)
233
+ transcript.append(f"{human_prefix}: {message}")
234
+
235
+ elif isinstance(event, BotUttered):
236
+ transcript.append(f"{ai_prefix}: {sanitize_message_for_prompt(event.text)}")
237
+
238
+ if max_turns:
239
+ transcript = transcript[-max_turns:]
240
+
241
+ return "\n".join(transcript)
242
+
243
+
244
+ def sanitize_message_for_prompt(text: Optional[str]) -> str:
245
+ """Removes new lines from a string.
246
+
247
+ Args:
248
+ text: the text to sanitize
249
+
250
+ Returns:
251
+ A string with new lines removed.
252
+ """
253
+ return text.replace("\n", " ") if text else ""
254
+
255
+
256
+ @_cache_combine_custom_and_default_configs
257
+ def combine_custom_and_default_config(
258
+ custom_config: Optional[Dict[str, Any]], default_config: Dict[str, Any]
259
+ ) -> Dict[Text, Any]:
260
+ """Merges the given model configuration with the default configuration.
261
+
262
+ This method supports both single model configurations and model group configurations
263
+ (configs that have the `models` key).
264
+
265
+ If `custom_config` is a single model configuration, it merges `custom_config` with
266
+ `default_config`, which is also a single model configuration.
267
+
268
+ If `custom_config` is a model group configuration (contains the `models` key), it
269
+ applies the merging process to each model configuration within the group
270
+ individually, merging each with the `default_config`.
271
+
272
+ Note that `default_config` is always a single model configuration.
273
+
274
+ The method ensures that the provider is set and all deprecated keys are resolved,
275
+ resulting in a valid client configuration.
276
+
277
+ Args:
278
+ custom_config: The custom configuration containing values to overwrite defaults.
279
+ Can be a single model configuration or a model group configuration with a
280
+ `models` key.
281
+ default_config: The default configuration, which is a single model
282
+ configuration.
283
+
284
+ Returns:
285
+ The merged configuration, either a single model configuration or a model group
286
+ configuration with merged models.
287
+ """
288
+ if custom_config and MODELS_CONFIG_KEY in custom_config:
289
+ return _combine_model_groups_configs_with_default_config(
290
+ custom_config, default_config
291
+ )
292
+ else:
293
+ return _combine_single_model_configs(custom_config, default_config)
294
+
295
+
296
+ def _combine_model_groups_configs_with_default_config(
297
+ model_group_config: Dict[str, Any], default_config: Dict[str, Any]
298
+ ) -> Dict[Text, Any]:
299
+ """Merges each model configuration within a model group with the default
300
+ configuration.
301
+
302
+ This method processes model group configurations by applying the merging process to
303
+ each model configuration within the group individually.
304
+
305
+ Args:
306
+ model_group_config: The model group configuration containing a list of model
307
+ configurations under the `models` key.
308
+ default_config: The default configuration for a single model.
309
+
310
+ Returns:
311
+ The merged model group configuration with each model configuration merged
312
+ with the default configuration.
313
+ """
314
+ model_group_config = deepcopy(model_group_config)
315
+ model_group_config_combined_with_defaults = [
316
+ _combine_single_model_configs(model_config, default_config)
317
+ for model_config in model_group_config[MODELS_CONFIG_KEY]
318
+ ]
319
+ # Update the custom models config with the combined config.
320
+ model_group_config[MODELS_CONFIG_KEY] = model_group_config_combined_with_defaults
321
+ return model_group_config
322
+
323
+
324
+ @_cache_combine_custom_and_default_configs
325
+ def _combine_single_model_configs(
326
+ custom_config: Optional[Dict[str, Any]], default_config: Dict[str, Any]
327
+ ) -> Dict[Text, Any]:
328
+ """Merges the given model config with the default config.
329
+
330
+ This method guarantees that the provider is set and all the deprecated keys are
331
+ resolved. Hence, produces only a valid client config.
332
+
333
+ Only uses the default configuration arguments, if the type set in the
334
+ custom config matches the type in the default config. Otherwise, only
335
+ the custom config is used.
336
+
337
+ Args:
338
+ custom_config: The custom config containing values to overwrite defaults
339
+ default_config: The default config.
340
+
341
+ Returns:
342
+ The merged config.
343
+ """
344
+ if custom_config is None:
345
+ return default_config.copy()
346
+
347
+ # Get the provider from the custom config.
348
+ custom_config_provider = get_provider_from_config(custom_config)
349
+ # We expect the provider to be set in the default configs of all Rasa components.
350
+ default_config_provider = default_config[PROVIDER_CONFIG_KEY]
351
+
352
+ if (
353
+ custom_config_provider is not None
354
+ and custom_config_provider != default_config_provider
355
+ ):
356
+ # Get the provider-specific config class
357
+ client_config_clazz = get_client_config_class_from_provider(
358
+ custom_config_provider
359
+ )
360
+ # Checks for deprecated keys, resolves aliases and returns a valid config.
361
+ # This is done to ensure that the custom config is valid.
362
+ return client_config_clazz.from_dict(deepcopy(custom_config)).to_dict()
363
+
364
+ # If the provider is the same in both configs
365
+ # OR provider is not specified in the custom config
366
+ # perform MERGE by overriding the default config keys and values
367
+ # with custom config keys and values.
368
+ merged_config = {**deepcopy(default_config), **deepcopy(custom_config)}
369
+ # Check for deprecated keys, resolve aliases and return a valid config.
370
+ # This is done to ensure that the merged config is valid.
371
+ default_config_clazz = get_client_config_class_from_provider(
372
+ default_config_provider
373
+ )
374
+ return default_config_clazz.from_dict(merged_config).to_dict()
375
+
376
+
377
+ def get_provider_from_config(config: dict) -> Optional[str]:
378
+ """Try to get the provider from the passed llm/embeddings configuration.
379
+ If no provider can be found, return None.
380
+ """
381
+ if not config:
382
+ return None
383
+ if is_self_hosted_config(config):
384
+ return SELF_HOSTED_PROVIDER
385
+ elif is_azure_openai_config(config):
386
+ return AZURE_OPENAI_PROVIDER
387
+ elif is_openai_config(config):
388
+ return OPENAI_PROVIDER
389
+ elif is_huggingface_local_config(config):
390
+ return HUGGINGFACE_LOCAL_EMBEDDING_PROVIDER
391
+ else:
392
+ return config.get(PROVIDER_CONFIG_KEY)
393
+
394
+
395
+ def ensure_cache() -> None:
396
+ """Ensures that the cache is initialized."""
397
+ import litellm
398
+
399
+ # Ensure the cache directory exists
400
+ cache_location = get_local_cache_location() / "rasa-llm-cache"
401
+ cache_location.mkdir(parents=True, exist_ok=True)
402
+
403
+ # Set diskcache as a caching option
404
+ litellm.cache = litellm.Cache(type="disk", disk_cache_dir=cache_location)
405
+
406
+
407
+ @_cache_factory
408
+ def llm_factory(
409
+ custom_config: Optional[Dict[str, Any]], default_config: Dict[str, Any]
410
+ ) -> LLMClient:
411
+ """Creates an LLM from the given config.
412
+
413
+ If the config is using the old syntax, e.g. defining the llm client directly in
414
+ config.yaml, then standalone client is initialised (no routing).
415
+
416
+ If the config uses the using the new, model group syntax, defined in the
417
+ endpoints.yml, then router client is initialised if there are more than one model
418
+ within the group.
419
+
420
+ Examples:
421
+ The config below will result in a standalone client:
422
+ ```
423
+ {
424
+ "provider": "openai",
425
+ "model": "gpt-4",
426
+ "timeout": 10,
427
+ "num_retries": 3,
428
+ }
429
+ ```
430
+
431
+ The config below will also result in a standalone client:
432
+ ```
433
+ {
434
+ "id": "model-group-id",
435
+ "models": [
436
+ {"provider": "openai", "model": "gpt-4", "api_key": "test"},
437
+ ],
438
+ }
439
+ ```
440
+
441
+ The config below will result in a router client:
442
+ ```
443
+ {
444
+ "id": "test-model-group-id",
445
+ "models": [
446
+ {"provider": "openai", "model": "gpt-4", "api_key": "test"},
447
+ {
448
+ "provider": "azure",
449
+ "deployment": "test-deployment",
450
+ "api_key": "test",
451
+ "api_base": "test-api-base",
452
+ },
453
+ ],
454
+ "router": {"routing_strategy": "test"},
455
+ }
456
+ ```
457
+
458
+ Args:
459
+ custom_config: The custom config containing values to overwrite defaults.
460
+ default_config: The default config.
461
+
462
+ Returns:
463
+ Instantiated client based on the configuration.
464
+ """
465
+ if custom_config:
466
+ if ROUTER_CONFIG_KEY in custom_config:
467
+ return llm_router_factory(custom_config, default_config)
468
+ if MODELS_CONFIG_KEY in custom_config:
469
+ return llm_client_factory(
470
+ custom_config[MODELS_CONFIG_KEY][0], default_config
471
+ )
472
+ return llm_client_factory(custom_config, default_config)
473
+
474
+
475
+ def llm_router_factory(
476
+ router_config: Dict[str, Any], default_model_config: Dict[str, Any], **kwargs: Any
477
+ ) -> LLMClient:
478
+ """Creates an LLM Router using the provided configurations.
479
+
480
+ This function initializes an LLM Router based on the given router configuration,
481
+ which includes multiple model configurations. For each model specified in the router
482
+ configuration, any missing parameters are supplemented using the default model
483
+ configuration.
484
+
485
+ Args:
486
+ router_config: The full router configuration containing multiple model
487
+ configurations. Each model's configuration can override parameters from the
488
+ default model configuration.
489
+ default_model_config: The default configuration parameters for a single model.
490
+ These defaults are used to fill in any missing parameters in each model's
491
+ configuration within the router.
492
+
493
+ Returns:
494
+ An instance that conforms to both `LLMClient` and `RouterClient` protocols
495
+ representing the configured LLM Router.
496
+ """
497
+ from rasa.shared.providers.llm.litellm_router_llm_client import (
498
+ LiteLLMRouterLLMClient,
499
+ )
500
+
501
+ combined_config = _combine_model_groups_configs_with_default_config(
502
+ router_config, default_model_config
503
+ )
504
+ return LiteLLMRouterLLMClient.from_config(combined_config)
505
+
506
+
507
+ def llm_client_factory(
508
+ custom_config: Optional[Dict[str, Any]], default_config: Dict[str, Any]
509
+ ) -> LLMClient:
510
+ """Creates an LLM from the given config.
511
+
512
+ Args:
513
+ custom_config: The custom config containing values to overwrite defaults
514
+ default_config: The default config.
515
+
516
+ Returns:
517
+ Instantiated LLM based on the configuration.
518
+ """
519
+ config = combine_custom_and_default_config(deepcopy(custom_config), default_config)
520
+
521
+ ensure_cache()
522
+
523
+ client_clazz: Type[LLMClient] = get_llm_client_from_provider(
524
+ config[PROVIDER_CONFIG_KEY]
525
+ )
526
+ client = client_clazz.from_config(config)
527
+ return client
528
+
529
+
530
+ @_cache_factory
531
+ def embedder_factory(
532
+ custom_config: Optional[Dict[str, Any]], default_config: Dict[str, Any]
533
+ ) -> EmbeddingClient:
534
+ """Creates an embedding client from the given config.
535
+
536
+ If the config is using the old syntax, e.g. defining the llm client directly in
537
+ config.yaml, then standalone client is initialised (no routing).
538
+
539
+ If the config uses the using the new, model group syntax, defined in the
540
+ endpoints.yml, then router client is initialised if there are more than one model
541
+ within the group and the router is defined.
542
+
543
+ Examples:
544
+ The config below will result in a standalone client:
545
+ ```
546
+ {
547
+ "provider": "openai",
548
+ "model": "text-embedding-3-small",
549
+ "timeout": 10,
550
+ "num_retries": 3,
551
+ }
552
+ ```
553
+
554
+ The config below will also result in a standalone client:
555
+ ```
556
+ {
557
+ "id": "model-group-id",
558
+ "models": [
559
+ {
560
+ "provider": "openai",
561
+ "model": "test-embedding-3-small",
562
+ "api_key": "test"
563
+ },
564
+ ],
565
+ }
566
+ ```
567
+
568
+ The config below will result in a router client:
569
+ ```
570
+ {
571
+ "id": "test-model-group-id",
572
+ "models": [
573
+ {"provider": "openai", "model": "gpt-4", "api_key": "test"},
574
+ {
575
+ "provider": "azure",
576
+ "deployment": "test-deployment",
577
+ "api_key": "test",
578
+ "api_base": "test-api-base",
579
+ },
580
+ ],
581
+ "router": {"routing_strategy": "test"},
582
+ }
583
+ ```
584
+
585
+ Args:
586
+ custom_config: The custom config containing values to overwrite defaults.
587
+ default_config: The default config.
588
+
589
+ Returns:
590
+ Instantiated client based on the configuration.
591
+ """
592
+ if custom_config:
593
+ if ROUTER_CONFIG_KEY in custom_config:
594
+ return embedder_router_factory(custom_config, default_config)
595
+ if MODELS_CONFIG_KEY in custom_config:
596
+ return embedder_client_factory(
597
+ custom_config[MODELS_CONFIG_KEY][0], default_config
598
+ )
599
+ return embedder_client_factory(custom_config, default_config)
600
+
601
+
602
+ def embedder_router_factory(
603
+ router_config: Dict[str, Any], default_model_config: Dict[str, Any], **kwargs: Any
604
+ ) -> EmbeddingClient:
605
+ """Creates an Embedder Router using the provided configurations.
606
+
607
+ This function initializes an Embedder Router based on the given router
608
+ configuration, which includes multiple model configurations. For each model
609
+ specified in the router configuration, any missing parameters are supplemented using
610
+ the default model configuration.
611
+
612
+ Args:
613
+ router_config: The full router configuration containing multiple model
614
+ configurations. Each model's configuration can override parameters from the
615
+ default model configuration.
616
+ default_model_config: The default configuration parameters for a single model.
617
+ These defaults are used to fill in any missing parameters in each model's
618
+ configuration within the router.
619
+
620
+ Returns:
621
+ An instance that conforms to both `EmbeddingClient` and `RouterClient` protocols
622
+ representing the configured Embedding Router.
623
+ """
624
+ from rasa.shared.providers.embedding.litellm_router_embedding_client import (
625
+ LiteLLMRouterEmbeddingClient,
626
+ )
627
+
628
+ combined_config = _combine_model_groups_configs_with_default_config(
629
+ router_config, default_model_config
630
+ )
631
+
632
+ return LiteLLMRouterEmbeddingClient.from_config(combined_config)
633
+
634
+
635
+ def embedder_client_factory(
636
+ custom_config: Optional[Dict[str, Any]], default_config: Dict[str, Any]
637
+ ) -> EmbeddingClient:
638
+ """Creates an Embedder from the given config.
639
+
640
+ Args:
641
+ custom_config: The custom config containing values to overwrite defaults
642
+ default_config: The default config.
643
+
644
+
645
+ Returns:
646
+ Instantiated Embedder based on the configuration.
647
+ """
648
+ config = combine_custom_and_default_config(deepcopy(custom_config), default_config)
649
+
650
+ ensure_cache()
651
+
652
+ client_clazz: Type[EmbeddingClient] = get_embedding_client_from_provider(
653
+ config[PROVIDER_CONFIG_KEY]
654
+ )
655
+ client = client_clazz.from_config(config)
656
+ return client
657
+
658
+
659
+ def get_prompt_template(
660
+ jinja_file_path: Optional[Text], default_prompt_template: Text
661
+ ) -> Text:
662
+ """Returns the jinja template.
663
+
664
+ Args:
665
+ jinja_file_path: the path to the jinja file
666
+ default_prompt_template: the default prompt template
667
+
668
+ Returns:
669
+ The prompt template.
670
+ """
671
+ try:
672
+ if jinja_file_path is not None:
673
+ return rasa.shared.utils.io.read_file(jinja_file_path)
674
+ except (FileIOException, FileNotFoundException):
675
+ structlogger.warning(
676
+ "Failed to read custom prompt template. Using default template instead.",
677
+ jinja_file_path=jinja_file_path,
678
+ )
679
+ return default_prompt_template
680
+
681
+
682
+ def allowed_values_for_slot(slot: Slot) -> Union[str, None]:
683
+ """Get the allowed values for a slot."""
684
+ if isinstance(slot, BooleanSlot):
685
+ return str([True, False])
686
+ if isinstance(slot, CategoricalSlot):
687
+ return str([v for v in slot.values if v != "__other__"])
688
+ else:
689
+ return None
690
+
691
+
692
+ def resolve_model_client_config(
693
+ model_config: Optional[Dict[str, Any]], component_name: Optional[str] = None
694
+ ) -> Optional[Dict[str, Any]]:
695
+ """Resolve the model group in the model config.
696
+
697
+ 1. If the config is pointing to a model group, the corresponding model group
698
+ of the endpoints.yml is returned.
699
+ 2. If the config is using the old syntax, e.g. defining the llm
700
+ directly in config.yml, the config is returned as is.
701
+ 3. If the config is already resolved, return it as is.
702
+
703
+ Args:
704
+ model_config: The model config to be resolved.
705
+ component_name: The name of the component.
706
+ component_name: The method of the component.
707
+
708
+ Returns:
709
+ The resolved llm config.
710
+ """
711
+
712
+ def _raise_invalid_config_exception(reason: str) -> None:
713
+ """Helper function to raise InvalidConfigException with a formatted message."""
714
+ if component_name:
715
+ message = (
716
+ f"Could not resolve model group '{model_group_id}'"
717
+ f" for component '{component_name}'."
718
+ )
719
+ else:
720
+ message = f"Could not resolve model group '{model_group_id}'."
721
+ message += f" {reason}"
722
+ raise InvalidConfigException(message)
723
+
724
+ if model_config is None:
725
+ return None
726
+
727
+ # Config is already resolved or defines a client without model groups
728
+ if MODEL_GROUP_CONFIG_KEY not in model_config:
729
+ return model_config
730
+
731
+ model_group_id = model_config.get(MODEL_GROUP_CONFIG_KEY)
732
+
733
+ endpoints = AvailableEndpoints.get_instance()
734
+ if endpoints.model_groups is None:
735
+ _raise_invalid_config_exception(
736
+ reason=(
737
+ "No model group with that id found in endpoints.yml. "
738
+ "Please make sure to define the model group."
739
+ )
740
+ )
741
+
742
+ copy_model_groups = deepcopy(endpoints.model_groups)
743
+ model_group = [
744
+ model_group
745
+ for model_group in copy_model_groups # type: ignore[union-attr]
746
+ if model_group.get(MODEL_GROUP_ID_CONFIG_KEY) == model_group_id
747
+ ]
748
+
749
+ if len(model_group) == 0:
750
+ _raise_invalid_config_exception(
751
+ reason=(
752
+ "No model group with that id found in endpoints.yml. "
753
+ "Please make sure to define the model group."
754
+ )
755
+ )
756
+ if len(model_group) > 1:
757
+ _raise_invalid_config_exception(
758
+ reason=(
759
+ "Multiple model groups with that id found in endpoints.yml. "
760
+ "Please make sure to define the model group just once."
761
+ )
762
+ )
763
+
764
+ return model_group[0]