rasa-pro 3.12.18.dev1__py3-none-any.whl → 3.13.0a1.dev2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rasa-pro might be problematic. Click here for more details.

Files changed (341) hide show
  1. rasa/__init__.py +0 -6
  2. rasa/__main__.py +3 -4
  3. rasa/api.py +1 -1
  4. rasa/builder/create_openai_vector_store.py +69 -0
  5. rasa/builder/llm-helper-schema.json +69 -0
  6. rasa/builder/prompt_to_bot.py +650 -0
  7. rasa/builder/scrape_rasa_docs.py +97 -0
  8. rasa/builder/skill_to_bot_prompt.jinja +158 -0
  9. rasa/cli/dialogue_understanding_test.py +1 -1
  10. rasa/cli/e2e_test.py +1 -1
  11. rasa/cli/evaluate.py +2 -2
  12. rasa/cli/export.py +3 -3
  13. rasa/cli/llm_fine_tuning.py +1 -1
  14. rasa/cli/project_templates/default/config.yml +5 -32
  15. rasa/cli/project_templates/{calm → default}/e2e_tests/cancelations/user_cancels_during_a_correction.yml +1 -1
  16. rasa/cli/project_templates/{calm → default}/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +1 -1
  17. rasa/cli/project_templates/{calm → default}/e2e_tests/corrections/user_corrects_contact_handle.yml +1 -1
  18. rasa/cli/project_templates/{calm → default}/e2e_tests/corrections/user_corrects_contact_name.yml +1 -1
  19. rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +1 -1
  20. rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_lists_contacts.yml +1 -1
  21. rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_removes_contact.yml +1 -1
  22. rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_removes_contact_from_list.yml +1 -1
  23. rasa/cli/project_templates/default/endpoints.yml +18 -2
  24. rasa/cli/project_templates/defaults.py +133 -0
  25. rasa/cli/run.py +1 -1
  26. rasa/cli/scaffold.py +2 -3
  27. rasa/cli/studio/download.py +1 -1
  28. rasa/cli/studio/link.py +53 -0
  29. rasa/cli/studio/pull.py +78 -0
  30. rasa/cli/studio/push.py +78 -0
  31. rasa/cli/studio/studio.py +12 -0
  32. rasa/cli/studio/upload.py +5 -3
  33. rasa/cli/train.py +1 -1
  34. rasa/cli/utils.py +1 -1
  35. rasa/cli/x.py +1 -1
  36. rasa/constants.py +2 -0
  37. rasa/core/__init__.py +0 -16
  38. rasa/core/actions/action.py +42 -31
  39. rasa/core/actions/action_repeat_bot_messages.py +18 -22
  40. rasa/core/actions/action_run_slot_rejections.py +1 -2
  41. rasa/core/agent.py +18 -3
  42. rasa/core/available_endpoints.py +146 -0
  43. rasa/core/brokers/kafka.py +4 -0
  44. rasa/core/brokers/pika.py +5 -2
  45. rasa/core/brokers/sql.py +1 -1
  46. rasa/core/channels/botframework.py +2 -2
  47. rasa/core/channels/channel.py +2 -2
  48. rasa/core/channels/development_inspector.py +1 -1
  49. rasa/core/channels/facebook.py +1 -4
  50. rasa/core/channels/hangouts.py +8 -5
  51. rasa/core/channels/inspector/.eslintrc.cjs +12 -6
  52. rasa/core/channels/inspector/.prettierrc +5 -0
  53. rasa/core/channels/inspector/README.md +11 -5
  54. rasa/core/channels/inspector/dist/assets/{arc-9f75cc3b.js → arc-02053cc1.js} +1 -1
  55. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-7f34db23.js → blockDiagram-38ab4fdb-008b6289.js} +1 -1
  56. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-948bab2c.js → c4Diagram-3d4e48cf-fb2597be.js} +1 -1
  57. rasa/core/channels/inspector/dist/assets/channel-078dada8.js +1 -0
  58. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-53b0dd0e.js → classDiagram-70f12bd4-7f847e00.js} +1 -1
  59. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-fdf789e7.js → classDiagram-v2-f2320105-ba1d689b.js} +1 -1
  60. rasa/core/channels/inspector/dist/assets/clone-5b4516de.js +1 -0
  61. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-87c4ece5.js → createText-2e5e7dd3-dd8e67c4.js} +1 -1
  62. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-5a8b0749.js → edges-e0da2a9e-10784939.js} +1 -1
  63. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-66da90e2.js → erDiagram-9861fffd-24947ae6.js} +1 -1
  64. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-10044f05.js → flowDb-956e92f1-a9ced505.js} +1 -1
  65. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f338f66a.js → flowDiagram-66a62f08-afda9c7c.js} +1 -1
  66. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-f9613071.js +1 -0
  67. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-b13140aa.js → flowchart-elk-definition-4a651766-6ef530b8.js} +1 -1
  68. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-f2b4a55a.js → ganttDiagram-c361ad54-0c7dd39a.js} +1 -1
  69. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-dedc298d.js → gitGraphDiagram-72cf32ee-b57239d6.js} +1 -1
  70. rasa/core/channels/inspector/dist/assets/{graph-4ede11ff.js → graph-9ed57cec.js} +1 -1
  71. rasa/core/channels/inspector/dist/assets/{index-3862675e-65549d37.js → index-3862675e-233090de.js} +1 -1
  72. rasa/core/channels/inspector/dist/assets/{index-3a23e736.js → index-72184470.js} +123 -123
  73. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-65439671.js → infoDiagram-f8f76790-aa116649.js} +1 -1
  74. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-56d03d98.js → journeyDiagram-49397b02-e51877cc.js} +1 -1
  75. rasa/core/channels/inspector/dist/assets/{layout-dd48f7f4.js → layout-3ca3798c.js} +1 -1
  76. rasa/core/channels/inspector/dist/assets/{line-1569ad2c.js → line-26ee10d3.js} +1 -1
  77. rasa/core/channels/inspector/dist/assets/{linear-48bf4935.js → linear-aedded32.js} +1 -1
  78. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-688504c1.js → mindmap-definition-fc14e90a-d8957261.js} +1 -1
  79. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78b6d7e6.js → pieDiagram-8a3498a8-d771f885.js} +1 -1
  80. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-048b84b3.js → quadrantDiagram-120e2f19-09fdf50c.js} +1 -1
  81. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-dd67f107.js → requirementDiagram-deff3bca-9f0af02e.js} +1 -1
  82. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-8128436e.js → sankeyDiagram-04a897e0-84415b37.js} +1 -1
  83. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-1a0d1461.js → sequenceDiagram-704730f1-8dec4055.js} +1 -1
  84. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-46d388ed.js → stateDiagram-587899a1-c5431d07.js} +1 -1
  85. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-ea42951a.js → stateDiagram-v2-d93cdb3a-274e77d9.js} +1 -1
  86. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-7427ed0c.js → styles-6aaf32cf-e364a1d7.js} +1 -1
  87. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-ff5e5a16.js → styles-9a916d00-0dae36f6.js} +1 -1
  88. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-7b3680cf.js → styles-c10674c1-c4641675.js} +1 -1
  89. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-f860f2ad.js → svgDrawCommon-08f97a94-831fe9a1.js} +1 -1
  90. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-2eebf0c8.js → timeline-definition-85554ec2-c3304b3a.js} +1 -1
  91. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-5d7f4e96.js → xychartDiagram-e933f94c-da799369.js} +1 -1
  92. rasa/core/channels/inspector/dist/index.html +1 -1
  93. rasa/core/channels/inspector/package.json +3 -1
  94. rasa/core/channels/inspector/src/App.tsx +91 -90
  95. rasa/core/channels/inspector/src/components/Chat.tsx +45 -41
  96. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +40 -40
  97. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +57 -57
  98. rasa/core/channels/inspector/src/components/DialogueStack.tsx +36 -27
  99. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +4 -4
  100. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +7 -7
  101. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +28 -12
  102. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +9 -9
  103. rasa/core/channels/inspector/src/components/RasaLogo.tsx +5 -5
  104. rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +55 -60
  105. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +5 -5
  106. rasa/core/channels/inspector/src/components/Slots.tsx +22 -22
  107. rasa/core/channels/inspector/src/components/Welcome.tsx +28 -31
  108. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +245 -0
  109. rasa/core/channels/inspector/src/helpers/audio/microphone-processor.js +12 -0
  110. rasa/core/channels/inspector/src/helpers/audio/playback-processor.js +36 -0
  111. rasa/core/channels/inspector/src/helpers/conversation.ts +7 -7
  112. rasa/core/channels/inspector/src/helpers/formatters.test.ts +181 -181
  113. rasa/core/channels/inspector/src/helpers/formatters.ts +111 -111
  114. rasa/core/channels/inspector/src/helpers/utils.ts +78 -61
  115. rasa/core/channels/inspector/src/main.tsx +8 -8
  116. rasa/core/channels/inspector/src/theme/Button/Button.ts +8 -8
  117. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +7 -7
  118. rasa/core/channels/inspector/src/theme/Input/Input.ts +9 -9
  119. rasa/core/channels/inspector/src/theme/Link/Link.ts +6 -6
  120. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +13 -13
  121. rasa/core/channels/inspector/src/theme/Table/Table.tsx +10 -10
  122. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +5 -5
  123. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +7 -7
  124. rasa/core/channels/inspector/src/theme/base/colors.ts +64 -64
  125. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +21 -18
  126. rasa/core/channels/inspector/src/theme/base/radii.ts +8 -8
  127. rasa/core/channels/inspector/src/theme/base/shadows.ts +5 -5
  128. rasa/core/channels/inspector/src/theme/base/sizes.ts +5 -5
  129. rasa/core/channels/inspector/src/theme/base/space.ts +12 -12
  130. rasa/core/channels/inspector/src/theme/base/styles.ts +5 -5
  131. rasa/core/channels/inspector/src/theme/base/typography.ts +12 -12
  132. rasa/core/channels/inspector/src/theme/base/zIndices.ts +3 -3
  133. rasa/core/channels/inspector/src/theme/index.ts +38 -38
  134. rasa/core/channels/inspector/src/types.ts +56 -50
  135. rasa/core/channels/inspector/yarn.lock +5 -0
  136. rasa/core/channels/mattermost.py +1 -1
  137. rasa/core/channels/rasa_chat.py +2 -4
  138. rasa/core/channels/rest.py +5 -4
  139. rasa/core/channels/socketio.py +56 -41
  140. rasa/core/channels/studio_chat.py +337 -71
  141. rasa/core/channels/vier_cvg.py +1 -2
  142. rasa/core/channels/voice_ready/audiocodes.py +4 -11
  143. rasa/core/channels/voice_stream/audiocodes.py +8 -5
  144. rasa/core/channels/voice_stream/browser_audio.py +1 -1
  145. rasa/core/channels/voice_stream/genesys.py +2 -2
  146. rasa/core/channels/voice_stream/tts/__init__.py +8 -0
  147. rasa/core/channels/voice_stream/twilio_media_streams.py +10 -5
  148. rasa/core/channels/voice_stream/voice_channel.py +65 -23
  149. rasa/core/concurrent_lock_store.py +24 -10
  150. rasa/core/evaluation/marker_tracker_loader.py +1 -1
  151. rasa/core/exporter.py +1 -1
  152. rasa/core/http_interpreter.py +3 -7
  153. rasa/core/information_retrieval/faiss.py +18 -11
  154. rasa/core/information_retrieval/ingestion/__init__.py +0 -0
  155. rasa/core/information_retrieval/ingestion/faq_parser.py +158 -0
  156. rasa/core/jobs.py +2 -1
  157. rasa/core/lock_store.py +151 -60
  158. rasa/core/nlg/contextual_response_rephraser.py +17 -7
  159. rasa/core/nlg/generator.py +5 -22
  160. rasa/core/nlg/interpolator.py +2 -3
  161. rasa/core/nlg/response.py +6 -43
  162. rasa/core/nlg/summarize.py +1 -1
  163. rasa/core/nlg/translate.py +0 -8
  164. rasa/core/policies/enterprise_search_policy.py +262 -62
  165. rasa/core/policies/enterprise_search_prompt_with_relevancy_check_and_citation_template.jinja2 +63 -0
  166. rasa/core/policies/flow_policy.py +1 -1
  167. rasa/core/policies/flows/flow_executor.py +96 -17
  168. rasa/core/policies/intentless_policy.py +57 -20
  169. rasa/core/processor.py +114 -54
  170. rasa/core/run.py +33 -11
  171. rasa/core/tracker_stores/__init__.py +0 -0
  172. rasa/core/{auth_retry_tracker_store.py → tracker_stores/auth_retry_tracker_store.py} +5 -1
  173. rasa/core/tracker_stores/dynamo_tracker_store.py +218 -0
  174. rasa/core/tracker_stores/mongo_tracker_store.py +206 -0
  175. rasa/core/tracker_stores/redis_tracker_store.py +219 -0
  176. rasa/core/tracker_stores/sql_tracker_store.py +555 -0
  177. rasa/core/tracker_stores/tracker_store.py +805 -0
  178. rasa/core/training/interactive.py +1 -1
  179. rasa/core/utils.py +24 -95
  180. rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -1
  181. rasa/dialogue_understanding/coexistence/llm_based_router.py +10 -6
  182. rasa/dialogue_understanding/commands/can_not_handle_command.py +2 -0
  183. rasa/dialogue_understanding/commands/cancel_flow_command.py +5 -1
  184. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +2 -0
  185. rasa/dialogue_understanding/commands/clarify_command.py +4 -0
  186. rasa/dialogue_understanding/commands/command_syntax_manager.py +1 -0
  187. rasa/dialogue_understanding/commands/correct_slots_command.py +1 -3
  188. rasa/dialogue_understanding/commands/human_handoff_command.py +2 -0
  189. rasa/dialogue_understanding/commands/knowledge_answer_command.py +2 -0
  190. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +2 -0
  191. rasa/dialogue_understanding/commands/set_slot_command.py +10 -0
  192. rasa/dialogue_understanding/commands/skip_question_command.py +2 -0
  193. rasa/dialogue_understanding/commands/start_flow_command.py +4 -0
  194. rasa/dialogue_understanding/commands/utils.py +26 -2
  195. rasa/dialogue_understanding/generator/__init__.py +7 -1
  196. rasa/dialogue_understanding/generator/command_generator.py +4 -2
  197. rasa/dialogue_understanding/generator/command_parser.py +2 -2
  198. rasa/dialogue_understanding/generator/command_parser_validator.py +63 -0
  199. rasa/dialogue_understanding/generator/llm_based_command_generator.py +5 -17
  200. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -3
  201. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +4 -44
  202. rasa/dialogue_understanding/generator/nlu_command_adapter.py +2 -2
  203. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +78 -0
  204. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +26 -474
  205. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +147 -0
  206. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +477 -0
  207. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +11 -64
  208. rasa/dialogue_understanding/patterns/cancel.py +1 -2
  209. rasa/dialogue_understanding/patterns/clarify.py +1 -1
  210. rasa/dialogue_understanding/patterns/correction.py +2 -2
  211. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +37 -25
  212. rasa/dialogue_understanding/patterns/domain_for_patterns.py +190 -0
  213. rasa/dialogue_understanding/processor/command_processor.py +6 -7
  214. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +17 -4
  215. rasa/dialogue_understanding/stack/utils.py +3 -1
  216. rasa/dialogue_understanding/utils.py +68 -12
  217. rasa/dialogue_understanding_test/command_metric_calculation.py +7 -40
  218. rasa/dialogue_understanding_test/command_metrics.py +38 -0
  219. rasa/dialogue_understanding_test/du_test_case.py +58 -25
  220. rasa/dialogue_understanding_test/du_test_result.py +228 -132
  221. rasa/dialogue_understanding_test/du_test_runner.py +11 -2
  222. rasa/dialogue_understanding_test/io.py +35 -8
  223. rasa/e2e_test/e2e_test_runner.py +1 -1
  224. rasa/engine/constants.py +1 -1
  225. rasa/engine/graph.py +2 -2
  226. rasa/engine/recipes/default_recipe.py +1 -1
  227. rasa/engine/validation.py +3 -2
  228. rasa/hooks.py +2 -85
  229. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +1 -5
  230. rasa/llm_fine_tuning/utils.py +2 -4
  231. rasa/model_manager/model_api.py +90 -2
  232. rasa/model_manager/socket_bridge.py +0 -7
  233. rasa/model_manager/trainer_service.py +15 -12
  234. rasa/plugin.py +2 -15
  235. rasa/privacy/__init__.py +0 -0
  236. rasa/privacy/constants.py +83 -0
  237. rasa/privacy/event_broker_utils.py +77 -0
  238. rasa/privacy/privacy_config.py +281 -0
  239. rasa/privacy/privacy_config_schema.json +86 -0
  240. rasa/privacy/privacy_filter.py +340 -0
  241. rasa/privacy/privacy_manager.py +576 -0
  242. rasa/server.py +23 -2
  243. rasa/shared/constants.py +13 -4
  244. rasa/shared/core/command_payload_reader.py +1 -5
  245. rasa/shared/core/constants.py +4 -3
  246. rasa/shared/core/domain.py +172 -11
  247. rasa/shared/core/events.py +100 -6
  248. rasa/shared/core/flows/flow.py +35 -8
  249. rasa/shared/core/flows/flow_step.py +26 -4
  250. rasa/shared/core/flows/flow_step_links.py +15 -0
  251. rasa/shared/core/flows/flow_step_sequence.py +6 -0
  252. rasa/shared/core/flows/flows_yaml_schema.json +3 -0
  253. rasa/shared/core/flows/nlu_trigger.py +13 -0
  254. rasa/shared/core/flows/steps/action.py +7 -4
  255. rasa/shared/core/flows/steps/call.py +11 -4
  256. rasa/shared/core/flows/steps/collect.py +71 -6
  257. rasa/shared/core/flows/steps/internal.py +6 -1
  258. rasa/shared/core/flows/steps/link.py +7 -4
  259. rasa/shared/core/flows/steps/no_operation.py +7 -4
  260. rasa/shared/core/flows/steps/set_slots.py +8 -4
  261. rasa/shared/core/flows/validation.py +16 -3
  262. rasa/shared/core/flows/yaml_flows_io.py +106 -5
  263. rasa/shared/core/slots.py +33 -1
  264. rasa/shared/core/trackers.py +4 -10
  265. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +1 -4
  266. rasa/shared/importers/importer.py +14 -0
  267. rasa/shared/importers/static.py +63 -0
  268. rasa/shared/providers/constants.py +0 -9
  269. rasa/shared/providers/llm/_base_litellm_client.py +4 -14
  270. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -2
  271. rasa/shared/providers/llm/litellm_router_llm_client.py +7 -17
  272. rasa/shared/providers/llm/llm_client.py +15 -24
  273. rasa/shared/providers/llm/self_hosted_llm_client.py +2 -10
  274. rasa/shared/utils/common.py +43 -1
  275. rasa/shared/utils/llm.py +155 -3
  276. rasa/shared/utils/yaml.py +32 -0
  277. rasa/studio/data_handler.py +3 -3
  278. rasa/studio/download/__init__.py +0 -0
  279. rasa/studio/download/domains.py +49 -0
  280. rasa/studio/download/download.py +416 -0
  281. rasa/studio/download/flows.py +351 -0
  282. rasa/studio/link.py +200 -0
  283. rasa/studio/pull.py +94 -0
  284. rasa/studio/push.py +131 -0
  285. rasa/studio/results_logger.py +6 -1
  286. rasa/studio/upload.py +185 -71
  287. rasa/telemetry.py +83 -26
  288. rasa/tracing/config.py +4 -5
  289. rasa/tracing/constants.py +19 -1
  290. rasa/tracing/instrumentation/attribute_extractors.py +49 -11
  291. rasa/tracing/instrumentation/instrumentation.py +54 -3
  292. rasa/tracing/instrumentation/metrics.py +98 -15
  293. rasa/tracing/metric_instrument_provider.py +75 -3
  294. rasa/utils/common.py +37 -27
  295. rasa/utils/endpoints.py +22 -1
  296. rasa/utils/licensing.py +2 -3
  297. rasa/utils/log_utils.py +1 -45
  298. rasa/validator.py +9 -11
  299. rasa/version.py +1 -1
  300. {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/METADATA +12 -14
  301. {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/RECORD +318 -294
  302. rasa/anonymization/__init__.py +0 -2
  303. rasa/anonymization/anonymisation_rule_yaml_reader.py +0 -91
  304. rasa/anonymization/anonymization_pipeline.py +0 -286
  305. rasa/anonymization/anonymization_rule_executor.py +0 -266
  306. rasa/anonymization/anonymization_rule_orchestrator.py +0 -119
  307. rasa/anonymization/schemas/config.yml +0 -47
  308. rasa/anonymization/utils.py +0 -118
  309. rasa/cli/project_templates/calm/config.yml +0 -10
  310. rasa/cli/project_templates/calm/credentials.yml +0 -33
  311. rasa/cli/project_templates/calm/endpoints.yml +0 -58
  312. rasa/cli/project_templates/default/actions/actions.py +0 -27
  313. rasa/cli/project_templates/default/data/nlu.yml +0 -91
  314. rasa/cli/project_templates/default/data/rules.yml +0 -13
  315. rasa/cli/project_templates/default/data/stories.yml +0 -30
  316. rasa/cli/project_templates/default/domain.yml +0 -34
  317. rasa/cli/project_templates/default/tests/test_stories.yml +0 -91
  318. rasa/core/channels/inspector/dist/assets/channel-dfa68278.js +0 -1
  319. rasa/core/channels/inspector/dist/assets/clone-edb7f119.js +0 -1
  320. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-65e7c670.js +0 -1
  321. rasa/core/channels/inspector/src/helpers/audiostream.ts +0 -191
  322. rasa/core/tracker_store.py +0 -1792
  323. rasa/monkey_patches.py +0 -91
  324. rasa/studio/download.py +0 -489
  325. /rasa/{cli/project_templates/calm/actions → builder}/__init__.py +0 -0
  326. /rasa/cli/project_templates/{calm → default}/actions/action_template.py +0 -0
  327. /rasa/cli/project_templates/{calm → default}/actions/add_contact.py +0 -0
  328. /rasa/cli/project_templates/{calm → default}/actions/db.py +0 -0
  329. /rasa/cli/project_templates/{calm → default}/actions/list_contacts.py +0 -0
  330. /rasa/cli/project_templates/{calm → default}/actions/remove_contact.py +0 -0
  331. /rasa/cli/project_templates/{calm → default}/data/flows/add_contact.yml +0 -0
  332. /rasa/cli/project_templates/{calm → default}/data/flows/list_contacts.yml +0 -0
  333. /rasa/cli/project_templates/{calm → default}/data/flows/remove_contact.yml +0 -0
  334. /rasa/cli/project_templates/{calm → default}/db/contacts.json +0 -0
  335. /rasa/cli/project_templates/{calm → default}/domain/add_contact.yml +0 -0
  336. /rasa/cli/project_templates/{calm → default}/domain/list_contacts.yml +0 -0
  337. /rasa/cli/project_templates/{calm → default}/domain/remove_contact.yml +0 -0
  338. /rasa/cli/project_templates/{calm → default}/domain/shared.yml +0 -0
  339. {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/NOTICE +0 -0
  340. {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/WHEEL +0 -0
  341. {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,9 @@
1
1
  from contextlib import contextmanager
2
2
  from typing import Any, Dict, Generator, List, Optional, Text
3
3
 
4
- from rasa.dialogue_understanding.commands import Command
4
+ import structlog
5
+
6
+ from rasa.dialogue_understanding.commands import Command, NoopCommand, SetSlotCommand
5
7
  from rasa.dialogue_understanding.constants import (
6
8
  RASA_RECORD_COMMANDS_AND_PROMPTS_ENV_VAR_NAME,
7
9
  )
@@ -16,7 +18,6 @@ from rasa.shared.nlu.constants import (
16
18
  KEY_USER_PROMPT,
17
19
  PREDICTED_COMMANDS,
18
20
  PROMPTS,
19
- SET_SLOT_COMMAND,
20
21
  )
21
22
  from rasa.shared.nlu.training_data.message import Message
22
23
  from rasa.shared.providers.llm.llm_response import LLMResponse
@@ -26,6 +27,8 @@ record_commands_and_prompts = get_bool_env_variable(
26
27
  RASA_RECORD_COMMANDS_AND_PROMPTS_ENV_VAR_NAME, False
27
28
  )
28
29
 
30
+ structlogger = structlog.get_logger()
31
+
29
32
 
30
33
  @contextmanager
31
34
  def set_record_commands_and_prompts() -> Generator:
@@ -144,21 +147,74 @@ def _handle_via_nlu_in_coexistence(
144
147
  if not tracker:
145
148
  return False
146
149
 
150
+ commands = message.get(COMMANDS, [])
151
+
152
+ # If coexistence routing slot is not active, this setup doesn't
153
+ # support dual routing -> default to CALM
147
154
  if not tracker.has_coexistence_routing_slot:
155
+ structlogger.debug(
156
+ "utils.handle_via_nlu_in_coexistence"
157
+ ".tracker_missing_route_session_to_calm_slot",
158
+ event_info=(
159
+ f"Tracker doesn't have the '{ROUTE_TO_CALM_SLOT}' slot."
160
+ f"Routing to CALM."
161
+ ),
162
+ route_session_to_calm=commands,
163
+ )
148
164
  return False
149
165
 
166
+ # Check if the routing decision is stored in the tracker slot
167
+ # If slot is true -> route to CALM
168
+ # If slot is false -> route to DM1
150
169
  value = tracker.get_slot(ROUTE_TO_CALM_SLOT)
151
170
  if value is not None:
171
+ structlogger.debug(
172
+ "utils.handle_via_nlu_in_coexistence"
173
+ ".tracker_route_session_to_calm_slot_value",
174
+ event_info=(
175
+ f"Tracker slot '{ROUTE_TO_CALM_SLOT}' set to '{value}'. "
176
+ f"Routing to "
177
+ f"{'CALM' if value else 'NLU system'}."
178
+ ),
179
+ route_session_to_calm_value_in_tracker=value,
180
+ )
152
181
  return not value
153
182
 
154
- # routing slot has been reset so we need to check
155
- # the command issued by the Router component
156
- if message.get(COMMANDS):
157
- for command in message.get(COMMANDS):
158
- if (
159
- command.get("command") == SET_SLOT_COMMAND
160
- and command.get("name") == ROUTE_TO_CALM_SLOT
161
- ):
162
- return not command.get("value")
163
-
183
+ # Non-sticky routing to DM1 is only allowed if NoopCommand is the sole predicted
184
+ # command. In that case, route to DM1
185
+ if len(commands) == 1 and commands[0].get("command") == NoopCommand.command():
186
+ structlogger.debug(
187
+ "utils.handle_via_nlu_in_coexistence.noop_command_detected",
188
+ event_info="NoopCommand found. Routing to NLU system non-sticky.",
189
+ commands=commands,
190
+ )
191
+ return True
192
+
193
+ # If the slot was reset (e.g. new session), try to infer routing from
194
+ # attached commands. Look for a SetSlotCommand targeting the ROUTE_TO_CALM_SLOT
195
+ for command in message.get(COMMANDS, []):
196
+ # If slot is true -> route to CALM
197
+ # If slot is false -> route to DM1
198
+ if (
199
+ command.get("command") == SetSlotCommand.command()
200
+ and command.get("name") == ROUTE_TO_CALM_SLOT
201
+ ):
202
+ structlogger.debug(
203
+ "utils.handle_via_nlu_in_coexistence.set_slot_command_detected",
204
+ event_info=(
205
+ f"SetSlotCommand setting the '{ROUTE_TO_CALM_SLOT}' to "
206
+ f"'{command.get('value')}'. "
207
+ f"Routing to "
208
+ f"{'CALM' if command.get('value') else 'NLU system'}."
209
+ ),
210
+ commands=commands,
211
+ )
212
+ return not command.get("value")
213
+
214
+ # If no routing info is available -> default to CALM
215
+ structlogger.debug(
216
+ "utils.handle_via_nlu_in_coexistence.no_routing_info_available",
217
+ event_info="No routing info available. Routing to CALM.",
218
+ commands=commands,
219
+ )
164
220
  return False
@@ -1,54 +1,21 @@
1
+ import typing
1
2
  from collections import defaultdict
2
3
  from typing import Dict, List
3
4
 
4
- from pydantic import BaseModel
5
-
6
5
  from rasa.dialogue_understanding.commands import Command
7
6
  from rasa.dialogue_understanding_test.command_comparison import (
8
7
  is_command_present_in_list,
9
8
  )
10
- from rasa.dialogue_understanding_test.du_test_result import (
11
- DialogueUnderstandingTestResult,
12
- )
13
-
14
-
15
- class CommandMetrics(BaseModel):
16
- tp: int
17
- fp: int
18
- fn: int
19
- total_count: int
20
-
21
- @staticmethod
22
- def _safe_divide(numerator: float, denominator: float) -> float:
23
- """Safely perform division, returning 0.0 if the denominator is zero."""
24
- return numerator / denominator if denominator > 0 else 0.0
9
+ from rasa.dialogue_understanding_test.command_metrics import CommandMetrics
25
10
 
26
- def get_precision(self) -> float:
27
- return self._safe_divide(self.tp, self.tp + self.fp)
28
-
29
- def get_recall(self) -> float:
30
- return self._safe_divide(self.tp, self.tp + self.fn)
31
-
32
- def get_f1_score(self) -> float:
33
- precision = self.get_precision()
34
- recall = self.get_recall()
35
-
36
- return self._safe_divide(2 * precision * recall, precision + recall)
37
-
38
- def as_dict(self) -> Dict[str, float]:
39
- return {
40
- "tp": self.tp,
41
- "fp": self.fp,
42
- "fn": self.fn,
43
- "precision": self.get_precision(),
44
- "recall": self.get_recall(),
45
- "f1_score": self.get_f1_score(),
46
- "total_count": self.total_count,
47
- }
11
+ if typing.TYPE_CHECKING:
12
+ from rasa.dialogue_understanding_test.du_test_result import (
13
+ DialogueUnderstandingTestResult,
14
+ )
48
15
 
49
16
 
50
17
  def calculate_command_metrics(
51
- test_results: List[DialogueUnderstandingTestResult],
18
+ test_results: List["DialogueUnderstandingTestResult"],
52
19
  ) -> Dict[str, CommandMetrics]:
53
20
  """Calculate the command metrics for the test result."""
54
21
  metrics: Dict[str, CommandMetrics] = defaultdict(
@@ -0,0 +1,38 @@
1
+ from typing import Dict
2
+
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class CommandMetrics(BaseModel):
7
+ tp: int
8
+ fp: int
9
+ fn: int
10
+ total_count: int
11
+
12
+ @staticmethod
13
+ def _safe_divide(numerator: float, denominator: float) -> float:
14
+ """Safely perform division, returning 0.0 if the denominator is zero."""
15
+ return numerator / denominator if denominator > 0 else 0.0
16
+
17
+ def get_precision(self) -> float:
18
+ return self._safe_divide(self.tp, self.tp + self.fp)
19
+
20
+ def get_recall(self) -> float:
21
+ return self._safe_divide(self.tp, self.tp + self.fn)
22
+
23
+ def get_f1_score(self) -> float:
24
+ precision = self.get_precision()
25
+ recall = self.get_recall()
26
+
27
+ return self._safe_divide(2 * precision * recall, precision + recall)
28
+
29
+ def as_dict(self) -> Dict[str, float]:
30
+ return {
31
+ "tp": self.tp,
32
+ "fp": self.fp,
33
+ "fn": self.fn,
34
+ "precision": self.get_precision(),
35
+ "recall": self.get_recall(),
36
+ "f1_score": self.get_f1_score(),
37
+ "total_count": self.total_count,
38
+ }
@@ -1,7 +1,11 @@
1
+ from collections import defaultdict
1
2
  from typing import Any, Dict, Iterator, List, Optional, Tuple
2
3
 
3
4
  from pydantic import BaseModel, Field
4
5
 
6
+ from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
7
+ from rasa.core.policies.enterprise_search_policy import EnterpriseSearchPolicy
8
+ from rasa.core.policies.intentless_policy import IntentlessPolicy
5
9
  from rasa.dialogue_understanding.commands.prompt_command import PromptCommand
6
10
  from rasa.dialogue_understanding.generator.command_parser import parse_commands
7
11
  from rasa.dialogue_understanding_test.command_comparison import are_command_lists_equal
@@ -69,6 +73,8 @@ class DialogueUnderstandingOutput(BaseModel):
69
73
  commands: Dict[str, List[PromptCommand]]
70
74
  # List of prompts
71
75
  prompts: Optional[List[Dict[str, Any]]] = None
76
+ # Latency of the full message roundtrip
77
+ latency: Optional[float] = None
72
78
 
73
79
  class Config:
74
80
  """Skip validation for PromptCommand protocol as pydantic does not know how to
@@ -88,27 +94,41 @@ class DialogueUnderstandingOutput(BaseModel):
88
94
  def get_component_names_that_predicted_commands_or_have_llm_response(
89
95
  self,
90
96
  ) -> List[str]:
91
- """Get all component names that have predicted commands or recieved
97
+ """Get all relevant component names.
98
+
99
+ Components are relevant if they have predicted commands or received a
92
100
  non-empty response from LLM.
93
101
  """
102
+ # Exclude components that are not related to Dialogue Understanding
103
+ component_names_to_exclude = [
104
+ EnterpriseSearchPolicy.__name__,
105
+ IntentlessPolicy.__name__,
106
+ ContextualResponseRephraser.__name__,
107
+ ]
108
+
94
109
  component_names_that_predicted_commands = (
95
110
  [
96
111
  component_name
97
112
  for component_name, predicted_commands in self.commands.items()
98
113
  if predicted_commands
114
+ and component_name not in component_names_to_exclude
99
115
  ]
100
116
  if self.commands
101
117
  else []
102
118
  )
119
+
103
120
  components_with_prompts = (
104
121
  [
105
122
  str(prompt.get(KEY_COMPONENT_NAME, None))
106
123
  for prompt in self.prompts
107
124
  if prompt.get(KEY_LLM_RESPONSE_METADATA, None)
125
+ and prompt.get(KEY_COMPONENT_NAME, None)
126
+ not in component_names_to_exclude
108
127
  ]
109
128
  if self.prompts
110
129
  else []
111
130
  )
131
+
112
132
  return list(
113
133
  set(component_names_that_predicted_commands + components_with_prompts)
114
134
  )
@@ -298,41 +318,54 @@ class DialogueUnderstandingTestStep(BaseModel):
298
318
 
299
319
  return ""
300
320
 
301
- def get_latencies(self) -> List[float]:
321
+ def get_latencies(self) -> Dict[str, List[float]]:
302
322
  if self.dialogue_understanding_output is None:
303
- return []
323
+ return {}
304
324
 
305
- prompts = self.dialogue_understanding_output.get_component_name_to_prompt_info()
325
+ component_name_to_prompt_info = (
326
+ self.dialogue_understanding_output.get_component_name_to_prompt_info()
327
+ )
306
328
 
307
- return [
308
- prompt_data.get(KEY_LATENCY, 0.0)
309
- for prompt in prompts.values()
310
- for prompt_data in prompt
311
- ]
329
+ latencies = defaultdict(list)
330
+ for component_name, prompt_info_list in component_name_to_prompt_info.items():
331
+ for prompt_info in prompt_info_list:
332
+ latencies[component_name].append(prompt_info.get(KEY_LATENCY, 0.0))
312
333
 
313
- def get_completion_tokens(self) -> List[int]:
334
+ return latencies
335
+
336
+ def get_completion_tokens(self) -> Dict[str, List[float]]:
314
337
  if self.dialogue_understanding_output is None:
315
- return []
338
+ return {}
316
339
 
317
- prompts = self.dialogue_understanding_output.get_component_name_to_prompt_info()
340
+ component_name_to_prompt_info = (
341
+ self.dialogue_understanding_output.get_component_name_to_prompt_info()
342
+ )
318
343
 
319
- return [
320
- prompt_data.get(KEY_COMPLETION_TOKENS, 0)
321
- for prompt in prompts.values()
322
- for prompt_data in prompt
323
- ]
344
+ completion_tokens = defaultdict(list)
345
+ for component_name, prompt_info_list in component_name_to_prompt_info.items():
346
+ for prompt_info in prompt_info_list:
347
+ completion_tokens[component_name].append(
348
+ prompt_info.get(KEY_COMPLETION_TOKENS, 0.0)
349
+ )
350
+
351
+ return completion_tokens
324
352
 
325
- def get_prompt_tokens(self) -> List[int]:
353
+ def get_prompt_tokens(self) -> Dict[str, List[float]]:
326
354
  if self.dialogue_understanding_output is None:
327
- return []
355
+ return {}
328
356
 
329
- prompts = self.dialogue_understanding_output.get_component_name_to_prompt_info()
357
+ component_name_to_prompt_info = (
358
+ self.dialogue_understanding_output.get_component_name_to_prompt_info()
359
+ )
330
360
 
331
- return [
332
- prompt_data.get(KEY_PROMPT_TOKENS, 0)
333
- for prompt in prompts.values()
334
- for prompt_data in prompt
335
- ]
361
+ prompt_tokens = defaultdict(list)
362
+ for component_name, prompt_info_list in component_name_to_prompt_info.items():
363
+ for prompt_info in prompt_info_list:
364
+ prompt_tokens[component_name].append(
365
+ prompt_info.get(KEY_PROMPT_TOKENS, 0.0)
366
+ )
367
+
368
+ return prompt_tokens
336
369
 
337
370
 
338
371
  class DialogueUnderstandingTestCase(BaseModel):