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,211 @@
1
+ from typing import List, Optional, Set, Tuple
2
+ import typing
3
+ from rasa.dialogue_understanding.patterns.collect_information import (
4
+ CollectInformationPatternFlowStackFrame,
5
+ )
6
+ from rasa.dialogue_understanding.stack.frames import BaseFlowStackFrame
7
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
8
+ from rasa.dialogue_understanding.stack.frames import UserFlowStackFrame
9
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import FlowStackFrameType
10
+ from rasa.dialogue_understanding.stack.frames.pattern_frame import PatternFlowStackFrame
11
+ from rasa.shared.core.flows.steps.collect import CollectInformationFlowStep
12
+ from rasa.shared.core.flows.steps.constants import END_STEP
13
+ from rasa.shared.core.flows.steps.continuation import ContinueFlowStep
14
+ from rasa.shared.core.flows import FlowsList
15
+
16
+ if typing.TYPE_CHECKING:
17
+ from rasa.shared.core.trackers import DialogueStateTracker
18
+
19
+
20
+ def top_flow_frame(
21
+ dialogue_stack: DialogueStack,
22
+ ignore_collect_information_pattern: bool = True,
23
+ ignore_call_frames: bool = True,
24
+ ) -> Optional[BaseFlowStackFrame]:
25
+ """Returns the topmost flow frame from the tracker.
26
+
27
+ By default, the topmost flow frame is ignored if it is the
28
+ `pattern_collect_information`. This is because the `pattern_collect_information`
29
+ is a special flow frame that is used to collect information from the user
30
+ and commonly, is not what you are looking for when you want the topmost frame.
31
+
32
+ Also excludes frames created by a call step. They are treated as if they are
33
+ directly part of the flow that called them.
34
+
35
+ Args:
36
+ dialogue_stack: The dialogue stack to use.
37
+ ignore_collect_information_pattern: Whether to ignore the
38
+ `pattern_collect_information` frame.
39
+ ignore_call_frames: Whether to ignore user frames of type `call`
40
+
41
+ Returns:
42
+ The topmost flow frame from the tracker. `None` if there
43
+ is no frame on the stack.
44
+ """
45
+ for frame in reversed(dialogue_stack.frames):
46
+ if ignore_collect_information_pattern and isinstance(
47
+ frame, CollectInformationPatternFlowStackFrame
48
+ ):
49
+ continue
50
+ if ignore_call_frames and (
51
+ isinstance(frame, UserFlowStackFrame)
52
+ and frame.frame_type == FlowStackFrameType.CALL
53
+ ):
54
+ continue
55
+ if isinstance(frame, BaseFlowStackFrame):
56
+ return frame
57
+ return None
58
+
59
+
60
+ def top_user_flow_frame(dialogue_stack: DialogueStack) -> Optional[UserFlowStackFrame]:
61
+ """Returns the topmost user flow frame from the tracker.
62
+
63
+ User flows are flows that are created by developers of an assistant and
64
+ describe tasks the assistant can fulfil. The topmost user flow frame is
65
+ the topmost frame on the stack for one of these user flows. While looking
66
+ for this topmost user flow, other frame types such as PatternFrames,
67
+ SearchFrames, ChitchatFrames, and user flows started through call steps
68
+ are skipped. The latter are treated as part of the calling user flow.
69
+
70
+ Args:
71
+ dialogue_stack: The dialogue stack to use.
72
+
73
+ Returns:
74
+ The topmost user flow frame from the tracker.
75
+ """
76
+ for frame in reversed(dialogue_stack.frames):
77
+ if (
78
+ isinstance(frame, UserFlowStackFrame)
79
+ and frame.frame_type != FlowStackFrameType.CALL
80
+ ):
81
+ return frame
82
+ return None
83
+
84
+
85
+ def filled_slots_for_active_flow(
86
+ tracker: "DialogueStateTracker", all_flows: FlowsList
87
+ ) -> Tuple[Set[str], Optional[str]]:
88
+ """Get all slots that have been filled for the 'current user flow'.
89
+
90
+ All patterns that sit ontop of that user flow as well as
91
+ flows called by this flow, are also included.
92
+
93
+ Any collect information step that is part of a pattern on top of the current
94
+ user flow are also included.
95
+
96
+ Args:
97
+ tracker: The tracker to get the filled slots from.
98
+ all_flows: All flows.
99
+
100
+ Returns:
101
+ All slots that have been filled for the current flow and the id of the currently
102
+ active flow.
103
+ """
104
+ stack = tracker.stack
105
+ user_frame = top_user_flow_frame(stack)
106
+ active_flow = user_frame.flow_id if user_frame else None
107
+
108
+ filled_slots = set()
109
+ for collect_step, _ in previous_collect_steps_for_active_flow(tracker, all_flows):
110
+ filled_slots.add(collect_step.collect)
111
+
112
+ return filled_slots, active_flow
113
+
114
+
115
+ def previous_collect_steps_for_active_flow(
116
+ tracker: "DialogueStateTracker", all_flows: FlowsList
117
+ ) -> List[Tuple[CollectInformationFlowStep, str]]:
118
+ stack = tracker.stack
119
+ user_frame = top_user_flow_frame(stack)
120
+
121
+ if not user_frame:
122
+ return []
123
+
124
+ collect_steps: List[Tuple[CollectInformationFlowStep, str]] = []
125
+
126
+ active_frames = {frame.frame_id for frame in stack.frames}
127
+
128
+ for previous_stack in tracker.previous_stack_states():
129
+ active_frame = top_user_flow_frame(previous_stack)
130
+ if not active_frame or active_frame.frame_id != user_frame.frame_id:
131
+ continue
132
+
133
+ top_frame = previous_stack.top()
134
+ if not isinstance(top_frame, BaseFlowStackFrame):
135
+ continue
136
+
137
+ step = top_frame.step(all_flows)
138
+ if not isinstance(step, CollectInformationFlowStep):
139
+ continue
140
+
141
+ if isinstance(top_frame, UserFlowStackFrame):
142
+ collect_steps.append((step, top_frame.flow_id))
143
+ elif (
144
+ isinstance(top_frame, PatternFlowStackFrame)
145
+ and top_frame.frame_id in active_frames
146
+ ):
147
+ # if this is a pattern, it is only relevant if it is still
148
+ # active in the current state of the conversation.
149
+ # completed patterns in the past are not relevant
150
+ collect_steps.append((step, top_frame.flow_id))
151
+
152
+ return collect_steps
153
+
154
+
155
+ def user_flows_on_the_stack(dialogue_stack: DialogueStack) -> Set[str]:
156
+ """Get all user flows that are currently on the stack.
157
+
158
+ Args:
159
+ dialogue_stack: The dialogue stack.
160
+
161
+ Returns:
162
+ All user flows that are currently on the stack.
163
+ """
164
+ return {
165
+ f.flow_id for f in dialogue_stack.frames if isinstance(f, UserFlowStackFrame)
166
+ }
167
+
168
+
169
+ def end_top_user_flow(stack: DialogueStack) -> DialogueStack:
170
+ """Ends all frames on top of the stack including the topmost user frame.
171
+
172
+ Ends all flows until the next user flow is reached. This is useful
173
+ if you want to end all flows that are currently on the stack and
174
+ the user flow that triggered them.
175
+
176
+ Args:
177
+ stack: The dialogue stack.
178
+ """
179
+ updated_stack = stack.copy()
180
+
181
+ for frame in reversed(updated_stack.frames):
182
+ if isinstance(frame, BaseFlowStackFrame):
183
+ frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
184
+ if isinstance(frame, UserFlowStackFrame):
185
+ break
186
+ return updated_stack
187
+
188
+
189
+ def get_collect_steps_excluding_ask_before_filling_for_active_flow(
190
+ dialogue_stack: DialogueStack, all_flows: FlowsList
191
+ ) -> Set[str]:
192
+ """Get all collect steps that are part of the current flow, without
193
+ considering the collect steps that has to be asked before filling.
194
+
195
+ Args:
196
+ dialogue_stack: The dialogue stack.
197
+ all_flows: All flows.
198
+
199
+ Returns:
200
+ All collect steps that are part of the current active flow,
201
+ excluding the collect steps that have to be asked before filling.
202
+ """
203
+ active_frame = top_user_flow_frame(dialogue_stack)
204
+ if active_frame is None:
205
+ return set()
206
+ active_flow = active_frame.flow(all_flows)
207
+ return set(
208
+ step.collect
209
+ for step in active_flow.get_collect_steps()
210
+ if not step.ask_before_filling
211
+ )
@@ -0,0 +1,14 @@
1
+ from contextlib import contextmanager
2
+ from typing import Generator
3
+
4
+ record_commands_and_prompts = False
5
+
6
+
7
+ @contextmanager
8
+ def set_record_commands_and_prompts() -> Generator:
9
+ global record_commands_and_prompts
10
+ record_commands_and_prompts = True
11
+ try:
12
+ yield
13
+ finally:
14
+ record_commands_and_prompts = False
File without changes
@@ -0,0 +1,15 @@
1
+ import rasa.e2e_test.constants as constants
2
+
3
+ KEY_FIXTURES = constants.KEY_FIXTURES
4
+ KEY_METADATA = constants.KEY_METADATA
5
+ KEY_STUB_CUSTOM_ACTIONS = constants.KEY_STUB_CUSTOM_ACTIONS
6
+ KEY_USER_INPUT = constants.KEY_USER_INPUT
7
+ KEY_BOT_INPUT = constants.KEY_BOT_INPUT
8
+ KEY_BOT_UTTERED = constants.KEY_BOT_UTTERED
9
+ KEY_STEPS = constants.KEY_STEPS
10
+ KEY_TEST_CASE = constants.KEY_TEST_CASE
11
+ KEY_TEST_CASES = constants.KEY_TEST_CASES
12
+ KEY_COMMANDS = "commands"
13
+
14
+ ACTOR_USER = "user"
15
+ ACTOR_BOT = "bot"
@@ -0,0 +1,118 @@
1
+ from typing import List, Optional, Dict, Any
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+ from rasa.dialogue_understanding.commands import Command
6
+ from rasa.dialogue_understanding_test.constants import (
7
+ ACTOR_USER,
8
+ KEY_COMMANDS,
9
+ ACTOR_BOT,
10
+ KEY_TEST_CASE,
11
+ KEY_STEPS,
12
+ KEY_FIXTURES,
13
+ KEY_METADATA,
14
+ KEY_USER_INPUT,
15
+ KEY_BOT_INPUT,
16
+ KEY_BOT_UTTERED,
17
+ )
18
+
19
+
20
+ class DialogueUnderstandingOutput(BaseModel):
21
+ """Output containing prompts and generated commands by component.
22
+
23
+ Example of commands:
24
+ {
25
+ "MultiStepLLMCommandGenerator": [
26
+ {"command": "set_slot", "name": "slot_name", "value": "slot_value"},
27
+ ],
28
+ "NLUCommandAdapter": [
29
+ {"command": "start_flow", "name": "test_flow"},
30
+ ]
31
+ }
32
+
33
+ Example of prompts:
34
+ {
35
+ "MultiStepLLMCommandGenerator": [
36
+ (
37
+ "fill_slots_prompt",
38
+ {
39
+ "user_prompt": "<prompt content>",
40
+ "system_prompt": "<prompt content>"
41
+ }
42
+ ),
43
+ (
44
+ "handle_flows_prompt",
45
+ {
46
+ "user_prompt": "<prompt content>",
47
+ "system_prompt": "<prompt content>"
48
+ }
49
+ ),
50
+ ],
51
+ }
52
+ """
53
+
54
+ prompts: Dict[str, tuple[str, Dict[str, str]]]
55
+ commands: Dict[str, List[Command]]
56
+
57
+ model_config = ConfigDict(frozen=True)
58
+
59
+ def get_component_data(
60
+ self, component_name: str
61
+ ) -> tuple[Optional[tuple[str, Dict[str, str]]], List[Command]]:
62
+ """Get both the prompts and commands for a specific component."""
63
+ return self.prompts.get(component_name), self.commands.get(component_name, [])
64
+
65
+
66
+ class DialogueUnderstandingTestStep(BaseModel):
67
+ actor: str
68
+ text: Optional[str] = None
69
+ template: Optional[str] = None
70
+ line: Optional[int] = None
71
+ metadata_name: Optional[str] = None
72
+ commands: Optional[List[Command]] = None
73
+ dialogue_understanding_output: Optional[DialogueUnderstandingOutput] = None
74
+
75
+ def as_dict(self) -> Dict[str, Any]:
76
+ if self.actor == ACTOR_USER:
77
+ if self.commands:
78
+ return {
79
+ KEY_USER_INPUT: self.text,
80
+ # TODO: The command should be converted into our DSL
81
+ KEY_COMMANDS: [command.as_dict() for command in self.commands],
82
+ }
83
+ return {ACTOR_USER: self.text}
84
+ elif self.actor == ACTOR_BOT:
85
+ if self.text is not None:
86
+ return {KEY_BOT_INPUT: self.text}
87
+ elif self.template is not None:
88
+ return {KEY_BOT_UTTERED: self.template}
89
+
90
+ return {}
91
+
92
+
93
+ class DialogueUnderstandingTestCase(BaseModel):
94
+ name: str
95
+ steps: list[DialogueUnderstandingTestStep] = Field(min_length=1)
96
+ file: Optional[str] = None
97
+ line: Optional[int] = None
98
+ fixture_names: Optional[List[str]] = None
99
+ metadata_name: Optional[str] = None
100
+
101
+ def full_name(self) -> str:
102
+ return f"{self.file}::{self.name}"
103
+
104
+ def as_dict(self) -> Dict[str, Any]:
105
+ result = {
106
+ KEY_TEST_CASE: self.name,
107
+ KEY_STEPS: [step.as_dict() for step in self.steps],
108
+ }
109
+ if self.fixture_names:
110
+ result[KEY_FIXTURES] = self.fixture_names
111
+ if self.metadata_name:
112
+ result[KEY_METADATA] = self.metadata_name
113
+ return result
114
+
115
+
116
+ # Update forward references
117
+ DialogueUnderstandingTestStep.model_rebuild()
118
+ DialogueUnderstandingTestCase.model_rebuild()
@@ -0,0 +1,11 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel
4
+
5
+ from rasa.dialogue_understanding_test.du_test_case import DialogueUnderstandingTestCase
6
+
7
+
8
+ class DialogueUnderstandingTestResult(BaseModel):
9
+ test_case: DialogueUnderstandingTestCase
10
+ passed: bool
11
+ error_line: Optional[int] = None
File without changes
@@ -0,0 +1,134 @@
1
+ from dataclasses import dataclass
2
+ from typing import List, Optional, Set, TYPE_CHECKING
3
+
4
+ import structlog
5
+
6
+ from rasa.e2e_test.assertions import _get_all_assertion_subclasses
7
+
8
+ if TYPE_CHECKING:
9
+ from rasa.e2e_test.assertions import Assertion
10
+ from rasa.e2e_test.e2e_test_case import TestCase
11
+ from rasa.e2e_test.e2e_test_result import TestResult
12
+
13
+ structlogger = structlog.get_logger()
14
+
15
+
16
+ @dataclass
17
+ class AccuracyCalculation:
18
+ """Data class for storing the accuracy calculation for an assertion type."""
19
+
20
+ assertion_type: str
21
+ accuracy: float
22
+
23
+
24
+ class AggregateTestStatsCalculator:
25
+ """Class for calculating the aggregate test statistics for assertion types."""
26
+
27
+ def __init__(
28
+ self,
29
+ passed_results: List["TestResult"],
30
+ failed_results: List["TestResult"],
31
+ test_cases: List["TestCase"],
32
+ ) -> None:
33
+ self.passed_results = passed_results
34
+ self.failed_results = failed_results
35
+ self.test_cases = test_cases
36
+
37
+ self.failed_assertion_set: Set["Assertion"] = set()
38
+ self.failed_test_cases_without_assertion_failure: Set[str] = set()
39
+ self.passed_count_mapping = {
40
+ subclass_type: 0
41
+ for subclass_type in _get_all_assertion_subclasses().keys()
42
+ if subclass_type != ""
43
+ }
44
+ self.failed_count_mapping = {
45
+ subclass_type: 0
46
+ for subclass_type in _get_all_assertion_subclasses().keys()
47
+ if subclass_type != ""
48
+ }
49
+
50
+ def calculate(self) -> List[AccuracyCalculation]:
51
+ """Calculates the aggregate test statistics for assertion types."""
52
+ self._update_failed_count_mapping()
53
+ self._update_passed_count_mapping()
54
+
55
+ accuracy_calculations = []
56
+
57
+ for assertion_type in self.passed_count_mapping.keys():
58
+ accuracy = self._calculate_accuracy(assertion_type)
59
+ if accuracy is None:
60
+ continue
61
+
62
+ accuracy_calculations.append(AccuracyCalculation(assertion_type, accuracy))
63
+
64
+ return accuracy_calculations
65
+
66
+ def _calculate_accuracy(self, assertion_type: str) -> Optional[float]:
67
+ """Calculates the accuracy for the given assertion type."""
68
+ passed_count = self.passed_count_mapping[assertion_type]
69
+ failed_count = self.failed_count_mapping[assertion_type]
70
+
71
+ total_count = passed_count + failed_count
72
+
73
+ if total_count == 0:
74
+ structlogger.debug(
75
+ "aggregate_test_stats.calculate_accuracy."
76
+ "no_test_cases_for_assertion_type",
77
+ assertion_type=assertion_type,
78
+ )
79
+ return None
80
+
81
+ return passed_count / total_count
82
+
83
+ def _update_passed_count_mapping(self) -> None:
84
+ """Updates the passed count mapping based on the passed results.
85
+
86
+ We only count the assertions of passed tests and those
87
+ that are not in the failed assertion set.
88
+ We also do not count the assertions that follow a failed assertion.
89
+ """
90
+ passed_test_case_names = [
91
+ passed.test_case.name for passed in self.passed_results
92
+ ]
93
+ # We filter out test cases that failed without an assertion failure
94
+ filtered_test_cases = [
95
+ test_case
96
+ for test_case in self.test_cases
97
+ if test_case.name not in self.failed_test_cases_without_assertion_failure
98
+ ]
99
+
100
+ for test_case in filtered_test_cases:
101
+ if test_case.name in passed_test_case_names:
102
+ for step in test_case.steps:
103
+ if step.assertions is None:
104
+ continue
105
+
106
+ for assertion in step.assertions:
107
+ self.passed_count_mapping[assertion.type()] += 1
108
+ else:
109
+ for step in test_case.steps:
110
+ if step.assertions is None:
111
+ continue
112
+
113
+ for assertion in step.assertions:
114
+ if assertion not in self.failed_assertion_set:
115
+ self.passed_count_mapping[assertion.type()] += 1
116
+ else:
117
+ break
118
+
119
+ def _update_failed_count_mapping(self) -> None:
120
+ """Updates the failed count mapping based on the failed results."""
121
+ for failed in self.failed_results:
122
+ if failed.assertion_failure is None:
123
+ structlogger.debug(
124
+ "aggregate_test_stats.calculate."
125
+ "no_assertion_failure_in_failed_result",
126
+ test_case=failed.test_case.name,
127
+ )
128
+ self.failed_test_cases_without_assertion_failure.add(
129
+ failed.test_case.name
130
+ )
131
+ continue
132
+
133
+ self.failed_assertion_set.add(failed.assertion_failure.assertion)
134
+ self.failed_count_mapping[failed.assertion_failure.assertion.type()] += 1