rasa-pro 3.9.18__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 (662) hide show
  1. README.md +415 -0
  2. rasa/__init__.py +10 -0
  3. rasa/__main__.py +156 -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 +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 +586 -0
  27. rasa/cli/evaluate.py +222 -0
  28. rasa/cli/export.py +250 -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 +39 -0
  47. rasa/cli/project_templates/calm/domain/list_contacts.yml +17 -0
  48. rasa/cli/project_templates/calm/domain/remove_contact.yml +38 -0
  49. rasa/cli/project_templates/calm/domain/shared.yml +10 -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/data/patterns.yml +6 -0
  74. rasa/cli/project_templates/tutorial/domain.yml +21 -0
  75. rasa/cli/project_templates/tutorial/endpoints.yml +45 -0
  76. rasa/cli/run.py +135 -0
  77. rasa/cli/scaffold.py +269 -0
  78. rasa/cli/shell.py +141 -0
  79. rasa/cli/studio/__init__.py +0 -0
  80. rasa/cli/studio/download.py +62 -0
  81. rasa/cli/studio/studio.py +266 -0
  82. rasa/cli/studio/train.py +59 -0
  83. rasa/cli/studio/upload.py +77 -0
  84. rasa/cli/telemetry.py +102 -0
  85. rasa/cli/test.py +280 -0
  86. rasa/cli/train.py +260 -0
  87. rasa/cli/utils.py +464 -0
  88. rasa/cli/visualize.py +40 -0
  89. rasa/cli/x.py +206 -0
  90. rasa/constants.py +37 -0
  91. rasa/core/__init__.py +17 -0
  92. rasa/core/actions/__init__.py +0 -0
  93. rasa/core/actions/action.py +1225 -0
  94. rasa/core/actions/action_clean_stack.py +59 -0
  95. rasa/core/actions/action_exceptions.py +24 -0
  96. rasa/core/actions/action_run_slot_rejections.py +207 -0
  97. rasa/core/actions/action_trigger_chitchat.py +31 -0
  98. rasa/core/actions/action_trigger_flow.py +109 -0
  99. rasa/core/actions/action_trigger_search.py +31 -0
  100. rasa/core/actions/constants.py +5 -0
  101. rasa/core/actions/custom_action_executor.py +188 -0
  102. rasa/core/actions/forms.py +741 -0
  103. rasa/core/actions/grpc_custom_action_executor.py +251 -0
  104. rasa/core/actions/http_custom_action_executor.py +140 -0
  105. rasa/core/actions/loops.py +114 -0
  106. rasa/core/actions/two_stage_fallback.py +186 -0
  107. rasa/core/agent.py +555 -0
  108. rasa/core/auth_retry_tracker_store.py +122 -0
  109. rasa/core/brokers/__init__.py +0 -0
  110. rasa/core/brokers/broker.py +126 -0
  111. rasa/core/brokers/file.py +58 -0
  112. rasa/core/brokers/kafka.py +322 -0
  113. rasa/core/brokers/pika.py +386 -0
  114. rasa/core/brokers/sql.py +86 -0
  115. rasa/core/channels/__init__.py +55 -0
  116. rasa/core/channels/audiocodes.py +463 -0
  117. rasa/core/channels/botframework.py +338 -0
  118. rasa/core/channels/callback.py +84 -0
  119. rasa/core/channels/channel.py +419 -0
  120. rasa/core/channels/console.py +241 -0
  121. rasa/core/channels/development_inspector.py +93 -0
  122. rasa/core/channels/facebook.py +419 -0
  123. rasa/core/channels/hangouts.py +329 -0
  124. rasa/core/channels/inspector/.eslintrc.cjs +25 -0
  125. rasa/core/channels/inspector/.gitignore +23 -0
  126. rasa/core/channels/inspector/README.md +54 -0
  127. rasa/core/channels/inspector/assets/favicon.ico +0 -0
  128. rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
  129. rasa/core/channels/inspector/custom.d.ts +3 -0
  130. rasa/core/channels/inspector/dist/assets/arc-b6e548fe.js +1 -0
  131. rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
  132. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-fa03ac9e.js +10 -0
  133. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-ee67392a.js +2 -0
  134. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-9b283fae.js +2 -0
  135. rasa/core/channels/inspector/dist/assets/createText-62fc7601-8b6fcc2a.js +7 -0
  136. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-22e77f4f.js +4 -0
  137. rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-60ffc87f.js +51 -0
  138. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-9dd802e4.js +6 -0
  139. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-5fa1912f.js +4 -0
  140. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-1844e5a5.js +1 -0
  141. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-622a1fd2.js +139 -0
  142. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-e285a63a.js +266 -0
  143. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-f237bdca.js +70 -0
  144. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
  145. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
  146. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
  147. rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
  148. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-4b03d70e.js +1 -0
  149. rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
  150. rasa/core/channels/inspector/dist/assets/index-a5d3e69d.js +1040 -0
  151. rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-72a0fa5f.js +7 -0
  152. rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
  153. rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-82218c41.js +139 -0
  154. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
  155. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
  156. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
  157. rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
  158. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
  159. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
  160. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
  161. rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
  162. rasa/core/channels/inspector/dist/assets/layout-78cff630.js +1 -0
  163. rasa/core/channels/inspector/dist/assets/line-5038b469.js +1 -0
  164. rasa/core/channels/inspector/dist/assets/linear-c4fc4098.js +1 -0
  165. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-c33c8ea6.js +109 -0
  166. rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
  167. rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
  168. rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-a8d03059.js +35 -0
  169. rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-6a0e56b2.js +7 -0
  170. rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-2dc7c7bd.js +52 -0
  171. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-2360fe39.js +8 -0
  172. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-41b9f9ad.js +122 -0
  173. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-0aad326f.js +1 -0
  174. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-9847d984.js +1 -0
  175. rasa/core/channels/inspector/dist/assets/styles-080da4f6-564d890e.js +110 -0
  176. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-38957613.js +159 -0
  177. rasa/core/channels/inspector/dist/assets/styles-9c745c82-f0fc6921.js +207 -0
  178. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-ef3c5a77.js +1 -0
  179. rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-bf3e91c1.js +61 -0
  180. rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-4d4026c0.js +7 -0
  181. rasa/core/channels/inspector/dist/index.html +41 -0
  182. rasa/core/channels/inspector/index.html +39 -0
  183. rasa/core/channels/inspector/jest.config.ts +13 -0
  184. rasa/core/channels/inspector/package.json +48 -0
  185. rasa/core/channels/inspector/setupTests.ts +2 -0
  186. rasa/core/channels/inspector/src/App.tsx +170 -0
  187. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +107 -0
  188. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
  189. rasa/core/channels/inspector/src/components/DialogueStack.tsx +151 -0
  190. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
  191. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
  192. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +19 -0
  193. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
  194. rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
  195. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
  196. rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
  197. rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
  198. rasa/core/channels/inspector/src/helpers/formatters.test.ts +382 -0
  199. rasa/core/channels/inspector/src/helpers/formatters.ts +240 -0
  200. rasa/core/channels/inspector/src/helpers/utils.ts +42 -0
  201. rasa/core/channels/inspector/src/main.tsx +13 -0
  202. rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
  203. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
  204. rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
  205. rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
  206. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
  207. rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
  208. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
  209. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
  210. rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
  211. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
  212. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
  213. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
  214. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
  215. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
  216. rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
  217. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
  218. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
  219. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
  220. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
  221. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
  222. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
  223. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
  224. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
  225. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
  226. rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
  227. rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
  228. rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
  229. rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
  230. rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
  231. rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
  232. rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
  233. rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
  234. rasa/core/channels/inspector/src/theme/index.ts +101 -0
  235. rasa/core/channels/inspector/src/types.ts +64 -0
  236. rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
  237. rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
  238. rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
  239. rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
  240. rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
  241. rasa/core/channels/inspector/tsconfig.json +26 -0
  242. rasa/core/channels/inspector/tsconfig.node.json +10 -0
  243. rasa/core/channels/inspector/vite.config.ts +8 -0
  244. rasa/core/channels/inspector/yarn.lock +6156 -0
  245. rasa/core/channels/mattermost.py +229 -0
  246. rasa/core/channels/rasa_chat.py +126 -0
  247. rasa/core/channels/rest.py +225 -0
  248. rasa/core/channels/rocketchat.py +174 -0
  249. rasa/core/channels/slack.py +620 -0
  250. rasa/core/channels/socketio.py +274 -0
  251. rasa/core/channels/telegram.py +298 -0
  252. rasa/core/channels/twilio.py +169 -0
  253. rasa/core/channels/twilio_voice.py +367 -0
  254. rasa/core/channels/vier_cvg.py +374 -0
  255. rasa/core/channels/webexteams.py +134 -0
  256. rasa/core/concurrent_lock_store.py +210 -0
  257. rasa/core/constants.py +107 -0
  258. rasa/core/evaluation/__init__.py +0 -0
  259. rasa/core/evaluation/marker.py +267 -0
  260. rasa/core/evaluation/marker_base.py +923 -0
  261. rasa/core/evaluation/marker_stats.py +293 -0
  262. rasa/core/evaluation/marker_tracker_loader.py +103 -0
  263. rasa/core/exceptions.py +29 -0
  264. rasa/core/exporter.py +284 -0
  265. rasa/core/featurizers/__init__.py +0 -0
  266. rasa/core/featurizers/precomputation.py +410 -0
  267. rasa/core/featurizers/single_state_featurizer.py +421 -0
  268. rasa/core/featurizers/tracker_featurizers.py +1262 -0
  269. rasa/core/http_interpreter.py +89 -0
  270. rasa/core/information_retrieval/__init__.py +7 -0
  271. rasa/core/information_retrieval/faiss.py +121 -0
  272. rasa/core/information_retrieval/information_retrieval.py +129 -0
  273. rasa/core/information_retrieval/milvus.py +52 -0
  274. rasa/core/information_retrieval/qdrant.py +95 -0
  275. rasa/core/jobs.py +63 -0
  276. rasa/core/lock.py +139 -0
  277. rasa/core/lock_store.py +343 -0
  278. rasa/core/migrate.py +403 -0
  279. rasa/core/nlg/__init__.py +3 -0
  280. rasa/core/nlg/callback.py +146 -0
  281. rasa/core/nlg/contextual_response_rephraser.py +270 -0
  282. rasa/core/nlg/generator.py +230 -0
  283. rasa/core/nlg/interpolator.py +143 -0
  284. rasa/core/nlg/response.py +155 -0
  285. rasa/core/nlg/summarize.py +69 -0
  286. rasa/core/policies/__init__.py +0 -0
  287. rasa/core/policies/ensemble.py +329 -0
  288. rasa/core/policies/enterprise_search_policy.py +781 -0
  289. rasa/core/policies/enterprise_search_prompt_template.jinja2 +25 -0
  290. rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +60 -0
  291. rasa/core/policies/flow_policy.py +205 -0
  292. rasa/core/policies/flows/__init__.py +0 -0
  293. rasa/core/policies/flows/flow_exceptions.py +44 -0
  294. rasa/core/policies/flows/flow_executor.py +705 -0
  295. rasa/core/policies/flows/flow_step_result.py +43 -0
  296. rasa/core/policies/intentless_policy.py +922 -0
  297. rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
  298. rasa/core/policies/memoization.py +538 -0
  299. rasa/core/policies/policy.py +725 -0
  300. rasa/core/policies/rule_policy.py +1273 -0
  301. rasa/core/policies/ted_policy.py +2169 -0
  302. rasa/core/policies/unexpected_intent_policy.py +1022 -0
  303. rasa/core/processor.py +1422 -0
  304. rasa/core/run.py +331 -0
  305. rasa/core/secrets_manager/__init__.py +0 -0
  306. rasa/core/secrets_manager/constants.py +32 -0
  307. rasa/core/secrets_manager/endpoints.py +391 -0
  308. rasa/core/secrets_manager/factory.py +233 -0
  309. rasa/core/secrets_manager/secret_manager.py +262 -0
  310. rasa/core/secrets_manager/vault.py +574 -0
  311. rasa/core/test.py +1335 -0
  312. rasa/core/tracker_store.py +1699 -0
  313. rasa/core/train.py +105 -0
  314. rasa/core/training/__init__.py +89 -0
  315. rasa/core/training/converters/__init__.py +0 -0
  316. rasa/core/training/converters/responses_prefix_converter.py +119 -0
  317. rasa/core/training/interactive.py +1745 -0
  318. rasa/core/training/story_conflict.py +381 -0
  319. rasa/core/training/training.py +93 -0
  320. rasa/core/utils.py +339 -0
  321. rasa/core/visualize.py +70 -0
  322. rasa/dialogue_understanding/__init__.py +0 -0
  323. rasa/dialogue_understanding/coexistence/__init__.py +0 -0
  324. rasa/dialogue_understanding/coexistence/constants.py +4 -0
  325. rasa/dialogue_understanding/coexistence/intent_based_router.py +196 -0
  326. rasa/dialogue_understanding/coexistence/llm_based_router.py +260 -0
  327. rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
  328. rasa/dialogue_understanding/commands/__init__.py +49 -0
  329. rasa/dialogue_understanding/commands/can_not_handle_command.py +70 -0
  330. rasa/dialogue_understanding/commands/cancel_flow_command.py +125 -0
  331. rasa/dialogue_understanding/commands/change_flow_command.py +44 -0
  332. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +57 -0
  333. rasa/dialogue_understanding/commands/clarify_command.py +86 -0
  334. rasa/dialogue_understanding/commands/command.py +85 -0
  335. rasa/dialogue_understanding/commands/correct_slots_command.py +297 -0
  336. rasa/dialogue_understanding/commands/error_command.py +79 -0
  337. rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
  338. rasa/dialogue_understanding/commands/handle_code_change_command.py +73 -0
  339. rasa/dialogue_understanding/commands/human_handoff_command.py +66 -0
  340. rasa/dialogue_understanding/commands/knowledge_answer_command.py +57 -0
  341. rasa/dialogue_understanding/commands/noop_command.py +54 -0
  342. rasa/dialogue_understanding/commands/set_slot_command.py +160 -0
  343. rasa/dialogue_understanding/commands/skip_question_command.py +75 -0
  344. rasa/dialogue_understanding/commands/start_flow_command.py +107 -0
  345. rasa/dialogue_understanding/generator/__init__.py +21 -0
  346. rasa/dialogue_understanding/generator/command_generator.py +343 -0
  347. rasa/dialogue_understanding/generator/constants.py +18 -0
  348. rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
  349. rasa/dialogue_understanding/generator/flow_retrieval.py +412 -0
  350. rasa/dialogue_understanding/generator/llm_based_command_generator.py +467 -0
  351. rasa/dialogue_understanding/generator/llm_command_generator.py +67 -0
  352. rasa/dialogue_understanding/generator/multi_step/__init__.py +0 -0
  353. rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2 +62 -0
  354. rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2 +38 -0
  355. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +827 -0
  356. rasa/dialogue_understanding/generator/nlu_command_adapter.py +218 -0
  357. rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
  358. rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +57 -0
  359. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +345 -0
  360. rasa/dialogue_understanding/patterns/__init__.py +0 -0
  361. rasa/dialogue_understanding/patterns/cancel.py +111 -0
  362. rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
  363. rasa/dialogue_understanding/patterns/chitchat.py +37 -0
  364. rasa/dialogue_understanding/patterns/clarify.py +97 -0
  365. rasa/dialogue_understanding/patterns/code_change.py +41 -0
  366. rasa/dialogue_understanding/patterns/collect_information.py +90 -0
  367. rasa/dialogue_understanding/patterns/completed.py +40 -0
  368. rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
  369. rasa/dialogue_understanding/patterns/correction.py +278 -0
  370. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +248 -0
  371. rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
  372. rasa/dialogue_understanding/patterns/internal_error.py +47 -0
  373. rasa/dialogue_understanding/patterns/search.py +37 -0
  374. rasa/dialogue_understanding/patterns/skip_question.py +38 -0
  375. rasa/dialogue_understanding/processor/__init__.py +0 -0
  376. rasa/dialogue_understanding/processor/command_processor.py +687 -0
  377. rasa/dialogue_understanding/processor/command_processor_component.py +39 -0
  378. rasa/dialogue_understanding/stack/__init__.py +0 -0
  379. rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
  380. rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
  381. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
  382. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
  383. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
  384. rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
  385. rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
  386. rasa/dialogue_understanding/stack/utils.py +211 -0
  387. rasa/e2e_test/__init__.py +0 -0
  388. rasa/e2e_test/constants.py +11 -0
  389. rasa/e2e_test/e2e_test_case.py +366 -0
  390. rasa/e2e_test/e2e_test_result.py +34 -0
  391. rasa/e2e_test/e2e_test_runner.py +768 -0
  392. rasa/e2e_test/e2e_test_schema.yml +85 -0
  393. rasa/engine/__init__.py +0 -0
  394. rasa/engine/caching.py +463 -0
  395. rasa/engine/constants.py +17 -0
  396. rasa/engine/exceptions.py +14 -0
  397. rasa/engine/graph.py +637 -0
  398. rasa/engine/loader.py +36 -0
  399. rasa/engine/recipes/__init__.py +0 -0
  400. rasa/engine/recipes/config_files/default_config.yml +44 -0
  401. rasa/engine/recipes/default_components.py +99 -0
  402. rasa/engine/recipes/default_recipe.py +1251 -0
  403. rasa/engine/recipes/graph_recipe.py +79 -0
  404. rasa/engine/recipes/recipe.py +93 -0
  405. rasa/engine/runner/__init__.py +0 -0
  406. rasa/engine/runner/dask.py +250 -0
  407. rasa/engine/runner/interface.py +49 -0
  408. rasa/engine/storage/__init__.py +0 -0
  409. rasa/engine/storage/local_model_storage.py +246 -0
  410. rasa/engine/storage/resource.py +110 -0
  411. rasa/engine/storage/storage.py +203 -0
  412. rasa/engine/training/__init__.py +0 -0
  413. rasa/engine/training/components.py +176 -0
  414. rasa/engine/training/fingerprinting.py +64 -0
  415. rasa/engine/training/graph_trainer.py +256 -0
  416. rasa/engine/training/hooks.py +164 -0
  417. rasa/engine/validation.py +873 -0
  418. rasa/env.py +5 -0
  419. rasa/exceptions.py +69 -0
  420. rasa/graph_components/__init__.py +0 -0
  421. rasa/graph_components/converters/__init__.py +0 -0
  422. rasa/graph_components/converters/nlu_message_converter.py +48 -0
  423. rasa/graph_components/providers/__init__.py +0 -0
  424. rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
  425. rasa/graph_components/providers/domain_provider.py +71 -0
  426. rasa/graph_components/providers/flows_provider.py +74 -0
  427. rasa/graph_components/providers/forms_provider.py +44 -0
  428. rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
  429. rasa/graph_components/providers/responses_provider.py +44 -0
  430. rasa/graph_components/providers/rule_only_provider.py +49 -0
  431. rasa/graph_components/providers/story_graph_provider.py +43 -0
  432. rasa/graph_components/providers/training_tracker_provider.py +55 -0
  433. rasa/graph_components/validators/__init__.py +0 -0
  434. rasa/graph_components/validators/default_recipe_validator.py +550 -0
  435. rasa/graph_components/validators/finetuning_validator.py +302 -0
  436. rasa/hooks.py +112 -0
  437. rasa/jupyter.py +63 -0
  438. rasa/markers/__init__.py +0 -0
  439. rasa/markers/marker.py +269 -0
  440. rasa/markers/marker_base.py +828 -0
  441. rasa/markers/upload.py +74 -0
  442. rasa/markers/validate.py +21 -0
  443. rasa/model.py +118 -0
  444. rasa/model_testing.py +457 -0
  445. rasa/model_training.py +536 -0
  446. rasa/nlu/__init__.py +7 -0
  447. rasa/nlu/classifiers/__init__.py +3 -0
  448. rasa/nlu/classifiers/classifier.py +5 -0
  449. rasa/nlu/classifiers/diet_classifier.py +1881 -0
  450. rasa/nlu/classifiers/fallback_classifier.py +192 -0
  451. rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
  452. rasa/nlu/classifiers/llm_intent_classifier.py +519 -0
  453. rasa/nlu/classifiers/logistic_regression_classifier.py +253 -0
  454. rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
  455. rasa/nlu/classifiers/regex_message_handler.py +56 -0
  456. rasa/nlu/classifiers/sklearn_intent_classifier.py +330 -0
  457. rasa/nlu/constants.py +77 -0
  458. rasa/nlu/convert.py +40 -0
  459. rasa/nlu/emulators/__init__.py +0 -0
  460. rasa/nlu/emulators/dialogflow.py +55 -0
  461. rasa/nlu/emulators/emulator.py +49 -0
  462. rasa/nlu/emulators/luis.py +86 -0
  463. rasa/nlu/emulators/no_emulator.py +10 -0
  464. rasa/nlu/emulators/wit.py +56 -0
  465. rasa/nlu/extractors/__init__.py +0 -0
  466. rasa/nlu/extractors/crf_entity_extractor.py +715 -0
  467. rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
  468. rasa/nlu/extractors/entity_synonyms.py +178 -0
  469. rasa/nlu/extractors/extractor.py +470 -0
  470. rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
  471. rasa/nlu/extractors/regex_entity_extractor.py +220 -0
  472. rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
  473. rasa/nlu/featurizers/__init__.py +0 -0
  474. rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
  475. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +445 -0
  476. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
  477. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +768 -0
  478. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
  479. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
  480. rasa/nlu/featurizers/featurizer.py +89 -0
  481. rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
  482. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +867 -0
  483. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +571 -0
  484. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +271 -0
  485. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
  486. rasa/nlu/model.py +24 -0
  487. rasa/nlu/persistor.py +282 -0
  488. rasa/nlu/run.py +27 -0
  489. rasa/nlu/selectors/__init__.py +0 -0
  490. rasa/nlu/selectors/response_selector.py +987 -0
  491. rasa/nlu/test.py +1940 -0
  492. rasa/nlu/tokenizers/__init__.py +0 -0
  493. rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
  494. rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
  495. rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
  496. rasa/nlu/tokenizers/tokenizer.py +239 -0
  497. rasa/nlu/tokenizers/whitespace_tokenizer.py +106 -0
  498. rasa/nlu/utils/__init__.py +35 -0
  499. rasa/nlu/utils/bilou_utils.py +462 -0
  500. rasa/nlu/utils/hugging_face/__init__.py +0 -0
  501. rasa/nlu/utils/hugging_face/registry.py +108 -0
  502. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
  503. rasa/nlu/utils/mitie_utils.py +113 -0
  504. rasa/nlu/utils/pattern_utils.py +168 -0
  505. rasa/nlu/utils/spacy_utils.py +310 -0
  506. rasa/plugin.py +90 -0
  507. rasa/server.py +1551 -0
  508. rasa/shared/__init__.py +0 -0
  509. rasa/shared/constants.py +192 -0
  510. rasa/shared/core/__init__.py +0 -0
  511. rasa/shared/core/command_payload_reader.py +109 -0
  512. rasa/shared/core/constants.py +167 -0
  513. rasa/shared/core/conversation.py +46 -0
  514. rasa/shared/core/domain.py +2107 -0
  515. rasa/shared/core/events.py +2504 -0
  516. rasa/shared/core/flows/__init__.py +7 -0
  517. rasa/shared/core/flows/flow.py +362 -0
  518. rasa/shared/core/flows/flow_step.py +146 -0
  519. rasa/shared/core/flows/flow_step_links.py +319 -0
  520. rasa/shared/core/flows/flow_step_sequence.py +70 -0
  521. rasa/shared/core/flows/flows_list.py +223 -0
  522. rasa/shared/core/flows/flows_yaml_schema.json +217 -0
  523. rasa/shared/core/flows/nlu_trigger.py +117 -0
  524. rasa/shared/core/flows/steps/__init__.py +24 -0
  525. rasa/shared/core/flows/steps/action.py +56 -0
  526. rasa/shared/core/flows/steps/call.py +64 -0
  527. rasa/shared/core/flows/steps/collect.py +112 -0
  528. rasa/shared/core/flows/steps/constants.py +5 -0
  529. rasa/shared/core/flows/steps/continuation.py +36 -0
  530. rasa/shared/core/flows/steps/end.py +22 -0
  531. rasa/shared/core/flows/steps/internal.py +44 -0
  532. rasa/shared/core/flows/steps/link.py +51 -0
  533. rasa/shared/core/flows/steps/no_operation.py +48 -0
  534. rasa/shared/core/flows/steps/set_slots.py +50 -0
  535. rasa/shared/core/flows/steps/start.py +30 -0
  536. rasa/shared/core/flows/validation.py +527 -0
  537. rasa/shared/core/flows/yaml_flows_io.py +278 -0
  538. rasa/shared/core/generator.py +908 -0
  539. rasa/shared/core/slot_mappings.py +526 -0
  540. rasa/shared/core/slots.py +649 -0
  541. rasa/shared/core/trackers.py +1177 -0
  542. rasa/shared/core/training_data/__init__.py +0 -0
  543. rasa/shared/core/training_data/loading.py +89 -0
  544. rasa/shared/core/training_data/story_reader/__init__.py +0 -0
  545. rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
  546. rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
  547. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
  548. rasa/shared/core/training_data/story_writer/__init__.py +0 -0
  549. rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
  550. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +444 -0
  551. rasa/shared/core/training_data/structures.py +838 -0
  552. rasa/shared/core/training_data/visualization.html +146 -0
  553. rasa/shared/core/training_data/visualization.py +603 -0
  554. rasa/shared/data.py +249 -0
  555. rasa/shared/engine/__init__.py +0 -0
  556. rasa/shared/engine/caching.py +26 -0
  557. rasa/shared/exceptions.py +163 -0
  558. rasa/shared/importers/__init__.py +0 -0
  559. rasa/shared/importers/importer.py +704 -0
  560. rasa/shared/importers/multi_project.py +203 -0
  561. rasa/shared/importers/rasa.py +99 -0
  562. rasa/shared/importers/utils.py +34 -0
  563. rasa/shared/nlu/__init__.py +0 -0
  564. rasa/shared/nlu/constants.py +47 -0
  565. rasa/shared/nlu/interpreter.py +10 -0
  566. rasa/shared/nlu/training_data/__init__.py +0 -0
  567. rasa/shared/nlu/training_data/entities_parser.py +208 -0
  568. rasa/shared/nlu/training_data/features.py +492 -0
  569. rasa/shared/nlu/training_data/formats/__init__.py +10 -0
  570. rasa/shared/nlu/training_data/formats/dialogflow.py +163 -0
  571. rasa/shared/nlu/training_data/formats/luis.py +87 -0
  572. rasa/shared/nlu/training_data/formats/rasa.py +135 -0
  573. rasa/shared/nlu/training_data/formats/rasa_yaml.py +603 -0
  574. rasa/shared/nlu/training_data/formats/readerwriter.py +244 -0
  575. rasa/shared/nlu/training_data/formats/wit.py +52 -0
  576. rasa/shared/nlu/training_data/loading.py +137 -0
  577. rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
  578. rasa/shared/nlu/training_data/message.py +490 -0
  579. rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
  580. rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
  581. rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
  582. rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
  583. rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
  584. rasa/shared/nlu/training_data/training_data.py +730 -0
  585. rasa/shared/nlu/training_data/util.py +223 -0
  586. rasa/shared/providers/__init__.py +0 -0
  587. rasa/shared/providers/openai/__init__.py +0 -0
  588. rasa/shared/providers/openai/clients.py +43 -0
  589. rasa/shared/providers/openai/session_handler.py +110 -0
  590. rasa/shared/utils/__init__.py +0 -0
  591. rasa/shared/utils/cli.py +72 -0
  592. rasa/shared/utils/common.py +308 -0
  593. rasa/shared/utils/constants.py +4 -0
  594. rasa/shared/utils/io.py +415 -0
  595. rasa/shared/utils/llm.py +404 -0
  596. rasa/shared/utils/pykwalify_extensions.py +27 -0
  597. rasa/shared/utils/schemas/__init__.py +0 -0
  598. rasa/shared/utils/schemas/config.yml +2 -0
  599. rasa/shared/utils/schemas/domain.yml +145 -0
  600. rasa/shared/utils/schemas/events.py +212 -0
  601. rasa/shared/utils/schemas/model_config.yml +46 -0
  602. rasa/shared/utils/schemas/stories.yml +173 -0
  603. rasa/shared/utils/yaml.py +786 -0
  604. rasa/studio/__init__.py +0 -0
  605. rasa/studio/auth.py +268 -0
  606. rasa/studio/config.py +127 -0
  607. rasa/studio/constants.py +18 -0
  608. rasa/studio/data_handler.py +359 -0
  609. rasa/studio/download.py +483 -0
  610. rasa/studio/results_logger.py +137 -0
  611. rasa/studio/train.py +135 -0
  612. rasa/studio/upload.py +433 -0
  613. rasa/telemetry.py +1737 -0
  614. rasa/tracing/__init__.py +0 -0
  615. rasa/tracing/config.py +353 -0
  616. rasa/tracing/constants.py +62 -0
  617. rasa/tracing/instrumentation/__init__.py +0 -0
  618. rasa/tracing/instrumentation/attribute_extractors.py +672 -0
  619. rasa/tracing/instrumentation/instrumentation.py +1185 -0
  620. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +144 -0
  621. rasa/tracing/instrumentation/metrics.py +294 -0
  622. rasa/tracing/metric_instrument_provider.py +205 -0
  623. rasa/utils/__init__.py +0 -0
  624. rasa/utils/beta.py +83 -0
  625. rasa/utils/cli.py +28 -0
  626. rasa/utils/common.py +635 -0
  627. rasa/utils/converter.py +53 -0
  628. rasa/utils/endpoints.py +302 -0
  629. rasa/utils/io.py +260 -0
  630. rasa/utils/licensing.py +534 -0
  631. rasa/utils/log_utils.py +174 -0
  632. rasa/utils/mapper.py +210 -0
  633. rasa/utils/ml_utils.py +145 -0
  634. rasa/utils/plotting.py +362 -0
  635. rasa/utils/singleton.py +23 -0
  636. rasa/utils/tensorflow/__init__.py +0 -0
  637. rasa/utils/tensorflow/callback.py +112 -0
  638. rasa/utils/tensorflow/constants.py +116 -0
  639. rasa/utils/tensorflow/crf.py +492 -0
  640. rasa/utils/tensorflow/data_generator.py +440 -0
  641. rasa/utils/tensorflow/environment.py +161 -0
  642. rasa/utils/tensorflow/exceptions.py +5 -0
  643. rasa/utils/tensorflow/feature_array.py +366 -0
  644. rasa/utils/tensorflow/layers.py +1565 -0
  645. rasa/utils/tensorflow/layers_utils.py +113 -0
  646. rasa/utils/tensorflow/metrics.py +281 -0
  647. rasa/utils/tensorflow/model_data.py +798 -0
  648. rasa/utils/tensorflow/model_data_utils.py +499 -0
  649. rasa/utils/tensorflow/models.py +935 -0
  650. rasa/utils/tensorflow/rasa_layers.py +1094 -0
  651. rasa/utils/tensorflow/transformer.py +640 -0
  652. rasa/utils/tensorflow/types.py +6 -0
  653. rasa/utils/train_utils.py +572 -0
  654. rasa/utils/url_tools.py +53 -0
  655. rasa/utils/yaml.py +54 -0
  656. rasa/validator.py +1337 -0
  657. rasa/version.py +3 -0
  658. rasa_pro-3.9.18.dist-info/METADATA +563 -0
  659. rasa_pro-3.9.18.dist-info/NOTICE +5 -0
  660. rasa_pro-3.9.18.dist-info/RECORD +662 -0
  661. rasa_pro-3.9.18.dist-info/WHEEL +4 -0
  662. rasa_pro-3.9.18.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,260 @@
1
+ from __future__ import annotations
2
+ import importlib
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ import structlog
6
+ from jinja2 import Template
7
+
8
+ from rasa.dialogue_understanding.coexistence.constants import (
9
+ CALM_ENTRY,
10
+ NLU_ENTRY,
11
+ STICKY,
12
+ NON_STICKY,
13
+ )
14
+ from rasa.dialogue_understanding.commands import Command, SetSlotCommand
15
+ from rasa.dialogue_understanding.commands.noop_command import NoopCommand
16
+ from rasa.dialogue_understanding.generator.constants import LLM_CONFIG_KEY
17
+ from rasa.engine.graph import ExecutionContext, GraphComponent
18
+ from rasa.engine.recipes.default_recipe import DefaultV1Recipe
19
+ from rasa.engine.storage.resource import Resource
20
+ from rasa.engine.storage.storage import ModelStorage
21
+ from rasa.shared.constants import ROUTE_TO_CALM_SLOT
22
+ from rasa.shared.core.trackers import DialogueStateTracker
23
+ from rasa.shared.exceptions import InvalidConfigException, FileIOException
24
+ from rasa.shared.nlu.constants import COMMANDS, TEXT
25
+ from rasa.shared.nlu.training_data.message import Message
26
+ from rasa.shared.nlu.training_data.training_data import TrainingData
27
+ import rasa.shared.utils.io
28
+ from rasa.shared.utils.llm import (
29
+ DEFAULT_OPENAI_CHAT_MODEL_NAME,
30
+ get_prompt_template,
31
+ llm_factory,
32
+ )
33
+
34
+ LLM_BASED_ROUTER_PROMPT_FILE_NAME = "llm_based_router_prompt.jinja2"
35
+ DEFAULT_COMMAND_PROMPT_TEMPLATE = importlib.resources.read_text(
36
+ "rasa.dialogue_understanding.coexistence", "router_template.jinja2"
37
+ )
38
+
39
+
40
+ # Token ids for gpt 3.5 and gpt 4 corresponding to space + capitalized Letter
41
+ A_TO_C_TOKEN_IDS_CHATGPT = [
42
+ 362, # " A"
43
+ 426, # " B"
44
+ 356, # " C"
45
+ ]
46
+
47
+ DEFAULT_LLM_CONFIG = {
48
+ "_type": "openai",
49
+ "request_timeout": 7,
50
+ "temperature": 0.0,
51
+ "model_name": DEFAULT_OPENAI_CHAT_MODEL_NAME,
52
+ "max_tokens": 1,
53
+ "logit_bias": {str(token_id): 100 for token_id in A_TO_C_TOKEN_IDS_CHATGPT},
54
+ }
55
+
56
+ structlogger = structlog.get_logger()
57
+
58
+
59
+ @DefaultV1Recipe.register(
60
+ [
61
+ DefaultV1Recipe.ComponentType.COEXISTENCE_ROUTER,
62
+ ],
63
+ is_trainable=True,
64
+ )
65
+ class LLMBasedRouter(GraphComponent):
66
+ @staticmethod
67
+ def get_default_config() -> Dict[str, Any]:
68
+ """The component's default config (see parent class for full docstring)."""
69
+ return {
70
+ "prompt": None,
71
+ CALM_ENTRY: {STICKY: None},
72
+ NLU_ENTRY: {
73
+ NON_STICKY: "handles chitchat",
74
+ STICKY: "handles everything else",
75
+ },
76
+ LLM_CONFIG_KEY: None,
77
+ }
78
+
79
+ def __init__(
80
+ self,
81
+ config: Dict[str, Any],
82
+ model_storage: ModelStorage,
83
+ resource: Resource,
84
+ prompt_template: Optional[str] = None,
85
+ ) -> None:
86
+ self.config = {**self.get_default_config(), **config}
87
+
88
+ self.prompt_template = (
89
+ prompt_template
90
+ or get_prompt_template(
91
+ config.get("prompt"),
92
+ DEFAULT_COMMAND_PROMPT_TEMPLATE,
93
+ ).strip()
94
+ )
95
+
96
+ self._model_storage = model_storage
97
+ self._resource = resource
98
+ self.validate_config()
99
+
100
+ def validate_config(self) -> None:
101
+ """Validate the config of the router."""
102
+ if (
103
+ self.config[CALM_ENTRY] is None
104
+ or not isinstance(self.config[CALM_ENTRY], dict)
105
+ or STICKY not in self.config[CALM_ENTRY]
106
+ or self.config[CALM_ENTRY][STICKY] is None
107
+ ):
108
+ raise ValueError(
109
+ "The LLMBasedRouter component needs a proper "
110
+ "description of the capabilities implemented in the CALM "
111
+ "part of the bot."
112
+ )
113
+
114
+ def persist(self) -> None:
115
+ """Persist this component to disk for future loading."""
116
+ with self._model_storage.write_to(self._resource) as path:
117
+ rasa.shared.utils.io.write_text_file(
118
+ self.prompt_template, path / LLM_BASED_ROUTER_PROMPT_FILE_NAME
119
+ )
120
+
121
+ def train(self, training_data: TrainingData) -> Resource:
122
+ """Train the intent classifier on a data set."""
123
+ self.persist()
124
+ return self._resource
125
+
126
+ @classmethod
127
+ def load(
128
+ cls,
129
+ config: Dict[str, Any],
130
+ model_storage: ModelStorage,
131
+ resource: Resource,
132
+ execution_context: ExecutionContext,
133
+ **kwargs: Any,
134
+ ) -> "LLMBasedRouter":
135
+ """Loads trained component (see parent class for full docstring)."""
136
+ prompt_template = None
137
+ try:
138
+ with model_storage.read_from(resource) as path:
139
+ prompt_template = rasa.shared.utils.io.read_file(
140
+ path / LLM_BASED_ROUTER_PROMPT_FILE_NAME
141
+ )
142
+ except (FileNotFoundError, FileIOException) as e:
143
+ structlogger.warning(
144
+ "llm_based_router.load.failed", error=e, resource=resource.name
145
+ )
146
+
147
+ return cls(config, model_storage, resource, prompt_template=prompt_template)
148
+
149
+ @classmethod
150
+ def create(
151
+ cls,
152
+ config: Dict[str, Any],
153
+ model_storage: ModelStorage,
154
+ resource: Resource,
155
+ execution_context: ExecutionContext,
156
+ ) -> LLMBasedRouter:
157
+ """Creates component (see parent class for full docstring)."""
158
+ return cls(config, model_storage, resource)
159
+
160
+ async def process(
161
+ self,
162
+ messages: List[Message],
163
+ tracker: Optional[DialogueStateTracker] = None,
164
+ ) -> List[Message]:
165
+ """Process a list of messages."""
166
+ if tracker is None:
167
+ # cannot do anything if there is no tracker (happens during 'rasa test nlu')
168
+ return messages
169
+
170
+ for message in messages:
171
+ commands = await self.predict_commands(message, tracker)
172
+ commands_dicts = [command.as_dict() for command in commands]
173
+ message.set(COMMANDS, commands_dicts, add_to_output=True)
174
+
175
+ return messages
176
+
177
+ async def predict_commands(
178
+ self,
179
+ message: Message,
180
+ tracker: DialogueStateTracker,
181
+ ) -> List[Command]:
182
+ if not tracker.has_coexistence_routing_slot:
183
+ raise InvalidConfigException(
184
+ f"Tried to run the LLMBasedRouter component "
185
+ f"without the slot to track coexistence routing ({ROUTE_TO_CALM_SLOT})."
186
+ )
187
+
188
+ route_session_to_calm = tracker.get_slot(ROUTE_TO_CALM_SLOT)
189
+ if route_session_to_calm is None:
190
+ prompt = self.render_template(message)
191
+ structlogger.info("llm_based_router.prompt_rendered", prompt=prompt)
192
+ # generating answer
193
+ answer = await self._generate_answer_using_llm(prompt)
194
+ structlogger.info("llm_based_router.llm_answer", answer=answer)
195
+ commands = self.parse_answer(answer)
196
+ structlogger.info("llm_based_router.predicated_commands", commands=commands)
197
+ return commands
198
+ elif route_session_to_calm is True:
199
+ # don't set any commands so that a `LLMBasedCommandGenerator` is triggered
200
+ # and can predict the actual commands.
201
+ return []
202
+ else:
203
+ # If the session is assigned to DM1 add a `NoopCommand` to silence
204
+ # the other command generators.
205
+ return [NoopCommand()]
206
+
207
+ @staticmethod
208
+ def parse_answer(answer: Optional[str]) -> List[Command]:
209
+ if answer is None:
210
+ structlogger.warn(
211
+ "llm_based_router.parse_answer.invalid_answer", answer=answer
212
+ )
213
+ return [SetSlotCommand(ROUTE_TO_CALM_SLOT, False)]
214
+
215
+ # removing any whitespaces from the token
216
+ answer = answer.strip()
217
+
218
+ # to calm
219
+ if answer == "A":
220
+ return []
221
+ # to dm1
222
+ elif answer == "C":
223
+ return [SetSlotCommand(ROUTE_TO_CALM_SLOT, False)]
224
+ # to dm1 for a single chitchat turn
225
+ elif answer == "B":
226
+ return [NoopCommand()]
227
+ else:
228
+ structlogger.warn(
229
+ "llm_based_router.parse_answer.invalid_answer", answer=answer
230
+ )
231
+ return [SetSlotCommand(ROUTE_TO_CALM_SLOT, False)]
232
+
233
+ def render_template(self, message: Message) -> str:
234
+ inputs = {
235
+ "user_message": message.get(TEXT),
236
+ f"{CALM_ENTRY}_{STICKY}": self.config[CALM_ENTRY][STICKY],
237
+ f"{NLU_ENTRY}_{STICKY}": self.config[NLU_ENTRY][STICKY],
238
+ f"{NLU_ENTRY}_{NON_STICKY}": self.config[NLU_ENTRY][NON_STICKY],
239
+ }
240
+
241
+ return Template(self.prompt_template).render(**inputs)
242
+
243
+ async def _generate_answer_using_llm(self, prompt: str) -> Optional[str]:
244
+ """Use LLM to generate a response.
245
+
246
+ Args:
247
+ prompt: The prompt to send to the LLM.
248
+
249
+ Returns:
250
+ The generated text.
251
+ """
252
+ llm = llm_factory(self.config.get(LLM_CONFIG_KEY), DEFAULT_LLM_CONFIG)
253
+
254
+ try:
255
+ return await llm.apredict(prompt)
256
+ except Exception as e:
257
+ # unfortunately, langchain does not wrap LLM exceptions which means
258
+ # we have to catch all exceptions here
259
+ structlogger.error("llm_based_router.llm.error", error=e)
260
+ return None
@@ -0,0 +1,12 @@
1
+ You have to forward the user message to the right assistant.
2
+
3
+ The following assistants are available:
4
+
5
+ Assistant A: {{ calm_entry_sticky }}
6
+ Assistant B: {{ nlu_entry_non_sticky }}
7
+ Assistant C: {{ nlu_entry_sticky }}
8
+
9
+ The user said: """{{ user_message }}"""
10
+
11
+ Answer which assistant needs to get this message:
12
+ The message is for the assistant with the letter
@@ -0,0 +1,49 @@
1
+ from rasa.dialogue_understanding.commands.command import Command
2
+ from rasa.dialogue_understanding.commands.free_form_answer_command import (
3
+ FreeFormAnswerCommand,
4
+ )
5
+ from rasa.dialogue_understanding.commands.cancel_flow_command import CancelFlowCommand
6
+ from rasa.dialogue_understanding.commands.knowledge_answer_command import (
7
+ KnowledgeAnswerCommand,
8
+ )
9
+ from rasa.dialogue_understanding.commands.chit_chat_answer_command import (
10
+ ChitChatAnswerCommand,
11
+ )
12
+ from rasa.dialogue_understanding.commands.skip_question_command import (
13
+ SkipQuestionCommand,
14
+ )
15
+ from rasa.dialogue_understanding.commands.can_not_handle_command import (
16
+ CannotHandleCommand,
17
+ )
18
+ from rasa.dialogue_understanding.commands.clarify_command import ClarifyCommand
19
+ from rasa.dialogue_understanding.commands.error_command import ErrorCommand
20
+ from rasa.dialogue_understanding.commands.set_slot_command import SetSlotCommand
21
+ from rasa.dialogue_understanding.commands.start_flow_command import StartFlowCommand
22
+ from rasa.dialogue_understanding.commands.human_handoff_command import (
23
+ HumanHandoffCommand,
24
+ )
25
+ from rasa.dialogue_understanding.commands.correct_slots_command import (
26
+ CorrectSlotsCommand,
27
+ CorrectedSlot,
28
+ )
29
+ from rasa.dialogue_understanding.commands.noop_command import NoopCommand
30
+ from rasa.dialogue_understanding.commands.change_flow_command import ChangeFlowCommand
31
+
32
+ __all__ = [
33
+ "Command",
34
+ "FreeFormAnswerCommand",
35
+ "CancelFlowCommand",
36
+ "KnowledgeAnswerCommand",
37
+ "ChitChatAnswerCommand",
38
+ "SkipQuestionCommand",
39
+ "CannotHandleCommand",
40
+ "ClarifyCommand",
41
+ "SetSlotCommand",
42
+ "StartFlowCommand",
43
+ "HumanHandoffCommand",
44
+ "CorrectSlotsCommand",
45
+ "CorrectedSlot",
46
+ "ErrorCommand",
47
+ "NoopCommand",
48
+ "ChangeFlowCommand",
49
+ ]
@@ -0,0 +1,70 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any, Dict, List, Optional, Text
5
+
6
+ from rasa.dialogue_understanding.commands import Command
7
+ from rasa.dialogue_understanding.patterns.cannot_handle import (
8
+ CannotHandlePatternFlowStackFrame,
9
+ )
10
+ from rasa.shared.constants import RASA_PATTERN_CANNOT_HANDLE_DEFAULT
11
+ from rasa.shared.core.events import Event
12
+ from rasa.shared.core.flows import FlowsList
13
+ from rasa.shared.core.trackers import DialogueStateTracker
14
+
15
+
16
+ @dataclass
17
+ class CannotHandleCommand(Command):
18
+ """A command to indicate that the bot can't handle the user's input."""
19
+
20
+ reason: Optional[Text] = RASA_PATTERN_CANNOT_HANDLE_DEFAULT
21
+ """Reason for cannot handle used in switch-case of the
22
+ cannot handle pattern flow."""
23
+
24
+ @classmethod
25
+ def command(cls) -> str:
26
+ """Returns the command type."""
27
+ return "cannot handle"
28
+
29
+ @classmethod
30
+ def from_dict(cls, data: Dict[str, Any]) -> CannotHandleCommand:
31
+ """Converts the dictionary to a command.
32
+
33
+ Returns:
34
+ The converted dictionary.
35
+ """
36
+ return CannotHandleCommand(
37
+ data.get("reason", RASA_PATTERN_CANNOT_HANDLE_DEFAULT)
38
+ )
39
+
40
+ def run_command_on_tracker(
41
+ self,
42
+ tracker: DialogueStateTracker,
43
+ all_flows: FlowsList,
44
+ original_tracker: DialogueStateTracker,
45
+ ) -> List[Event]:
46
+ """Runs the command on the tracker.
47
+
48
+ Args:
49
+ tracker: The tracker to run the command on.
50
+ all_flows: All flows in the assistant.
51
+ original_tracker: The tracker before any command was executed.
52
+
53
+ Returns:
54
+ The events to apply to the tracker.
55
+ """
56
+ stack = tracker.stack
57
+ if self.reason is not None:
58
+ stack.push(CannotHandlePatternFlowStackFrame(reason=self.reason))
59
+ else:
60
+ stack.push(CannotHandlePatternFlowStackFrame())
61
+ return tracker.create_stack_updated_events(stack)
62
+
63
+ def __hash__(self) -> int:
64
+ return hash(self.reason)
65
+
66
+ def __eq__(self, other: object) -> bool:
67
+ if not isinstance(other, CannotHandleCommand):
68
+ return False
69
+
70
+ return other.reason == self.reason
@@ -0,0 +1,125 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any, Dict, List
5
+
6
+ import structlog
7
+
8
+ from rasa.dialogue_understanding.commands import Command
9
+ from rasa.dialogue_understanding.patterns.cancel import CancelPatternFlowStackFrame
10
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
11
+ from rasa.dialogue_understanding.stack.frames import UserFlowStackFrame
12
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import FlowStackFrameType
13
+ from rasa.shared.core.events import Event, FlowCancelled
14
+ from rasa.shared.core.flows import FlowsList
15
+ from rasa.shared.core.trackers import DialogueStateTracker
16
+ from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
17
+
18
+ structlogger = structlog.get_logger()
19
+
20
+
21
+ @dataclass
22
+ class CancelFlowCommand(Command):
23
+ """A command to cancel the current flow."""
24
+
25
+ @classmethod
26
+ def command(cls) -> str:
27
+ """Returns the command type."""
28
+ return "cancel flow"
29
+
30
+ @classmethod
31
+ def from_dict(cls, data: Dict[str, Any]) -> CancelFlowCommand:
32
+ """Converts the dictionary to a command.
33
+
34
+ Returns:
35
+ The converted dictionary.
36
+ """
37
+ return CancelFlowCommand()
38
+
39
+ @staticmethod
40
+ def select_canceled_frames(stack: DialogueStack) -> List[str]:
41
+ """Selects the frames that were canceled.
42
+
43
+ Args:
44
+ dialogue_stack: The dialogue stack.
45
+ current_flow: The current flow.
46
+
47
+ Returns:
48
+ The frames that were canceled."""
49
+ canceled_frames = []
50
+ # we need to go through the original stack dump in reverse order
51
+ # to find the frames that were canceled. we cancel everything from
52
+ # the top of the stack until we hit the user flow that was canceled.
53
+ # this will also cancel any patterns put on top of that user flow,
54
+ # e.g. corrections.
55
+ for frame in reversed(stack.frames):
56
+ canceled_frames.append(frame.frame_id)
57
+ if (
58
+ isinstance(frame, UserFlowStackFrame)
59
+ and frame.frame_type != FlowStackFrameType.CALL
60
+ ):
61
+ return canceled_frames
62
+ else:
63
+ # we should never get here as we should always find the user flow
64
+ # that was canceled.
65
+ raise ValueError(
66
+ f"Could not find a user flow frame to cancel. "
67
+ f"Current stack: {stack}."
68
+ )
69
+
70
+ def run_command_on_tracker(
71
+ self,
72
+ tracker: DialogueStateTracker,
73
+ all_flows: FlowsList,
74
+ original_tracker: DialogueStateTracker,
75
+ ) -> List[Event]:
76
+ """Runs the command on the tracker.
77
+
78
+ Args:
79
+ tracker: The tracker to run the command on.
80
+ all_flows: All flows in the assistant.
81
+ original_tracker: The tracker before any command was executed.
82
+
83
+ Returns:
84
+ The events to apply to the tracker.
85
+ """
86
+
87
+ stack = tracker.stack
88
+ original_stack = original_tracker.stack
89
+
90
+ applied_events: List[Event] = []
91
+
92
+ user_frame = top_user_flow_frame(original_stack)
93
+ current_flow = user_frame.flow(all_flows) if user_frame else None
94
+
95
+ if not current_flow:
96
+ structlogger.debug(
97
+ "command_executor.skip_cancel_flow.no_active_flow", command=self
98
+ )
99
+ return []
100
+
101
+ # we pass in the original dialogue stack (before any of the currently
102
+ # predicted commands were applied) to make sure we don't cancel any
103
+ # frames that were added by the currently predicted commands.
104
+ canceled_frames = self.select_canceled_frames(original_stack)
105
+
106
+ stack.push(
107
+ CancelPatternFlowStackFrame(
108
+ canceled_name=current_flow.readable_name(),
109
+ canceled_frames=canceled_frames,
110
+ )
111
+ )
112
+
113
+ if user_frame:
114
+ applied_events.append(FlowCancelled(user_frame.flow_id, user_frame.step_id))
115
+
116
+ return applied_events + tracker.create_stack_updated_events(stack)
117
+
118
+ def __hash__(self) -> int:
119
+ return hash(self.command())
120
+
121
+ def __eq__(self, other: object) -> bool:
122
+ if not isinstance(other, CancelFlowCommand):
123
+ return False
124
+
125
+ return True
@@ -0,0 +1,44 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any, Dict, List
5
+ from rasa.dialogue_understanding.commands import Command
6
+ from rasa.shared.core.events import Event
7
+ from rasa.shared.core.flows import FlowsList
8
+ from rasa.shared.core.trackers import DialogueStateTracker
9
+
10
+
11
+ @dataclass
12
+ class ChangeFlowCommand(Command):
13
+ """A command to indicate a change of flows was requested by the command
14
+ generator."""
15
+
16
+ @classmethod
17
+ def command(cls) -> str:
18
+ """Returns the command type."""
19
+ return "change_flow"
20
+
21
+ @classmethod
22
+ def from_dict(cls, data: Dict[str, Any]) -> ChangeFlowCommand:
23
+ """Converts the dictionary to a command.
24
+
25
+ Returns:
26
+ The converted dictionary.
27
+ """
28
+ return ChangeFlowCommand()
29
+
30
+ def run_command_on_tracker(
31
+ self,
32
+ tracker: DialogueStateTracker,
33
+ all_flows: FlowsList,
34
+ original_tracker: DialogueStateTracker,
35
+ ) -> List[Event]:
36
+ # the change flow command is not actually pushing anything to the tracker,
37
+ # but it is predicted by the MultiStepLLMCommandGenerator and used internally
38
+ return []
39
+
40
+ def __eq__(self, other: Any) -> bool:
41
+ return isinstance(other, ChangeFlowCommand)
42
+
43
+ def __hash__(self) -> int:
44
+ return hash(self.command())
@@ -0,0 +1,57 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any, Dict, List
5
+ from rasa.dialogue_understanding.commands import FreeFormAnswerCommand
6
+ from rasa.dialogue_understanding.patterns.chitchat import ChitchatPatternFlowStackFrame
7
+ from rasa.shared.core.events import Event
8
+ from rasa.shared.core.flows import FlowsList
9
+ from rasa.shared.core.trackers import DialogueStateTracker
10
+
11
+
12
+ @dataclass
13
+ class ChitChatAnswerCommand(FreeFormAnswerCommand):
14
+ """A command to indicate a chitchat style free-form answer by the bot."""
15
+
16
+ @classmethod
17
+ def command(cls) -> str:
18
+ """Returns the command type."""
19
+ return "chitchat"
20
+
21
+ @classmethod
22
+ def from_dict(cls, data: Dict[str, Any]) -> ChitChatAnswerCommand:
23
+ """Converts the dictionary to a command.
24
+
25
+ Returns:
26
+ The converted dictionary.
27
+ """
28
+ return ChitChatAnswerCommand()
29
+
30
+ def run_command_on_tracker(
31
+ self,
32
+ tracker: DialogueStateTracker,
33
+ all_flows: FlowsList,
34
+ original_tracker: DialogueStateTracker,
35
+ ) -> List[Event]:
36
+ """Runs the command on the tracker.
37
+
38
+ Args:
39
+ tracker: The tracker to run the command on.
40
+ all_flows: All flows in the assistant.
41
+ original_tracker: The tracker before any command was executed.
42
+
43
+ Returns:
44
+ The events to apply to the tracker.
45
+ """
46
+ stack = tracker.stack
47
+ stack.push(ChitchatPatternFlowStackFrame())
48
+ return tracker.create_stack_updated_events(stack)
49
+
50
+ def __hash__(self) -> int:
51
+ return hash(self.command())
52
+
53
+ def __eq__(self, other: object) -> bool:
54
+ if not isinstance(other, ChitChatAnswerCommand):
55
+ return False
56
+
57
+ return True