rasa-pro 3.11.3a1.dev2__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 (784) 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/e2e_test.py +259 -0
  27. rasa/cli/evaluate.py +222 -0
  28. rasa/cli/export.py +250 -0
  29. rasa/cli/inspect.py +75 -0
  30. rasa/cli/interactive.py +166 -0
  31. rasa/cli/license.py +65 -0
  32. rasa/cli/llm_fine_tuning.py +403 -0
  33. rasa/cli/markers.py +78 -0
  34. rasa/cli/project_templates/__init__.py +0 -0
  35. rasa/cli/project_templates/calm/actions/__init__.py +0 -0
  36. rasa/cli/project_templates/calm/actions/action_template.py +27 -0
  37. rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
  38. rasa/cli/project_templates/calm/actions/db.py +57 -0
  39. rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
  40. rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
  41. rasa/cli/project_templates/calm/config.yml +10 -0
  42. rasa/cli/project_templates/calm/credentials.yml +33 -0
  43. rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
  44. rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
  45. rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
  46. rasa/cli/project_templates/calm/db/contacts.json +10 -0
  47. rasa/cli/project_templates/calm/domain/add_contact.yml +39 -0
  48. rasa/cli/project_templates/calm/domain/list_contacts.yml +17 -0
  49. rasa/cli/project_templates/calm/domain/remove_contact.yml +38 -0
  50. rasa/cli/project_templates/calm/domain/shared.yml +10 -0
  51. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
  52. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
  53. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
  54. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
  55. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
  56. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
  57. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
  58. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
  59. rasa/cli/project_templates/calm/endpoints.yml +58 -0
  60. rasa/cli/project_templates/default/actions/__init__.py +0 -0
  61. rasa/cli/project_templates/default/actions/actions.py +27 -0
  62. rasa/cli/project_templates/default/config.yml +44 -0
  63. rasa/cli/project_templates/default/credentials.yml +33 -0
  64. rasa/cli/project_templates/default/data/nlu.yml +91 -0
  65. rasa/cli/project_templates/default/data/rules.yml +13 -0
  66. rasa/cli/project_templates/default/data/stories.yml +30 -0
  67. rasa/cli/project_templates/default/domain.yml +34 -0
  68. rasa/cli/project_templates/default/endpoints.yml +42 -0
  69. rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
  70. rasa/cli/project_templates/tutorial/actions/__init__.py +0 -0
  71. rasa/cli/project_templates/tutorial/actions/actions.py +22 -0
  72. rasa/cli/project_templates/tutorial/config.yml +12 -0
  73. rasa/cli/project_templates/tutorial/credentials.yml +33 -0
  74. rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
  75. rasa/cli/project_templates/tutorial/data/patterns.yml +11 -0
  76. rasa/cli/project_templates/tutorial/domain.yml +35 -0
  77. rasa/cli/project_templates/tutorial/endpoints.yml +55 -0
  78. rasa/cli/run.py +143 -0
  79. rasa/cli/scaffold.py +273 -0
  80. rasa/cli/shell.py +141 -0
  81. rasa/cli/studio/__init__.py +0 -0
  82. rasa/cli/studio/download.py +62 -0
  83. rasa/cli/studio/studio.py +296 -0
  84. rasa/cli/studio/train.py +59 -0
  85. rasa/cli/studio/upload.py +62 -0
  86. rasa/cli/telemetry.py +102 -0
  87. rasa/cli/test.py +280 -0
  88. rasa/cli/train.py +278 -0
  89. rasa/cli/utils.py +484 -0
  90. rasa/cli/visualize.py +40 -0
  91. rasa/cli/x.py +206 -0
  92. rasa/constants.py +45 -0
  93. rasa/core/__init__.py +17 -0
  94. rasa/core/actions/__init__.py +0 -0
  95. rasa/core/actions/action.py +1320 -0
  96. rasa/core/actions/action_clean_stack.py +59 -0
  97. rasa/core/actions/action_exceptions.py +24 -0
  98. rasa/core/actions/action_hangup.py +29 -0
  99. rasa/core/actions/action_repeat_bot_messages.py +89 -0
  100. rasa/core/actions/action_run_slot_rejections.py +210 -0
  101. rasa/core/actions/action_trigger_chitchat.py +31 -0
  102. rasa/core/actions/action_trigger_flow.py +109 -0
  103. rasa/core/actions/action_trigger_search.py +31 -0
  104. rasa/core/actions/constants.py +5 -0
  105. rasa/core/actions/custom_action_executor.py +191 -0
  106. rasa/core/actions/direct_custom_actions_executor.py +109 -0
  107. rasa/core/actions/e2e_stub_custom_action_executor.py +72 -0
  108. rasa/core/actions/forms.py +741 -0
  109. rasa/core/actions/grpc_custom_action_executor.py +251 -0
  110. rasa/core/actions/http_custom_action_executor.py +145 -0
  111. rasa/core/actions/loops.py +114 -0
  112. rasa/core/actions/two_stage_fallback.py +186 -0
  113. rasa/core/agent.py +559 -0
  114. rasa/core/auth_retry_tracker_store.py +122 -0
  115. rasa/core/brokers/__init__.py +0 -0
  116. rasa/core/brokers/broker.py +126 -0
  117. rasa/core/brokers/file.py +58 -0
  118. rasa/core/brokers/kafka.py +324 -0
  119. rasa/core/brokers/pika.py +388 -0
  120. rasa/core/brokers/sql.py +86 -0
  121. rasa/core/channels/__init__.py +61 -0
  122. rasa/core/channels/botframework.py +338 -0
  123. rasa/core/channels/callback.py +84 -0
  124. rasa/core/channels/channel.py +456 -0
  125. rasa/core/channels/console.py +241 -0
  126. rasa/core/channels/development_inspector.py +200 -0
  127. rasa/core/channels/facebook.py +419 -0
  128. rasa/core/channels/hangouts.py +329 -0
  129. rasa/core/channels/inspector/.eslintrc.cjs +25 -0
  130. rasa/core/channels/inspector/.gitignore +23 -0
  131. rasa/core/channels/inspector/README.md +54 -0
  132. rasa/core/channels/inspector/assets/favicon.ico +0 -0
  133. rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
  134. rasa/core/channels/inspector/custom.d.ts +3 -0
  135. rasa/core/channels/inspector/dist/assets/arc-861ddd57.js +1 -0
  136. rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
  137. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-921f02db.js +10 -0
  138. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-b436c4f8.js +2 -0
  139. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-511a23cb.js +2 -0
  140. rasa/core/channels/inspector/dist/assets/createText-62fc7601-ef476ecd.js +7 -0
  141. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-f1878e0a.js +4 -0
  142. rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-fac75185.js +51 -0
  143. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-201c5bbc.js +6 -0
  144. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-f904ae41.js +4 -0
  145. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +1 -0
  146. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-1813da66.js +139 -0
  147. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-872af172.js +266 -0
  148. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-34a0af5a.js +70 -0
  149. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
  150. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
  151. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
  152. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
  153. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-42ba3e3d.js +1 -0
  154. rasa/core/channels/inspector/dist/assets/index-37817b51.js +1317 -0
  155. rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
  156. rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-6b731386.js +7 -0
  157. rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
  158. rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-e8579ac6.js +139 -0
  159. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
  160. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
  161. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
  162. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
  163. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
  164. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
  165. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
  166. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
  167. rasa/core/channels/inspector/dist/assets/layout-89e6403a.js +1 -0
  168. rasa/core/channels/inspector/dist/assets/line-dc73d3fc.js +1 -0
  169. rasa/core/channels/inspector/dist/assets/linear-f5b1d2bc.js +1 -0
  170. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-82cb74fa.js +109 -0
  171. rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
  172. rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
  173. rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-bdf5f29b.js +35 -0
  174. rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-c7a0cbe4.js +7 -0
  175. rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-7ec5410f.js +52 -0
  176. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-caee5554.js +8 -0
  177. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-2935f8db.js +122 -0
  178. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-8f5d9693.js +1 -0
  179. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-d565d1de.js +1 -0
  180. rasa/core/channels/inspector/dist/assets/styles-080da4f6-75ad421d.js +110 -0
  181. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-7e764226.js +159 -0
  182. rasa/core/channels/inspector/dist/assets/styles-9c745c82-7a4e0e61.js +207 -0
  183. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-4019d1bf.js +1 -0
  184. rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-01ea12df.js +61 -0
  185. rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-89407137.js +7 -0
  186. rasa/core/channels/inspector/dist/index.html +42 -0
  187. rasa/core/channels/inspector/index.html +40 -0
  188. rasa/core/channels/inspector/jest.config.ts +13 -0
  189. rasa/core/channels/inspector/package.json +52 -0
  190. rasa/core/channels/inspector/setupTests.ts +2 -0
  191. rasa/core/channels/inspector/src/App.tsx +220 -0
  192. rasa/core/channels/inspector/src/components/Chat.tsx +95 -0
  193. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +108 -0
  194. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
  195. rasa/core/channels/inspector/src/components/DialogueStack.tsx +136 -0
  196. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
  197. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
  198. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +22 -0
  199. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
  200. rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
  201. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
  202. rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
  203. rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
  204. rasa/core/channels/inspector/src/helpers/audiostream.ts +191 -0
  205. rasa/core/channels/inspector/src/helpers/formatters.test.ts +392 -0
  206. rasa/core/channels/inspector/src/helpers/formatters.ts +306 -0
  207. rasa/core/channels/inspector/src/helpers/utils.ts +127 -0
  208. rasa/core/channels/inspector/src/main.tsx +13 -0
  209. rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
  210. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
  211. rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
  212. rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
  213. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
  214. rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
  215. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
  216. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
  217. rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
  218. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
  219. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
  220. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
  221. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
  222. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
  223. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
  224. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
  225. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
  226. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
  227. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
  228. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
  229. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
  230. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
  231. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
  232. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
  233. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
  234. rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
  235. rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
  236. rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
  237. rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
  238. rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
  239. rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
  240. rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
  241. rasa/core/channels/inspector/src/theme/index.ts +101 -0
  242. rasa/core/channels/inspector/src/types.ts +84 -0
  243. rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
  244. rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
  245. rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
  246. rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
  247. rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
  248. rasa/core/channels/inspector/tsconfig.json +26 -0
  249. rasa/core/channels/inspector/tsconfig.node.json +10 -0
  250. rasa/core/channels/inspector/vite.config.ts +8 -0
  251. rasa/core/channels/inspector/yarn.lock +6249 -0
  252. rasa/core/channels/mattermost.py +229 -0
  253. rasa/core/channels/rasa_chat.py +126 -0
  254. rasa/core/channels/rest.py +230 -0
  255. rasa/core/channels/rocketchat.py +174 -0
  256. rasa/core/channels/slack.py +620 -0
  257. rasa/core/channels/socketio.py +306 -0
  258. rasa/core/channels/telegram.py +298 -0
  259. rasa/core/channels/twilio.py +169 -0
  260. rasa/core/channels/vier_cvg.py +374 -0
  261. rasa/core/channels/voice_ready/__init__.py +0 -0
  262. rasa/core/channels/voice_ready/audiocodes.py +501 -0
  263. rasa/core/channels/voice_ready/jambonz.py +121 -0
  264. rasa/core/channels/voice_ready/jambonz_protocol.py +396 -0
  265. rasa/core/channels/voice_ready/twilio_voice.py +403 -0
  266. rasa/core/channels/voice_ready/utils.py +37 -0
  267. rasa/core/channels/voice_stream/__init__.py +0 -0
  268. rasa/core/channels/voice_stream/asr/__init__.py +0 -0
  269. rasa/core/channels/voice_stream/asr/asr_engine.py +89 -0
  270. rasa/core/channels/voice_stream/asr/asr_event.py +18 -0
  271. rasa/core/channels/voice_stream/asr/azure.py +130 -0
  272. rasa/core/channels/voice_stream/asr/deepgram.py +90 -0
  273. rasa/core/channels/voice_stream/audio_bytes.py +8 -0
  274. rasa/core/channels/voice_stream/browser_audio.py +107 -0
  275. rasa/core/channels/voice_stream/call_state.py +23 -0
  276. rasa/core/channels/voice_stream/tts/__init__.py +0 -0
  277. rasa/core/channels/voice_stream/tts/azure.py +106 -0
  278. rasa/core/channels/voice_stream/tts/cartesia.py +118 -0
  279. rasa/core/channels/voice_stream/tts/tts_cache.py +27 -0
  280. rasa/core/channels/voice_stream/tts/tts_engine.py +58 -0
  281. rasa/core/channels/voice_stream/twilio_media_streams.py +173 -0
  282. rasa/core/channels/voice_stream/util.py +57 -0
  283. rasa/core/channels/voice_stream/voice_channel.py +427 -0
  284. rasa/core/channels/webexteams.py +134 -0
  285. rasa/core/concurrent_lock_store.py +210 -0
  286. rasa/core/constants.py +112 -0
  287. rasa/core/evaluation/__init__.py +0 -0
  288. rasa/core/evaluation/marker.py +267 -0
  289. rasa/core/evaluation/marker_base.py +923 -0
  290. rasa/core/evaluation/marker_stats.py +293 -0
  291. rasa/core/evaluation/marker_tracker_loader.py +103 -0
  292. rasa/core/exceptions.py +29 -0
  293. rasa/core/exporter.py +284 -0
  294. rasa/core/featurizers/__init__.py +0 -0
  295. rasa/core/featurizers/precomputation.py +410 -0
  296. rasa/core/featurizers/single_state_featurizer.py +421 -0
  297. rasa/core/featurizers/tracker_featurizers.py +1262 -0
  298. rasa/core/http_interpreter.py +89 -0
  299. rasa/core/information_retrieval/__init__.py +7 -0
  300. rasa/core/information_retrieval/faiss.py +124 -0
  301. rasa/core/information_retrieval/information_retrieval.py +137 -0
  302. rasa/core/information_retrieval/milvus.py +59 -0
  303. rasa/core/information_retrieval/qdrant.py +96 -0
  304. rasa/core/jobs.py +63 -0
  305. rasa/core/lock.py +139 -0
  306. rasa/core/lock_store.py +343 -0
  307. rasa/core/migrate.py +403 -0
  308. rasa/core/nlg/__init__.py +3 -0
  309. rasa/core/nlg/callback.py +146 -0
  310. rasa/core/nlg/contextual_response_rephraser.py +379 -0
  311. rasa/core/nlg/generator.py +230 -0
  312. rasa/core/nlg/interpolator.py +143 -0
  313. rasa/core/nlg/response.py +155 -0
  314. rasa/core/nlg/summarize.py +70 -0
  315. rasa/core/persistor.py +538 -0
  316. rasa/core/policies/__init__.py +0 -0
  317. rasa/core/policies/ensemble.py +329 -0
  318. rasa/core/policies/enterprise_search_policy.py +973 -0
  319. rasa/core/policies/enterprise_search_prompt_template.jinja2 +25 -0
  320. rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +60 -0
  321. rasa/core/policies/flow_policy.py +205 -0
  322. rasa/core/policies/flows/__init__.py +0 -0
  323. rasa/core/policies/flows/flow_exceptions.py +44 -0
  324. rasa/core/policies/flows/flow_executor.py +778 -0
  325. rasa/core/policies/flows/flow_step_result.py +43 -0
  326. rasa/core/policies/intentless_policy.py +1031 -0
  327. rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
  328. rasa/core/policies/memoization.py +538 -0
  329. rasa/core/policies/policy.py +725 -0
  330. rasa/core/policies/rule_policy.py +1273 -0
  331. rasa/core/policies/ted_policy.py +2169 -0
  332. rasa/core/policies/unexpected_intent_policy.py +1022 -0
  333. rasa/core/processor.py +1465 -0
  334. rasa/core/run.py +342 -0
  335. rasa/core/secrets_manager/__init__.py +0 -0
  336. rasa/core/secrets_manager/constants.py +36 -0
  337. rasa/core/secrets_manager/endpoints.py +391 -0
  338. rasa/core/secrets_manager/factory.py +241 -0
  339. rasa/core/secrets_manager/secret_manager.py +262 -0
  340. rasa/core/secrets_manager/vault.py +584 -0
  341. rasa/core/test.py +1335 -0
  342. rasa/core/tracker_store.py +1703 -0
  343. rasa/core/train.py +105 -0
  344. rasa/core/training/__init__.py +89 -0
  345. rasa/core/training/converters/__init__.py +0 -0
  346. rasa/core/training/converters/responses_prefix_converter.py +119 -0
  347. rasa/core/training/interactive.py +1744 -0
  348. rasa/core/training/story_conflict.py +381 -0
  349. rasa/core/training/training.py +93 -0
  350. rasa/core/utils.py +366 -0
  351. rasa/core/visualize.py +70 -0
  352. rasa/dialogue_understanding/__init__.py +0 -0
  353. rasa/dialogue_understanding/coexistence/__init__.py +0 -0
  354. rasa/dialogue_understanding/coexistence/constants.py +4 -0
  355. rasa/dialogue_understanding/coexistence/intent_based_router.py +196 -0
  356. rasa/dialogue_understanding/coexistence/llm_based_router.py +327 -0
  357. rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
  358. rasa/dialogue_understanding/commands/__init__.py +61 -0
  359. rasa/dialogue_understanding/commands/can_not_handle_command.py +70 -0
  360. rasa/dialogue_understanding/commands/cancel_flow_command.py +125 -0
  361. rasa/dialogue_understanding/commands/change_flow_command.py +44 -0
  362. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +57 -0
  363. rasa/dialogue_understanding/commands/clarify_command.py +86 -0
  364. rasa/dialogue_understanding/commands/command.py +85 -0
  365. rasa/dialogue_understanding/commands/correct_slots_command.py +297 -0
  366. rasa/dialogue_understanding/commands/error_command.py +79 -0
  367. rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
  368. rasa/dialogue_understanding/commands/handle_code_change_command.py +73 -0
  369. rasa/dialogue_understanding/commands/human_handoff_command.py +66 -0
  370. rasa/dialogue_understanding/commands/knowledge_answer_command.py +57 -0
  371. rasa/dialogue_understanding/commands/noop_command.py +54 -0
  372. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +60 -0
  373. rasa/dialogue_understanding/commands/restart_command.py +58 -0
  374. rasa/dialogue_understanding/commands/session_end_command.py +61 -0
  375. rasa/dialogue_understanding/commands/session_start_command.py +59 -0
  376. rasa/dialogue_understanding/commands/set_slot_command.py +160 -0
  377. rasa/dialogue_understanding/commands/skip_question_command.py +75 -0
  378. rasa/dialogue_understanding/commands/start_flow_command.py +107 -0
  379. rasa/dialogue_understanding/commands/user_silence_command.py +59 -0
  380. rasa/dialogue_understanding/commands/utils.py +45 -0
  381. rasa/dialogue_understanding/generator/__init__.py +21 -0
  382. rasa/dialogue_understanding/generator/command_generator.py +472 -0
  383. rasa/dialogue_understanding/generator/constants.py +27 -0
  384. rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
  385. rasa/dialogue_understanding/generator/flow_retrieval.py +466 -0
  386. rasa/dialogue_understanding/generator/llm_based_command_generator.py +502 -0
  387. rasa/dialogue_understanding/generator/llm_command_generator.py +68 -0
  388. rasa/dialogue_understanding/generator/multi_step/__init__.py +0 -0
  389. rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2 +62 -0
  390. rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2 +38 -0
  391. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +935 -0
  392. rasa/dialogue_understanding/generator/nlu_command_adapter.py +261 -0
  393. rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
  394. rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +60 -0
  395. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +489 -0
  396. rasa/dialogue_understanding/patterns/__init__.py +0 -0
  397. rasa/dialogue_understanding/patterns/cancel.py +111 -0
  398. rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
  399. rasa/dialogue_understanding/patterns/chitchat.py +37 -0
  400. rasa/dialogue_understanding/patterns/clarify.py +97 -0
  401. rasa/dialogue_understanding/patterns/code_change.py +41 -0
  402. rasa/dialogue_understanding/patterns/collect_information.py +90 -0
  403. rasa/dialogue_understanding/patterns/completed.py +40 -0
  404. rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
  405. rasa/dialogue_understanding/patterns/correction.py +278 -0
  406. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +301 -0
  407. rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
  408. rasa/dialogue_understanding/patterns/internal_error.py +47 -0
  409. rasa/dialogue_understanding/patterns/repeat.py +37 -0
  410. rasa/dialogue_understanding/patterns/restart.py +37 -0
  411. rasa/dialogue_understanding/patterns/search.py +37 -0
  412. rasa/dialogue_understanding/patterns/session_start.py +37 -0
  413. rasa/dialogue_understanding/patterns/skip_question.py +38 -0
  414. rasa/dialogue_understanding/patterns/user_silence.py +37 -0
  415. rasa/dialogue_understanding/processor/__init__.py +0 -0
  416. rasa/dialogue_understanding/processor/command_processor.py +720 -0
  417. rasa/dialogue_understanding/processor/command_processor_component.py +43 -0
  418. rasa/dialogue_understanding/stack/__init__.py +0 -0
  419. rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
  420. rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
  421. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
  422. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
  423. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
  424. rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
  425. rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
  426. rasa/dialogue_understanding/stack/utils.py +211 -0
  427. rasa/dialogue_understanding/utils.py +14 -0
  428. rasa/dialogue_understanding_test/__init__.py +0 -0
  429. rasa/dialogue_understanding_test/constants.py +15 -0
  430. rasa/dialogue_understanding_test/du_test_case.py +118 -0
  431. rasa/dialogue_understanding_test/du_test_result.py +11 -0
  432. rasa/e2e_test/__init__.py +0 -0
  433. rasa/e2e_test/aggregate_test_stats_calculator.py +134 -0
  434. rasa/e2e_test/assertions.py +1345 -0
  435. rasa/e2e_test/assertions_schema.yml +129 -0
  436. rasa/e2e_test/constants.py +31 -0
  437. rasa/e2e_test/e2e_config.py +220 -0
  438. rasa/e2e_test/e2e_config_schema.yml +26 -0
  439. rasa/e2e_test/e2e_test_case.py +569 -0
  440. rasa/e2e_test/e2e_test_converter.py +363 -0
  441. rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
  442. rasa/e2e_test/e2e_test_coverage_report.py +364 -0
  443. rasa/e2e_test/e2e_test_result.py +54 -0
  444. rasa/e2e_test/e2e_test_runner.py +1190 -0
  445. rasa/e2e_test/e2e_test_schema.yml +181 -0
  446. rasa/e2e_test/pykwalify_extensions.py +39 -0
  447. rasa/e2e_test/stub_custom_action.py +70 -0
  448. rasa/e2e_test/utils/__init__.py +0 -0
  449. rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
  450. rasa/e2e_test/utils/io.py +598 -0
  451. rasa/e2e_test/utils/validation.py +178 -0
  452. rasa/engine/__init__.py +0 -0
  453. rasa/engine/caching.py +463 -0
  454. rasa/engine/constants.py +17 -0
  455. rasa/engine/exceptions.py +14 -0
  456. rasa/engine/graph.py +642 -0
  457. rasa/engine/loader.py +48 -0
  458. rasa/engine/recipes/__init__.py +0 -0
  459. rasa/engine/recipes/config_files/default_config.yml +41 -0
  460. rasa/engine/recipes/default_components.py +97 -0
  461. rasa/engine/recipes/default_recipe.py +1272 -0
  462. rasa/engine/recipes/graph_recipe.py +79 -0
  463. rasa/engine/recipes/recipe.py +93 -0
  464. rasa/engine/runner/__init__.py +0 -0
  465. rasa/engine/runner/dask.py +250 -0
  466. rasa/engine/runner/interface.py +49 -0
  467. rasa/engine/storage/__init__.py +0 -0
  468. rasa/engine/storage/local_model_storage.py +244 -0
  469. rasa/engine/storage/resource.py +110 -0
  470. rasa/engine/storage/storage.py +199 -0
  471. rasa/engine/training/__init__.py +0 -0
  472. rasa/engine/training/components.py +176 -0
  473. rasa/engine/training/fingerprinting.py +64 -0
  474. rasa/engine/training/graph_trainer.py +256 -0
  475. rasa/engine/training/hooks.py +164 -0
  476. rasa/engine/validation.py +1451 -0
  477. rasa/env.py +14 -0
  478. rasa/exceptions.py +69 -0
  479. rasa/graph_components/__init__.py +0 -0
  480. rasa/graph_components/converters/__init__.py +0 -0
  481. rasa/graph_components/converters/nlu_message_converter.py +48 -0
  482. rasa/graph_components/providers/__init__.py +0 -0
  483. rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
  484. rasa/graph_components/providers/domain_provider.py +71 -0
  485. rasa/graph_components/providers/flows_provider.py +74 -0
  486. rasa/graph_components/providers/forms_provider.py +44 -0
  487. rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
  488. rasa/graph_components/providers/responses_provider.py +44 -0
  489. rasa/graph_components/providers/rule_only_provider.py +49 -0
  490. rasa/graph_components/providers/story_graph_provider.py +96 -0
  491. rasa/graph_components/providers/training_tracker_provider.py +55 -0
  492. rasa/graph_components/validators/__init__.py +0 -0
  493. rasa/graph_components/validators/default_recipe_validator.py +550 -0
  494. rasa/graph_components/validators/finetuning_validator.py +302 -0
  495. rasa/hooks.py +112 -0
  496. rasa/jupyter.py +63 -0
  497. rasa/llm_fine_tuning/__init__.py +0 -0
  498. rasa/llm_fine_tuning/annotation_module.py +241 -0
  499. rasa/llm_fine_tuning/conversations.py +144 -0
  500. rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
  501. rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
  502. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
  503. rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
  504. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
  505. rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
  506. rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
  507. rasa/llm_fine_tuning/storage.py +174 -0
  508. rasa/llm_fine_tuning/train_test_split_module.py +441 -0
  509. rasa/markers/__init__.py +0 -0
  510. rasa/markers/marker.py +269 -0
  511. rasa/markers/marker_base.py +828 -0
  512. rasa/markers/upload.py +74 -0
  513. rasa/markers/validate.py +21 -0
  514. rasa/model.py +118 -0
  515. rasa/model_manager/__init__.py +0 -0
  516. rasa/model_manager/config.py +40 -0
  517. rasa/model_manager/model_api.py +559 -0
  518. rasa/model_manager/runner_service.py +287 -0
  519. rasa/model_manager/socket_bridge.py +152 -0
  520. rasa/model_manager/studio_jwt_auth.py +86 -0
  521. rasa/model_manager/trainer_service.py +325 -0
  522. rasa/model_manager/utils.py +87 -0
  523. rasa/model_manager/warm_rasa_process.py +187 -0
  524. rasa/model_service.py +112 -0
  525. rasa/model_testing.py +457 -0
  526. rasa/model_training.py +596 -0
  527. rasa/nlu/__init__.py +7 -0
  528. rasa/nlu/classifiers/__init__.py +3 -0
  529. rasa/nlu/classifiers/classifier.py +5 -0
  530. rasa/nlu/classifiers/diet_classifier.py +1881 -0
  531. rasa/nlu/classifiers/fallback_classifier.py +192 -0
  532. rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
  533. rasa/nlu/classifiers/logistic_regression_classifier.py +253 -0
  534. rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
  535. rasa/nlu/classifiers/regex_message_handler.py +56 -0
  536. rasa/nlu/classifiers/sklearn_intent_classifier.py +330 -0
  537. rasa/nlu/constants.py +77 -0
  538. rasa/nlu/convert.py +40 -0
  539. rasa/nlu/emulators/__init__.py +0 -0
  540. rasa/nlu/emulators/dialogflow.py +55 -0
  541. rasa/nlu/emulators/emulator.py +49 -0
  542. rasa/nlu/emulators/luis.py +86 -0
  543. rasa/nlu/emulators/no_emulator.py +10 -0
  544. rasa/nlu/emulators/wit.py +56 -0
  545. rasa/nlu/extractors/__init__.py +0 -0
  546. rasa/nlu/extractors/crf_entity_extractor.py +715 -0
  547. rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
  548. rasa/nlu/extractors/entity_synonyms.py +178 -0
  549. rasa/nlu/extractors/extractor.py +470 -0
  550. rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
  551. rasa/nlu/extractors/regex_entity_extractor.py +220 -0
  552. rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
  553. rasa/nlu/featurizers/__init__.py +0 -0
  554. rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
  555. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +445 -0
  556. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
  557. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +768 -0
  558. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
  559. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
  560. rasa/nlu/featurizers/featurizer.py +89 -0
  561. rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
  562. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +867 -0
  563. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +571 -0
  564. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +271 -0
  565. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
  566. rasa/nlu/model.py +24 -0
  567. rasa/nlu/run.py +27 -0
  568. rasa/nlu/selectors/__init__.py +0 -0
  569. rasa/nlu/selectors/response_selector.py +987 -0
  570. rasa/nlu/test.py +1940 -0
  571. rasa/nlu/tokenizers/__init__.py +0 -0
  572. rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
  573. rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
  574. rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
  575. rasa/nlu/tokenizers/tokenizer.py +239 -0
  576. rasa/nlu/tokenizers/whitespace_tokenizer.py +95 -0
  577. rasa/nlu/utils/__init__.py +35 -0
  578. rasa/nlu/utils/bilou_utils.py +462 -0
  579. rasa/nlu/utils/hugging_face/__init__.py +0 -0
  580. rasa/nlu/utils/hugging_face/registry.py +108 -0
  581. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
  582. rasa/nlu/utils/mitie_utils.py +113 -0
  583. rasa/nlu/utils/pattern_utils.py +168 -0
  584. rasa/nlu/utils/spacy_utils.py +310 -0
  585. rasa/plugin.py +90 -0
  586. rasa/server.py +1588 -0
  587. rasa/shared/__init__.py +0 -0
  588. rasa/shared/constants.py +321 -0
  589. rasa/shared/core/__init__.py +0 -0
  590. rasa/shared/core/command_payload_reader.py +109 -0
  591. rasa/shared/core/constants.py +180 -0
  592. rasa/shared/core/conversation.py +46 -0
  593. rasa/shared/core/domain.py +2172 -0
  594. rasa/shared/core/events.py +2559 -0
  595. rasa/shared/core/flows/__init__.py +7 -0
  596. rasa/shared/core/flows/flow.py +562 -0
  597. rasa/shared/core/flows/flow_path.py +84 -0
  598. rasa/shared/core/flows/flow_step.py +146 -0
  599. rasa/shared/core/flows/flow_step_links.py +319 -0
  600. rasa/shared/core/flows/flow_step_sequence.py +70 -0
  601. rasa/shared/core/flows/flows_list.py +258 -0
  602. rasa/shared/core/flows/flows_yaml_schema.json +303 -0
  603. rasa/shared/core/flows/nlu_trigger.py +117 -0
  604. rasa/shared/core/flows/steps/__init__.py +24 -0
  605. rasa/shared/core/flows/steps/action.py +56 -0
  606. rasa/shared/core/flows/steps/call.py +64 -0
  607. rasa/shared/core/flows/steps/collect.py +112 -0
  608. rasa/shared/core/flows/steps/constants.py +5 -0
  609. rasa/shared/core/flows/steps/continuation.py +36 -0
  610. rasa/shared/core/flows/steps/end.py +22 -0
  611. rasa/shared/core/flows/steps/internal.py +44 -0
  612. rasa/shared/core/flows/steps/link.py +51 -0
  613. rasa/shared/core/flows/steps/no_operation.py +48 -0
  614. rasa/shared/core/flows/steps/set_slots.py +50 -0
  615. rasa/shared/core/flows/steps/start.py +30 -0
  616. rasa/shared/core/flows/utils.py +39 -0
  617. rasa/shared/core/flows/validation.py +735 -0
  618. rasa/shared/core/flows/yaml_flows_io.py +405 -0
  619. rasa/shared/core/generator.py +908 -0
  620. rasa/shared/core/slot_mappings.py +526 -0
  621. rasa/shared/core/slots.py +654 -0
  622. rasa/shared/core/trackers.py +1183 -0
  623. rasa/shared/core/training_data/__init__.py +0 -0
  624. rasa/shared/core/training_data/loading.py +89 -0
  625. rasa/shared/core/training_data/story_reader/__init__.py +0 -0
  626. rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
  627. rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
  628. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
  629. rasa/shared/core/training_data/story_writer/__init__.py +0 -0
  630. rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
  631. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +444 -0
  632. rasa/shared/core/training_data/structures.py +858 -0
  633. rasa/shared/core/training_data/visualization.html +146 -0
  634. rasa/shared/core/training_data/visualization.py +603 -0
  635. rasa/shared/data.py +249 -0
  636. rasa/shared/engine/__init__.py +0 -0
  637. rasa/shared/engine/caching.py +26 -0
  638. rasa/shared/exceptions.py +167 -0
  639. rasa/shared/importers/__init__.py +0 -0
  640. rasa/shared/importers/importer.py +770 -0
  641. rasa/shared/importers/multi_project.py +215 -0
  642. rasa/shared/importers/rasa.py +108 -0
  643. rasa/shared/importers/remote_importer.py +196 -0
  644. rasa/shared/importers/utils.py +36 -0
  645. rasa/shared/nlu/__init__.py +0 -0
  646. rasa/shared/nlu/constants.py +54 -0
  647. rasa/shared/nlu/interpreter.py +10 -0
  648. rasa/shared/nlu/training_data/__init__.py +0 -0
  649. rasa/shared/nlu/training_data/entities_parser.py +208 -0
  650. rasa/shared/nlu/training_data/features.py +492 -0
  651. rasa/shared/nlu/training_data/formats/__init__.py +10 -0
  652. rasa/shared/nlu/training_data/formats/dialogflow.py +163 -0
  653. rasa/shared/nlu/training_data/formats/luis.py +87 -0
  654. rasa/shared/nlu/training_data/formats/rasa.py +135 -0
  655. rasa/shared/nlu/training_data/formats/rasa_yaml.py +618 -0
  656. rasa/shared/nlu/training_data/formats/readerwriter.py +244 -0
  657. rasa/shared/nlu/training_data/formats/wit.py +52 -0
  658. rasa/shared/nlu/training_data/loading.py +137 -0
  659. rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
  660. rasa/shared/nlu/training_data/message.py +490 -0
  661. rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
  662. rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
  663. rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
  664. rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
  665. rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
  666. rasa/shared/nlu/training_data/training_data.py +729 -0
  667. rasa/shared/nlu/training_data/util.py +223 -0
  668. rasa/shared/providers/__init__.py +0 -0
  669. rasa/shared/providers/_configs/__init__.py +0 -0
  670. rasa/shared/providers/_configs/azure_openai_client_config.py +183 -0
  671. rasa/shared/providers/_configs/client_config.py +57 -0
  672. rasa/shared/providers/_configs/default_litellm_client_config.py +130 -0
  673. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +234 -0
  674. rasa/shared/providers/_configs/litellm_router_client_config.py +220 -0
  675. rasa/shared/providers/_configs/model_group_config.py +167 -0
  676. rasa/shared/providers/_configs/openai_client_config.py +175 -0
  677. rasa/shared/providers/_configs/rasa_llm_client_config.py +73 -0
  678. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +177 -0
  679. rasa/shared/providers/_configs/utils.py +117 -0
  680. rasa/shared/providers/_ssl_verification_utils.py +124 -0
  681. rasa/shared/providers/_utils.py +79 -0
  682. rasa/shared/providers/embedding/__init__.py +0 -0
  683. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +243 -0
  684. rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
  685. rasa/shared/providers/embedding/azure_openai_embedding_client.py +310 -0
  686. rasa/shared/providers/embedding/default_litellm_embedding_client.py +126 -0
  687. rasa/shared/providers/embedding/embedding_client.py +90 -0
  688. rasa/shared/providers/embedding/embedding_response.py +41 -0
  689. rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
  690. rasa/shared/providers/embedding/litellm_router_embedding_client.py +135 -0
  691. rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
  692. rasa/shared/providers/llm/__init__.py +0 -0
  693. rasa/shared/providers/llm/_base_litellm_client.py +263 -0
  694. rasa/shared/providers/llm/azure_openai_llm_client.py +359 -0
  695. rasa/shared/providers/llm/default_litellm_llm_client.py +108 -0
  696. rasa/shared/providers/llm/litellm_router_llm_client.py +182 -0
  697. rasa/shared/providers/llm/llm_client.py +76 -0
  698. rasa/shared/providers/llm/llm_response.py +79 -0
  699. rasa/shared/providers/llm/openai_llm_client.py +155 -0
  700. rasa/shared/providers/llm/rasa_llm_client.py +112 -0
  701. rasa/shared/providers/llm/self_hosted_llm_client.py +269 -0
  702. rasa/shared/providers/mappings.py +94 -0
  703. rasa/shared/providers/router/__init__.py +0 -0
  704. rasa/shared/providers/router/_base_litellm_router_client.py +183 -0
  705. rasa/shared/providers/router/router_client.py +73 -0
  706. rasa/shared/utils/__init__.py +0 -0
  707. rasa/shared/utils/cli.py +102 -0
  708. rasa/shared/utils/common.py +324 -0
  709. rasa/shared/utils/constants.py +4 -0
  710. rasa/shared/utils/health_check/__init__.py +0 -0
  711. rasa/shared/utils/health_check/embeddings_health_check_mixin.py +31 -0
  712. rasa/shared/utils/health_check/health_check.py +258 -0
  713. rasa/shared/utils/health_check/llm_health_check_mixin.py +31 -0
  714. rasa/shared/utils/io.py +499 -0
  715. rasa/shared/utils/llm.py +760 -0
  716. rasa/shared/utils/pykwalify_extensions.py +27 -0
  717. rasa/shared/utils/schemas/__init__.py +0 -0
  718. rasa/shared/utils/schemas/config.yml +2 -0
  719. rasa/shared/utils/schemas/domain.yml +145 -0
  720. rasa/shared/utils/schemas/events.py +214 -0
  721. rasa/shared/utils/schemas/model_config.yml +36 -0
  722. rasa/shared/utils/schemas/stories.yml +173 -0
  723. rasa/shared/utils/yaml.py +1068 -0
  724. rasa/studio/__init__.py +0 -0
  725. rasa/studio/auth.py +270 -0
  726. rasa/studio/config.py +136 -0
  727. rasa/studio/constants.py +19 -0
  728. rasa/studio/data_handler.py +368 -0
  729. rasa/studio/download.py +489 -0
  730. rasa/studio/results_logger.py +137 -0
  731. rasa/studio/train.py +134 -0
  732. rasa/studio/upload.py +563 -0
  733. rasa/telemetry.py +1876 -0
  734. rasa/tracing/__init__.py +0 -0
  735. rasa/tracing/config.py +355 -0
  736. rasa/tracing/constants.py +62 -0
  737. rasa/tracing/instrumentation/__init__.py +0 -0
  738. rasa/tracing/instrumentation/attribute_extractors.py +765 -0
  739. rasa/tracing/instrumentation/instrumentation.py +1306 -0
  740. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +144 -0
  741. rasa/tracing/instrumentation/metrics.py +294 -0
  742. rasa/tracing/metric_instrument_provider.py +205 -0
  743. rasa/utils/__init__.py +0 -0
  744. rasa/utils/beta.py +83 -0
  745. rasa/utils/cli.py +28 -0
  746. rasa/utils/common.py +639 -0
  747. rasa/utils/converter.py +53 -0
  748. rasa/utils/endpoints.py +331 -0
  749. rasa/utils/io.py +252 -0
  750. rasa/utils/json_utils.py +60 -0
  751. rasa/utils/licensing.py +542 -0
  752. rasa/utils/log_utils.py +181 -0
  753. rasa/utils/mapper.py +210 -0
  754. rasa/utils/ml_utils.py +147 -0
  755. rasa/utils/plotting.py +362 -0
  756. rasa/utils/sanic_error_handler.py +32 -0
  757. rasa/utils/singleton.py +23 -0
  758. rasa/utils/tensorflow/__init__.py +0 -0
  759. rasa/utils/tensorflow/callback.py +112 -0
  760. rasa/utils/tensorflow/constants.py +116 -0
  761. rasa/utils/tensorflow/crf.py +492 -0
  762. rasa/utils/tensorflow/data_generator.py +440 -0
  763. rasa/utils/tensorflow/environment.py +161 -0
  764. rasa/utils/tensorflow/exceptions.py +5 -0
  765. rasa/utils/tensorflow/feature_array.py +366 -0
  766. rasa/utils/tensorflow/layers.py +1565 -0
  767. rasa/utils/tensorflow/layers_utils.py +113 -0
  768. rasa/utils/tensorflow/metrics.py +281 -0
  769. rasa/utils/tensorflow/model_data.py +798 -0
  770. rasa/utils/tensorflow/model_data_utils.py +499 -0
  771. rasa/utils/tensorflow/models.py +935 -0
  772. rasa/utils/tensorflow/rasa_layers.py +1094 -0
  773. rasa/utils/tensorflow/transformer.py +640 -0
  774. rasa/utils/tensorflow/types.py +6 -0
  775. rasa/utils/train_utils.py +572 -0
  776. rasa/utils/url_tools.py +53 -0
  777. rasa/utils/yaml.py +54 -0
  778. rasa/validator.py +1644 -0
  779. rasa/version.py +3 -0
  780. rasa_pro-3.11.3a1.dev2.dist-info/METADATA +198 -0
  781. rasa_pro-3.11.3a1.dev2.dist-info/NOTICE +5 -0
  782. rasa_pro-3.11.3a1.dev2.dist-info/RECORD +784 -0
  783. rasa_pro-3.11.3a1.dev2.dist-info/WHEEL +4 -0
  784. rasa_pro-3.11.3a1.dev2.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,973 @@
1
+ import importlib.resources
2
+ import json
3
+ import re
4
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text
5
+
6
+ import dotenv
7
+ import structlog
8
+ from jinja2 import Template
9
+ from pydantic import ValidationError
10
+
11
+ import rasa.shared.utils.io
12
+ from rasa.core.constants import (
13
+ POLICY_MAX_HISTORY,
14
+ POLICY_PRIORITY,
15
+ SEARCH_POLICY_PRIORITY,
16
+ UTTER_SOURCE_METADATA_KEY,
17
+ )
18
+ from rasa.core.information_retrieval import (
19
+ InformationRetrieval,
20
+ SearchResult,
21
+ InformationRetrievalException,
22
+ create_from_endpoint_config,
23
+ )
24
+ from rasa.core.information_retrieval.faiss import FAISS_Store
25
+ from rasa.core.policies.policy import Policy, PolicyPrediction
26
+ from rasa.core.utils import AvailableEndpoints
27
+ from rasa.dialogue_understanding.generator.constants import (
28
+ LLM_CONFIG_KEY,
29
+ )
30
+ from rasa.dialogue_understanding.patterns.cannot_handle import (
31
+ CannotHandlePatternFlowStackFrame,
32
+ )
33
+ from rasa.dialogue_understanding.patterns.internal_error import (
34
+ InternalErrorPatternFlowStackFrame,
35
+ )
36
+ from rasa.dialogue_understanding.stack.frames import (
37
+ DialogueStackFrame,
38
+ SearchStackFrame,
39
+ )
40
+ from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
41
+ from rasa.dialogue_understanding.utils import record_commands_and_prompts
42
+ from rasa.engine.graph import ExecutionContext
43
+ from rasa.engine.recipes.default_recipe import DefaultV1Recipe
44
+ from rasa.engine.storage.resource import Resource
45
+ from rasa.engine.storage.storage import ModelStorage
46
+ from rasa.graph_components.providers.forms_provider import Forms
47
+ from rasa.graph_components.providers.responses_provider import Responses
48
+ from rasa.shared.constants import (
49
+ EMBEDDINGS_CONFIG_KEY,
50
+ MODEL_CONFIG_KEY,
51
+ PROMPT_CONFIG_KEY,
52
+ PROVIDER_CONFIG_KEY,
53
+ OPENAI_PROVIDER,
54
+ TIMEOUT_CONFIG_KEY,
55
+ MODEL_NAME_CONFIG_KEY,
56
+ MODEL_GROUP_ID_CONFIG_KEY,
57
+ )
58
+ from rasa.shared.core.constants import (
59
+ ACTION_CANCEL_FLOW,
60
+ ACTION_SEND_TEXT_NAME,
61
+ DEFAULT_SLOT_NAMES,
62
+ )
63
+ from rasa.shared.core.domain import Domain
64
+ from rasa.shared.core.events import Event, UserUttered, BotUttered
65
+ from rasa.shared.core.generator import TrackerWithCachedStates
66
+ from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
67
+ from rasa.shared.exceptions import RasaException, FileIOException
68
+ from rasa.shared.nlu.constants import (
69
+ PROMPTS,
70
+ KEY_USER_PROMPT,
71
+ KEY_LLM_RESPONSE_METADATA,
72
+ )
73
+ from rasa.shared.nlu.training_data.training_data import TrainingData
74
+ from rasa.shared.providers.embedding._langchain_embedding_client_adapter import (
75
+ _LangchainEmbeddingClientAdapter,
76
+ )
77
+ from rasa.shared.providers.llm.llm_client import LLMClient
78
+ from rasa.shared.providers.llm.llm_response import LLMResponse
79
+ from rasa.shared.utils.cli import print_error_and_exit
80
+ from rasa.shared.utils.health_check.embeddings_health_check_mixin import (
81
+ EmbeddingsHealthCheckMixin,
82
+ )
83
+ from rasa.shared.utils.health_check.llm_health_check_mixin import LLMHealthCheckMixin
84
+ from rasa.shared.utils.io import deep_container_fingerprint
85
+ from rasa.shared.utils.llm import (
86
+ DEFAULT_OPENAI_CHAT_MODEL_NAME,
87
+ DEFAULT_OPENAI_EMBEDDING_MODEL_NAME,
88
+ embedder_factory,
89
+ get_prompt_template,
90
+ llm_factory,
91
+ sanitize_message_for_prompt,
92
+ tracker_as_readable_transcript,
93
+ resolve_model_client_config,
94
+ )
95
+ from rasa.telemetry import (
96
+ track_enterprise_search_policy_predict,
97
+ track_enterprise_search_policy_train_completed,
98
+ track_enterprise_search_policy_train_started,
99
+ )
100
+
101
+ if TYPE_CHECKING:
102
+ from langchain.schema.embeddings import Embeddings
103
+ from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
104
+
105
+ from rasa.utils.log_utils import log_llm
106
+
107
+ logger = structlog.get_logger()
108
+
109
+ dotenv.load_dotenv("./.env")
110
+
111
+ SOURCE_PROPERTY = "source"
112
+ VECTOR_STORE_TYPE_PROPERTY = "type"
113
+ VECTOR_STORE_PROPERTY = "vector_store"
114
+ VECTOR_STORE_THRESHOLD_PROPERTY = "threshold"
115
+ TRACE_TOKENS_PROPERTY = "trace_prompt_tokens"
116
+ CITATION_ENABLED_PROPERTY = "citation_enabled"
117
+ USE_LLM_PROPERTY = "use_generative_llm"
118
+ MAX_MESSAGES_IN_QUERY_KEY = "max_messages_in_query"
119
+
120
+ DEFAULT_VECTOR_STORE_TYPE = "faiss"
121
+ DEFAULT_VECTOR_STORE_THRESHOLD = 0.0
122
+ DEFAULT_VECTOR_STORE = {
123
+ VECTOR_STORE_TYPE_PROPERTY: DEFAULT_VECTOR_STORE_TYPE,
124
+ SOURCE_PROPERTY: "./docs",
125
+ VECTOR_STORE_THRESHOLD_PROPERTY: DEFAULT_VECTOR_STORE_THRESHOLD,
126
+ }
127
+
128
+ DEFAULT_LLM_CONFIG = {
129
+ PROVIDER_CONFIG_KEY: OPENAI_PROVIDER,
130
+ MODEL_CONFIG_KEY: DEFAULT_OPENAI_CHAT_MODEL_NAME,
131
+ TIMEOUT_CONFIG_KEY: 10,
132
+ "temperature": 0.0,
133
+ "max_tokens": 256,
134
+ "max_retries": 1,
135
+ }
136
+
137
+ DEFAULT_EMBEDDINGS_CONFIG = {
138
+ PROVIDER_CONFIG_KEY: OPENAI_PROVIDER,
139
+ "model": DEFAULT_OPENAI_EMBEDDING_MODEL_NAME,
140
+ }
141
+
142
+ ENTERPRISE_SEARCH_PROMPT_FILE_NAME = "enterprise_search_policy_prompt.jinja2"
143
+ ENTERPRISE_SEARCH_CONFIG_FILE_NAME = "config.json"
144
+
145
+ SEARCH_RESULTS_METADATA_KEY = "search_results"
146
+ SEARCH_QUERY_METADATA_KEY = "search_query"
147
+
148
+ DEFAULT_ENTERPRISE_SEARCH_PROMPT_TEMPLATE = importlib.resources.read_text(
149
+ "rasa.core.policies", "enterprise_search_prompt_template.jinja2"
150
+ )
151
+
152
+ DEFAULT_ENTERPRISE_SEARCH_PROMPT_WITH_CITATION_TEMPLATE = importlib.resources.read_text(
153
+ "rasa.core.policies", "enterprise_search_prompt_with_citation_template.jinja2"
154
+ )
155
+
156
+
157
+ class VectorStoreConnectionError(RasaException):
158
+ """Exception raised for errors in connecting to the vector store."""
159
+
160
+
161
+ class VectorStoreConfigurationError(RasaException):
162
+ """Exception raised for errors in vector store configuration."""
163
+
164
+
165
+ @DefaultV1Recipe.register(
166
+ DefaultV1Recipe.ComponentType.POLICY_WITH_END_TO_END_SUPPORT, is_trainable=True
167
+ )
168
+ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Policy):
169
+ """Policy which uses a vector store and LLMs to respond to user messages.
170
+
171
+ The policy uses a vector store and LLMs to respond to user messages. The
172
+ vector store is used to retrieve the most relevant responses to the user
173
+ message. The LLMs are used to rank the responses and select the best
174
+ response. The policy can be used to respond to user messages without
175
+ training data.
176
+
177
+ Example Configuration:
178
+
179
+ policies:
180
+ # - ...
181
+ - name: EnterpriseSearchPolicy
182
+ vector_store:
183
+ type: "milvus"
184
+ <vector_store_config>
185
+ # - ...
186
+ """
187
+
188
+ @staticmethod
189
+ def does_support_stack_frame(frame: DialogueStackFrame) -> bool:
190
+ """Checks if the policy supports the given stack frame."""
191
+ return isinstance(frame, SearchStackFrame)
192
+
193
+ @staticmethod
194
+ def get_default_config() -> Dict[str, Any]:
195
+ """Returns the default config of the policy."""
196
+ return {
197
+ POLICY_PRIORITY: SEARCH_POLICY_PRIORITY,
198
+ VECTOR_STORE_PROPERTY: DEFAULT_VECTOR_STORE,
199
+ }
200
+
201
+ def __init__(
202
+ self,
203
+ config: Dict[Text, Any],
204
+ model_storage: ModelStorage,
205
+ resource: Resource,
206
+ execution_context: ExecutionContext,
207
+ vector_store: Optional[InformationRetrieval] = None,
208
+ featurizer: Optional["TrackerFeaturizer"] = None,
209
+ prompt_template: Optional[Text] = None,
210
+ ) -> None:
211
+ """Constructs a new Policy object."""
212
+ super().__init__(config, model_storage, resource, execution_context, featurizer)
213
+
214
+ # Resolve LLM config
215
+ self.config[LLM_CONFIG_KEY] = resolve_model_client_config(
216
+ self.config.get(LLM_CONFIG_KEY), EnterpriseSearchPolicy.__name__
217
+ )
218
+ # Resolve embeddings config
219
+ self.config[EMBEDDINGS_CONFIG_KEY] = resolve_model_client_config(
220
+ self.config.get(EMBEDDINGS_CONFIG_KEY), EnterpriseSearchPolicy.__name__
221
+ )
222
+
223
+ # Vector store object and configuration
224
+ self.vector_store = vector_store
225
+ self.vector_store_config = self.config.get(
226
+ VECTOR_STORE_PROPERTY, DEFAULT_VECTOR_STORE
227
+ )
228
+
229
+ # Embeddings configuration for encoding the search query
230
+ self.embeddings_config = (
231
+ self.config[EMBEDDINGS_CONFIG_KEY] or DEFAULT_EMBEDDINGS_CONFIG
232
+ )
233
+
234
+ # LLM Configuration for response generation
235
+ self.llm_config = self.config[LLM_CONFIG_KEY] or DEFAULT_LLM_CONFIG
236
+
237
+ # Maximum number of turns to include in the prompt
238
+ self.max_history = self.config.get(POLICY_MAX_HISTORY)
239
+
240
+ # Maximum number of messages to include in the search query
241
+ self.max_messages_in_query = self.config.get(MAX_MESSAGES_IN_QUERY_KEY, 2)
242
+
243
+ # boolean to enable/disable tracing of prompt tokens
244
+ self.trace_prompt_tokens = self.config.get(TRACE_TOKENS_PROPERTY, False)
245
+
246
+ # boolean to enable/disable the use of LLM for response generation
247
+ self.use_llm = self.config.get(USE_LLM_PROPERTY, True)
248
+
249
+ # boolean to enable/disable citation generation
250
+ self.citation_enabled = self.config.get(CITATION_ENABLED_PROPERTY, False)
251
+
252
+ self.prompt_template = prompt_template or get_prompt_template(
253
+ self.config.get(PROMPT_CONFIG_KEY),
254
+ DEFAULT_ENTERPRISE_SEARCH_PROMPT_TEMPLATE,
255
+ )
256
+ self.citation_prompt_template = get_prompt_template(
257
+ self.config.get(PROMPT_CONFIG_KEY),
258
+ DEFAULT_ENTERPRISE_SEARCH_PROMPT_WITH_CITATION_TEMPLATE,
259
+ )
260
+ # If citation is enabled, use the citation prompt template
261
+ if self.citation_enabled:
262
+ self.prompt_template = self.citation_prompt_template
263
+
264
+ @classmethod
265
+ def _create_plain_embedder(cls, config: Dict[Text, Any]) -> "Embeddings":
266
+ """Creates an embedder based on the given configuration.
267
+
268
+ Returns:
269
+ The embedder.
270
+ """
271
+ # Copy the config so original config is not modified
272
+ config = config.copy()
273
+ # Resolve config and instantiate the embedding client
274
+ config[EMBEDDINGS_CONFIG_KEY] = resolve_model_client_config(
275
+ config.get(EMBEDDINGS_CONFIG_KEY), EnterpriseSearchPolicy.__name__
276
+ )
277
+ client = embedder_factory(
278
+ config.get(EMBEDDINGS_CONFIG_KEY), DEFAULT_EMBEDDINGS_CONFIG
279
+ )
280
+ # Wrap the embedding client in the adapter
281
+ return _LangchainEmbeddingClientAdapter(client)
282
+
283
+ @classmethod
284
+ def _store_prompt_and_llm_response_in_tracker(
285
+ cls,
286
+ tracker: DialogueStateTracker,
287
+ prompt_name: str,
288
+ user_prompt: str,
289
+ llm_response: Optional[LLMResponse] = None,
290
+ ) -> None:
291
+ """Stores the prompt and LLMResponse metadata in the tracker.
292
+
293
+ Args:
294
+ tracker: The DialogueStateTracker containing the current conversation state.
295
+ prompt_name: A name identifying prompt usage.
296
+ user_prompt: The user prompt that was sent to the LLM.
297
+ llm_response: The response object from the LLM (None if no response).
298
+ """
299
+ if not record_commands_and_prompts:
300
+ return
301
+
302
+ if not tracker.latest_message:
303
+ return
304
+
305
+ parse_data = tracker.latest_message.parse_data
306
+ if parse_data is not None and PROMPTS not in parse_data:
307
+ parse_data[PROMPTS] = {} # type: ignore[literal-required]
308
+
309
+ component_name = cls.__name__
310
+ existing_prompts = parse_data[PROMPTS].get(component_name, []) # type: ignore[literal-required]
311
+
312
+ prompt_data: Dict[Text, Any] = {
313
+ KEY_USER_PROMPT: user_prompt,
314
+ }
315
+ if llm_response is not None:
316
+ prompt_data[KEY_LLM_RESPONSE_METADATA] = llm_response.to_dict()
317
+
318
+ prompt_tuple = (prompt_name, prompt_data)
319
+ existing_prompts.append(prompt_tuple)
320
+ parse_data[PROMPTS][component_name] = existing_prompts # type: ignore[literal-required]
321
+
322
+ def train( # type: ignore[override]
323
+ self,
324
+ training_trackers: List[TrackerWithCachedStates],
325
+ domain: Domain,
326
+ responses: Responses,
327
+ forms: Forms,
328
+ training_data: TrainingData,
329
+ **kwargs: Any,
330
+ ) -> Resource:
331
+ """Trains a policy.
332
+
333
+ Args:
334
+ training_trackers: The story and rules trackers from the training data.
335
+ domain: The model's domain.
336
+ responses: The model's responses.
337
+ forms: The model's forms.
338
+ training_data: The model's training data.
339
+ **kwargs: Depending on the specified `needs` section and the resulting
340
+ graph structure the policy can use different input to train itself.
341
+
342
+ Returns:
343
+ A policy must return its resource locator so that potential children nodes
344
+ can load the policy from the resource.
345
+ """
346
+ # Perform health checks for both LLM and embeddings client configs
347
+ self._perform_health_checks(self.config, "enterprise_search_policy.train")
348
+
349
+ store_type = self.vector_store_config.get(VECTOR_STORE_TYPE_PROPERTY)
350
+
351
+ # telemetry call to track training start
352
+ track_enterprise_search_policy_train_started()
353
+
354
+ # validate embedding configuration
355
+ try:
356
+ embeddings = self._create_plain_embedder(self.config)
357
+ except (ValidationError, Exception) as e:
358
+ logger.error(
359
+ "enterprise_search_policy.train.embedder_instantiation_failed",
360
+ message="Unable to instantiate the embedding client.",
361
+ error=e,
362
+ )
363
+ print_error_and_exit(
364
+ "Unable to create embedder. Please make sure you specified the "
365
+ f"required environment variables. Error: {e}"
366
+ )
367
+
368
+ if store_type == DEFAULT_VECTOR_STORE_TYPE:
369
+ logger.info("enterprise_search_policy.train.faiss")
370
+ with self._model_storage.write_to(self._resource) as path:
371
+ self.vector_store = FAISS_Store(
372
+ docs_folder=self.vector_store_config.get(SOURCE_PROPERTY),
373
+ embeddings=embeddings,
374
+ index_path=path,
375
+ create_index=True,
376
+ )
377
+ else:
378
+ logger.info("enterprise_search_policy.train.custom", store_type=store_type)
379
+
380
+ # telemetry call to track training completion
381
+ track_enterprise_search_policy_train_completed(
382
+ vector_store_type=store_type,
383
+ embeddings_type=self.embeddings_config.get(PROVIDER_CONFIG_KEY),
384
+ embeddings_model=self.embeddings_config.get(MODEL_CONFIG_KEY)
385
+ or self.embeddings_config.get(MODEL_NAME_CONFIG_KEY),
386
+ embeddings_model_group_id=self.embeddings_config.get(
387
+ MODEL_GROUP_ID_CONFIG_KEY
388
+ ),
389
+ llm_type=self.llm_config.get(PROVIDER_CONFIG_KEY),
390
+ llm_model=self.llm_config.get(MODEL_CONFIG_KEY)
391
+ or self.llm_config.get(MODEL_NAME_CONFIG_KEY),
392
+ llm_model_group_id=self.llm_config.get(MODEL_GROUP_ID_CONFIG_KEY),
393
+ citation_enabled=self.citation_enabled,
394
+ )
395
+ self.persist()
396
+ return self._resource
397
+
398
+ def persist(self) -> None:
399
+ """Persists the policy to storage."""
400
+ with self._model_storage.write_to(self._resource) as path:
401
+ rasa.shared.utils.io.write_text_file(
402
+ self.prompt_template, path / ENTERPRISE_SEARCH_PROMPT_FILE_NAME
403
+ )
404
+ rasa.shared.utils.io.dump_obj_as_json_to_file(
405
+ path / ENTERPRISE_SEARCH_CONFIG_FILE_NAME, self.config
406
+ )
407
+
408
+ def _prepare_slots_for_template(
409
+ self, tracker: DialogueStateTracker
410
+ ) -> List[Dict[str, str]]:
411
+ """Prepares the slots for the template.
412
+
413
+ Args:
414
+ tracker: The tracker containing the conversation history up to now.
415
+
416
+ Returns:
417
+ The non-empty slots.
418
+ """
419
+ template_slots = []
420
+ for name, slot in tracker.slots.items():
421
+ if name not in DEFAULT_SLOT_NAMES and slot.value is not None:
422
+ template_slots.append(
423
+ {
424
+ "name": name,
425
+ "value": str(slot.value),
426
+ "type": slot.type_name,
427
+ }
428
+ )
429
+ return template_slots
430
+
431
+ def _connect_vector_store_or_raise(
432
+ self, endpoints: Optional[AvailableEndpoints]
433
+ ) -> None:
434
+ """Connects to the vector store or raises an exception.
435
+
436
+ Raise exceptions for the following cases:
437
+ - The configuration is not specified
438
+ - Unable to connect to the vector store
439
+
440
+ Args:
441
+ endpoints: Endpoints configuration.
442
+ """
443
+ config = endpoints.vector_store if endpoints else None
444
+ store_type = self.vector_store_config.get(VECTOR_STORE_TYPE_PROPERTY)
445
+ if config is None and store_type != DEFAULT_VECTOR_STORE_TYPE:
446
+ logger.error(
447
+ "enterprise_search_policy._connect_vector_store_or_raise.no_config"
448
+ )
449
+ raise VectorStoreConfigurationError(
450
+ """No vector store specified. Please specify a vector
451
+ store in the endpoints configuration"""
452
+ )
453
+ try:
454
+ self.vector_store.connect(config) # type: ignore
455
+ except Exception as e:
456
+ logger.error(
457
+ "enterprise_search_policy._connect_vector_store_or_raise.connect_error",
458
+ error=e,
459
+ config=config,
460
+ )
461
+ raise VectorStoreConnectionError(
462
+ f"Unable to connect to the vector store. Error: {e}"
463
+ )
464
+
465
+ def _prepare_search_query(self, tracker: DialogueStateTracker, history: int) -> str:
466
+ """Prepares the search query.
467
+ The search query is the last N messages in the conversation history.
468
+
469
+ Args:
470
+ tracker: The tracker containing the conversation history up to now.
471
+ history: The number of messages to include in the search query.
472
+
473
+ Returns:
474
+ The search query.
475
+ """
476
+ transcript = []
477
+ for event in tracker.applied_events():
478
+ if isinstance(event, UserUttered) or isinstance(event, BotUttered):
479
+ transcript.append(sanitize_message_for_prompt(event.text))
480
+
481
+ search_query = " ".join(transcript[-history:][::-1])
482
+ logger.debug("search_query", search_query=search_query)
483
+ return search_query
484
+
485
+ async def predict_action_probabilities( # type: ignore[override]
486
+ self,
487
+ tracker: DialogueStateTracker,
488
+ domain: Domain,
489
+ endpoints: Optional[AvailableEndpoints],
490
+ rule_only_data: Optional[Dict[Text, Any]] = None,
491
+ **kwargs: Any,
492
+ ) -> PolicyPrediction:
493
+ """Predicts the next action the bot should take after seeing the tracker.
494
+
495
+ Args:
496
+ tracker: The tracker containing the conversation history up to now.
497
+ domain: The model's domain.
498
+ endpoints: The model's endpoints.
499
+ rule_only_data: Slots and loops which are specific to rules and hence
500
+ should be ignored by this policy.
501
+ **kwargs: Depending on the specified `needs` section and the resulting
502
+ graph structure the policy can use different input to make predictions.
503
+
504
+ Returns:
505
+ The prediction.
506
+ """
507
+ logger_key = "enterprise_search_policy.predict_action_probabilities"
508
+ vector_search_threshold = self.vector_store_config.get(
509
+ VECTOR_STORE_THRESHOLD_PROPERTY, DEFAULT_VECTOR_STORE_THRESHOLD
510
+ )
511
+ llm = llm_factory(self.config.get(LLM_CONFIG_KEY), DEFAULT_LLM_CONFIG)
512
+ if not self.supports_current_stack_frame(
513
+ tracker, False, False
514
+ ) or self.should_abstain_in_coexistence(tracker, True):
515
+ return self._prediction(self._default_predictions(domain))
516
+
517
+ if not self.vector_store:
518
+ logger.error(f"{logger_key}.no_vector_store")
519
+ return self._create_prediction_internal_error(domain, tracker)
520
+
521
+ try:
522
+ self._connect_vector_store_or_raise(endpoints)
523
+ except (VectorStoreConfigurationError, VectorStoreConnectionError) as e:
524
+ logger.error(f"{logger_key}.connection_error", error=e)
525
+ return self._create_prediction_internal_error(domain, tracker)
526
+
527
+ search_query = self._prepare_search_query(
528
+ tracker, int(self.max_messages_in_query)
529
+ )
530
+ tracker_state = tracker.current_state(EventVerbosity.AFTER_RESTART)
531
+
532
+ try:
533
+ documents = await self.vector_store.search(
534
+ query=search_query,
535
+ tracker_state=tracker_state,
536
+ threshold=vector_search_threshold,
537
+ )
538
+ except InformationRetrievalException as e:
539
+ logger.error(f"{logger_key}.search_error", error=e)
540
+ return self._create_prediction_internal_error(domain, tracker)
541
+
542
+ if not documents.results:
543
+ logger.info(f"{logger_key}.no_documents")
544
+ return self._create_prediction_cannot_handle(domain, tracker)
545
+
546
+ if self.use_llm:
547
+ prompt = self._render_prompt(tracker, documents.results)
548
+ llm_response = await self._generate_llm_answer(llm, prompt)
549
+
550
+ self._store_prompt_and_llm_response_in_tracker(
551
+ tracker=tracker,
552
+ prompt_name="enterprise_search_prompt",
553
+ user_prompt=prompt,
554
+ llm_response=llm_response,
555
+ )
556
+
557
+ if llm_response is None or not llm_response.choices:
558
+ logger.debug(f"{logger_key}.no_llm_response")
559
+ response = None
560
+ else:
561
+ llm_answer = llm_response.choices[0]
562
+
563
+ if self.citation_enabled:
564
+ llm_answer = self.post_process_citations(llm_answer)
565
+
566
+ logger.debug(f"{logger_key}.llm_answer", llm_answer=llm_answer)
567
+ response = llm_answer
568
+ else:
569
+ response = documents.results[0].metadata.get("answer", None)
570
+ if not response:
571
+ logger.error(
572
+ f"{logger_key}.answer_key_missing_in_metadata",
573
+ search_results=documents.results,
574
+ )
575
+ logger.debug(
576
+ "enterprise_search_policy.predict_action_probabilities.no_llm",
577
+ search_results=documents,
578
+ )
579
+ if response is None:
580
+ return self._create_prediction_internal_error(domain, tracker)
581
+
582
+ action_metadata = {
583
+ "message": {
584
+ "text": response,
585
+ SEARCH_RESULTS_METADATA_KEY: [
586
+ result.text for result in documents.results
587
+ ],
588
+ UTTER_SOURCE_METADATA_KEY: self.__class__.__name__,
589
+ SEARCH_QUERY_METADATA_KEY: search_query,
590
+ }
591
+ }
592
+
593
+ # telemetry call to track policy prediction
594
+ track_enterprise_search_policy_predict(
595
+ vector_store_type=self.vector_store_config.get(VECTOR_STORE_TYPE_PROPERTY),
596
+ embeddings_type=self.embeddings_config.get(PROVIDER_CONFIG_KEY),
597
+ embeddings_model=self.embeddings_config.get(MODEL_CONFIG_KEY)
598
+ or self.embeddings_config.get(MODEL_NAME_CONFIG_KEY),
599
+ embeddings_model_group_id=self.embeddings_config.get(
600
+ MODEL_GROUP_ID_CONFIG_KEY
601
+ ),
602
+ llm_type=self.llm_config.get(PROVIDER_CONFIG_KEY),
603
+ llm_model=self.llm_config.get(MODEL_CONFIG_KEY)
604
+ or self.llm_config.get(MODEL_NAME_CONFIG_KEY),
605
+ llm_model_group_id=self.llm_config.get(MODEL_GROUP_ID_CONFIG_KEY),
606
+ citation_enabled=self.citation_enabled,
607
+ )
608
+ return self._create_prediction(
609
+ domain=domain, tracker=tracker, action_metadata=action_metadata
610
+ )
611
+
612
+ def _render_prompt(
613
+ self, tracker: DialogueStateTracker, documents: List[SearchResult]
614
+ ) -> Text:
615
+ """Renders the prompt from the template.
616
+
617
+ Args:
618
+ tracker: The tracker containing the conversation history up to now.
619
+ documents: The documents retrieved from search
620
+
621
+ Returns:
622
+ The rendered prompt.
623
+ """
624
+ inputs = {
625
+ "current_conversation": tracker_as_readable_transcript(
626
+ tracker, max_turns=self.max_history
627
+ ),
628
+ "docs": documents,
629
+ "slots": self._prepare_slots_for_template(tracker),
630
+ "citation_enabled": self.citation_enabled,
631
+ }
632
+ prompt = Template(self.prompt_template).render(**inputs)
633
+ log_llm(
634
+ logger=logger,
635
+ log_module="EnterpriseSearchPolicy",
636
+ log_event="enterprise_search_policy._render_prompt.prompt_rendered",
637
+ prompt=prompt,
638
+ )
639
+ return prompt
640
+
641
+ async def _generate_llm_answer(
642
+ self, llm: LLMClient, prompt: Text
643
+ ) -> Optional[LLMResponse]:
644
+ """Fetches an LLM completion for the provided prompt.
645
+
646
+ Args:
647
+ llm: The LLM client used to get the completion.
648
+ prompt: The prompt text to send to the model.
649
+
650
+ Returns:
651
+ An LLMResponse object, or None if the call fails.
652
+ """
653
+ try:
654
+ raw_response = await llm.acompletion(prompt)
655
+ response_dict = raw_response.to_dict()
656
+ return LLMResponse.from_dict(response_dict)
657
+
658
+ except Exception as e:
659
+ # unfortunately, langchain does not wrap LLM exceptions which means
660
+ # we have to catch all exceptions here
661
+ logger.error(
662
+ "enterprise_search_policy._generate_llm_answer.llm_error",
663
+ error=e,
664
+ )
665
+ return None
666
+
667
+ def _create_prediction(
668
+ self,
669
+ domain: Domain,
670
+ tracker: DialogueStateTracker,
671
+ action_metadata: Dict[Text, Any],
672
+ ) -> PolicyPrediction:
673
+ """Create a policy prediction result with ACTION_SEND_TEXT_NAME.
674
+
675
+ Args:
676
+ domain: The model's domain.
677
+ tracker: The tracker containing the conversation history up to now.
678
+ action_metadata: The metadata for the predicted action.
679
+
680
+ Returns:
681
+ The prediction.
682
+ """
683
+ result = self._prediction_result(ACTION_SEND_TEXT_NAME, domain)
684
+ stack = tracker.stack
685
+ if not stack.is_empty():
686
+ stack.pop()
687
+ events: List[Event] = tracker.create_stack_updated_events(stack)
688
+ else:
689
+ events = []
690
+
691
+ return self._prediction(result, action_metadata=action_metadata, events=events)
692
+
693
+ def _create_prediction_internal_error(
694
+ self, domain: Domain, tracker: DialogueStateTracker
695
+ ) -> PolicyPrediction:
696
+ return self._create_prediction_for_pattern(
697
+ domain, tracker, InternalErrorPatternFlowStackFrame()
698
+ )
699
+
700
+ def _create_prediction_cannot_handle(
701
+ self, domain: Domain, tracker: DialogueStateTracker
702
+ ) -> PolicyPrediction:
703
+ return self._create_prediction_for_pattern(
704
+ domain, tracker, CannotHandlePatternFlowStackFrame()
705
+ )
706
+
707
+ def _create_prediction_for_pattern(
708
+ self,
709
+ domain: Domain,
710
+ tracker: DialogueStateTracker,
711
+ pattern_stack_frame: PatternFlowStackFrame,
712
+ ) -> PolicyPrediction:
713
+ """Create a policy prediction result for error.
714
+
715
+ We should cancel the current flow (hence ACTION_CANCEL_FLOW) and push a
716
+ pattern stack frame (Internal Error Pattern by default) to start the pattern.
717
+
718
+ Args:
719
+ domain: The model's domain.
720
+ tracker: The tracker containing the conversation history up to now.
721
+ pattern_stack_frame: The pattern stack frame to push.
722
+
723
+ Returns:
724
+ The prediction.
725
+ """
726
+ # TODO: replace ACTION_CANCEL_FLOW (ATO-2097)
727
+ result = self._prediction_result(ACTION_CANCEL_FLOW, domain)
728
+ stack = tracker.stack
729
+ if not stack.is_empty():
730
+ stack.pop()
731
+ stack.push(pattern_stack_frame)
732
+ events: List[Event] = tracker.create_stack_updated_events(stack)
733
+ return self._prediction(result, action_metadata=None, events=events)
734
+
735
+ def _prediction_result(
736
+ self, action_name: Optional[Text], domain: Domain, score: Optional[float] = 1.0
737
+ ) -> List[float]:
738
+ """Creates a prediction result.
739
+
740
+ Args:
741
+ action_name: The name of the predicted action.
742
+ domain: The model's domain.
743
+ score: The score of the predicted action.
744
+
745
+ Returns:
746
+ The prediction result where the score is used for one hot encoding.
747
+ """
748
+ result = self._default_predictions(domain)
749
+ if action_name:
750
+ result[domain.index_for_action(action_name)] = score # type: ignore[assignment]
751
+ return result
752
+
753
+ @classmethod
754
+ def load(
755
+ cls,
756
+ config: Dict[Text, Any],
757
+ model_storage: ModelStorage,
758
+ resource: Resource,
759
+ execution_context: ExecutionContext,
760
+ **kwargs: Any,
761
+ ) -> "EnterpriseSearchPolicy":
762
+ """Loads a trained policy (see parent class for full docstring)."""
763
+
764
+ # Perform health checks for both LLM and embeddings client configs
765
+ cls._perform_health_checks(config, "enterprise_search_policy.load")
766
+
767
+ prompt_template = None
768
+ try:
769
+ with model_storage.read_from(resource) as path:
770
+ prompt_template = rasa.shared.utils.io.read_file(
771
+ path / ENTERPRISE_SEARCH_PROMPT_FILE_NAME
772
+ )
773
+ except (FileNotFoundError, FileIOException) as e:
774
+ logger.warning(
775
+ "enterprise_search_policy.load.failed", error=e, resource=resource.name
776
+ )
777
+
778
+ store_type = config.get(VECTOR_STORE_PROPERTY, {}).get(
779
+ VECTOR_STORE_TYPE_PROPERTY
780
+ )
781
+
782
+ embeddings = cls._create_plain_embedder(config)
783
+
784
+ logger.info("enterprise_search_policy.load", config=config)
785
+ if store_type == DEFAULT_VECTOR_STORE_TYPE:
786
+ # if a vector store is not specified,
787
+ # default to using FAISS with the index stored in the model
788
+ # TODO figure out a way to get path without context manager
789
+ with model_storage.read_from(resource) as path:
790
+ vector_store = FAISS_Store(
791
+ embeddings=embeddings,
792
+ index_path=path,
793
+ docs_folder=None,
794
+ create_index=False,
795
+ )
796
+ else:
797
+ vector_store = create_from_endpoint_config(
798
+ config_type=store_type,
799
+ embeddings=embeddings,
800
+ ) # type: ignore
801
+
802
+ return cls(
803
+ config,
804
+ model_storage,
805
+ resource,
806
+ execution_context,
807
+ vector_store=vector_store,
808
+ prompt_template=prompt_template,
809
+ )
810
+
811
+ @classmethod
812
+ def _get_local_knowledge_data(cls, config: Dict[str, Any]) -> Optional[List[str]]:
813
+ """This is required only for local knowledge base types.
814
+
815
+ e.g. FAISS, to ensure that the graph component is retrained when the knowledge
816
+ base is updated.
817
+ """
818
+ merged_config = {**cls.get_default_config(), **config}
819
+
820
+ store_type = merged_config.get(VECTOR_STORE_PROPERTY, {}).get(
821
+ VECTOR_STORE_TYPE_PROPERTY
822
+ )
823
+ if store_type != DEFAULT_VECTOR_STORE_TYPE:
824
+ return None
825
+
826
+ source = merged_config.get(VECTOR_STORE_PROPERTY, {}).get(SOURCE_PROPERTY)
827
+ if not source:
828
+ return None
829
+
830
+ docs = FAISS_Store.load_documents(source)
831
+
832
+ if len(docs) == 0:
833
+ return None
834
+
835
+ docs_as_strings = [
836
+ json.dumps(doc.dict(), ensure_ascii=False, sort_keys=True) for doc in docs
837
+ ]
838
+ return sorted(docs_as_strings)
839
+
840
+ @classmethod
841
+ def fingerprint_addon(cls, config: Dict[str, Any]) -> Optional[str]:
842
+ """Add a fingerprint of enterprise search policy for the graph."""
843
+ local_knowledge_data = cls._get_local_knowledge_data(config)
844
+
845
+ prompt_template = get_prompt_template(
846
+ config.get(PROMPT_CONFIG_KEY),
847
+ DEFAULT_ENTERPRISE_SEARCH_PROMPT_TEMPLATE,
848
+ )
849
+
850
+ llm_config = resolve_model_client_config(
851
+ config.get(LLM_CONFIG_KEY), EnterpriseSearchPolicy.__name__
852
+ )
853
+ embedding_config = resolve_model_client_config(
854
+ config.get(EMBEDDINGS_CONFIG_KEY), EnterpriseSearchPolicy.__name__
855
+ )
856
+ return deep_container_fingerprint(
857
+ [prompt_template, local_knowledge_data, llm_config, embedding_config]
858
+ )
859
+
860
+ @staticmethod
861
+ def post_process_citations(llm_answer: str) -> str:
862
+ """Post-process the LLM answer.
863
+
864
+ Re-writes the bracketed numbers to start from 1 and
865
+ re-arranges the sources to follow the enumeration order.
866
+
867
+ Args:
868
+ llm_answer: The LLM answer.
869
+
870
+ Returns:
871
+ The post-processed LLM answer.
872
+ """
873
+ logger.debug(
874
+ "enterprise_search_policy.post_process_citations", llm_answer=llm_answer
875
+ )
876
+
877
+ # Split llm_answer into answer and citations
878
+ try:
879
+ answer, citations = llm_answer.rsplit("Sources:", 1)
880
+ except ValueError:
881
+ # if there is no "Sources:" in the llm_answer
882
+ return llm_answer
883
+
884
+ # Find all source references in the answer
885
+ pattern = r"\[\s*(\d+(?:\s*,\s*\d+)*)\s*\]"
886
+ matches = re.findall(pattern, answer)
887
+ old_source_indices = [
888
+ int(num.strip()) for match in matches for num in match.split(",")
889
+ ]
890
+
891
+ # Map old source references to the correct enumeration
892
+ renumber_mapping = {num: idx + 1 for idx, num in enumerate(old_source_indices)}
893
+
894
+ # remove whitespace from original source citations in answer
895
+ for match in matches:
896
+ answer = answer.replace(f"[{match}]", f"[{match.replace(' ', '')}]")
897
+
898
+ new_answer = []
899
+ for word in answer.split():
900
+ matches = re.findall(pattern, word)
901
+ if matches:
902
+ for match in matches:
903
+ if "," in match:
904
+ old_indices = [
905
+ int(num.strip()) for num in match.split(",") if num
906
+ ]
907
+ new_indices = [
908
+ renumber_mapping[old_index]
909
+ for old_index in old_indices
910
+ if old_index in renumber_mapping
911
+ ]
912
+ if not new_indices:
913
+ continue
914
+
915
+ word = word.replace(
916
+ match, f"{', '.join(map(str, new_indices))}"
917
+ )
918
+ else:
919
+ old_index = int(match.strip("[].,:;?!"))
920
+ new_index = renumber_mapping.get(old_index)
921
+ if not new_index:
922
+ continue
923
+
924
+ word = word.replace(str(old_index), str(new_index))
925
+ new_answer.append(word)
926
+
927
+ # join the words
928
+ joined_answer = " ".join(new_answer)
929
+ joined_answer += "\nSources:\n"
930
+
931
+ new_sources: List[str] = []
932
+
933
+ for line in citations.split("\n"):
934
+ pattern = r"(?<=\[)\d+"
935
+ match = re.search(pattern, line)
936
+ if match:
937
+ old_index = int(match.group(0))
938
+ new_index = renumber_mapping[old_index]
939
+ # replace only the first occurrence of the old index
940
+ line = line.replace(f"[{old_index}]", f"[{new_index}]", 1)
941
+
942
+ # insert the line into the new_index position
943
+ new_sources.insert(new_index - 1, line)
944
+ elif line.strip():
945
+ new_sources.append(line)
946
+
947
+ joined_sources = "\n".join(new_sources)
948
+
949
+ return joined_answer + joined_sources
950
+
951
+ @classmethod
952
+ def _perform_health_checks(
953
+ cls, config: Dict[Text, Any], log_source_method: str
954
+ ) -> None:
955
+ # Perform health check of the LLM client config
956
+ llm_config = resolve_model_client_config(config.get(LLM_CONFIG_KEY, {}))
957
+ cls.perform_llm_health_check(
958
+ llm_config,
959
+ DEFAULT_LLM_CONFIG,
960
+ log_source_method,
961
+ EnterpriseSearchPolicy.__name__,
962
+ )
963
+
964
+ # Perform health check of the embeddings client config
965
+ embeddings_config = resolve_model_client_config(
966
+ config.get(EMBEDDINGS_CONFIG_KEY, {})
967
+ )
968
+ cls.perform_embeddings_health_check(
969
+ embeddings_config,
970
+ DEFAULT_EMBEDDINGS_CONFIG,
971
+ log_source_method,
972
+ EnterpriseSearchPolicy.__name__,
973
+ )