rasa-pro 3.12.18__py3-none-any.whl → 3.13.0a1.dev1__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 (330) hide show
  1. rasa/__main__.py +3 -4
  2. rasa/api.py +1 -1
  3. rasa/builder/create_openai_vector_store.py +69 -0
  4. rasa/builder/llm-helper-schema.json +69 -0
  5. rasa/builder/prompt_to_bot.py +645 -0
  6. rasa/builder/scrape_rasa_docs.py +97 -0
  7. rasa/builder/skill_to_bot_prompt.jinja +158 -0
  8. rasa/cli/dialogue_understanding_test.py +1 -1
  9. rasa/cli/e2e_test.py +1 -1
  10. rasa/cli/evaluate.py +2 -2
  11. rasa/cli/export.py +3 -3
  12. rasa/cli/llm_fine_tuning.py +1 -1
  13. rasa/cli/project_templates/default/config.yml +5 -32
  14. rasa/cli/project_templates/{calm → default}/e2e_tests/cancelations/user_cancels_during_a_correction.yml +1 -1
  15. rasa/cli/project_templates/{calm → default}/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +1 -1
  16. rasa/cli/project_templates/{calm → default}/e2e_tests/corrections/user_corrects_contact_handle.yml +1 -1
  17. rasa/cli/project_templates/{calm → default}/e2e_tests/corrections/user_corrects_contact_name.yml +1 -1
  18. rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +1 -1
  19. rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_lists_contacts.yml +1 -1
  20. rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_removes_contact.yml +1 -1
  21. rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_removes_contact_from_list.yml +1 -1
  22. rasa/cli/project_templates/default/endpoints.yml +18 -2
  23. rasa/cli/project_templates/defaults.py +133 -0
  24. rasa/cli/run.py +1 -1
  25. rasa/cli/scaffold.py +2 -3
  26. rasa/cli/studio/download.py +1 -1
  27. rasa/cli/studio/link.py +53 -0
  28. rasa/cli/studio/pull.py +78 -0
  29. rasa/cli/studio/push.py +78 -0
  30. rasa/cli/studio/studio.py +12 -0
  31. rasa/cli/studio/upload.py +5 -3
  32. rasa/cli/train.py +1 -1
  33. rasa/cli/utils.py +1 -1
  34. rasa/cli/x.py +1 -1
  35. rasa/constants.py +2 -0
  36. rasa/core/__init__.py +0 -16
  37. rasa/core/actions/action.py +43 -29
  38. rasa/core/actions/action_repeat_bot_messages.py +18 -22
  39. rasa/core/actions/action_run_slot_rejections.py +1 -2
  40. rasa/core/agent.py +18 -3
  41. rasa/core/available_endpoints.py +146 -0
  42. rasa/core/brokers/kafka.py +4 -0
  43. rasa/core/brokers/pika.py +5 -2
  44. rasa/core/brokers/sql.py +1 -1
  45. rasa/core/channels/botframework.py +2 -2
  46. rasa/core/channels/channel.py +2 -2
  47. rasa/core/channels/development_inspector.py +1 -1
  48. rasa/core/channels/facebook.py +1 -4
  49. rasa/core/channels/hangouts.py +8 -5
  50. rasa/core/channels/inspector/.eslintrc.cjs +12 -6
  51. rasa/core/channels/inspector/.prettierrc +5 -0
  52. rasa/core/channels/inspector/README.md +11 -5
  53. rasa/core/channels/inspector/dist/assets/{arc-9f75cc3b.js → arc-02053cc1.js} +1 -1
  54. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-7f34db23.js → blockDiagram-38ab4fdb-008b6289.js} +1 -1
  55. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-948bab2c.js → c4Diagram-3d4e48cf-fb2597be.js} +1 -1
  56. rasa/core/channels/inspector/dist/assets/channel-078dada8.js +1 -0
  57. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-53b0dd0e.js → classDiagram-70f12bd4-7f847e00.js} +1 -1
  58. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-fdf789e7.js → classDiagram-v2-f2320105-ba1d689b.js} +1 -1
  59. rasa/core/channels/inspector/dist/assets/clone-5b4516de.js +1 -0
  60. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-87c4ece5.js → createText-2e5e7dd3-dd8e67c4.js} +1 -1
  61. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-5a8b0749.js → edges-e0da2a9e-10784939.js} +1 -1
  62. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-66da90e2.js → erDiagram-9861fffd-24947ae6.js} +1 -1
  63. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-10044f05.js → flowDb-956e92f1-a9ced505.js} +1 -1
  64. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f338f66a.js → flowDiagram-66a62f08-afda9c7c.js} +1 -1
  65. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-f9613071.js +1 -0
  66. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-b13140aa.js → flowchart-elk-definition-4a651766-6ef530b8.js} +1 -1
  67. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-f2b4a55a.js → ganttDiagram-c361ad54-0c7dd39a.js} +1 -1
  68. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-dedc298d.js → gitGraphDiagram-72cf32ee-b57239d6.js} +1 -1
  69. rasa/core/channels/inspector/dist/assets/{graph-4ede11ff.js → graph-9ed57cec.js} +1 -1
  70. rasa/core/channels/inspector/dist/assets/{index-3862675e-65549d37.js → index-3862675e-233090de.js} +1 -1
  71. rasa/core/channels/inspector/dist/assets/{index-3a23e736.js → index-72184470.js} +123 -123
  72. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-65439671.js → infoDiagram-f8f76790-aa116649.js} +1 -1
  73. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-56d03d98.js → journeyDiagram-49397b02-e51877cc.js} +1 -1
  74. rasa/core/channels/inspector/dist/assets/{layout-dd48f7f4.js → layout-3ca3798c.js} +1 -1
  75. rasa/core/channels/inspector/dist/assets/{line-1569ad2c.js → line-26ee10d3.js} +1 -1
  76. rasa/core/channels/inspector/dist/assets/{linear-48bf4935.js → linear-aedded32.js} +1 -1
  77. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-688504c1.js → mindmap-definition-fc14e90a-d8957261.js} +1 -1
  78. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78b6d7e6.js → pieDiagram-8a3498a8-d771f885.js} +1 -1
  79. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-048b84b3.js → quadrantDiagram-120e2f19-09fdf50c.js} +1 -1
  80. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-dd67f107.js → requirementDiagram-deff3bca-9f0af02e.js} +1 -1
  81. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-8128436e.js → sankeyDiagram-04a897e0-84415b37.js} +1 -1
  82. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-1a0d1461.js → sequenceDiagram-704730f1-8dec4055.js} +1 -1
  83. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-46d388ed.js → stateDiagram-587899a1-c5431d07.js} +1 -1
  84. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-ea42951a.js → stateDiagram-v2-d93cdb3a-274e77d9.js} +1 -1
  85. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-7427ed0c.js → styles-6aaf32cf-e364a1d7.js} +1 -1
  86. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-ff5e5a16.js → styles-9a916d00-0dae36f6.js} +1 -1
  87. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-7b3680cf.js → styles-c10674c1-c4641675.js} +1 -1
  88. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-f860f2ad.js → svgDrawCommon-08f97a94-831fe9a1.js} +1 -1
  89. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-2eebf0c8.js → timeline-definition-85554ec2-c3304b3a.js} +1 -1
  90. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-5d7f4e96.js → xychartDiagram-e933f94c-da799369.js} +1 -1
  91. rasa/core/channels/inspector/dist/index.html +1 -1
  92. rasa/core/channels/inspector/package.json +3 -1
  93. rasa/core/channels/inspector/src/App.tsx +91 -90
  94. rasa/core/channels/inspector/src/components/Chat.tsx +45 -41
  95. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +40 -40
  96. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +57 -57
  97. rasa/core/channels/inspector/src/components/DialogueStack.tsx +36 -27
  98. rasa/core/channels/inspector/src/components/ExpandIcon.tsx +4 -4
  99. rasa/core/channels/inspector/src/components/FullscreenButton.tsx +7 -7
  100. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +28 -12
  101. rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +9 -9
  102. rasa/core/channels/inspector/src/components/RasaLogo.tsx +5 -5
  103. rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +55 -60
  104. rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +5 -5
  105. rasa/core/channels/inspector/src/components/Slots.tsx +22 -22
  106. rasa/core/channels/inspector/src/components/Welcome.tsx +28 -31
  107. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +245 -0
  108. rasa/core/channels/inspector/src/helpers/audio/microphone-processor.js +12 -0
  109. rasa/core/channels/inspector/src/helpers/audio/playback-processor.js +36 -0
  110. rasa/core/channels/inspector/src/helpers/conversation.ts +7 -7
  111. rasa/core/channels/inspector/src/helpers/formatters.test.ts +181 -181
  112. rasa/core/channels/inspector/src/helpers/formatters.ts +111 -111
  113. rasa/core/channels/inspector/src/helpers/utils.ts +78 -61
  114. rasa/core/channels/inspector/src/main.tsx +8 -8
  115. rasa/core/channels/inspector/src/theme/Button/Button.ts +8 -8
  116. rasa/core/channels/inspector/src/theme/Heading/Heading.ts +7 -7
  117. rasa/core/channels/inspector/src/theme/Input/Input.ts +9 -9
  118. rasa/core/channels/inspector/src/theme/Link/Link.ts +6 -6
  119. rasa/core/channels/inspector/src/theme/Modal/Modal.ts +13 -13
  120. rasa/core/channels/inspector/src/theme/Table/Table.tsx +10 -10
  121. rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +5 -5
  122. rasa/core/channels/inspector/src/theme/base/breakpoints.ts +7 -7
  123. rasa/core/channels/inspector/src/theme/base/colors.ts +64 -64
  124. rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +21 -18
  125. rasa/core/channels/inspector/src/theme/base/radii.ts +8 -8
  126. rasa/core/channels/inspector/src/theme/base/shadows.ts +5 -5
  127. rasa/core/channels/inspector/src/theme/base/sizes.ts +5 -5
  128. rasa/core/channels/inspector/src/theme/base/space.ts +12 -12
  129. rasa/core/channels/inspector/src/theme/base/styles.ts +5 -5
  130. rasa/core/channels/inspector/src/theme/base/typography.ts +12 -12
  131. rasa/core/channels/inspector/src/theme/base/zIndices.ts +3 -3
  132. rasa/core/channels/inspector/src/theme/index.ts +38 -38
  133. rasa/core/channels/inspector/src/types.ts +56 -50
  134. rasa/core/channels/inspector/yarn.lock +5 -0
  135. rasa/core/channels/mattermost.py +1 -1
  136. rasa/core/channels/rasa_chat.py +2 -4
  137. rasa/core/channels/rest.py +5 -4
  138. rasa/core/channels/socketio.py +56 -41
  139. rasa/core/channels/studio_chat.py +337 -71
  140. rasa/core/channels/vier_cvg.py +1 -2
  141. rasa/core/channels/voice_ready/audiocodes.py +4 -11
  142. rasa/core/channels/voice_stream/audiocodes.py +8 -5
  143. rasa/core/channels/voice_stream/browser_audio.py +1 -1
  144. rasa/core/channels/voice_stream/genesys.py +2 -2
  145. rasa/core/channels/voice_stream/tts/__init__.py +8 -0
  146. rasa/core/channels/voice_stream/twilio_media_streams.py +10 -5
  147. rasa/core/channels/voice_stream/voice_channel.py +65 -23
  148. rasa/core/concurrent_lock_store.py +24 -10
  149. rasa/core/evaluation/marker_tracker_loader.py +1 -1
  150. rasa/core/exporter.py +1 -1
  151. rasa/core/http_interpreter.py +3 -7
  152. rasa/core/information_retrieval/faiss.py +18 -11
  153. rasa/core/information_retrieval/ingestion/__init__.py +0 -0
  154. rasa/core/information_retrieval/ingestion/faq_parser.py +158 -0
  155. rasa/core/jobs.py +2 -1
  156. rasa/core/lock_store.py +151 -60
  157. rasa/core/nlg/contextual_response_rephraser.py +17 -7
  158. rasa/core/nlg/generator.py +5 -22
  159. rasa/core/nlg/interpolator.py +2 -3
  160. rasa/core/nlg/response.py +6 -43
  161. rasa/core/nlg/summarize.py +1 -1
  162. rasa/core/nlg/translate.py +0 -8
  163. rasa/core/policies/enterprise_search_policy.py +262 -62
  164. rasa/core/policies/enterprise_search_prompt_with_relevancy_check_and_citation_template.jinja2 +63 -0
  165. rasa/core/policies/flow_policy.py +1 -1
  166. rasa/core/policies/flows/flow_executor.py +96 -17
  167. rasa/core/policies/intentless_policy.py +56 -17
  168. rasa/core/processor.py +64 -49
  169. rasa/core/run.py +33 -11
  170. rasa/core/tracker_stores/__init__.py +0 -0
  171. rasa/core/{auth_retry_tracker_store.py → tracker_stores/auth_retry_tracker_store.py} +5 -1
  172. rasa/core/tracker_stores/dynamo_tracker_store.py +218 -0
  173. rasa/core/tracker_stores/mongo_tracker_store.py +206 -0
  174. rasa/core/tracker_stores/redis_tracker_store.py +219 -0
  175. rasa/core/tracker_stores/sql_tracker_store.py +555 -0
  176. rasa/core/tracker_stores/tracker_store.py +805 -0
  177. rasa/core/training/interactive.py +1 -1
  178. rasa/core/utils.py +24 -95
  179. rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -1
  180. rasa/dialogue_understanding/coexistence/llm_based_router.py +9 -6
  181. rasa/dialogue_understanding/commands/can_not_handle_command.py +2 -0
  182. rasa/dialogue_understanding/commands/cancel_flow_command.py +5 -1
  183. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +2 -0
  184. rasa/dialogue_understanding/commands/clarify_command.py +4 -0
  185. rasa/dialogue_understanding/commands/command_syntax_manager.py +1 -0
  186. rasa/dialogue_understanding/commands/correct_slots_command.py +1 -3
  187. rasa/dialogue_understanding/commands/human_handoff_command.py +2 -0
  188. rasa/dialogue_understanding/commands/knowledge_answer_command.py +2 -0
  189. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +2 -0
  190. rasa/dialogue_understanding/commands/set_slot_command.py +4 -0
  191. rasa/dialogue_understanding/commands/skip_question_command.py +2 -0
  192. rasa/dialogue_understanding/commands/start_flow_command.py +4 -0
  193. rasa/dialogue_understanding/generator/__init__.py +7 -1
  194. rasa/dialogue_understanding/generator/command_generator.py +4 -2
  195. rasa/dialogue_understanding/generator/command_parser.py +2 -2
  196. rasa/dialogue_understanding/generator/command_parser_validator.py +63 -0
  197. rasa/dialogue_understanding/generator/llm_based_command_generator.py +1 -2
  198. rasa/dialogue_understanding/generator/nlu_command_adapter.py +2 -2
  199. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +78 -0
  200. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +26 -461
  201. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +147 -0
  202. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +477 -0
  203. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +11 -64
  204. rasa/dialogue_understanding/patterns/cancel.py +1 -2
  205. rasa/dialogue_understanding/patterns/clarify.py +1 -1
  206. rasa/dialogue_understanding/patterns/correction.py +2 -2
  207. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +37 -25
  208. rasa/dialogue_understanding/patterns/domain_for_patterns.py +190 -0
  209. rasa/dialogue_understanding/processor/command_processor.py +6 -7
  210. rasa/dialogue_understanding/stack/utils.py +3 -1
  211. rasa/dialogue_understanding_test/command_metric_calculation.py +7 -40
  212. rasa/dialogue_understanding_test/command_metrics.py +38 -0
  213. rasa/dialogue_understanding_test/du_test_case.py +58 -25
  214. rasa/dialogue_understanding_test/du_test_result.py +228 -132
  215. rasa/dialogue_understanding_test/du_test_runner.py +11 -2
  216. rasa/dialogue_understanding_test/du_test_schema.yml +3 -3
  217. rasa/dialogue_understanding_test/io.py +35 -8
  218. rasa/e2e_test/e2e_test_runner.py +1 -1
  219. rasa/e2e_test/e2e_test_schema.yml +3 -3
  220. rasa/engine/constants.py +1 -1
  221. rasa/engine/graph.py +2 -2
  222. rasa/engine/recipes/default_recipe.py +1 -1
  223. rasa/engine/validation.py +3 -2
  224. rasa/hooks.py +2 -30
  225. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +1 -5
  226. rasa/model_manager/model_api.py +90 -2
  227. rasa/model_manager/socket_bridge.py +0 -7
  228. rasa/model_manager/trainer_service.py +15 -12
  229. rasa/plugin.py +2 -15
  230. rasa/privacy/__init__.py +0 -0
  231. rasa/privacy/constants.py +83 -0
  232. rasa/privacy/event_broker_utils.py +77 -0
  233. rasa/privacy/privacy_config.py +281 -0
  234. rasa/privacy/privacy_config_schema.json +86 -0
  235. rasa/privacy/privacy_filter.py +340 -0
  236. rasa/privacy/privacy_manager.py +576 -0
  237. rasa/server.py +23 -2
  238. rasa/shared/constants.py +14 -0
  239. rasa/shared/core/command_payload_reader.py +1 -5
  240. rasa/shared/core/constants.py +4 -3
  241. rasa/shared/core/domain.py +172 -11
  242. rasa/shared/core/events.py +100 -6
  243. rasa/shared/core/flows/flow.py +35 -8
  244. rasa/shared/core/flows/flow_step.py +26 -4
  245. rasa/shared/core/flows/flow_step_links.py +15 -0
  246. rasa/shared/core/flows/flow_step_sequence.py +6 -0
  247. rasa/shared/core/flows/flows_yaml_schema.json +3 -0
  248. rasa/shared/core/flows/nlu_trigger.py +13 -0
  249. rasa/shared/core/flows/steps/action.py +7 -4
  250. rasa/shared/core/flows/steps/call.py +11 -4
  251. rasa/shared/core/flows/steps/collect.py +71 -6
  252. rasa/shared/core/flows/steps/internal.py +6 -1
  253. rasa/shared/core/flows/steps/link.py +7 -4
  254. rasa/shared/core/flows/steps/no_operation.py +7 -4
  255. rasa/shared/core/flows/steps/set_slots.py +8 -4
  256. rasa/shared/core/flows/validation.py +16 -3
  257. rasa/shared/core/flows/yaml_flows_io.py +106 -5
  258. rasa/shared/core/slots.py +33 -1
  259. rasa/shared/core/trackers.py +4 -10
  260. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +1 -4
  261. rasa/shared/importers/importer.py +14 -0
  262. rasa/shared/importers/static.py +63 -0
  263. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -2
  264. rasa/shared/utils/common.py +43 -1
  265. rasa/shared/utils/llm.py +155 -3
  266. rasa/shared/utils/yaml.py +32 -0
  267. rasa/studio/data_handler.py +3 -3
  268. rasa/studio/download/__init__.py +0 -0
  269. rasa/studio/download/domains.py +49 -0
  270. rasa/studio/download/download.py +416 -0
  271. rasa/studio/download/flows.py +351 -0
  272. rasa/studio/link.py +200 -0
  273. rasa/studio/pull.py +94 -0
  274. rasa/studio/push.py +131 -0
  275. rasa/studio/results_logger.py +6 -1
  276. rasa/studio/upload.py +185 -71
  277. rasa/telemetry.py +83 -26
  278. rasa/tracing/config.py +4 -5
  279. rasa/tracing/constants.py +19 -1
  280. rasa/tracing/instrumentation/attribute_extractors.py +47 -9
  281. rasa/tracing/instrumentation/instrumentation.py +54 -3
  282. rasa/tracing/instrumentation/metrics.py +98 -15
  283. rasa/tracing/metric_instrument_provider.py +75 -3
  284. rasa/utils/common.py +37 -27
  285. rasa/utils/endpoints.py +22 -1
  286. rasa/utils/licensing.py +2 -3
  287. rasa/utils/log_utils.py +1 -45
  288. rasa/validator.py +9 -11
  289. rasa/version.py +1 -1
  290. {rasa_pro-3.12.18.dist-info → rasa_pro-3.13.0a1.dev1.dist-info}/METADATA +12 -13
  291. {rasa_pro-3.12.18.dist-info → rasa_pro-3.13.0a1.dev1.dist-info}/RECORD +308 -283
  292. rasa/anonymization/__init__.py +0 -2
  293. rasa/anonymization/anonymisation_rule_yaml_reader.py +0 -91
  294. rasa/anonymization/anonymization_pipeline.py +0 -286
  295. rasa/anonymization/anonymization_rule_executor.py +0 -266
  296. rasa/anonymization/anonymization_rule_orchestrator.py +0 -119
  297. rasa/anonymization/schemas/config.yml +0 -47
  298. rasa/anonymization/utils.py +0 -118
  299. rasa/cli/project_templates/calm/config.yml +0 -10
  300. rasa/cli/project_templates/calm/credentials.yml +0 -33
  301. rasa/cli/project_templates/calm/endpoints.yml +0 -58
  302. rasa/cli/project_templates/default/actions/actions.py +0 -27
  303. rasa/cli/project_templates/default/data/nlu.yml +0 -91
  304. rasa/cli/project_templates/default/data/rules.yml +0 -13
  305. rasa/cli/project_templates/default/data/stories.yml +0 -30
  306. rasa/cli/project_templates/default/domain.yml +0 -34
  307. rasa/cli/project_templates/default/tests/test_stories.yml +0 -91
  308. rasa/core/channels/inspector/dist/assets/channel-dfa68278.js +0 -1
  309. rasa/core/channels/inspector/dist/assets/clone-edb7f119.js +0 -1
  310. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-65e7c670.js +0 -1
  311. rasa/core/channels/inspector/src/helpers/audiostream.ts +0 -191
  312. rasa/core/tracker_store.py +0 -1792
  313. rasa/studio/download.py +0 -489
  314. /rasa/{cli/project_templates/calm/actions → builder}/__init__.py +0 -0
  315. /rasa/cli/project_templates/{calm → default}/actions/action_template.py +0 -0
  316. /rasa/cli/project_templates/{calm → default}/actions/add_contact.py +0 -0
  317. /rasa/cli/project_templates/{calm → default}/actions/db.py +0 -0
  318. /rasa/cli/project_templates/{calm → default}/actions/list_contacts.py +0 -0
  319. /rasa/cli/project_templates/{calm → default}/actions/remove_contact.py +0 -0
  320. /rasa/cli/project_templates/{calm → default}/data/flows/add_contact.yml +0 -0
  321. /rasa/cli/project_templates/{calm → default}/data/flows/list_contacts.yml +0 -0
  322. /rasa/cli/project_templates/{calm → default}/data/flows/remove_contact.yml +0 -0
  323. /rasa/cli/project_templates/{calm → default}/db/contacts.json +0 -0
  324. /rasa/cli/project_templates/{calm → default}/domain/add_contact.yml +0 -0
  325. /rasa/cli/project_templates/{calm → default}/domain/list_contacts.yml +0 -0
  326. /rasa/cli/project_templates/{calm → default}/domain/remove_contact.yml +0 -0
  327. /rasa/cli/project_templates/{calm → default}/domain/shared.yml +0 -0
  328. {rasa_pro-3.12.18.dist-info → rasa_pro-3.13.0a1.dev1.dist-info}/NOTICE +0 -0
  329. {rasa_pro-3.12.18.dist-info → rasa_pro-3.13.0a1.dev1.dist-info}/WHEEL +0 -0
  330. {rasa_pro-3.12.18.dist-info → rasa_pro-3.13.0a1.dev1.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,53 @@
1
+ import argparse
2
+ from typing import List, Text
3
+
4
+ from rasa.cli import SubParsersAction
5
+ from rasa.cli.studio.upload import (
6
+ add_config_param,
7
+ add_data_param,
8
+ add_domain_param,
9
+ add_endpoint_param,
10
+ )
11
+ from rasa.shared.constants import (
12
+ DEFAULT_DOMAIN_PATH,
13
+ DEFAULT_ENDPOINTS_PATH,
14
+ )
15
+ from rasa.studio.link import handle_link
16
+
17
+
18
+ def add_subparser(
19
+ subparsers: SubParsersAction,
20
+ parents: List[argparse.ArgumentParser],
21
+ domain: Text = DEFAULT_DOMAIN_PATH,
22
+ ) -> None:
23
+ """Register the `rasa studio link` command with the main CLI.
24
+
25
+ Args:
26
+ subparsers: subparser we are going to attach to
27
+ parents: Parent parsers, needed to ensure tree structure in argparse
28
+ domain: Path to the assistant's domain file.
29
+ """
30
+ link_parser = subparsers.add_parser(
31
+ "link",
32
+ parents=parents,
33
+ conflict_handler="resolve",
34
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
35
+ help="Link the current project to an existing Rasa Studio assistant.",
36
+ )
37
+
38
+ link_parser.add_argument(
39
+ "assistant_name",
40
+ nargs=1,
41
+ type=str,
42
+ help="Name of the assistant in Rasa Studio.",
43
+ )
44
+
45
+ add_domain_param(link_parser, domain)
46
+ add_data_param(link_parser)
47
+ add_config_param(link_parser)
48
+ add_endpoint_param(
49
+ link_parser,
50
+ "Configuration file for the model endpoints.",
51
+ default=DEFAULT_ENDPOINTS_PATH,
52
+ )
53
+ link_parser.set_defaults(func=handle_link)
@@ -0,0 +1,78 @@
1
+ import argparse
2
+ from typing import List, Text
3
+
4
+ from rasa.cli import SubParsersAction
5
+ from rasa.cli.arguments.default_arguments import (
6
+ add_config_param,
7
+ add_endpoint_param,
8
+ )
9
+ from rasa.cli.studio.upload import add_data_param, add_domain_param
10
+ from rasa.shared.constants import (
11
+ DEFAULT_CONFIG_PATH,
12
+ DEFAULT_DOMAIN_PATH,
13
+ DEFAULT_ENDPOINTS_PATH,
14
+ )
15
+ from rasa.studio.pull import (
16
+ handle_pull,
17
+ handle_pull_config,
18
+ handle_pull_endpoints,
19
+ )
20
+
21
+
22
+ def add_subparser(
23
+ subparsers: SubParsersAction,
24
+ parents: List[argparse.ArgumentParser],
25
+ domain: Text = DEFAULT_DOMAIN_PATH,
26
+ ) -> None:
27
+ """Register `rasa studio pull` and its sub-commands.
28
+
29
+ Args:
30
+ subparsers: subparser we are going to attach to
31
+ parents: Parent parsers, needed to ensure tree structure in argparse
32
+ domain: Path to the assistant's domain file.
33
+ """
34
+ pull_parser = subparsers.add_parser(
35
+ "pull",
36
+ parents=parents,
37
+ conflict_handler="resolve",
38
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
39
+ help="Pull assistant data from Rasa Studio.",
40
+ )
41
+ pull_subparsers = pull_parser.add_subparsers()
42
+
43
+ # Arguments for pulling configuration only
44
+ config_parser = pull_subparsers.add_parser(
45
+ "config",
46
+ parents=parents,
47
+ conflict_handler="resolve",
48
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
49
+ help="Pull only the assistant configuration file.",
50
+ )
51
+ add_config_param(config_parser, default=DEFAULT_CONFIG_PATH)
52
+ config_parser.set_defaults(func=handle_pull_config)
53
+
54
+ # Arguments for pulling endpoints only
55
+ endpoints_parser = pull_subparsers.add_parser(
56
+ "endpoints",
57
+ parents=parents,
58
+ conflict_handler="resolve",
59
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
60
+ help="Pull only the endpoints configuration file.",
61
+ )
62
+ add_endpoint_param(
63
+ endpoints_parser,
64
+ "Configuration file for the model endpoints.",
65
+ default=DEFAULT_ENDPOINTS_PATH,
66
+ )
67
+ endpoints_parser.set_defaults(func=handle_pull_endpoints)
68
+
69
+ # Arguments for pulling the whole assistant data
70
+ add_domain_param(pull_parser, domain)
71
+ add_data_param(pull_parser)
72
+ add_config_param(pull_parser, default=DEFAULT_CONFIG_PATH)
73
+ add_endpoint_param(
74
+ pull_parser,
75
+ "Configuration file for the model endpoints.",
76
+ default=DEFAULT_ENDPOINTS_PATH,
77
+ )
78
+ pull_parser.set_defaults(func=handle_pull)
@@ -0,0 +1,78 @@
1
+ import argparse
2
+ from typing import List, Text
3
+
4
+ from rasa.cli import SubParsersAction
5
+ from rasa.cli.studio.upload import (
6
+ add_config_param,
7
+ add_data_param,
8
+ add_domain_param,
9
+ add_endpoint_param,
10
+ )
11
+ from rasa.shared.constants import (
12
+ DEFAULT_DOMAIN_PATH,
13
+ DEFAULT_ENDPOINTS_PATH,
14
+ )
15
+ from rasa.studio.push import (
16
+ handle_push,
17
+ handle_push_config,
18
+ handle_push_endpoints,
19
+ )
20
+
21
+
22
+ def add_subparser(
23
+ subparsers: SubParsersAction,
24
+ parents: List[argparse.ArgumentParser],
25
+ domain: Text = DEFAULT_DOMAIN_PATH,
26
+ ) -> None:
27
+ """Register the `rasa studio push` command and its sub-commands.
28
+
29
+ Args:
30
+ subparsers: The subparsers to add the command to.
31
+ parents: Parent parsers, needed to ensure tree structure in argparse
32
+ domain: Path to the assistant's domain file.
33
+ """
34
+ push_parser = subparsers.add_parser(
35
+ "push",
36
+ parents=parents,
37
+ conflict_handler="resolve",
38
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
39
+ help="Push assistant data to Rasa Studio.",
40
+ )
41
+ push_subparsers = push_parser.add_subparsers()
42
+
43
+ # Arguments for pushing configuration only
44
+ config_parser = push_subparsers.add_parser(
45
+ "config",
46
+ parents=parents,
47
+ conflict_handler="resolve",
48
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
49
+ help="Push only the assistant configuration file.",
50
+ )
51
+ add_config_param(config_parser)
52
+ config_parser.set_defaults(func=handle_push_config)
53
+
54
+ # Arguments for pushing endpoints only
55
+ endpoints_parser = push_subparsers.add_parser(
56
+ "endpoints",
57
+ parents=parents,
58
+ conflict_handler="resolve",
59
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
60
+ help="Push ONLY the endpoints configuration file.",
61
+ )
62
+ add_endpoint_param(
63
+ endpoints_parser,
64
+ "Configuration file for the model endpoints.",
65
+ default=DEFAULT_ENDPOINTS_PATH,
66
+ )
67
+ endpoints_parser.set_defaults(func=handle_push_endpoints)
68
+
69
+ # Arguments for pushing the whole assistant data
70
+ add_domain_param(push_parser, domain)
71
+ add_data_param(push_parser)
72
+ add_config_param(push_parser)
73
+ add_endpoint_param(
74
+ push_parser,
75
+ "Configuration file for the model endpoints.",
76
+ default=DEFAULT_ENDPOINTS_PATH,
77
+ )
78
+ push_parser.set_defaults(func=handle_push)
rasa/cli/studio/studio.py CHANGED
@@ -5,10 +5,15 @@ from urllib.parse import ParseResult, urlparse
5
5
  import questionary
6
6
 
7
7
  import rasa.cli.studio.download
8
+ import rasa.cli.studio.link
9
+ import rasa.cli.studio.pull
10
+ import rasa.cli.studio.push
8
11
  import rasa.cli.studio.train
9
12
  import rasa.cli.studio.upload
10
13
  import rasa.shared.utils.cli
11
14
  from rasa.cli import SubParsersAction
15
+ from rasa.cli.utils import get_validated_path
16
+ from rasa.shared.constants import DEFAULT_DOMAIN_PATH, DEFAULT_DOMAIN_PATHS
12
17
  from rasa.studio.auth import StudioAuth
13
18
  from rasa.studio.config import StudioConfig
14
19
 
@@ -33,6 +38,13 @@ def add_subparser(
33
38
  rasa.cli.studio.upload.add_subparser(studio_subparsers, parents)
34
39
  rasa.cli.studio.download.add_subparser(studio_subparsers, parents)
35
40
 
41
+ domain = get_validated_path(
42
+ DEFAULT_DOMAIN_PATH, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
43
+ )
44
+ rasa.cli.studio.link.add_subparser(studio_subparsers, parents, domain)
45
+ rasa.cli.studio.push.add_subparser(studio_subparsers, parents, domain)
46
+ rasa.cli.studio.pull.add_subparser(studio_subparsers, parents, domain)
47
+
36
48
  _add_config_subparser(studio_subparsers, parents)
37
49
  _add_login_subparser(studio_subparsers, parents)
38
50
 
rasa/cli/studio/upload.py CHANGED
@@ -56,7 +56,9 @@ def set_upload_arguments(parser: argparse.ArgumentParser) -> None:
56
56
  )
57
57
 
58
58
  parser.add_argument(
59
- "--calm",
60
- action="store_true",
61
- help="If set, creates a new CALM assistant in Rasa Studio.",
59
+ "assistant_name",
60
+ default=None,
61
+ nargs="?",
62
+ type=str,
63
+ help="Name of the assistant on Rasa Studio",
62
64
  )
rasa/cli/train.py CHANGED
@@ -11,7 +11,7 @@ import rasa.cli.utils
11
11
  import rasa.core.utils
12
12
  import rasa.utils.common
13
13
  from rasa.cli import SubParsersAction
14
- from rasa.core import ContextualResponseRephraser
14
+ from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
15
15
  from rasa.core.nlg.generator import NaturalLanguageGenerator
16
16
  from rasa.core.train import do_compare_training
17
17
  from rasa.engine.validation import validate_api_type_config_key_usage
rasa/cli/utils.py CHANGED
@@ -104,7 +104,7 @@ def get_validated_path(
104
104
  parameter=parameter,
105
105
  event_info=(f"Parameter '{parameter}' was not set. {shared_info}"),
106
106
  )
107
- else:
107
+ elif current not in default_options:
108
108
  structlogger.warn(
109
109
  "cli.get_validated_path.path_does_not_exists",
110
110
  path=current,
rasa/cli/x.py CHANGED
@@ -15,7 +15,7 @@ import rasa.utils.common
15
15
  import rasa.utils.io
16
16
  from rasa.cli import SubParsersAction
17
17
  from rasa.cli.arguments import x as arguments
18
- from rasa.core.utils import AvailableEndpoints
18
+ from rasa.core.available_endpoints import AvailableEndpoints
19
19
  from rasa.shared.constants import (
20
20
  DEFAULT_CREDENTIALS_PATH,
21
21
  DEFAULT_ENDPOINTS_PATH,
rasa/constants.py CHANGED
@@ -44,3 +44,5 @@ HTTP_STATUS_FORBIDDEN = 403
44
44
  HTTP_STATUS_NOT_FOUND = 404
45
45
 
46
46
  RASA_REMOTE_STORAGE_ENV_VAR_NAME = "RASA_REMOTE_STORAGE"
47
+
48
+ RASA_DIR_NAME = ".rasa"
rasa/core/__init__.py CHANGED
@@ -1,16 +0,0 @@
1
- import logging
2
-
3
- import rasa
4
- from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
5
- from rasa.core.policies.enterprise_search_policy import EnterpriseSearchPolicy
6
- from rasa.core.policies.intentless_policy import IntentlessPolicy
7
-
8
- logging.getLogger(__name__).addHandler(logging.NullHandler())
9
-
10
- __version__ = rasa.__version__
11
-
12
- __all__ = [
13
- "EnterpriseSearchPolicy",
14
- "IntentlessPolicy",
15
- "ContextualResponseRephraser",
16
- ]
@@ -23,9 +23,11 @@ from rasa.core.constants import (
23
23
  KEY_IS_COEXISTENCE_ASSISTANT,
24
24
  UTTER_SOURCE_METADATA_KEY,
25
25
  )
26
+ from rasa.core.nlg.translate import get_translated_buttons, get_translated_text
26
27
  from rasa.core.policies.policy import PolicyPrediction
27
28
  from rasa.core.utils import add_bot_utterance_metadata
28
29
  from rasa.e2e_test.constants import KEY_STUB_CUSTOM_ACTIONS
30
+ from rasa.engine.language import Language
29
31
  from rasa.nlu.constants import (
30
32
  RESPONSE_SELECTOR_DEFAULT_INTENT,
31
33
  RESPONSE_SELECTOR_PREDICTION_KEY,
@@ -82,6 +84,7 @@ from rasa.shared.core.events import (
82
84
  UserUttered,
83
85
  )
84
86
  from rasa.shared.core.flows import FlowsList
87
+ from rasa.shared.core.flows.constants import KEY_TRANSLATION
85
88
  from rasa.shared.core.slot_mappings import (
86
89
  SlotFillingManager,
87
90
  extract_slot_value,
@@ -248,25 +251,36 @@ def action_for_name_or_text(
248
251
  return RemoteAction(action_name_or_text, action_endpoint)
249
252
 
250
253
 
251
- def create_bot_utterance(message: Dict[Text, Any]) -> BotUttered:
252
- """Create BotUttered event from message."""
253
- bot_message = BotUttered(
254
- text=message.pop(TEXT, None),
255
- data={
256
- ELEMENTS: message.pop(ELEMENTS, None),
257
- QUICK_REPLIES: message.pop(QUICK_REPLIES, None),
258
- BUTTONS: message.pop(BUTTONS, None),
259
- # for legacy / compatibility reasons we need to set the image
260
- # to be the attachment if there is no other attachment (the
261
- # `.get` is intentional - no `pop` as we still need the image`
262
- # property to set it in the following line)
263
- ATTACHMENT: message.pop(ATTACHMENT, None) or message.get(IMAGE, None),
264
- IMAGE: message.pop(IMAGE, None),
265
- CUSTOM: message.pop(CUSTOM, None),
266
- },
267
- metadata=message,
254
+ def create_bot_utterance(
255
+ message: Dict[Text, Any], language: Optional[Language] = None
256
+ ) -> BotUttered:
257
+ """Create BotUttered event from message with translation support."""
258
+ message_copy = copy.deepcopy(message)
259
+
260
+ text = get_translated_text(
261
+ text=message_copy.pop(TEXT, None),
262
+ translation=message_copy.pop(KEY_TRANSLATION, {}),
263
+ language=language,
264
+ )
265
+
266
+ buttons = get_translated_buttons(
267
+ buttons=message_copy.pop(BUTTONS, None), language=language
268
268
  )
269
- return bot_message
269
+
270
+ data = {
271
+ ELEMENTS: message_copy.pop(ELEMENTS, None),
272
+ QUICK_REPLIES: message_copy.pop(QUICK_REPLIES, None),
273
+ BUTTONS: buttons,
274
+ # for legacy / compatibility reasons we need to set the image
275
+ # to be the attachment if there is no other attachment (the
276
+ # `.get` is intentional - no `pop` as we still need the image`
277
+ # property to set it in the following line)
278
+ ATTACHMENT: message_copy.pop(ATTACHMENT, None) or message_copy.get(IMAGE, None),
279
+ IMAGE: message_copy.pop(IMAGE, None),
280
+ CUSTOM: message_copy.pop(CUSTOM, None),
281
+ }
282
+
283
+ return BotUttered(text=text, data=data, metadata=message_copy)
270
284
 
271
285
 
272
286
  class Action:
@@ -379,7 +393,7 @@ class ActionBotResponse(Action):
379
393
  message = add_bot_utterance_metadata(
380
394
  message, self.utter_action, nlg, domain, tracker
381
395
  )
382
- return [create_bot_utterance(message)]
396
+ return [create_bot_utterance(message, tracker.current_language)]
383
397
 
384
398
  def name(self) -> Text:
385
399
  """Returns action name."""
@@ -413,7 +427,7 @@ class ActionEndToEndResponse(Action):
413
427
  ) -> List[Event]:
414
428
  """Runs action (see parent class for full docstring)."""
415
429
  message = {"text": self.action_text}
416
- return [create_bot_utterance(message)]
430
+ return [create_bot_utterance(message, tracker.current_language)]
417
431
 
418
432
  def event_for_successful_execution(
419
433
  self,
@@ -879,10 +893,7 @@ class RemoteAction(Action):
879
893
  generated_response = response.pop("response", None)
880
894
  if generated_response is not None:
881
895
  draft = await nlg.generate(
882
- generated_response,
883
- tracker,
884
- output_channel.name(),
885
- **response,
896
+ generated_response, tracker, output_channel.name(), **response
886
897
  )
887
898
  if not draft:
888
899
  continue
@@ -898,9 +909,9 @@ class RemoteAction(Action):
898
909
  draft["buttons"].extend(buttons)
899
910
 
900
911
  # Avoid overwriting `draft` values with empty values
901
- response = {k: v for k, v in response.items() if v is not None}
912
+ response = {k: v for k, v in response.items() if v}
902
913
  draft.update(response)
903
- bot_messages.append(create_bot_utterance(draft))
914
+ bot_messages.append(create_bot_utterance(draft, tracker.current_language))
904
915
 
905
916
  return bot_messages
906
917
 
@@ -1057,7 +1068,6 @@ def _revert_rephrasing_events() -> List[Event]:
1057
1068
  ]
1058
1069
 
1059
1070
 
1060
- # TODO: this should be removed, e.g. it uses a hardcoded message and no translation
1061
1071
  class ActionDefaultAskAffirmation(Action):
1062
1072
  """Default implementation which asks the user to affirm his intent.
1063
1073
 
@@ -1109,7 +1119,7 @@ class ActionDefaultAskAffirmation(Action):
1109
1119
  "utter_action": self.name(),
1110
1120
  }
1111
1121
 
1112
- return [create_bot_utterance(message)]
1122
+ return [create_bot_utterance(message, tracker.current_language)]
1113
1123
 
1114
1124
 
1115
1125
  class ActionDefaultAskRephrase(ActionBotResponse):
@@ -1142,7 +1152,11 @@ class ActionSendText(Action):
1142
1152
  fallback = {"text": ""}
1143
1153
  metadata_copy = copy.deepcopy(metadata) if metadata else {}
1144
1154
  message = metadata_copy.get("message", fallback)
1145
- return [create_bot_utterance(message)]
1155
+
1156
+ should_send_text = metadata_copy.get("should_send_text", True)
1157
+ if should_send_text:
1158
+ return [create_bot_utterance(message, tracker.current_language)]
1159
+ return []
1146
1160
 
1147
1161
 
1148
1162
  class ActionExtractSlots(Action):
@@ -25,7 +25,7 @@ class ActionRepeatBotMessages(Action):
25
25
  """Return the name of the action."""
26
26
  return ACTION_REPEAT_BOT_MESSAGES
27
27
 
28
- def _get_last_bot_events(self, tracker: DialogueStateTracker) -> List[Event]:
28
+ def _get_last_bot_events(self, tracker: DialogueStateTracker) -> List[BotUttered]:
29
29
  """Get the last consecutive bot events before the most recent user message.
30
30
 
31
31
  This function scans the dialogue history in reverse to find the last sequence of
@@ -48,33 +48,21 @@ class ActionRepeatBotMessages(Action):
48
48
  The elif condition doesn't break when it sees User3 event.
49
49
  But it does at User2 event.
50
50
  """
51
- # Skip action if we are in a collect information step whose
52
- # default behavior is to repeat anyways
53
- top_frame = tracker.stack.top(
54
- lambda frame: isinstance(frame, RepeatBotMessagesPatternFlowStackFrame)
55
- or isinstance(frame, UserSilencePatternFlowStackFrame)
56
- )
57
- if isinstance(top_frame, CollectInformationPatternFlowStackFrame):
58
- return []
59
51
  # filter user and bot events
60
- filtered = [
52
+ user_and_bot_events = [
61
53
  e for e in tracker.events if isinstance(e, (BotUttered, UserUttered))
62
54
  ]
63
- bot_events: List[Event] = []
55
+ last_bot_events: List[BotUttered] = []
64
56
 
65
57
  # find the last BotUttered events
66
- for e in reversed(filtered):
67
- if isinstance(e, BotUttered):
68
- # insert instead of append because the list is reversed
69
- bot_events.insert(0, e)
70
-
71
- # stop if a UserUttered event is found
72
- # only if we have collected some bot events already
73
- # this condition skips the first N UserUttered events
74
- elif bot_events:
58
+ for e in reversed(user_and_bot_events):
59
+ # stop when seeing a user event after having seen bot events already
60
+ if isinstance(e, UserUttered) and len(last_bot_events) > 0:
75
61
  break
62
+ elif isinstance(e, BotUttered):
63
+ last_bot_events.append(e)
76
64
 
77
- return bot_events
65
+ return list(reversed(last_bot_events))
78
66
 
79
67
  async def run(
80
68
  self,
@@ -85,5 +73,13 @@ class ActionRepeatBotMessages(Action):
85
73
  metadata: Optional[Dict[str, Any]] = None,
86
74
  ) -> List[Event]:
87
75
  """Send the last bot messages to the channel again"""
88
- bot_events = self._get_last_bot_events(tracker)
76
+ top_frame = tracker.stack.top(
77
+ lambda frame: isinstance(frame, RepeatBotMessagesPatternFlowStackFrame)
78
+ or isinstance(frame, UserSilencePatternFlowStackFrame)
79
+ )
80
+
81
+ bot_events: List[Event] = list(self._get_last_bot_events(tracker))
82
+ # drop the last bot event in a collect step as that part will be repeated anyway
83
+ if isinstance(top_frame, CollectInformationPatternFlowStackFrame):
84
+ bot_events = bot_events[:-1]
89
85
  return bot_events
@@ -105,7 +105,6 @@ def run_rejections(
105
105
  structlogger.error(
106
106
  "run.predicate.error",
107
107
  predicate=condition,
108
- document=document,
109
108
  error=str(e),
110
109
  )
111
110
  violation = True
@@ -217,6 +216,6 @@ class ActionRunSlotRejections(Action):
217
216
  message = add_bot_utterance_metadata(
218
217
  message, utterance, nlg, domain, tracker
219
218
  )
220
- events.append(create_bot_utterance(message))
219
+ events.append(create_bot_utterance(message, tracker.current_language))
221
220
 
222
221
  return events
rasa/core/agent.py CHANGED
@@ -13,6 +13,7 @@ from aiohttp import ClientError
13
13
 
14
14
  import rasa.shared.utils.io
15
15
  from rasa.core import jobs
16
+ from rasa.core.available_endpoints import AvailableEndpoints
16
17
  from rasa.core.channels.channel import OutputChannel, UserMessage
17
18
  from rasa.core.constants import DEFAULT_REQUEST_TIMEOUT
18
19
  from rasa.core.exceptions import AgentNotReady
@@ -22,18 +23,19 @@ from rasa.core.nlg import NaturalLanguageGenerator, TemplatedNaturalLanguageGene
22
23
  from rasa.core.persistor import StorageType
23
24
  from rasa.core.policies.policy import PolicyPrediction
24
25
  from rasa.core.processor import MessageProcessor
25
- from rasa.core.tracker_store import (
26
+ from rasa.core.tracker_stores.tracker_store import (
26
27
  FailSafeTrackerStore,
27
28
  InMemoryTrackerStore,
28
29
  TrackerStore,
29
30
  )
30
- from rasa.core.utils import AvailableEndpoints
31
31
  from rasa.exceptions import ModelNotFound
32
32
  from rasa.nlu.utils import is_url
33
+ from rasa.privacy.privacy_manager import BackgroundPrivacyManager
33
34
  from rasa.shared.constants import DEFAULT_SENDER_ID
34
35
  from rasa.shared.core.domain import Domain
35
36
  from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
36
37
  from rasa.shared.exceptions import RasaException
38
+ from rasa.telemetry import track_privacy_enabled
37
39
  from rasa.utils.common import TempDirectoryPath, get_temp_dir_name
38
40
  from rasa.utils.endpoints import EndpointConfig
39
41
 
@@ -215,13 +217,14 @@ async def load_agent(
215
217
  The instantiated `Agent` or `None`.
216
218
  """
217
219
  from rasa.core.brokers.broker import EventBroker
218
- from rasa.core.tracker_store import TrackerStore
220
+ from rasa.core.tracker_stores.tracker_store import TrackerStore
219
221
 
220
222
  tracker_store = None
221
223
  lock_store = None
222
224
  generator = None
223
225
  action_endpoint = None
224
226
  http_interpreter = None
227
+ privacy_manager = None
225
228
 
226
229
  if endpoints:
227
230
  broker = await EventBroker.create(endpoints.event_broker, loop=loop)
@@ -234,6 +237,12 @@ async def load_agent(
234
237
  model_server = endpoints.model if endpoints.model else model_server
235
238
  if endpoints.nlu:
236
239
  http_interpreter = RasaNLUHttpInterpreter(endpoints.nlu)
240
+ if endpoints.privacy:
241
+ privacy_manager = await BackgroundPrivacyManager.create_instance(
242
+ endpoints=endpoints,
243
+ event_loop=loop,
244
+ )
245
+ track_privacy_enabled(privacy_manager.config, broker)
237
246
 
238
247
  agent = Agent(
239
248
  generator=generator,
@@ -244,6 +253,7 @@ async def load_agent(
244
253
  remote_storage=remote_storage,
245
254
  http_interpreter=http_interpreter,
246
255
  endpoints=endpoints,
256
+ privacy_manager=privacy_manager,
247
257
  )
248
258
 
249
259
  try:
@@ -306,6 +316,7 @@ class Agent:
306
316
  remote_storage: Optional[StorageType] = None,
307
317
  http_interpreter: Optional[RasaNLUHttpInterpreter] = None,
308
318
  endpoints: Optional[AvailableEndpoints] = None,
319
+ privacy_manager: Optional[BackgroundPrivacyManager] = None,
309
320
  ):
310
321
  """Initializes an `Agent`."""
311
322
  self.domain = domain
@@ -321,6 +332,7 @@ class Agent:
321
332
  self._set_fingerprint(fingerprint)
322
333
  self.model_server = model_server
323
334
  self.remote_storage = remote_storage
335
+ self.privacy_manager = privacy_manager
324
336
 
325
337
  @classmethod
326
338
  def load(
@@ -336,6 +348,7 @@ class Agent:
336
348
  remote_storage: Optional[StorageType] = None,
337
349
  http_interpreter: Optional[RasaNLUHttpInterpreter] = None,
338
350
  endpoints: Optional[AvailableEndpoints] = None,
351
+ privacy_manager: Optional[BackgroundPrivacyManager] = None,
339
352
  ) -> Agent:
340
353
  """Constructs a new agent and loads the processor and model."""
341
354
  agent = Agent(
@@ -349,6 +362,7 @@ class Agent:
349
362
  remote_storage=remote_storage,
350
363
  http_interpreter=http_interpreter,
351
364
  endpoints=endpoints,
365
+ privacy_manager=privacy_manager,
352
366
  )
353
367
  agent.load_model(model_path=model_path, fingerprint=fingerprint)
354
368
  return agent
@@ -365,6 +379,7 @@ class Agent:
365
379
  generator=self.nlg,
366
380
  http_interpreter=self.http_interpreter,
367
381
  endpoints=self.endpoints,
382
+ privacy_manager=self.privacy_manager,
368
383
  )
369
384
  self.domain = self.processor.domain
370
385