rasa-pro 3.8.16__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 (644) hide show
  1. README.md +380 -0
  2. rasa/__init__.py +10 -0
  3. rasa/__main__.py +151 -0
  4. rasa/anonymization/__init__.py +2 -0
  5. rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
  6. rasa/anonymization/anonymization_pipeline.py +287 -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 +117 -0
  11. rasa/api.py +146 -0
  12. rasa/cli/__init__.py +5 -0
  13. rasa/cli/arguments/__init__.py +0 -0
  14. rasa/cli/arguments/data.py +81 -0
  15. rasa/cli/arguments/default_arguments.py +165 -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 +204 -0
  20. rasa/cli/arguments/shell.py +13 -0
  21. rasa/cli/arguments/test.py +211 -0
  22. rasa/cli/arguments/train.py +263 -0
  23. rasa/cli/arguments/visualize.py +34 -0
  24. rasa/cli/arguments/x.py +30 -0
  25. rasa/cli/data.py +292 -0
  26. rasa/cli/e2e_test.py +566 -0
  27. rasa/cli/evaluate.py +222 -0
  28. rasa/cli/export.py +251 -0
  29. rasa/cli/inspect.py +63 -0
  30. rasa/cli/interactive.py +164 -0
  31. rasa/cli/license.py +65 -0
  32. rasa/cli/markers.py +78 -0
  33. rasa/cli/project_templates/__init__.py +0 -0
  34. rasa/cli/project_templates/calm/actions/__init__.py +0 -0
  35. rasa/cli/project_templates/calm/actions/action_template.py +27 -0
  36. rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
  37. rasa/cli/project_templates/calm/actions/db.py +57 -0
  38. rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
  39. rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
  40. rasa/cli/project_templates/calm/config.yml +12 -0
  41. rasa/cli/project_templates/calm/credentials.yml +33 -0
  42. rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
  43. rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
  44. rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
  45. rasa/cli/project_templates/calm/db/contacts.json +10 -0
  46. rasa/cli/project_templates/calm/domain/add_contact.yml +33 -0
  47. rasa/cli/project_templates/calm/domain/list_contacts.yml +14 -0
  48. rasa/cli/project_templates/calm/domain/remove_contact.yml +31 -0
  49. rasa/cli/project_templates/calm/domain/shared.yml +5 -0
  50. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
  51. rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
  52. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
  53. rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
  54. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
  55. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
  56. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
  57. rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
  58. rasa/cli/project_templates/calm/endpoints.yml +45 -0
  59. rasa/cli/project_templates/default/actions/__init__.py +0 -0
  60. rasa/cli/project_templates/default/actions/actions.py +27 -0
  61. rasa/cli/project_templates/default/config.yml +44 -0
  62. rasa/cli/project_templates/default/credentials.yml +33 -0
  63. rasa/cli/project_templates/default/data/nlu.yml +91 -0
  64. rasa/cli/project_templates/default/data/rules.yml +13 -0
  65. rasa/cli/project_templates/default/data/stories.yml +30 -0
  66. rasa/cli/project_templates/default/domain.yml +34 -0
  67. rasa/cli/project_templates/default/endpoints.yml +42 -0
  68. rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
  69. rasa/cli/project_templates/tutorial/actions.py +22 -0
  70. rasa/cli/project_templates/tutorial/config.yml +11 -0
  71. rasa/cli/project_templates/tutorial/credentials.yml +33 -0
  72. rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
  73. rasa/cli/project_templates/tutorial/domain.yml +17 -0
  74. rasa/cli/project_templates/tutorial/endpoints.yml +45 -0
  75. rasa/cli/run.py +136 -0
  76. rasa/cli/scaffold.py +268 -0
  77. rasa/cli/shell.py +141 -0
  78. rasa/cli/studio/__init__.py +0 -0
  79. rasa/cli/studio/download.py +51 -0
  80. rasa/cli/studio/studio.py +110 -0
  81. rasa/cli/studio/train.py +59 -0
  82. rasa/cli/studio/upload.py +85 -0
  83. rasa/cli/telemetry.py +90 -0
  84. rasa/cli/test.py +280 -0
  85. rasa/cli/train.py +260 -0
  86. rasa/cli/utils.py +453 -0
  87. rasa/cli/visualize.py +40 -0
  88. rasa/cli/x.py +205 -0
  89. rasa/constants.py +37 -0
  90. rasa/core/__init__.py +17 -0
  91. rasa/core/actions/__init__.py +0 -0
  92. rasa/core/actions/action.py +1450 -0
  93. rasa/core/actions/action_clean_stack.py +59 -0
  94. rasa/core/actions/action_run_slot_rejections.py +207 -0
  95. rasa/core/actions/action_trigger_chitchat.py +31 -0
  96. rasa/core/actions/action_trigger_flow.py +109 -0
  97. rasa/core/actions/action_trigger_search.py +31 -0
  98. rasa/core/actions/constants.py +2 -0
  99. rasa/core/actions/forms.py +737 -0
  100. rasa/core/actions/loops.py +111 -0
  101. rasa/core/actions/two_stage_fallback.py +186 -0
  102. rasa/core/agent.py +557 -0
  103. rasa/core/auth_retry_tracker_store.py +122 -0
  104. rasa/core/brokers/__init__.py +0 -0
  105. rasa/core/brokers/broker.py +126 -0
  106. rasa/core/brokers/file.py +58 -0
  107. rasa/core/brokers/kafka.py +322 -0
  108. rasa/core/brokers/pika.py +387 -0
  109. rasa/core/brokers/sql.py +86 -0
  110. rasa/core/channels/__init__.py +55 -0
  111. rasa/core/channels/audiocodes.py +463 -0
  112. rasa/core/channels/botframework.py +339 -0
  113. rasa/core/channels/callback.py +85 -0
  114. rasa/core/channels/channel.py +419 -0
  115. rasa/core/channels/console.py +243 -0
  116. rasa/core/channels/development_inspector.py +93 -0
  117. rasa/core/channels/facebook.py +422 -0
  118. rasa/core/channels/hangouts.py +335 -0
  119. rasa/core/channels/inspector/.eslintrc.cjs +25 -0
  120. rasa/core/channels/inspector/.gitignore +23 -0
  121. rasa/core/channels/inspector/README.md +54 -0
  122. rasa/core/channels/inspector/assets/favicon.ico +0 -0
  123. rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
  124. rasa/core/channels/inspector/custom.d.ts +3 -0
  125. rasa/core/channels/inspector/dist/assets/arc-5623b6dc.js +1 -0
  126. rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
  127. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-685c106a.js +10 -0
  128. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-8cbed007.js +2 -0
  129. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-5889cf12.js +2 -0
  130. rasa/core/channels/inspector/dist/assets/createText-62fc7601-24c249d7.js +7 -0
  131. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-7dd06a75.js +4 -0
  132. rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-62c1e54c.js +51 -0
  133. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-ce49b86f.js +6 -0
  134. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-4067e48f.js +4 -0
  135. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-85583a23.js +1 -0
  136. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-59fe4051.js +139 -0
  137. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-47e3a43b.js +266 -0
  138. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-5a2ac0d9.js +70 -0
  139. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
  140. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
  141. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
  142. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
  143. rasa/core/channels/inspector/dist/assets/index-268a75c0.js +1040 -0
  144. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-dfb8efc4.js +1 -0
  145. rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
  146. rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-b0c470f2.js +7 -0
  147. rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
  148. rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-2edb829a.js +139 -0
  149. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
  150. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
  151. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
  152. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
  153. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
  154. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
  155. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
  156. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
  157. rasa/core/channels/inspector/dist/assets/layout-b6873d69.js +1 -0
  158. rasa/core/channels/inspector/dist/assets/line-1efc5781.js +1 -0
  159. rasa/core/channels/inspector/dist/assets/linear-661e9b94.js +1 -0
  160. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-2d2e727f.js +109 -0
  161. rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
  162. rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
  163. rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-9d3ea93d.js +35 -0
  164. rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-06a178a2.js +7 -0
  165. rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-0bfedffc.js +52 -0
  166. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-d76d0a04.js +8 -0
  167. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-37bb4341.js +122 -0
  168. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-f52f7f57.js +1 -0
  169. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-4a986a20.js +1 -0
  170. rasa/core/channels/inspector/dist/assets/styles-080da4f6-7dd9ae12.js +110 -0
  171. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-46e1ca14.js +159 -0
  172. rasa/core/channels/inspector/dist/assets/styles-9c745c82-4a97439a.js +207 -0
  173. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-823917a3.js +1 -0
  174. rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-9ea72896.js +61 -0
  175. rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-b631a8b6.js +7 -0
  176. rasa/core/channels/inspector/dist/index.html +39 -0
  177. rasa/core/channels/inspector/index.html +37 -0
  178. rasa/core/channels/inspector/jest.config.ts +13 -0
  179. rasa/core/channels/inspector/package.json +48 -0
  180. rasa/core/channels/inspector/setupTests.ts +2 -0
  181. rasa/core/channels/inspector/src/App.tsx +170 -0
  182. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +97 -0
  183. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
  184. rasa/core/channels/inspector/src/components/DialogueStack.tsx +151 -0
  185. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
  186. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
  187. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +19 -0
  188. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
  189. rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
  190. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
  191. rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
  192. rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
  193. rasa/core/channels/inspector/src/helpers/formatters.test.ts +385 -0
  194. rasa/core/channels/inspector/src/helpers/formatters.ts +239 -0
  195. rasa/core/channels/inspector/src/helpers/utils.ts +42 -0
  196. rasa/core/channels/inspector/src/main.tsx +13 -0
  197. rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
  198. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
  199. rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
  200. rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
  201. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
  202. rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
  203. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
  204. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
  205. rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
  206. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
  207. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
  208. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
  209. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
  210. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
  211. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
  212. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
  213. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
  214. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
  215. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
  216. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
  217. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
  218. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
  219. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
  220. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
  221. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
  222. rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
  223. rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
  224. rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
  225. rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
  226. rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
  227. rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
  228. rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
  229. rasa/core/channels/inspector/src/theme/index.ts +101 -0
  230. rasa/core/channels/inspector/src/types.ts +64 -0
  231. rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
  232. rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
  233. rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
  234. rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
  235. rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
  236. rasa/core/channels/inspector/tsconfig.json +26 -0
  237. rasa/core/channels/inspector/tsconfig.node.json +10 -0
  238. rasa/core/channels/inspector/vite.config.ts +8 -0
  239. rasa/core/channels/inspector/yarn.lock +6156 -0
  240. rasa/core/channels/mattermost.py +229 -0
  241. rasa/core/channels/rasa_chat.py +126 -0
  242. rasa/core/channels/rest.py +210 -0
  243. rasa/core/channels/rocketchat.py +175 -0
  244. rasa/core/channels/slack.py +620 -0
  245. rasa/core/channels/socketio.py +274 -0
  246. rasa/core/channels/telegram.py +298 -0
  247. rasa/core/channels/twilio.py +169 -0
  248. rasa/core/channels/twilio_voice.py +367 -0
  249. rasa/core/channels/vier_cvg.py +374 -0
  250. rasa/core/channels/webexteams.py +135 -0
  251. rasa/core/concurrent_lock_store.py +210 -0
  252. rasa/core/constants.py +107 -0
  253. rasa/core/evaluation/__init__.py +0 -0
  254. rasa/core/evaluation/marker.py +267 -0
  255. rasa/core/evaluation/marker_base.py +925 -0
  256. rasa/core/evaluation/marker_stats.py +294 -0
  257. rasa/core/evaluation/marker_tracker_loader.py +103 -0
  258. rasa/core/exceptions.py +29 -0
  259. rasa/core/exporter.py +284 -0
  260. rasa/core/featurizers/__init__.py +0 -0
  261. rasa/core/featurizers/precomputation.py +410 -0
  262. rasa/core/featurizers/single_state_featurizer.py +402 -0
  263. rasa/core/featurizers/tracker_featurizers.py +1172 -0
  264. rasa/core/http_interpreter.py +89 -0
  265. rasa/core/information_retrieval/__init__.py +0 -0
  266. rasa/core/information_retrieval/faiss.py +116 -0
  267. rasa/core/information_retrieval/information_retrieval.py +72 -0
  268. rasa/core/information_retrieval/milvus.py +59 -0
  269. rasa/core/information_retrieval/qdrant.py +102 -0
  270. rasa/core/jobs.py +63 -0
  271. rasa/core/lock.py +139 -0
  272. rasa/core/lock_store.py +344 -0
  273. rasa/core/migrate.py +404 -0
  274. rasa/core/nlg/__init__.py +3 -0
  275. rasa/core/nlg/callback.py +147 -0
  276. rasa/core/nlg/contextual_response_rephraser.py +270 -0
  277. rasa/core/nlg/generator.py +230 -0
  278. rasa/core/nlg/interpolator.py +143 -0
  279. rasa/core/nlg/response.py +155 -0
  280. rasa/core/nlg/summarize.py +69 -0
  281. rasa/core/policies/__init__.py +0 -0
  282. rasa/core/policies/ensemble.py +329 -0
  283. rasa/core/policies/enterprise_search_policy.py +717 -0
  284. rasa/core/policies/enterprise_search_prompt_template.jinja2 +62 -0
  285. rasa/core/policies/flow_policy.py +205 -0
  286. rasa/core/policies/flows/__init__.py +0 -0
  287. rasa/core/policies/flows/flow_exceptions.py +44 -0
  288. rasa/core/policies/flows/flow_executor.py +582 -0
  289. rasa/core/policies/flows/flow_step_result.py +43 -0
  290. rasa/core/policies/intentless_policy.py +924 -0
  291. rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
  292. rasa/core/policies/memoization.py +538 -0
  293. rasa/core/policies/policy.py +716 -0
  294. rasa/core/policies/rule_policy.py +1276 -0
  295. rasa/core/policies/ted_policy.py +2146 -0
  296. rasa/core/policies/unexpected_intent_policy.py +1015 -0
  297. rasa/core/processor.py +1331 -0
  298. rasa/core/run.py +315 -0
  299. rasa/core/secrets_manager/__init__.py +0 -0
  300. rasa/core/secrets_manager/constants.py +32 -0
  301. rasa/core/secrets_manager/endpoints.py +391 -0
  302. rasa/core/secrets_manager/factory.py +233 -0
  303. rasa/core/secrets_manager/secret_manager.py +262 -0
  304. rasa/core/secrets_manager/vault.py +576 -0
  305. rasa/core/test.py +1337 -0
  306. rasa/core/tracker_store.py +1664 -0
  307. rasa/core/train.py +107 -0
  308. rasa/core/training/__init__.py +89 -0
  309. rasa/core/training/converters/__init__.py +0 -0
  310. rasa/core/training/converters/responses_prefix_converter.py +119 -0
  311. rasa/core/training/interactive.py +1742 -0
  312. rasa/core/training/story_conflict.py +381 -0
  313. rasa/core/training/training.py +93 -0
  314. rasa/core/utils.py +344 -0
  315. rasa/core/visualize.py +70 -0
  316. rasa/dialogue_understanding/__init__.py +0 -0
  317. rasa/dialogue_understanding/coexistence/__init__.py +0 -0
  318. rasa/dialogue_understanding/coexistence/constants.py +4 -0
  319. rasa/dialogue_understanding/coexistence/intent_based_router.py +189 -0
  320. rasa/dialogue_understanding/coexistence/llm_based_router.py +261 -0
  321. rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
  322. rasa/dialogue_understanding/commands/__init__.py +45 -0
  323. rasa/dialogue_understanding/commands/can_not_handle_command.py +61 -0
  324. rasa/dialogue_understanding/commands/cancel_flow_command.py +116 -0
  325. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +48 -0
  326. rasa/dialogue_understanding/commands/clarify_command.py +77 -0
  327. rasa/dialogue_understanding/commands/command.py +85 -0
  328. rasa/dialogue_understanding/commands/correct_slots_command.py +288 -0
  329. rasa/dialogue_understanding/commands/error_command.py +67 -0
  330. rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
  331. rasa/dialogue_understanding/commands/handle_code_change_command.py +64 -0
  332. rasa/dialogue_understanding/commands/human_handoff_command.py +57 -0
  333. rasa/dialogue_understanding/commands/knowledge_answer_command.py +48 -0
  334. rasa/dialogue_understanding/commands/noop_command.py +45 -0
  335. rasa/dialogue_understanding/commands/set_slot_command.py +125 -0
  336. rasa/dialogue_understanding/commands/skip_question_command.py +66 -0
  337. rasa/dialogue_understanding/commands/start_flow_command.py +98 -0
  338. rasa/dialogue_understanding/generator/__init__.py +6 -0
  339. rasa/dialogue_understanding/generator/command_generator.py +257 -0
  340. rasa/dialogue_understanding/generator/command_prompt_template.jinja2 +57 -0
  341. rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
  342. rasa/dialogue_understanding/generator/flow_retrieval.py +410 -0
  343. rasa/dialogue_understanding/generator/llm_command_generator.py +637 -0
  344. rasa/dialogue_understanding/generator/nlu_command_adapter.py +157 -0
  345. rasa/dialogue_understanding/patterns/__init__.py +0 -0
  346. rasa/dialogue_understanding/patterns/cancel.py +111 -0
  347. rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
  348. rasa/dialogue_understanding/patterns/chitchat.py +37 -0
  349. rasa/dialogue_understanding/patterns/clarify.py +97 -0
  350. rasa/dialogue_understanding/patterns/code_change.py +41 -0
  351. rasa/dialogue_understanding/patterns/collect_information.py +90 -0
  352. rasa/dialogue_understanding/patterns/completed.py +40 -0
  353. rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
  354. rasa/dialogue_understanding/patterns/correction.py +278 -0
  355. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +243 -0
  356. rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
  357. rasa/dialogue_understanding/patterns/internal_error.py +47 -0
  358. rasa/dialogue_understanding/patterns/search.py +37 -0
  359. rasa/dialogue_understanding/patterns/skip_question.py +38 -0
  360. rasa/dialogue_understanding/processor/__init__.py +0 -0
  361. rasa/dialogue_understanding/processor/command_processor.py +578 -0
  362. rasa/dialogue_understanding/processor/command_processor_component.py +39 -0
  363. rasa/dialogue_understanding/stack/__init__.py +0 -0
  364. rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
  365. rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
  366. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
  367. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
  368. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
  369. rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
  370. rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
  371. rasa/dialogue_understanding/stack/utils.py +211 -0
  372. rasa/e2e_test/__init__.py +0 -0
  373. rasa/e2e_test/constants.py +10 -0
  374. rasa/e2e_test/e2e_test_case.py +322 -0
  375. rasa/e2e_test/e2e_test_result.py +34 -0
  376. rasa/e2e_test/e2e_test_runner.py +659 -0
  377. rasa/e2e_test/e2e_test_schema.yml +67 -0
  378. rasa/engine/__init__.py +0 -0
  379. rasa/engine/caching.py +464 -0
  380. rasa/engine/constants.py +17 -0
  381. rasa/engine/exceptions.py +14 -0
  382. rasa/engine/graph.py +625 -0
  383. rasa/engine/loader.py +36 -0
  384. rasa/engine/recipes/__init__.py +0 -0
  385. rasa/engine/recipes/config_files/default_config.yml +44 -0
  386. rasa/engine/recipes/default_components.py +99 -0
  387. rasa/engine/recipes/default_recipe.py +1252 -0
  388. rasa/engine/recipes/graph_recipe.py +79 -0
  389. rasa/engine/recipes/recipe.py +93 -0
  390. rasa/engine/runner/__init__.py +0 -0
  391. rasa/engine/runner/dask.py +256 -0
  392. rasa/engine/runner/interface.py +49 -0
  393. rasa/engine/storage/__init__.py +0 -0
  394. rasa/engine/storage/local_model_storage.py +248 -0
  395. rasa/engine/storage/resource.py +110 -0
  396. rasa/engine/storage/storage.py +203 -0
  397. rasa/engine/training/__init__.py +0 -0
  398. rasa/engine/training/components.py +176 -0
  399. rasa/engine/training/fingerprinting.py +64 -0
  400. rasa/engine/training/graph_trainer.py +256 -0
  401. rasa/engine/training/hooks.py +164 -0
  402. rasa/engine/validation.py +839 -0
  403. rasa/env.py +5 -0
  404. rasa/exceptions.py +69 -0
  405. rasa/graph_components/__init__.py +0 -0
  406. rasa/graph_components/converters/__init__.py +0 -0
  407. rasa/graph_components/converters/nlu_message_converter.py +48 -0
  408. rasa/graph_components/providers/__init__.py +0 -0
  409. rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
  410. rasa/graph_components/providers/domain_provider.py +71 -0
  411. rasa/graph_components/providers/flows_provider.py +74 -0
  412. rasa/graph_components/providers/forms_provider.py +44 -0
  413. rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
  414. rasa/graph_components/providers/responses_provider.py +44 -0
  415. rasa/graph_components/providers/rule_only_provider.py +49 -0
  416. rasa/graph_components/providers/story_graph_provider.py +43 -0
  417. rasa/graph_components/providers/training_tracker_provider.py +55 -0
  418. rasa/graph_components/validators/__init__.py +0 -0
  419. rasa/graph_components/validators/default_recipe_validator.py +552 -0
  420. rasa/graph_components/validators/finetuning_validator.py +302 -0
  421. rasa/hooks.py +113 -0
  422. rasa/jupyter.py +63 -0
  423. rasa/keys +1 -0
  424. rasa/markers/__init__.py +0 -0
  425. rasa/markers/marker.py +269 -0
  426. rasa/markers/marker_base.py +828 -0
  427. rasa/markers/upload.py +74 -0
  428. rasa/markers/validate.py +21 -0
  429. rasa/model.py +118 -0
  430. rasa/model_testing.py +457 -0
  431. rasa/model_training.py +535 -0
  432. rasa/nlu/__init__.py +7 -0
  433. rasa/nlu/classifiers/__init__.py +3 -0
  434. rasa/nlu/classifiers/classifier.py +5 -0
  435. rasa/nlu/classifiers/diet_classifier.py +1874 -0
  436. rasa/nlu/classifiers/fallback_classifier.py +192 -0
  437. rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
  438. rasa/nlu/classifiers/llm_intent_classifier.py +519 -0
  439. rasa/nlu/classifiers/logistic_regression_classifier.py +240 -0
  440. rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
  441. rasa/nlu/classifiers/regex_message_handler.py +56 -0
  442. rasa/nlu/classifiers/sklearn_intent_classifier.py +309 -0
  443. rasa/nlu/constants.py +77 -0
  444. rasa/nlu/convert.py +40 -0
  445. rasa/nlu/emulators/__init__.py +0 -0
  446. rasa/nlu/emulators/dialogflow.py +55 -0
  447. rasa/nlu/emulators/emulator.py +49 -0
  448. rasa/nlu/emulators/luis.py +86 -0
  449. rasa/nlu/emulators/no_emulator.py +10 -0
  450. rasa/nlu/emulators/wit.py +56 -0
  451. rasa/nlu/extractors/__init__.py +0 -0
  452. rasa/nlu/extractors/crf_entity_extractor.py +672 -0
  453. rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
  454. rasa/nlu/extractors/entity_synonyms.py +178 -0
  455. rasa/nlu/extractors/extractor.py +470 -0
  456. rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
  457. rasa/nlu/extractors/regex_entity_extractor.py +220 -0
  458. rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
  459. rasa/nlu/featurizers/__init__.py +0 -0
  460. rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
  461. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +449 -0
  462. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
  463. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +772 -0
  464. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
  465. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
  466. rasa/nlu/featurizers/featurizer.py +89 -0
  467. rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
  468. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +840 -0
  469. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +539 -0
  470. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +269 -0
  471. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
  472. rasa/nlu/model.py +24 -0
  473. rasa/nlu/persistor.py +240 -0
  474. rasa/nlu/run.py +27 -0
  475. rasa/nlu/selectors/__init__.py +0 -0
  476. rasa/nlu/selectors/response_selector.py +990 -0
  477. rasa/nlu/test.py +1943 -0
  478. rasa/nlu/tokenizers/__init__.py +0 -0
  479. rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
  480. rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
  481. rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
  482. rasa/nlu/tokenizers/tokenizer.py +239 -0
  483. rasa/nlu/tokenizers/whitespace_tokenizer.py +106 -0
  484. rasa/nlu/utils/__init__.py +35 -0
  485. rasa/nlu/utils/bilou_utils.py +462 -0
  486. rasa/nlu/utils/hugging_face/__init__.py +0 -0
  487. rasa/nlu/utils/hugging_face/registry.py +108 -0
  488. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
  489. rasa/nlu/utils/mitie_utils.py +113 -0
  490. rasa/nlu/utils/pattern_utils.py +168 -0
  491. rasa/nlu/utils/spacy_utils.py +312 -0
  492. rasa/plugin.py +90 -0
  493. rasa/server.py +1536 -0
  494. rasa/shared/__init__.py +0 -0
  495. rasa/shared/constants.py +181 -0
  496. rasa/shared/core/__init__.py +0 -0
  497. rasa/shared/core/constants.py +168 -0
  498. rasa/shared/core/conversation.py +46 -0
  499. rasa/shared/core/domain.py +2106 -0
  500. rasa/shared/core/events.py +2507 -0
  501. rasa/shared/core/flows/__init__.py +7 -0
  502. rasa/shared/core/flows/flow.py +353 -0
  503. rasa/shared/core/flows/flow_step.py +146 -0
  504. rasa/shared/core/flows/flow_step_links.py +319 -0
  505. rasa/shared/core/flows/flow_step_sequence.py +70 -0
  506. rasa/shared/core/flows/flows_list.py +211 -0
  507. rasa/shared/core/flows/flows_yaml_schema.json +217 -0
  508. rasa/shared/core/flows/nlu_trigger.py +117 -0
  509. rasa/shared/core/flows/steps/__init__.py +24 -0
  510. rasa/shared/core/flows/steps/action.py +51 -0
  511. rasa/shared/core/flows/steps/call.py +64 -0
  512. rasa/shared/core/flows/steps/collect.py +112 -0
  513. rasa/shared/core/flows/steps/constants.py +5 -0
  514. rasa/shared/core/flows/steps/continuation.py +36 -0
  515. rasa/shared/core/flows/steps/end.py +22 -0
  516. rasa/shared/core/flows/steps/internal.py +44 -0
  517. rasa/shared/core/flows/steps/link.py +51 -0
  518. rasa/shared/core/flows/steps/no_operation.py +48 -0
  519. rasa/shared/core/flows/steps/set_slots.py +50 -0
  520. rasa/shared/core/flows/steps/start.py +30 -0
  521. rasa/shared/core/flows/validation.py +527 -0
  522. rasa/shared/core/flows/yaml_flows_io.py +278 -0
  523. rasa/shared/core/generator.py +907 -0
  524. rasa/shared/core/slot_mappings.py +235 -0
  525. rasa/shared/core/slots.py +647 -0
  526. rasa/shared/core/trackers.py +1159 -0
  527. rasa/shared/core/training_data/__init__.py +0 -0
  528. rasa/shared/core/training_data/loading.py +90 -0
  529. rasa/shared/core/training_data/story_reader/__init__.py +0 -0
  530. rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
  531. rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
  532. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
  533. rasa/shared/core/training_data/story_writer/__init__.py +0 -0
  534. rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
  535. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +442 -0
  536. rasa/shared/core/training_data/structures.py +838 -0
  537. rasa/shared/core/training_data/visualization.html +146 -0
  538. rasa/shared/core/training_data/visualization.py +603 -0
  539. rasa/shared/data.py +192 -0
  540. rasa/shared/engine/__init__.py +0 -0
  541. rasa/shared/engine/caching.py +26 -0
  542. rasa/shared/exceptions.py +129 -0
  543. rasa/shared/importers/__init__.py +0 -0
  544. rasa/shared/importers/importer.py +705 -0
  545. rasa/shared/importers/multi_project.py +203 -0
  546. rasa/shared/importers/rasa.py +100 -0
  547. rasa/shared/importers/utils.py +34 -0
  548. rasa/shared/nlu/__init__.py +0 -0
  549. rasa/shared/nlu/constants.py +45 -0
  550. rasa/shared/nlu/interpreter.py +10 -0
  551. rasa/shared/nlu/training_data/__init__.py +0 -0
  552. rasa/shared/nlu/training_data/entities_parser.py +209 -0
  553. rasa/shared/nlu/training_data/features.py +374 -0
  554. rasa/shared/nlu/training_data/formats/__init__.py +10 -0
  555. rasa/shared/nlu/training_data/formats/dialogflow.py +162 -0
  556. rasa/shared/nlu/training_data/formats/luis.py +87 -0
  557. rasa/shared/nlu/training_data/formats/rasa.py +135 -0
  558. rasa/shared/nlu/training_data/formats/rasa_yaml.py +605 -0
  559. rasa/shared/nlu/training_data/formats/readerwriter.py +245 -0
  560. rasa/shared/nlu/training_data/formats/wit.py +52 -0
  561. rasa/shared/nlu/training_data/loading.py +137 -0
  562. rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
  563. rasa/shared/nlu/training_data/message.py +477 -0
  564. rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
  565. rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
  566. rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
  567. rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
  568. rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
  569. rasa/shared/nlu/training_data/training_data.py +732 -0
  570. rasa/shared/nlu/training_data/util.py +223 -0
  571. rasa/shared/providers/__init__.py +0 -0
  572. rasa/shared/providers/openai/__init__.py +0 -0
  573. rasa/shared/providers/openai/clients.py +43 -0
  574. rasa/shared/providers/openai/session_handler.py +110 -0
  575. rasa/shared/utils/__init__.py +0 -0
  576. rasa/shared/utils/cli.py +72 -0
  577. rasa/shared/utils/common.py +308 -0
  578. rasa/shared/utils/constants.py +1 -0
  579. rasa/shared/utils/io.py +403 -0
  580. rasa/shared/utils/llm.py +405 -0
  581. rasa/shared/utils/pykwalify_extensions.py +26 -0
  582. rasa/shared/utils/schemas/__init__.py +0 -0
  583. rasa/shared/utils/schemas/config.yml +2 -0
  584. rasa/shared/utils/schemas/domain.yml +142 -0
  585. rasa/shared/utils/schemas/events.py +212 -0
  586. rasa/shared/utils/schemas/model_config.yml +46 -0
  587. rasa/shared/utils/schemas/stories.yml +173 -0
  588. rasa/shared/utils/yaml.py +777 -0
  589. rasa/studio/__init__.py +0 -0
  590. rasa/studio/auth.py +252 -0
  591. rasa/studio/config.py +127 -0
  592. rasa/studio/constants.py +16 -0
  593. rasa/studio/data_handler.py +352 -0
  594. rasa/studio/download.py +350 -0
  595. rasa/studio/train.py +136 -0
  596. rasa/studio/upload.py +408 -0
  597. rasa/telemetry.py +1583 -0
  598. rasa/tracing/__init__.py +0 -0
  599. rasa/tracing/config.py +338 -0
  600. rasa/tracing/constants.py +38 -0
  601. rasa/tracing/instrumentation/__init__.py +0 -0
  602. rasa/tracing/instrumentation/attribute_extractors.py +663 -0
  603. rasa/tracing/instrumentation/instrumentation.py +939 -0
  604. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +142 -0
  605. rasa/tracing/instrumentation/metrics.py +206 -0
  606. rasa/tracing/metric_instrument_provider.py +125 -0
  607. rasa/utils/__init__.py +0 -0
  608. rasa/utils/beta.py +83 -0
  609. rasa/utils/cli.py +27 -0
  610. rasa/utils/common.py +635 -0
  611. rasa/utils/converter.py +53 -0
  612. rasa/utils/endpoints.py +303 -0
  613. rasa/utils/io.py +326 -0
  614. rasa/utils/licensing.py +319 -0
  615. rasa/utils/log_utils.py +174 -0
  616. rasa/utils/mapper.py +210 -0
  617. rasa/utils/ml_utils.py +145 -0
  618. rasa/utils/plotting.py +362 -0
  619. rasa/utils/singleton.py +23 -0
  620. rasa/utils/tensorflow/__init__.py +0 -0
  621. rasa/utils/tensorflow/callback.py +112 -0
  622. rasa/utils/tensorflow/constants.py +116 -0
  623. rasa/utils/tensorflow/crf.py +492 -0
  624. rasa/utils/tensorflow/data_generator.py +440 -0
  625. rasa/utils/tensorflow/environment.py +161 -0
  626. rasa/utils/tensorflow/exceptions.py +5 -0
  627. rasa/utils/tensorflow/layers.py +1565 -0
  628. rasa/utils/tensorflow/layers_utils.py +113 -0
  629. rasa/utils/tensorflow/metrics.py +281 -0
  630. rasa/utils/tensorflow/model_data.py +991 -0
  631. rasa/utils/tensorflow/model_data_utils.py +500 -0
  632. rasa/utils/tensorflow/models.py +936 -0
  633. rasa/utils/tensorflow/rasa_layers.py +1094 -0
  634. rasa/utils/tensorflow/transformer.py +640 -0
  635. rasa/utils/tensorflow/types.py +6 -0
  636. rasa/utils/train_utils.py +572 -0
  637. rasa/utils/yaml.py +54 -0
  638. rasa/validator.py +1035 -0
  639. rasa/version.py +3 -0
  640. rasa_pro-3.8.16.dist-info/METADATA +528 -0
  641. rasa_pro-3.8.16.dist-info/NOTICE +5 -0
  642. rasa_pro-3.8.16.dist-info/RECORD +644 -0
  643. rasa_pro-3.8.16.dist-info/WHEEL +4 -0
  644. rasa_pro-3.8.16.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,142 @@
1
+ import functools
2
+ import json
3
+ import logging
4
+ from typing import Callable, List, Optional, TYPE_CHECKING, Type
5
+
6
+ from opentelemetry.trace import Tracer
7
+
8
+ if TYPE_CHECKING:
9
+ from rasa.core.policies.intentless_policy import IntentlessPolicy
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ def _instrument_select_response_examples(
15
+ tracer: Tracer, policy_class: Type["IntentlessPolicy"]
16
+ ) -> None:
17
+ def tracing_select_response_examples_wrapper(fn: Callable) -> Callable:
18
+ @functools.wraps(fn)
19
+ def wrapper(
20
+ self: "IntentlessPolicy",
21
+ history: str,
22
+ number_of_samples: int,
23
+ max_number_of_tokens: int,
24
+ ) -> List[str]:
25
+ with tracer.start_as_current_span(
26
+ f"{self.__class__.__name__}.{fn.__name__}"
27
+ ) as span:
28
+ ai_response_examples = fn(
29
+ self, history, number_of_samples, max_number_of_tokens
30
+ )
31
+ span.set_attributes(
32
+ {
33
+ "ai_response_examples": json.dumps(ai_response_examples),
34
+ }
35
+ )
36
+ return ai_response_examples
37
+
38
+ return wrapper
39
+
40
+ policy_class.select_response_examples = tracing_select_response_examples_wrapper( # type: ignore[assignment] # noqa: E501
41
+ policy_class.select_response_examples
42
+ )
43
+
44
+ logger.debug(
45
+ f"Instrumented '{policy_class.__name__}.select_response_examples' method."
46
+ )
47
+
48
+
49
+ def _instrument_select_few_shot_conversations(
50
+ tracer: Tracer, policy_class: Type["IntentlessPolicy"]
51
+ ) -> None:
52
+ def tracing_select_few_shot_conversations_wrapper(fn: Callable) -> Callable:
53
+ @functools.wraps(fn)
54
+ def wrapper(
55
+ self: "IntentlessPolicy",
56
+ history: str,
57
+ number_of_samples: int,
58
+ max_number_of_tokens: int,
59
+ ) -> List[str]:
60
+ with tracer.start_as_current_span(
61
+ f"{self.__class__.__name__}.{fn.__name__}"
62
+ ) as span:
63
+ conversation_samples = fn(
64
+ self, history, number_of_samples, max_number_of_tokens
65
+ )
66
+ span.set_attributes(
67
+ {
68
+ "conversation_samples": json.dumps(conversation_samples),
69
+ }
70
+ )
71
+ return conversation_samples
72
+
73
+ return wrapper
74
+
75
+ policy_class.select_few_shot_conversations = tracing_select_few_shot_conversations_wrapper( # type: ignore[assignment] # noqa: E501
76
+ policy_class.select_few_shot_conversations
77
+ )
78
+
79
+ logger.debug(
80
+ f"Instrumented '{policy_class.__name__}.select_few_shot_conversations' method."
81
+ )
82
+
83
+
84
+ def _instrument_extract_ai_responses(
85
+ tracer: Tracer, policy_class: Type["IntentlessPolicy"]
86
+ ) -> None:
87
+ def tracing_extract_ai_responses_wrapper(fn: Callable) -> Callable:
88
+ @functools.wraps(fn)
89
+ def wrapper(
90
+ self: "IntentlessPolicy", conversation_samples: List[str]
91
+ ) -> List[str]:
92
+ with tracer.start_as_current_span(
93
+ f"{self.__class__.__name__}.{fn.__name__}"
94
+ ) as span:
95
+ ai_responses = fn(self, conversation_samples)
96
+ span.set_attributes(
97
+ {
98
+ "ai_responses": json.dumps(ai_responses),
99
+ }
100
+ )
101
+ return ai_responses
102
+
103
+ return wrapper
104
+
105
+ policy_class.extract_ai_responses = tracing_extract_ai_responses_wrapper( # type: ignore[assignment] # noqa: E501
106
+ policy_class.extract_ai_responses
107
+ )
108
+
109
+ logger.debug(f"Instrumented '{policy_class.__name__}.extract_ai_responses' method.")
110
+
111
+
112
+ def _instrument_generate_answer(
113
+ tracer: Tracer, policy_class: Type["IntentlessPolicy"]
114
+ ) -> None:
115
+ def tracing_generate_answer_wrapper(fn: Callable) -> Callable:
116
+ @functools.wraps(fn)
117
+ async def wrapper(
118
+ self: "IntentlessPolicy",
119
+ response_examples: List[str],
120
+ conversation_samples: List[str],
121
+ history: str,
122
+ ) -> Optional[str]:
123
+ with tracer.start_as_current_span(
124
+ f"{self.__class__.__name__}.{fn.__name__}"
125
+ ) as span:
126
+ llm_response = await fn(
127
+ self, response_examples, conversation_samples, history
128
+ )
129
+ span.set_attributes(
130
+ {
131
+ "llm_response": json.dumps(llm_response),
132
+ }
133
+ )
134
+ return llm_response
135
+
136
+ return wrapper
137
+
138
+ policy_class.generate_answer = tracing_generate_answer_wrapper( # type: ignore[assignment] # noqa: E501
139
+ policy_class.generate_answer
140
+ )
141
+
142
+ logger.debug(f"Instrumented '{policy_class.__name__}.generate_answer' method.")
@@ -0,0 +1,206 @@
1
+ from typing import Dict, Any
2
+
3
+ import psutil
4
+
5
+ from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
6
+ from rasa.core.policies.enterprise_search_policy import EnterpriseSearchPolicy
7
+ from rasa.core.policies.intentless_policy import IntentlessPolicy
8
+ from rasa.dialogue_understanding.generator import LLMCommandGenerator
9
+ from rasa.tracing.constants import (
10
+ LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME,
11
+ LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME,
12
+ LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME,
13
+ PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME,
14
+ LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME,
15
+ ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
16
+ INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
17
+ CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME,
18
+ RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME,
19
+ RASA_CLIENT_REQUEST_DURATION_METRIC_NAME,
20
+ ENDPOINT_REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME,
21
+ )
22
+ from rasa.tracing.metric_instrument_provider import MetricInstrumentProvider
23
+ from rasa.utils.endpoints import EndpointConfig
24
+
25
+
26
+ def record_llm_command_generator_cpu_usage(
27
+ metric_instrument_provider: MetricInstrumentProvider,
28
+ ) -> None:
29
+ """Record CPU usage as a percentage.
30
+
31
+ The recording is done by the opentelemetry.metrics.Histogram instrument.
32
+ This instrument is registered to the MetricInstrumentProvider internal singleton.
33
+
34
+ :param metric_instrument_provider: The MetricInstrumentProvider instance
35
+ :return: None
36
+ """
37
+ metric_instrument = metric_instrument_provider.get_instrument(
38
+ LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME
39
+ )
40
+ if not metric_instrument:
41
+ return None
42
+
43
+ cpu_usage = psutil.cpu_percent()
44
+ metric_instrument.record(amount=cpu_usage)
45
+
46
+
47
+ def record_llm_command_generator_memory_usage(
48
+ metric_instrument_provider: MetricInstrumentProvider,
49
+ ) -> None:
50
+ """Record memory usage as a percentage.
51
+
52
+ The recording is done by the opentelemetry.metrics.Histogram instrument.
53
+ This instrument is registered to the MetricInstrumentProvider internal singleton.
54
+
55
+ :param metric_instrument_provider: The MetricInstrumentProvider instance
56
+ :return: None
57
+ """
58
+ metric_instrument = metric_instrument_provider.get_instrument(
59
+ LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME
60
+ )
61
+ if not metric_instrument:
62
+ return None
63
+
64
+ memory_usage = psutil.virtual_memory().percent
65
+ metric_instrument.record(amount=memory_usage)
66
+
67
+
68
+ def record_llm_command_generator_prompt_token(
69
+ metric_instrument_provider: MetricInstrumentProvider,
70
+ attributes: Dict[str, Any],
71
+ ) -> None:
72
+ """
73
+ Record prompt token length.
74
+
75
+ The recording is done by the opentelemetry.metrics.Histogram instrument.
76
+ This instrument is registered to the MetricInstrumentProvider internal singleton.
77
+
78
+ :param metric_instrument_provider: The MetricInstrumentProvider instance
79
+ :param attributes: Extracted tracing attributes
80
+ :return: None
81
+ """
82
+ if PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME not in attributes:
83
+ return None
84
+
85
+ metric_instrument = metric_instrument_provider.get_instrument(
86
+ LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME
87
+ )
88
+ if not metric_instrument:
89
+ return None
90
+
91
+ prompt_tokens_len = attributes[PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME]
92
+
93
+ try:
94
+ prompt_tokens_len = int(prompt_tokens_len)
95
+ except ValueError:
96
+ return None
97
+
98
+ metric_instrument.record(
99
+ amount=prompt_tokens_len,
100
+ )
101
+
102
+
103
+ def record_llm_command_generator_metrics(attributes: Dict[str, Any]) -> None:
104
+ """
105
+ Record measurements for LLMCommandGenerator specific metrics.
106
+
107
+ The recording is done by the opentelemetry.metrics.Histogram instruments.
108
+ These instruments are registered to the MetricInstrumentProvider internal singleton.
109
+
110
+ :param attributes: Extracted tracing attributes
111
+ :return: None
112
+ """
113
+ instrument_provider = MetricInstrumentProvider()
114
+
115
+ if not instrument_provider.instruments:
116
+ return None
117
+
118
+ record_llm_command_generator_cpu_usage(instrument_provider)
119
+ record_llm_command_generator_memory_usage(instrument_provider)
120
+ record_llm_command_generator_prompt_token(instrument_provider, attributes)
121
+
122
+
123
+ def record_callable_duration_metrics(
124
+ self: Any, start_time: int, end_time: int, **kwargs: Any
125
+ ) -> None:
126
+ """
127
+ Record duration of instrumented method calls invoked for the following components:
128
+ - LLMCommandGenerator
129
+ - EnterpriseSearchPolicy
130
+ - IntentlessPolicy
131
+ - ContextualResponseRephraser
132
+ - EndpointConfig
133
+
134
+ :param self: The instance on which the instrumented method is called on.
135
+ :param start_time: Start time measured by time.perf_counter_ns()
136
+ before the method is called.
137
+ :param end_time: End time measured by time.perf_counter_ns()
138
+ after the method is called.
139
+ :return: None
140
+ """
141
+ instrument_provider = MetricInstrumentProvider()
142
+ if not instrument_provider.instruments:
143
+ return None
144
+
145
+ metric_instrument = None
146
+ attributes = {}
147
+
148
+ if isinstance(self, LLMCommandGenerator):
149
+ metric_instrument = instrument_provider.get_instrument(
150
+ LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME
151
+ )
152
+
153
+ if isinstance(self, EnterpriseSearchPolicy):
154
+ metric_instrument = instrument_provider.get_instrument(
155
+ ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME
156
+ )
157
+
158
+ if isinstance(self, IntentlessPolicy):
159
+ metric_instrument = instrument_provider.get_instrument(
160
+ INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME
161
+ )
162
+
163
+ if isinstance(self, ContextualResponseRephraser):
164
+ metric_instrument = instrument_provider.get_instrument(
165
+ CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME
166
+ )
167
+
168
+ if isinstance(self, EndpointConfig):
169
+ metric_instrument = instrument_provider.get_instrument(
170
+ RASA_CLIENT_REQUEST_DURATION_METRIC_NAME
171
+ )
172
+ attributes = {"url": kwargs.get("url")}
173
+
174
+ if not metric_instrument:
175
+ return None
176
+
177
+ timedelta_ms = (end_time - start_time) / 1000000
178
+ metric_instrument.record(amount=timedelta_ms, attributes=attributes)
179
+
180
+
181
+ def record_request_size_in_bytes(attributes: Dict[str, Any]) -> None:
182
+ """
183
+ Record endpoint request size in bytes for EndpointConfig class.
184
+
185
+ The recording is done by the opentelemetry.metrics.Histogram instruments.
186
+ These instruments are registered to the MetricInstrumentProvider internal singleton.
187
+
188
+ :param attributes: Extracted tracing attributes
189
+ :return: None
190
+ """
191
+
192
+ metric_instrument_provider = MetricInstrumentProvider()
193
+
194
+ if not metric_instrument_provider.instruments:
195
+ return None
196
+
197
+ metric_instrument = metric_instrument_provider.get_instrument(
198
+ RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME
199
+ )
200
+ if not metric_instrument:
201
+ return None
202
+
203
+ request_body_size = attributes.pop(
204
+ ENDPOINT_REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME, 0
205
+ )
206
+ metric_instrument.record(amount=request_body_size, attributes=attributes)
@@ -0,0 +1,125 @@
1
+ from typing import ClassVar, Dict, Any
2
+
3
+ from opentelemetry.metrics import get_meter_provider
4
+ from opentelemetry.sdk.metrics import Meter
5
+
6
+ from rasa.utils.singleton import Singleton
7
+ from rasa.tracing.constants import (
8
+ LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME,
9
+ LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME,
10
+ LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME,
11
+ LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME,
12
+ LLM_COMMAND_GENERATOR_CPU_MEMORY_USAGE_UNIT_NAME,
13
+ DURATION_UNIT_NAME,
14
+ ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
15
+ INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
16
+ CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME,
17
+ RASA_CLIENT_REQUEST_DURATION_METRIC_NAME,
18
+ RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME,
19
+ )
20
+
21
+
22
+ class MetricInstrumentProvider(metaclass=Singleton):
23
+ """Singleton provider class of metric instruments."""
24
+
25
+ instruments: ClassVar[Dict[str, Any]] = {}
26
+
27
+ def register_instruments(self) -> None:
28
+ """Update instruments class attribute.
29
+
30
+ The registered instruments are subclasses of the
31
+ opentelemetry.metrics._internal.instrument.Instrument interface.
32
+ """
33
+ meter = get_meter_provider().get_meter(__name__)
34
+
35
+ instruments = {
36
+ **self._create_llm_command_generator_instruments(meter),
37
+ **self._create_llm_response_duration_instruments(meter),
38
+ **self._create_client_request_instruments(meter),
39
+ }
40
+
41
+ self.instruments.update(instruments)
42
+
43
+ def get_instrument(self, name: str) -> Any:
44
+ """Get the instrument mapped to the provided name."""
45
+ return self.instruments.get(name)
46
+
47
+ @staticmethod
48
+ def _create_llm_command_generator_instruments(meter: Meter) -> Dict[str, Any]:
49
+ llm_command_generator_cpu_usage = meter.create_histogram(
50
+ name=LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME,
51
+ description="CPU percentage for LLMCommandGenerator",
52
+ unit=LLM_COMMAND_GENERATOR_CPU_MEMORY_USAGE_UNIT_NAME,
53
+ )
54
+
55
+ llm_command_generator_memory_usage = meter.create_histogram(
56
+ name=LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME,
57
+ description="RAM memory usage for LLMCommandGenerator",
58
+ unit=LLM_COMMAND_GENERATOR_CPU_MEMORY_USAGE_UNIT_NAME,
59
+ )
60
+
61
+ llm_command_generator_prompt_token_usage = meter.create_histogram(
62
+ name=LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME,
63
+ description="LLMCommandGenerator prompt token length",
64
+ unit="1",
65
+ )
66
+
67
+ llm_response_duration_llm_command_generator = meter.create_histogram(
68
+ name=LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME,
69
+ description="The duration of LLMCommandGenerator's LLM call",
70
+ unit=DURATION_UNIT_NAME,
71
+ )
72
+
73
+ return {
74
+ LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME: llm_command_generator_cpu_usage, # noqa: E501
75
+ LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME: llm_command_generator_memory_usage, # noqa: E501
76
+ LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME: llm_command_generator_prompt_token_usage, # noqa: E501
77
+ LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME: llm_response_duration_llm_command_generator, # noqa: E501
78
+ }
79
+
80
+ @staticmethod
81
+ def _create_llm_response_duration_instruments(meter: Meter) -> Dict[str, Any]:
82
+ llm_response_duration_enterprise_search = meter.create_histogram(
83
+ name=ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
84
+ description="The duration of EnterpriseSearchPolicy's LLM call",
85
+ unit=DURATION_UNIT_NAME,
86
+ )
87
+
88
+ llm_response_duration_intentless = meter.create_histogram(
89
+ name=INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
90
+ description="The duration of IntentlessPolicy's LLM call",
91
+ unit=DURATION_UNIT_NAME,
92
+ )
93
+
94
+ llm_response_duration_contextual_nlg = meter.create_histogram(
95
+ name=CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME,
96
+ description="The duration of ContextualResponseRephraser's LLM call",
97
+ unit=DURATION_UNIT_NAME,
98
+ )
99
+
100
+ return {
101
+ ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME: llm_response_duration_enterprise_search, # noqa: E501
102
+ INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME: llm_response_duration_intentless, # noqa: E501
103
+ CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME: llm_response_duration_contextual_nlg, # noqa: E501
104
+ }
105
+
106
+ @staticmethod
107
+ def _create_client_request_instruments(
108
+ meter: Meter,
109
+ ) -> Dict[str, Any]:
110
+ client_request_duration = meter.create_histogram(
111
+ name=RASA_CLIENT_REQUEST_DURATION_METRIC_NAME,
112
+ description="The duration of the rasa client request",
113
+ unit=DURATION_UNIT_NAME,
114
+ )
115
+
116
+ client_request_body_size = meter.create_histogram(
117
+ name=RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME,
118
+ description="The rasa client request's body size",
119
+ unit="byte",
120
+ )
121
+
122
+ return {
123
+ RASA_CLIENT_REQUEST_DURATION_METRIC_NAME: client_request_duration,
124
+ RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME: client_request_body_size,
125
+ }
rasa/utils/__init__.py ADDED
File without changes
rasa/utils/beta.py ADDED
@@ -0,0 +1,83 @@
1
+ import logging
2
+ from textwrap import dedent
3
+
4
+ from rasa.shared.exceptions import RasaException
5
+ from rasa.utils.common import get_bool_env_variable
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+
10
+ class BetaNotEnabledException(SystemExit, RasaException):
11
+ """Raised when a beta feature is not enabled."""
12
+
13
+ def __init__(self, feature_name: str, env_flag: str) -> None:
14
+ """Initializes the exception.
15
+
16
+ Args:
17
+ feature_name: The name of the feature.
18
+ env_flag: Name of the environment variable that enables the feature.
19
+ """
20
+ self.feature_name = feature_name
21
+ self.env_flag = env_flag
22
+ super().__init__(
23
+ dedent(
24
+ f"""
25
+ This release, including the {feature_name} feature, is a beta release
26
+ provided to you only for trial and evaluation. You cannot use this
27
+ beta software release as part of any production environment. This
28
+ beta software release is not intended for processing sensitive or
29
+ personal data. There may be bugs or errors - we provide it “as is”,
30
+ without any reps and warranties. We may never commercialize some beta
31
+ software. Your use of the {feature_name} feature and any other
32
+ software or material included in this beta release is subject to
33
+ the Beta Software Terms (https://rasa.com/beta-terms/).
34
+ Please make sure you read these terms and conditions prior to
35
+ using this beta release.
36
+
37
+ You need to explicitly enable the {feature_name} feature, before
38
+ usage. Set the `{env_flag}=true` environment variable before
39
+ running the command again.
40
+ """
41
+ )
42
+ )
43
+
44
+
45
+ def ensure_beta_feature_is_enabled(feature_name: str, env_flag: str) -> None:
46
+ """Checks if a beta feature is enabled. Raises an exception if not.
47
+
48
+ If the feature is enabled, a usage warning is printed.
49
+
50
+ Args:
51
+ feature_name: The name of the feature.
52
+ env_flag: The name of the environment variable that enables the feature.
53
+ """
54
+ if not get_bool_env_variable(env_flag, default_variable_value=False):
55
+ raise BetaNotEnabledException(feature_name, env_flag)
56
+
57
+ print_beta_usage_info(feature_name, env_flag)
58
+
59
+
60
+ def print_beta_usage_info(feature_name: str, env_flag: str) -> None:
61
+ """Prints a usage warning about a beta feature.
62
+
63
+ Args:
64
+ feature_name: The name of the feature.
65
+ env_flag: The name of the environment variable that enables the feature.
66
+ """
67
+ logger.warning(
68
+ dedent(
69
+ f"""\
70
+ The {feature_name} feature is currently released in a beta version.
71
+
72
+ The feature might change in the future 🔬. Your download and use of
73
+ this beta release are subject to the Beta Software Terms
74
+ (https://rasa.com/beta-terms/).
75
+ It's not intended for production. Don't use it to process sensitive data.
76
+ If you do, it's at your own risk. It's not mandatory to download
77
+ or use this software release. We're looking forward to your feedback.
78
+
79
+ If you want to disable this beta feature, set the environment variable
80
+ `{env_flag}=false`.
81
+ """
82
+ )
83
+ )
rasa/utils/cli.py ADDED
@@ -0,0 +1,27 @@
1
+ import argparse
2
+ from typing import Text
3
+
4
+
5
+ def remove_argument_from_parser(
6
+ parser: argparse.ArgumentParser, argument: Text
7
+ ) -> None:
8
+ """Remove argument from parse.
9
+
10
+ A public API for this use case doesn't exist; so we use a private one.
11
+ We should be able to detect breaking changes of this API through unit-testing.
12
+
13
+ Inspired by this Stackoverflow answer: https://stackoverflow.com/a/32809642
14
+
15
+ Args:
16
+ parser: an argument parser instance
17
+ argument: the argument to remove, e.g. -f or --foo
18
+ """
19
+ for action in parser._actions:
20
+ for option in action.option_strings:
21
+ if option == argument:
22
+ parser._handle_conflict_resolve(
23
+ None, [(option, action)] # type: ignore[arg-type]
24
+ )
25
+ return
26
+
27
+ raise LookupError(f"Cannot find argument {argument}")