rasa-pro 3.11.4__py3-none-any.whl → 3.12.0__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 (580) hide show
  1. README.md +10 -13
  2. rasa/__main__.py +7 -7
  3. rasa/anonymization/anonymisation_rule_yaml_reader.py +1 -1
  4. rasa/anonymization/anonymization_pipeline.py +3 -3
  5. rasa/anonymization/anonymization_rule_executor.py +17 -11
  6. rasa/anonymization/anonymization_rule_orchestrator.py +2 -3
  7. rasa/cli/arguments/data.py +2 -2
  8. rasa/cli/arguments/default_arguments.py +1 -1
  9. rasa/cli/arguments/evaluate.py +2 -1
  10. rasa/cli/arguments/interactive.py +1 -1
  11. rasa/cli/arguments/run.py +1 -1
  12. rasa/cli/arguments/test.py +7 -5
  13. rasa/cli/arguments/train.py +3 -3
  14. rasa/cli/arguments/visualize.py +2 -2
  15. rasa/cli/arguments/x.py +1 -0
  16. rasa/cli/data.py +20 -3
  17. rasa/cli/dialogue_understanding_test.py +386 -0
  18. rasa/cli/evaluate.py +1 -1
  19. rasa/cli/export.py +6 -6
  20. rasa/cli/inspect.py +20 -1
  21. rasa/cli/interactive.py +4 -5
  22. rasa/cli/llm_fine_tuning.py +51 -16
  23. rasa/cli/markers.py +1 -2
  24. rasa/cli/project_templates/calm/actions/add_contact.py +1 -1
  25. rasa/cli/project_templates/calm/config.yml +2 -2
  26. rasa/cli/project_templates/calm/domain/list_contacts.yml +1 -2
  27. rasa/cli/project_templates/calm/domain/remove_contact.yml +1 -2
  28. rasa/cli/project_templates/calm/domain/shared.yml +1 -4
  29. rasa/cli/project_templates/calm/endpoints.yml +2 -2
  30. rasa/cli/project_templates/tutorial/actions/actions.py +3 -2
  31. rasa/cli/shell.py +5 -6
  32. rasa/cli/studio/download.py +1 -2
  33. rasa/cli/studio/studio.py +2 -3
  34. rasa/cli/studio/train.py +0 -1
  35. rasa/cli/telemetry.py +2 -2
  36. rasa/cli/test.py +11 -11
  37. rasa/cli/train.py +3 -0
  38. rasa/cli/utils.py +25 -5
  39. rasa/constants.py +0 -1
  40. rasa/core/__init__.py +0 -1
  41. rasa/core/actions/action.py +137 -208
  42. rasa/core/actions/action_handle_digressions.py +164 -0
  43. rasa/core/actions/action_hangup.py +1 -1
  44. rasa/core/actions/action_repeat_bot_messages.py +2 -2
  45. rasa/core/actions/action_run_slot_rejections.py +18 -6
  46. rasa/core/actions/action_trigger_chitchat.py +1 -1
  47. rasa/core/actions/action_trigger_flow.py +5 -5
  48. rasa/core/actions/action_trigger_search.py +1 -1
  49. rasa/core/actions/custom_action_executor.py +1 -1
  50. rasa/core/actions/direct_custom_actions_executor.py +1 -0
  51. rasa/core/actions/forms.py +22 -15
  52. rasa/core/actions/http_custom_action_executor.py +8 -1
  53. rasa/core/actions/loops.py +3 -3
  54. rasa/core/actions/two_stage_fallback.py +13 -13
  55. rasa/core/auth_retry_tracker_store.py +1 -2
  56. rasa/core/brokers/broker.py +2 -1
  57. rasa/core/brokers/file.py +1 -1
  58. rasa/core/brokers/kafka.py +8 -8
  59. rasa/core/brokers/pika.py +8 -9
  60. rasa/core/brokers/sql.py +4 -3
  61. rasa/core/channels/__init__.py +7 -0
  62. rasa/core/channels/botframework.py +2 -2
  63. rasa/core/channels/callback.py +4 -4
  64. rasa/core/channels/channel.py +11 -11
  65. rasa/core/channels/console.py +0 -1
  66. rasa/core/channels/development_inspector.py +80 -24
  67. rasa/core/channels/facebook.py +5 -5
  68. rasa/core/channels/hangouts.py +7 -8
  69. rasa/core/channels/inspector/dist/assets/Tableau10-1b767f5e.js +1 -0
  70. rasa/core/channels/inspector/dist/assets/arc-9f1365dc.js +1 -0
  71. rasa/core/channels/inspector/dist/assets/blockDiagram-38ab4fdb-e0f81b12.js +118 -0
  72. rasa/core/channels/inspector/dist/assets/c4Diagram-3d4e48cf-9deaee1c.js +10 -0
  73. rasa/core/channels/inspector/dist/assets/channel-44956714.js +1 -0
  74. rasa/core/channels/inspector/dist/assets/classDiagram-70f12bd4-20450a96.js +2 -0
  75. rasa/core/channels/inspector/dist/assets/classDiagram-v2-f2320105-749d2abf.js +2 -0
  76. rasa/core/channels/inspector/dist/assets/clone-a9475142.js +1 -0
  77. rasa/core/channels/inspector/dist/assets/{createText-62fc7601-89c73b31.js → createText-2e5e7dd3-bef0b38c.js} +1 -1
  78. rasa/core/channels/inspector/dist/assets/edges-e0da2a9e-943801a7.js +4 -0
  79. rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-907e0440.js → erDiagram-9861fffd-d523a948.js} +4 -4
  80. rasa/core/channels/inspector/dist/assets/flowDb-956e92f1-54e4cf19.js +10 -0
  81. rasa/core/channels/inspector/dist/assets/flowDiagram-66a62f08-48bfbbe8.js +4 -0
  82. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-43fa749a.js +1 -0
  83. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-4a651766-17c30827.js +139 -0
  84. rasa/core/channels/inspector/dist/assets/ganttDiagram-c361ad54-43086f2d.js +257 -0
  85. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-72cf32ee-5c8b693e.js +70 -0
  86. rasa/core/channels/inspector/dist/assets/graph-41a90d26.js +1 -0
  87. rasa/core/channels/inspector/dist/assets/index-3862675e-b43eeae9.js +1 -0
  88. rasa/core/channels/inspector/dist/assets/{index-e793d777.js → index-e8affe45.js} +201 -196
  89. rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-8ceba4db.js → infoDiagram-f8f76790-0b20676b.js} +1 -1
  90. rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-960d3809.js → journeyDiagram-49397b02-39bce7b5.js} +4 -4
  91. rasa/core/channels/inspector/dist/assets/katex-498eb57e.js +261 -0
  92. rasa/core/channels/inspector/dist/assets/layout-dc8eeea4.js +1 -0
  93. rasa/core/channels/inspector/dist/assets/{line-eeccc4e2.js → line-c4d2e756.js} +1 -1
  94. rasa/core/channels/inspector/dist/assets/linear-86f6f2d9.js +1 -0
  95. rasa/core/channels/inspector/dist/assets/mindmap-definition-fc14e90a-4216f771.js +312 -0
  96. rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-dc9b5e1b.js → pieDiagram-8a3498a8-1a0cfa96.js} +7 -7
  97. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-a08cba6d.js → quadrantDiagram-120e2f19-f91e67cf.js} +1 -1
  98. rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-87242b9e.js → requirementDiagram-deff3bca-d4046bed.js} +2 -2
  99. rasa/core/channels/inspector/dist/assets/sankeyDiagram-04a897e0-2cf6d1d7.js +8 -0
  100. rasa/core/channels/inspector/dist/assets/sequenceDiagram-704730f1-751ac4f5.js +122 -0
  101. rasa/core/channels/inspector/dist/assets/stateDiagram-587899a1-f734f4d4.js +1 -0
  102. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-d93cdb3a-91c65710.js +1 -0
  103. rasa/core/channels/inspector/dist/assets/{styles-9c745c82-cef936a6.js → styles-6aaf32cf-e0cff7be.js} +1 -1
  104. rasa/core/channels/inspector/dist/assets/styles-9a916d00-c8029e5d.js +160 -0
  105. rasa/core/channels/inspector/dist/assets/styles-c10674c1-114f312a.js +116 -0
  106. rasa/core/channels/inspector/dist/assets/svgDrawCommon-08f97a94-b7b9dc00.js +1 -0
  107. rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-0d39bdb2.js → timeline-definition-85554ec2-9536d189.js} +3 -3
  108. rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-a03fa445.js → xychartDiagram-e933f94c-bf3b0f36.js} +3 -3
  109. rasa/core/channels/inspector/dist/index.html +1 -1
  110. rasa/core/channels/inspector/package.json +11 -3
  111. rasa/core/channels/inspector/src/App.tsx +15 -2
  112. rasa/core/channels/inspector/src/components/RasaLogo.tsx +31 -0
  113. rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +68 -0
  114. rasa/core/channels/inspector/src/components/Welcome.tsx +19 -13
  115. rasa/core/channels/inspector/yarn.lock +94 -99
  116. rasa/core/channels/mattermost.py +4 -4
  117. rasa/core/channels/rasa_chat.py +4 -4
  118. rasa/core/channels/rest.py +11 -12
  119. rasa/core/channels/rocketchat.py +4 -3
  120. rasa/core/channels/slack.py +6 -5
  121. rasa/core/channels/socketio.py +8 -28
  122. rasa/core/channels/studio_chat.py +212 -0
  123. rasa/core/channels/telegram.py +105 -55
  124. rasa/core/channels/twilio.py +3 -3
  125. rasa/core/channels/vier_cvg.py +2 -2
  126. rasa/core/channels/voice_ready/audiocodes.py +51 -32
  127. rasa/core/channels/voice_ready/jambonz.py +5 -5
  128. rasa/core/channels/voice_ready/jambonz_protocol.py +3 -4
  129. rasa/core/channels/voice_ready/twilio_voice.py +9 -8
  130. rasa/core/channels/voice_ready/utils.py +2 -2
  131. rasa/core/channels/voice_stream/asr/asr_engine.py +12 -6
  132. rasa/core/channels/voice_stream/asr/asr_event.py +5 -0
  133. rasa/core/channels/voice_stream/asr/azure.py +16 -3
  134. rasa/core/channels/voice_stream/asr/deepgram.py +76 -19
  135. rasa/core/channels/voice_stream/audiocodes.py +292 -0
  136. rasa/core/channels/voice_stream/browser_audio.py +14 -7
  137. rasa/core/channels/voice_stream/call_state.py +6 -2
  138. rasa/core/channels/voice_stream/genesys.py +320 -0
  139. rasa/core/channels/voice_stream/tts/azure.py +13 -5
  140. rasa/core/channels/voice_stream/tts/cartesia.py +34 -14
  141. rasa/core/channels/voice_stream/tts/tts_cache.py +3 -2
  142. rasa/core/channels/voice_stream/tts/tts_engine.py +1 -1
  143. rasa/core/channels/voice_stream/twilio_media_streams.py +12 -8
  144. rasa/core/channels/voice_stream/util.py +1 -1
  145. rasa/core/channels/voice_stream/voice_channel.py +100 -56
  146. rasa/core/channels/webexteams.py +3 -4
  147. rasa/core/constants.py +2 -0
  148. rasa/core/evaluation/marker.py +7 -6
  149. rasa/core/evaluation/marker_base.py +15 -16
  150. rasa/core/evaluation/marker_stats.py +3 -4
  151. rasa/core/evaluation/marker_tracker_loader.py +5 -4
  152. rasa/core/exporter.py +4 -4
  153. rasa/core/featurizers/precomputation.py +8 -8
  154. rasa/core/featurizers/single_state_featurizer.py +7 -7
  155. rasa/core/featurizers/tracker_featurizers.py +13 -13
  156. rasa/core/http_interpreter.py +3 -4
  157. rasa/core/information_retrieval/__init__.py +1 -1
  158. rasa/core/information_retrieval/faiss.py +4 -4
  159. rasa/core/information_retrieval/information_retrieval.py +2 -2
  160. rasa/core/information_retrieval/milvus.py +3 -3
  161. rasa/core/information_retrieval/qdrant.py +3 -3
  162. rasa/core/jobs.py +1 -0
  163. rasa/core/lock.py +2 -3
  164. rasa/core/lock_store.py +3 -3
  165. rasa/core/migrate.py +12 -9
  166. rasa/core/nlg/__init__.py +1 -1
  167. rasa/core/nlg/callback.py +2 -3
  168. rasa/core/nlg/contextual_response_rephraser.py +82 -14
  169. rasa/core/nlg/generator.py +85 -17
  170. rasa/core/nlg/interpolator.py +4 -3
  171. rasa/core/nlg/response.py +9 -7
  172. rasa/core/nlg/summarize.py +1 -0
  173. rasa/core/nlg/translate.py +55 -0
  174. rasa/core/persistor.py +3 -3
  175. rasa/core/policies/ensemble.py +10 -9
  176. rasa/core/policies/enterprise_search_policy.py +87 -21
  177. rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +1 -1
  178. rasa/core/policies/flow_policy.py +13 -14
  179. rasa/core/policies/flows/flow_executor.py +85 -55
  180. rasa/core/policies/intentless_policy.py +6 -7
  181. rasa/core/policies/memoization.py +22 -20
  182. rasa/core/policies/policy.py +24 -22
  183. rasa/core/policies/rule_policy.py +37 -36
  184. rasa/core/policies/ted_policy.py +87 -85
  185. rasa/core/policies/unexpected_intent_policy.py +77 -75
  186. rasa/core/processor.py +167 -74
  187. rasa/core/run.py +5 -4
  188. rasa/core/secrets_manager/endpoints.py +2 -3
  189. rasa/core/secrets_manager/factory.py +2 -3
  190. rasa/core/secrets_manager/secret_manager.py +2 -3
  191. rasa/core/secrets_manager/vault.py +2 -2
  192. rasa/core/test.py +30 -30
  193. rasa/core/tracker_store.py +138 -49
  194. rasa/core/train.py +1 -1
  195. rasa/core/training/__init__.py +2 -2
  196. rasa/core/training/converters/responses_prefix_converter.py +1 -2
  197. rasa/core/training/interactive.py +13 -13
  198. rasa/core/training/story_conflict.py +4 -5
  199. rasa/core/training/training.py +3 -5
  200. rasa/core/utils.py +5 -5
  201. rasa/core/visualize.py +1 -1
  202. rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -2
  203. rasa/dialogue_understanding/coexistence/llm_based_router.py +5 -5
  204. rasa/dialogue_understanding/commands/__init__.py +22 -22
  205. rasa/dialogue_understanding/commands/can_not_handle_command.py +38 -1
  206. rasa/dialogue_understanding/commands/cancel_flow_command.py +96 -9
  207. rasa/dialogue_understanding/commands/change_flow_command.py +36 -2
  208. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +36 -4
  209. rasa/dialogue_understanding/commands/clarify_command.py +46 -4
  210. rasa/dialogue_understanding/commands/command.py +3 -2
  211. rasa/dialogue_understanding/commands/command_syntax_manager.py +55 -0
  212. rasa/dialogue_understanding/commands/correct_slots_command.py +14 -5
  213. rasa/dialogue_understanding/commands/error_command.py +1 -1
  214. rasa/dialogue_understanding/commands/free_form_answer_command.py +2 -1
  215. rasa/dialogue_understanding/commands/handle_code_change_command.py +2 -2
  216. rasa/dialogue_understanding/commands/handle_digressions_command.py +144 -0
  217. rasa/dialogue_understanding/commands/human_handoff_command.py +34 -4
  218. rasa/dialogue_understanding/commands/knowledge_answer_command.py +36 -4
  219. rasa/dialogue_understanding/commands/noop_command.py +2 -1
  220. rasa/dialogue_understanding/commands/prompt_command.py +94 -0
  221. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +34 -4
  222. rasa/dialogue_understanding/commands/restart_command.py +2 -5
  223. rasa/dialogue_understanding/commands/session_end_command.py +3 -5
  224. rasa/dialogue_understanding/commands/session_start_command.py +3 -5
  225. rasa/dialogue_understanding/commands/set_slot_command.py +55 -16
  226. rasa/dialogue_understanding/commands/skip_question_command.py +34 -4
  227. rasa/dialogue_understanding/commands/start_flow_command.py +78 -2
  228. rasa/dialogue_understanding/commands/user_silence_command.py +3 -5
  229. rasa/dialogue_understanding/commands/utils.py +126 -43
  230. rasa/dialogue_understanding/constants.py +2 -0
  231. rasa/dialogue_understanding/generator/__init__.py +2 -0
  232. rasa/dialogue_understanding/generator/command_generator.py +120 -79
  233. rasa/dialogue_understanding/generator/command_parser.py +245 -0
  234. rasa/dialogue_understanding/generator/constants.py +12 -4
  235. rasa/dialogue_understanding/generator/flow_retrieval.py +7 -7
  236. rasa/dialogue_understanding/generator/llm_based_command_generator.py +187 -59
  237. rasa/dialogue_understanding/generator/llm_command_generator.py +6 -3
  238. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +106 -110
  239. rasa/dialogue_understanding/generator/nlu_command_adapter.py +53 -11
  240. rasa/dialogue_understanding/generator/prompt_templates/__init__.py +0 -0
  241. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +58 -0
  242. rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +57 -0
  243. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +574 -0
  244. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +41 -386
  245. rasa/dialogue_understanding/generator/utils.py +76 -0
  246. rasa/dialogue_understanding/patterns/cancel.py +2 -1
  247. rasa/dialogue_understanding/patterns/cannot_handle.py +1 -0
  248. rasa/dialogue_understanding/patterns/chitchat.py +1 -1
  249. rasa/dialogue_understanding/patterns/clarify.py +2 -1
  250. rasa/dialogue_understanding/patterns/code_change.py +2 -0
  251. rasa/dialogue_understanding/patterns/collect_information.py +7 -4
  252. rasa/dialogue_understanding/patterns/completed.py +1 -1
  253. rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -1
  254. rasa/dialogue_understanding/patterns/correction.py +17 -3
  255. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +78 -2
  256. rasa/dialogue_understanding/patterns/handle_digressions.py +81 -0
  257. rasa/dialogue_understanding/patterns/human_handoff.py +1 -1
  258. rasa/dialogue_understanding/patterns/internal_error.py +1 -0
  259. rasa/dialogue_understanding/patterns/search.py +1 -1
  260. rasa/dialogue_understanding/patterns/session_start.py +1 -1
  261. rasa/dialogue_understanding/patterns/skip_question.py +1 -0
  262. rasa/dialogue_understanding/patterns/user_silence.py +1 -1
  263. rasa/dialogue_understanding/patterns/validate_slot.py +65 -0
  264. rasa/dialogue_understanding/processor/command_processor.py +193 -43
  265. rasa/dialogue_understanding/processor/command_processor_component.py +1 -1
  266. rasa/dialogue_understanding/stack/dialogue_stack.py +4 -3
  267. rasa/dialogue_understanding/stack/frames/__init__.py +2 -2
  268. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +4 -1
  269. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +2 -3
  270. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +5 -2
  271. rasa/dialogue_understanding/stack/frames/search_frame.py +4 -1
  272. rasa/dialogue_understanding/stack/utils.py +56 -10
  273. rasa/dialogue_understanding/utils.py +164 -0
  274. rasa/dialogue_understanding_test/README.md +429 -0
  275. rasa/dialogue_understanding_test/__init__.py +0 -0
  276. rasa/dialogue_understanding_test/command_comparison.py +60 -0
  277. rasa/dialogue_understanding_test/command_metric_calculation.py +122 -0
  278. rasa/dialogue_understanding_test/constants.py +22 -0
  279. rasa/dialogue_understanding_test/du_test_case.py +448 -0
  280. rasa/dialogue_understanding_test/du_test_result.py +390 -0
  281. rasa/dialogue_understanding_test/du_test_runner.py +322 -0
  282. rasa/dialogue_understanding_test/du_test_schema.yml +161 -0
  283. rasa/dialogue_understanding_test/io.py +443 -0
  284. rasa/dialogue_understanding_test/test_case_simulation/__init__.py +0 -0
  285. rasa/dialogue_understanding_test/test_case_simulation/exception.py +28 -0
  286. rasa/dialogue_understanding_test/test_case_simulation/test_case_tracker_simulator.py +336 -0
  287. rasa/dialogue_understanding_test/utils.py +70 -0
  288. rasa/dialogue_understanding_test/validation.py +77 -0
  289. rasa/e2e_test/aggregate_test_stats_calculator.py +1 -1
  290. rasa/e2e_test/assertions.py +202 -175
  291. rasa/e2e_test/assertions_schema.yml +6 -0
  292. rasa/e2e_test/constants.py +16 -1
  293. rasa/e2e_test/e2e_config.py +102 -41
  294. rasa/e2e_test/e2e_config_schema.yml +28 -10
  295. rasa/e2e_test/e2e_test_case.py +5 -5
  296. rasa/e2e_test/e2e_test_converter.py +2 -3
  297. rasa/e2e_test/e2e_test_coverage_report.py +6 -6
  298. rasa/e2e_test/e2e_test_result.py +1 -1
  299. rasa/e2e_test/e2e_test_runner.py +143 -38
  300. rasa/e2e_test/llm_judge_prompts/answer_relevance_prompt_template.jinja2 +93 -0
  301. rasa/e2e_test/llm_judge_prompts/groundedness_prompt_template.jinja2 +169 -0
  302. rasa/e2e_test/stub_custom_action.py +1 -1
  303. rasa/e2e_test/utils/generative_assertions.py +243 -0
  304. rasa/e2e_test/utils/io.py +123 -93
  305. rasa/e2e_test/utils/validation.py +101 -3
  306. rasa/engine/caching.py +5 -7
  307. rasa/engine/constants.py +1 -1
  308. rasa/engine/graph.py +3 -2
  309. rasa/engine/language.py +182 -0
  310. rasa/engine/recipes/config_files/default_config.yml +4 -0
  311. rasa/engine/recipes/default_components.py +13 -15
  312. rasa/engine/recipes/default_recipe.py +65 -49
  313. rasa/engine/recipes/graph_recipe.py +10 -7
  314. rasa/engine/recipes/recipe.py +2 -2
  315. rasa/engine/runner/dask.py +2 -2
  316. rasa/engine/runner/interface.py +1 -0
  317. rasa/engine/storage/local_model_storage.py +6 -4
  318. rasa/engine/storage/resource.py +2 -1
  319. rasa/engine/storage/storage.py +8 -3
  320. rasa/engine/training/components.py +2 -1
  321. rasa/engine/training/fingerprinting.py +4 -2
  322. rasa/engine/training/graph_trainer.py +4 -4
  323. rasa/engine/training/hooks.py +2 -2
  324. rasa/engine/validation.py +36 -33
  325. rasa/exceptions.py +3 -2
  326. rasa/graph_components/converters/nlu_message_converter.py +3 -3
  327. rasa/graph_components/providers/domain_for_core_training_provider.py +3 -3
  328. rasa/graph_components/providers/domain_provider.py +3 -2
  329. rasa/graph_components/providers/flows_provider.py +2 -3
  330. rasa/graph_components/providers/forms_provider.py +4 -4
  331. rasa/graph_components/providers/nlu_training_data_provider.py +5 -3
  332. rasa/graph_components/providers/responses_provider.py +4 -4
  333. rasa/graph_components/providers/rule_only_provider.py +3 -2
  334. rasa/graph_components/providers/story_graph_provider.py +8 -8
  335. rasa/graph_components/providers/training_tracker_provider.py +3 -2
  336. rasa/graph_components/validators/default_recipe_validator.py +16 -16
  337. rasa/graph_components/validators/finetuning_validator.py +10 -8
  338. rasa/hooks.py +19 -14
  339. rasa/jupyter.py +2 -2
  340. rasa/llm_fine_tuning/annotation_module.py +4 -4
  341. rasa/llm_fine_tuning/conversations.py +5 -33
  342. rasa/llm_fine_tuning/llm_data_preparation_module.py +6 -4
  343. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -4
  344. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +18 -13
  345. rasa/llm_fine_tuning/paraphrasing_module.py +6 -2
  346. rasa/llm_fine_tuning/storage.py +3 -3
  347. rasa/llm_fine_tuning/train_test_split_module.py +27 -27
  348. rasa/llm_fine_tuning/utils.py +7 -0
  349. rasa/markers/marker.py +2 -3
  350. rasa/markers/marker_base.py +1 -2
  351. rasa/markers/upload.py +2 -2
  352. rasa/markers/validate.py +2 -3
  353. rasa/model.py +3 -5
  354. rasa/model_manager/config.py +1 -1
  355. rasa/model_manager/model_api.py +5 -4
  356. rasa/model_manager/runner_service.py +13 -10
  357. rasa/model_manager/socket_bridge.py +15 -9
  358. rasa/model_manager/studio_jwt_auth.py +1 -0
  359. rasa/model_manager/trainer_service.py +9 -7
  360. rasa/model_manager/utils.py +1 -1
  361. rasa/model_manager/warm_rasa_process.py +14 -9
  362. rasa/model_service.py +5 -6
  363. rasa/model_testing.py +13 -15
  364. rasa/model_training.py +29 -29
  365. rasa/nlu/classifiers/diet_classifier.py +72 -73
  366. rasa/nlu/classifiers/fallback_classifier.py +9 -8
  367. rasa/nlu/classifiers/keyword_intent_classifier.py +7 -6
  368. rasa/nlu/classifiers/logistic_regression_classifier.py +3 -3
  369. rasa/nlu/classifiers/mitie_intent_classifier.py +5 -4
  370. rasa/nlu/classifiers/regex_message_handler.py +3 -2
  371. rasa/nlu/classifiers/sklearn_intent_classifier.py +2 -2
  372. rasa/nlu/convert.py +2 -2
  373. rasa/nlu/emulators/dialogflow.py +3 -3
  374. rasa/nlu/emulators/luis.py +5 -5
  375. rasa/nlu/emulators/no_emulator.py +1 -0
  376. rasa/nlu/emulators/wit.py +4 -4
  377. rasa/nlu/extractors/crf_entity_extractor.py +11 -11
  378. rasa/nlu/extractors/duckling_entity_extractor.py +7 -6
  379. rasa/nlu/extractors/entity_synonyms.py +10 -9
  380. rasa/nlu/extractors/extractor.py +16 -16
  381. rasa/nlu/extractors/mitie_entity_extractor.py +10 -9
  382. rasa/nlu/extractors/regex_entity_extractor.py +11 -10
  383. rasa/nlu/extractors/spacy_entity_extractor.py +2 -2
  384. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +15 -14
  385. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +2 -1
  386. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +10 -9
  387. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +9 -7
  388. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +13 -12
  389. rasa/nlu/featurizers/featurizer.py +5 -4
  390. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +6 -6
  391. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -4
  392. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +4 -4
  393. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +2 -0
  394. rasa/nlu/model.py +0 -1
  395. rasa/nlu/selectors/response_selector.py +67 -68
  396. rasa/nlu/test.py +38 -38
  397. rasa/nlu/tokenizers/jieba_tokenizer.py +1 -2
  398. rasa/nlu/tokenizers/mitie_tokenizer.py +2 -2
  399. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -3
  400. rasa/nlu/tokenizers/tokenizer.py +6 -7
  401. rasa/nlu/tokenizers/whitespace_tokenizer.py +1 -1
  402. rasa/nlu/utils/bilou_utils.py +7 -7
  403. rasa/nlu/utils/hugging_face/registry.py +22 -22
  404. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +2 -1
  405. rasa/nlu/utils/mitie_utils.py +2 -1
  406. rasa/nlu/utils/pattern_utils.py +1 -1
  407. rasa/nlu/utils/spacy_utils.py +3 -3
  408. rasa/plugin.py +12 -1
  409. rasa/server.py +6 -3
  410. rasa/shared/constants.py +45 -18
  411. rasa/shared/core/command_payload_reader.py +15 -7
  412. rasa/shared/core/constants.py +34 -4
  413. rasa/shared/core/conversation.py +1 -2
  414. rasa/shared/core/domain.py +19 -20
  415. rasa/shared/core/events.py +60 -39
  416. rasa/shared/core/flows/__init__.py +0 -1
  417. rasa/shared/core/flows/constants.py +11 -0
  418. rasa/shared/core/flows/flow.py +107 -26
  419. rasa/shared/core/flows/flow_step.py +4 -3
  420. rasa/shared/core/flows/flow_step_links.py +1 -2
  421. rasa/shared/core/flows/flow_step_sequence.py +1 -1
  422. rasa/shared/core/flows/flows_list.py +3 -3
  423. rasa/shared/core/flows/flows_yaml_schema.json +69 -3
  424. rasa/shared/core/flows/nlu_trigger.py +1 -1
  425. rasa/shared/core/flows/steps/__init__.py +2 -2
  426. rasa/shared/core/flows/steps/action.py +1 -1
  427. rasa/shared/core/flows/steps/call.py +1 -1
  428. rasa/shared/core/flows/steps/collect.py +22 -40
  429. rasa/shared/core/flows/steps/internal.py +1 -1
  430. rasa/shared/core/flows/steps/link.py +1 -1
  431. rasa/shared/core/flows/steps/no_operation.py +2 -2
  432. rasa/shared/core/flows/steps/set_slots.py +1 -1
  433. rasa/shared/core/flows/utils.py +44 -4
  434. rasa/shared/core/flows/validation.py +4 -6
  435. rasa/shared/core/generator.py +20 -21
  436. rasa/shared/core/slot_mappings.py +360 -121
  437. rasa/shared/core/slots.py +163 -6
  438. rasa/shared/core/trackers.py +108 -33
  439. rasa/shared/core/training_data/loading.py +1 -1
  440. rasa/shared/core/training_data/story_reader/story_reader.py +3 -3
  441. rasa/shared/core/training_data/story_reader/story_step_builder.py +4 -4
  442. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +29 -31
  443. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +22 -24
  444. rasa/shared/core/training_data/structures.py +11 -12
  445. rasa/shared/core/training_data/visualization.py +10 -10
  446. rasa/shared/data.py +6 -6
  447. rasa/shared/engine/caching.py +0 -1
  448. rasa/shared/exceptions.py +2 -2
  449. rasa/shared/importers/importer.py +58 -2
  450. rasa/shared/importers/rasa.py +5 -6
  451. rasa/shared/importers/utils.py +1 -1
  452. rasa/shared/nlu/constants.py +9 -0
  453. rasa/shared/nlu/training_data/entities_parser.py +6 -6
  454. rasa/shared/nlu/training_data/features.py +3 -3
  455. rasa/shared/nlu/training_data/formats/__init__.py +1 -1
  456. rasa/shared/nlu/training_data/formats/dialogflow.py +4 -5
  457. rasa/shared/nlu/training_data/formats/luis.py +7 -8
  458. rasa/shared/nlu/training_data/formats/rasa.py +4 -5
  459. rasa/shared/nlu/training_data/formats/rasa_yaml.py +17 -16
  460. rasa/shared/nlu/training_data/formats/readerwriter.py +8 -11
  461. rasa/shared/nlu/training_data/formats/wit.py +3 -4
  462. rasa/shared/nlu/training_data/loading.py +4 -4
  463. rasa/shared/nlu/training_data/lookup_tables_parser.py +1 -1
  464. rasa/shared/nlu/training_data/message.py +13 -14
  465. rasa/shared/nlu/training_data/schemas/data_schema.py +1 -1
  466. rasa/shared/nlu/training_data/schemas/responses.yml +19 -11
  467. rasa/shared/nlu/training_data/synonyms_parser.py +3 -3
  468. rasa/shared/nlu/training_data/training_data.py +12 -13
  469. rasa/shared/nlu/training_data/util.py +11 -10
  470. rasa/shared/providers/_configs/azure_entra_id_config.py +541 -0
  471. rasa/shared/providers/_configs/azure_openai_client_config.py +150 -15
  472. rasa/shared/providers/_configs/client_config.py +3 -1
  473. rasa/shared/providers/_configs/default_litellm_client_config.py +9 -7
  474. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +13 -11
  475. rasa/shared/providers/_configs/litellm_router_client_config.py +12 -10
  476. rasa/shared/providers/_configs/model_group_config.py +8 -5
  477. rasa/shared/providers/_configs/oauth_config.py +33 -0
  478. rasa/shared/providers/_configs/openai_client_config.py +14 -12
  479. rasa/shared/providers/_configs/rasa_llm_client_config.py +5 -3
  480. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +12 -11
  481. rasa/shared/providers/_configs/utils.py +1 -0
  482. rasa/shared/providers/_ssl_verification_utils.py +5 -6
  483. rasa/shared/providers/_utils.py +5 -5
  484. rasa/shared/providers/constants.py +6 -0
  485. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +1 -1
  486. rasa/shared/providers/embedding/azure_openai_embedding_client.py +32 -7
  487. rasa/shared/providers/embedding/embedding_client.py +1 -1
  488. rasa/shared/providers/embedding/litellm_router_embedding_client.py +5 -2
  489. rasa/shared/providers/llm/_base_litellm_client.py +43 -18
  490. rasa/shared/providers/llm/azure_openai_llm_client.py +90 -34
  491. rasa/shared/providers/llm/default_litellm_llm_client.py +4 -2
  492. rasa/shared/providers/llm/litellm_router_llm_client.py +32 -9
  493. rasa/shared/providers/llm/llm_client.py +24 -8
  494. rasa/shared/providers/llm/llm_response.py +61 -2
  495. rasa/shared/providers/llm/openai_llm_client.py +11 -5
  496. rasa/shared/providers/llm/rasa_llm_client.py +17 -14
  497. rasa/shared/providers/llm/self_hosted_llm_client.py +35 -15
  498. rasa/shared/providers/mappings.py +18 -19
  499. rasa/shared/providers/router/_base_litellm_router_client.py +48 -15
  500. rasa/shared/providers/router/router_client.py +3 -1
  501. rasa/shared/utils/cli.py +1 -1
  502. rasa/shared/utils/common.py +15 -1
  503. rasa/shared/utils/constants.py +3 -0
  504. rasa/shared/utils/health_check/embeddings_health_check_mixin.py +1 -1
  505. rasa/shared/utils/health_check/health_check.py +3 -3
  506. rasa/shared/utils/health_check/llm_health_check_mixin.py +1 -1
  507. rasa/shared/utils/io.py +1 -1
  508. rasa/shared/utils/llm.py +100 -18
  509. rasa/shared/utils/pykwalify_extensions.py +25 -1
  510. rasa/shared/utils/schemas/domain.yml +26 -1
  511. rasa/shared/utils/schemas/events.py +1 -1
  512. rasa/shared/utils/yaml.py +24 -20
  513. rasa/studio/auth.py +3 -3
  514. rasa/studio/config.py +1 -2
  515. rasa/studio/data_handler.py +3 -3
  516. rasa/studio/download.py +1 -1
  517. rasa/studio/results_logger.py +3 -3
  518. rasa/studio/upload.py +21 -5
  519. rasa/telemetry.py +127 -48
  520. rasa/tracing/config.py +5 -3
  521. rasa/tracing/constants.py +12 -0
  522. rasa/tracing/instrumentation/attribute_extractors.py +92 -14
  523. rasa/tracing/instrumentation/instrumentation.py +61 -5
  524. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -1
  525. rasa/tracing/instrumentation/metrics.py +52 -11
  526. rasa/tracing/metric_instrument_provider.py +54 -14
  527. rasa/utils/common.py +12 -24
  528. rasa/utils/endpoints.py +1 -1
  529. rasa/utils/io.py +7 -7
  530. rasa/utils/licensing.py +3 -4
  531. rasa/utils/log_utils.py +7 -6
  532. rasa/utils/ml_utils.py +1 -0
  533. rasa/utils/plotting.py +3 -3
  534. rasa/utils/sanic_error_handler.py +1 -1
  535. rasa/utils/tensorflow/callback.py +2 -2
  536. rasa/utils/tensorflow/crf.py +2 -2
  537. rasa/utils/tensorflow/data_generator.py +5 -5
  538. rasa/utils/tensorflow/environment.py +3 -3
  539. rasa/utils/tensorflow/feature_array.py +2 -3
  540. rasa/utils/tensorflow/layers.py +18 -12
  541. rasa/utils/tensorflow/layers_utils.py +2 -1
  542. rasa/utils/tensorflow/metrics.py +2 -2
  543. rasa/utils/tensorflow/model_data.py +7 -7
  544. rasa/utils/tensorflow/model_data_utils.py +10 -9
  545. rasa/utils/tensorflow/models.py +31 -32
  546. rasa/utils/tensorflow/rasa_layers.py +20 -19
  547. rasa/utils/tensorflow/types.py +2 -1
  548. rasa/utils/train_utils.py +23 -21
  549. rasa/utils/url_tools.py +1 -1
  550. rasa/validator.py +594 -115
  551. rasa/version.py +1 -1
  552. {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/METADATA +23 -26
  553. rasa_pro-3.12.0.dist-info/RECORD +829 -0
  554. rasa/core/channels/inspector/dist/assets/arc-632a63ec.js +0 -1
  555. rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-081e0df4.js +0 -10
  556. rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-3df0afc2.js +0 -2
  557. rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-8c5ed31e.js +0 -2
  558. rasa/core/channels/inspector/dist/assets/edges-f2ad444c-4fc48c3e.js +0 -4
  559. rasa/core/channels/inspector/dist/assets/flowDb-1972c806-9ec53a3c.js +0 -6
  560. rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-41da787a.js +0 -4
  561. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-8bea338b.js +0 -1
  562. rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-ce370633.js +0 -139
  563. rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-90a36523.js +0 -266
  564. rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-41e1aa3f.js +0 -70
  565. rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-e6f2af62.js +0 -1
  566. rasa/core/channels/inspector/dist/assets/layout-498807d8.js +0 -1
  567. rasa/core/channels/inspector/dist/assets/linear-8a078617.js +0 -1
  568. rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-396d17dd.js +0 -109
  569. rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-53f6f391.js +0 -8
  570. rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-715c9c20.js +0 -122
  571. rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-2e8fb31f.js +0 -1
  572. rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-7e2d2aa0.js +0 -1
  573. rasa/core/channels/inspector/dist/assets/styles-080da4f6-4420cea6.js +0 -110
  574. rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-28676cf4.js +0 -159
  575. rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-151251e9.js +0 -1
  576. rasa_pro-3.11.4.dist-info/RECORD +0 -779
  577. /rasa/dialogue_understanding/generator/{single_step → prompt_templates}/command_prompt_template.jinja2 +0 -0
  578. {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/NOTICE +0 -0
  579. {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/WHEEL +0 -0
  580. {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/entry_points.txt +0 -0
@@ -1,28 +1,29 @@
1
1
  from __future__ import annotations
2
+
2
3
  import contextlib
3
4
  import itertools
4
5
  import json
5
- import logging
6
6
  import os
7
7
  from inspect import isawaitable, iscoroutinefunction
8
-
9
8
  from time import sleep
10
9
  from typing import (
10
+ TYPE_CHECKING,
11
11
  Any,
12
12
  Callable,
13
13
  Dict,
14
+ Generator,
15
+ Generic,
14
16
  Iterable,
15
17
  Iterator,
16
18
  List,
17
19
  Optional,
18
20
  Text,
19
- Union,
20
- TYPE_CHECKING,
21
- Generator,
22
21
  TypeVar,
23
- Generic,
22
+ Union,
24
23
  )
25
24
 
25
+ import sqlalchemy as sa
26
+ import structlog
26
27
  from boto3.dynamodb.conditions import Key
27
28
  from pymongo.collection import Collection
28
29
 
@@ -30,17 +31,18 @@ import rasa.shared.utils.cli
30
31
  import rasa.shared.utils.common
31
32
  import rasa.shared.utils.io
32
33
  import rasa.utils.json_utils
33
- from rasa.plugin import plugin_manager
34
- from rasa.shared.core.constants import ACTION_LISTEN_NAME
34
+ from rasa.constants import DEFAULT_SANIC_WORKERS, ENV_SANIC_WORKERS
35
35
  from rasa.core.brokers.broker import EventBroker
36
36
  from rasa.core.constants import (
37
- POSTGRESQL_SCHEMA,
38
37
  POSTGRESQL_MAX_OVERFLOW,
39
38
  POSTGRESQL_POOL_SIZE,
39
+ POSTGRESQL_SCHEMA,
40
40
  )
41
+ from rasa.plugin import plugin_manager
42
+ from rasa.shared.core.constants import ACTION_LISTEN_NAME
41
43
  from rasa.shared.core.conversation import Dialogue
42
44
  from rasa.shared.core.domain import Domain
43
- from rasa.shared.core.events import SessionStarted, Event
45
+ from rasa.shared.core.events import Event, SessionStarted
44
46
  from rasa.shared.core.trackers import (
45
47
  ActionExecuted,
46
48
  DialogueStateTracker,
@@ -50,16 +52,15 @@ from rasa.shared.core.trackers import (
50
52
  from rasa.shared.exceptions import ConnectionException, RasaException
51
53
  from rasa.shared.nlu.constants import INTENT_NAME_KEY
52
54
  from rasa.utils.endpoints import EndpointConfig
53
- import sqlalchemy as sa
54
55
 
55
56
  if TYPE_CHECKING:
56
57
  import boto3.resources.factory.dynamodb.Table
57
- from sqlalchemy.engine.url import URL
58
- from sqlalchemy.engine.base import Engine
59
- from sqlalchemy.orm import Session, Query
60
58
  from sqlalchemy import Sequence
59
+ from sqlalchemy.engine.base import Engine
60
+ from sqlalchemy.engine.url import URL
61
+ from sqlalchemy.orm import Query, Session
61
62
 
62
- logger = logging.getLogger(__name__)
63
+ structlogger = structlog.get_logger(__name__)
63
64
 
64
65
  # default values of PostgreSQL pool size and max overflow
65
66
  POSTGRESQL_DEFAULT_MAX_OVERFLOW = 100
@@ -158,9 +159,9 @@ class TrackerStore:
158
159
  if isinstance(obj, TrackerStore):
159
160
  return obj
160
161
 
161
- from botocore.exceptions import BotoCoreError
162
162
  import pymongo.errors
163
163
  import sqlalchemy.exc
164
+ from botocore.exceptions import BotoCoreError
164
165
 
165
166
  try:
166
167
  _tracker_store = plugin_manager().hook.create_tracker_store(
@@ -315,7 +316,10 @@ class TrackerStore:
315
316
  async def stream_events(self, tracker: DialogueStateTracker) -> None:
316
317
  """Streams events to a message broker."""
317
318
  if self.event_broker is None:
318
- logger.debug("No event broker configured. Skipping streaming events.")
319
+ structlogger.debug(
320
+ "tracker_store.stream_events.no_broker_configured",
321
+ event_info="No event broker configured. Skipping streaming events.",
322
+ )
319
323
  return None
320
324
 
321
325
  old_tracker = await self.retrieve(tracker.sender_id)
@@ -437,13 +441,22 @@ class InMemoryTrackerStore(TrackerStore, SerializedTrackerAsText):
437
441
  fetch_all_sessions: Whether to fetch all sessions or only the last one.
438
442
  """
439
443
  if sender_id not in self.store:
440
- logger.debug(f"Could not find tracker for conversation ID '{sender_id}'.")
444
+ structlogger.debug(
445
+ "in_memory_tracker_store.retrieve.no_tracker_for_sender_id",
446
+ event_info=f"Could not find tracker for conversation ID '{sender_id}'.",
447
+ )
441
448
  return None
442
449
 
443
450
  tracker = self.deserialise_tracker(sender_id, self.store[sender_id])
444
451
 
445
452
  if not tracker:
446
- logger.debug(f"Could not find tracker for conversation ID '{sender_id}'.")
453
+ structlogger.debug(
454
+ "in_memory_tracker_store.retrieve.failed_to_deserialize_tracker",
455
+ event_info=(
456
+ f"Could not deserialize tracker "
457
+ f"for conversation ID '{sender_id}'.",
458
+ ),
459
+ )
447
460
  return None
448
461
 
449
462
  if fetch_all_sessions:
@@ -499,7 +512,10 @@ class RedisTrackerStore(TrackerStore, SerializedTrackerAsText):
499
512
 
500
513
  self.key_prefix = DEFAULT_REDIS_TRACKER_STORE_KEY_PREFIX
501
514
  if key_prefix:
502
- logger.debug(f"Setting non-default redis key prefix: '{key_prefix}'.")
515
+ structlogger.debug(
516
+ "redis_tracker_store.init.custom_key_prefix",
517
+ event_info=f"Setting non-default redis key prefix: '{key_prefix}'.",
518
+ )
503
519
  self._set_key_prefix(key_prefix)
504
520
 
505
521
  super().__init__(domain, event_broker, **kwargs)
@@ -508,9 +524,13 @@ class RedisTrackerStore(TrackerStore, SerializedTrackerAsText):
508
524
  if isinstance(key_prefix, str) and key_prefix.isalnum():
509
525
  self.key_prefix = key_prefix + ":" + DEFAULT_REDIS_TRACKER_STORE_KEY_PREFIX
510
526
  else:
511
- logger.warning(
512
- f"Omitting provided non-alphanumeric redis key prefix: '{key_prefix}'. "
513
- f"Using default '{self.key_prefix}' instead."
527
+ structlogger.warning(
528
+ "redis_tracker_store.init.invalid_key_prefix",
529
+ event_info=(
530
+ f"Omitting provided non-alphanumeric "
531
+ f"redis key prefix: '{key_prefix}'. "
532
+ f"Using default '{self.key_prefix}' instead."
533
+ ),
514
534
  )
515
535
 
516
536
  def _get_key_prefix(self) -> Text:
@@ -576,7 +596,10 @@ class RedisTrackerStore(TrackerStore, SerializedTrackerAsText):
576
596
  """
577
597
  stored = self.red.get(self.key_prefix + sender_id)
578
598
  if stored is None:
579
- logger.debug(f"Could not find tracker for conversation ID '{sender_id}'.")
599
+ structlogger.debug(
600
+ "redis_tracker_store.retrieve.no_tracker_for_sender_id",
601
+ event_info=f"Could not find tracker for conversation ID '{sender_id}'.",
602
+ )
580
603
  return None
581
604
 
582
605
  tracker = self.deserialise_tracker(sender_id, stored)
@@ -674,6 +697,31 @@ class DynamoTrackerStore(TrackerStore, SerializedTrackerAsDict):
674
697
  try:
675
698
  self.client.describe_table(TableName=table_name)
676
699
  except self.client.exceptions.ResourceNotFoundException:
700
+ sanic_workers_count = int(
701
+ os.environ.get(ENV_SANIC_WORKERS, DEFAULT_SANIC_WORKERS)
702
+ )
703
+
704
+ if sanic_workers_count > 1:
705
+ structlogger.error(
706
+ "dynamo_tracker_store.table_creation_not_supported_in_multi_worker_mode",
707
+ event_info=(
708
+ "DynamoDB table creation is not "
709
+ "supported in multi-worker mode. "
710
+ "Table should already exist.",
711
+ ),
712
+ )
713
+ raise RasaException(
714
+ "DynamoDB table creation is not supported in "
715
+ "case of multiple sanic workers. To create the table either "
716
+ "run Rasa with a single worker or create the table manually."
717
+ "Here are the defaults which can be used to "
718
+ "create the table manually: "
719
+ f"Table name: {table_name}, Primary key: sender_id, "
720
+ f"key type `HASH`, attribute type `S` (String), "
721
+ "Provisioned throughput: Read capacity units: 5, "
722
+ "Write capacity units: 5"
723
+ )
724
+
677
725
  table = dynamo.create_table(
678
726
  TableName=self.table_name,
679
727
  KeySchema=[{"AttributeName": "sender_id", "KeyType": "HASH"}],
@@ -799,8 +847,8 @@ class MongoTrackerStore(TrackerStore, SerializedTrackerAsText):
799
847
  event_broker: Optional[EventBroker] = None,
800
848
  **kwargs: Dict[Text, Any],
801
849
  ) -> None:
802
- from pymongo.database import Database
803
850
  from pymongo import MongoClient
851
+ from pymongo.database import Database
804
852
 
805
853
  self.client: MongoClient = MongoClient(
806
854
  host,
@@ -1001,7 +1049,10 @@ def create_engine_kwargs(url: Union[Text, "URL"]) -> Dict[Text, Any]:
1001
1049
  schema_name = os.environ.get(POSTGRESQL_SCHEMA)
1002
1050
 
1003
1051
  if schema_name:
1004
- logger.debug(f"Using PostgreSQL schema '{schema_name}'.")
1052
+ structlogger.debug(
1053
+ "postgresql_tracker_store.schema_name",
1054
+ event_inf=f"Using PostgreSQL schema '{schema_name}'.",
1055
+ )
1005
1056
  kwargs["connect_args"] = {"options": f"-csearch_path={schema_name}"}
1006
1057
 
1007
1058
  # pool_size and max_overflow can be set to control the number of
@@ -1114,7 +1165,10 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
1114
1165
 
1115
1166
  self.engine = sa.create_engine(engine_url, **create_engine_kwargs(engine_url))
1116
1167
 
1117
- logger.debug(f"Attempting to connect to database via '{self.engine.url!r}'.")
1168
+ structlogger.debug(
1169
+ "sql_tracker_store.connect_to_sql_database",
1170
+ event_info=f"Attempting to connect to database via '{self.engine.url!r}'.",
1171
+ )
1118
1172
 
1119
1173
  # Database might take a while to come up
1120
1174
  while True:
@@ -1133,7 +1187,11 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
1133
1187
  # Several Rasa services started in parallel may attempt to
1134
1188
  # create tables at the same time. That is okay so long as
1135
1189
  # the first services finishes the table creation.
1136
- logger.error(f"Could not create tables: {e}")
1190
+ structlogger.error(
1191
+ "sql_tracker_store.create_tables_failed",
1192
+ event_info="Could not create tables",
1193
+ exec_info=e,
1194
+ )
1137
1195
 
1138
1196
  self.sessionmaker = sa.orm.session.sessionmaker(bind=self.engine)
1139
1197
  break
@@ -1141,10 +1199,17 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
1141
1199
  sqlalchemy.exc.OperationalError,
1142
1200
  sqlalchemy.exc.IntegrityError,
1143
1201
  ) as error:
1144
- logger.warning(error)
1202
+ structlogger.warning(
1203
+ "sql_tracker_store.initialisation_error",
1204
+ event_info="Failed to establish a connection to the SQL database. ",
1205
+ exc_info=error,
1206
+ )
1145
1207
  sleep(5)
1146
1208
 
1147
- logger.debug(f"Connection to SQL database '{db}' successful.")
1209
+ structlogger.debug(
1210
+ "sql_tracker_store.connected_to_sql_database",
1211
+ event_info=f"Connection to SQL database '{db}' successful.",
1212
+ )
1148
1213
 
1149
1214
  super().__init__(domain, event_broker, **kwargs)
1150
1215
 
@@ -1212,7 +1277,7 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
1212
1277
  """Creates database `db` and updates engine accordingly."""
1213
1278
  from sqlalchemy import create_engine
1214
1279
 
1215
- if not self.engine.dialect.name == "postgresql":
1280
+ if self.engine.dialect.name != "postgresql":
1216
1281
  rasa.shared.utils.io.raise_warning(
1217
1282
  "The parameter 'login_db' can only be used with a postgres database."
1218
1283
  )
@@ -1252,7 +1317,11 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
1252
1317
  sqlalchemy.exc.ProgrammingError,
1253
1318
  sqlalchemy.exc.IntegrityError,
1254
1319
  ) as e:
1255
- logger.error(f"Could not create database '{database_name}': {e}")
1320
+ structlogger.error(
1321
+ "sql_tracker_store.create_database_failed",
1322
+ event_info=f"Could not create database '{database_name}'",
1323
+ exec_info=e,
1324
+ )
1256
1325
 
1257
1326
  @contextlib.contextmanager
1258
1327
  def session_scope(self) -> Generator["Session", None, None]:
@@ -1316,15 +1385,21 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
1316
1385
  events = [json.loads(event.data) for event in serialised_events]
1317
1386
 
1318
1387
  if self.domain and len(events) > 0:
1319
- logger.debug(f"Recreating tracker from sender id '{sender_id}'")
1388
+ structlogger.debug(
1389
+ "sql_tracker_store.recreating_tracker",
1390
+ event_info=f"Recreating tracker from sender id '{sender_id}'",
1391
+ )
1320
1392
  return DialogueStateTracker.from_dict(
1321
1393
  sender_id, events, self.domain.slots
1322
1394
  )
1323
1395
  else:
1324
- logger.debug(
1325
- f"Can't retrieve tracker matching "
1326
- f"sender id '{sender_id}' from SQL storage. "
1327
- f"Returning `None` instead."
1396
+ structlogger.debug(
1397
+ "sql_tracker_store._retrieve.no_tracker_for_sender_id",
1398
+ event_info=(
1399
+ f"Can't retrieve tracker matching "
1400
+ f"sender id '{sender_id}' from SQL storage. "
1401
+ f"Returning `None` instead.",
1402
+ ),
1328
1403
  )
1329
1404
  return None
1330
1405
 
@@ -1401,7 +1476,12 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
1401
1476
  )
1402
1477
  session.commit()
1403
1478
 
1404
- logger.debug(f"Tracker with sender_id '{tracker.sender_id}' stored to database")
1479
+ structlogger.debug(
1480
+ "sql_tracker_store.save_tracker",
1481
+ event_info=(
1482
+ f"Tracker with sender_id " f"'{tracker.sender_id}' stored to database",
1483
+ ),
1484
+ )
1405
1485
 
1406
1486
  def _additional_events(
1407
1487
  self, session: "Session", tracker: DialogueStateTracker
@@ -1469,11 +1549,14 @@ class FailSafeTrackerStore(TrackerStore):
1469
1549
  if self._on_tracker_store_error:
1470
1550
  self._on_tracker_store_error(error)
1471
1551
  else:
1472
- logger.error(
1473
- f"Error happened when trying to save conversation tracker to "
1474
- f"'{self._tracker_store.__class__.__name__}'. Falling back to use "
1475
- f"the '{InMemoryTrackerStore.__name__}'. Please "
1476
- f"investigate the following error: {error}."
1552
+ structlogger.error(
1553
+ "fail_safe_tracker_store.tracker_store_error",
1554
+ event_info=(
1555
+ f"Error happened when trying to save conversation tracker to "
1556
+ f"'{self._tracker_store.__class__.__name__}'. Falling back to use "
1557
+ f"the '{InMemoryTrackerStore.__name__}'. Please "
1558
+ f"investigate the following error: {error}."
1559
+ ),
1477
1560
  )
1478
1561
 
1479
1562
  async def retrieve(self, sender_id: Text) -> Optional[DialogueStateTracker]:
@@ -1525,11 +1608,14 @@ class FailSafeTrackerStore(TrackerStore):
1525
1608
  if self._on_tracker_store_error:
1526
1609
  self._on_tracker_store_error(error)
1527
1610
  else:
1528
- logger.error(
1529
- f"Error happened when trying to retrieve conversation tracker from "
1530
- f"'{self._tracker_store.__class__.__name__}'. Falling back to use "
1531
- f"the '{InMemoryTrackerStore.__name__}'. Please "
1532
- f"investigate the following error: {error}."
1611
+ structlogger.error(
1612
+ "fail_safe_tracker_store.tracker_store_retrieve_error",
1613
+ event_info=(
1614
+ f"Error happened when trying to retrieve conversation tracker from "
1615
+ f"'{self._tracker_store.__class__.__name__}'. Falling back to use "
1616
+ f"the '{InMemoryTrackerStore.__name__}'."
1617
+ ),
1618
+ exec_info=error,
1533
1619
  )
1534
1620
 
1535
1621
 
@@ -1574,7 +1660,10 @@ def _create_from_endpoint_config(
1574
1660
  domain, endpoint_config, event_broker
1575
1661
  )
1576
1662
 
1577
- logger.debug(f"Connected to {tracker_store.__class__.__name__}.")
1663
+ structlogger.debug(
1664
+ "tracker_store.create_tracker_store_from_endpoint_config",
1665
+ eventi_info=f"Connected to {tracker_store.__class__.__name__}.",
1666
+ )
1578
1667
 
1579
1668
  return tracker_store
1580
1669
 
rasa/core/train.py CHANGED
@@ -2,7 +2,7 @@ import argparse
2
2
  import logging
3
3
  import os
4
4
  from pathlib import Path
5
- from typing import Dict, Optional, Text, List
5
+ from typing import Dict, List, Optional, Text
6
6
 
7
7
  import rasa.shared.utils.io
8
8
  import rasa.utils.io
@@ -1,4 +1,4 @@
1
- from typing import Text, List, Optional, Union, TYPE_CHECKING
1
+ from typing import TYPE_CHECKING, List, Optional, Text, Union
2
2
 
3
3
  if TYPE_CHECKING:
4
4
  from rasa.shared.core.domain import Domain
@@ -21,8 +21,8 @@ def extract_story_graph(
21
21
  Returns:
22
22
  The loaded training data as graph.
23
23
  """
24
- from rasa.shared.core.training_data.structures import StoryGraph
25
24
  import rasa.shared.core.training_data.loading as core_loading
25
+ from rasa.shared.core.training_data.structures import StoryGraph
26
26
 
27
27
  story_steps = core_loading.load_data_from_resource(
28
28
  resource_name, domain, exclusion_percentage=exclusion_percentage
@@ -1,6 +1,7 @@
1
1
  from pathlib import Path
2
2
  from typing import Text
3
3
 
4
+ from rasa.shared.constants import UTTER_PREFIX
4
5
  from rasa.shared.core.domain import Domain, InvalidDomain
5
6
  from rasa.shared.core.events import ActionExecuted
6
7
  from rasa.shared.core.training_data.story_reader.yaml_story_reader import (
@@ -9,10 +10,8 @@ from rasa.shared.core.training_data.story_reader.yaml_story_reader import (
9
10
  from rasa.shared.core.training_data.story_writer.yaml_story_writer import (
10
11
  YAMLStoryWriter,
11
12
  )
12
- from rasa.shared.constants import UTTER_PREFIX
13
13
  from rasa.utils.converter import TrainingDataConverter
14
14
 
15
-
16
15
  OBSOLETE_RESPOND_PREFIX = "respond_"
17
16
 
18
17
 
@@ -13,10 +13,10 @@ from typing import (
13
13
  Dict,
14
14
  List,
15
15
  Optional,
16
+ Set,
16
17
  Text,
17
18
  Tuple,
18
19
  Union,
19
- Set,
20
20
  cast,
21
21
  )
22
22
 
@@ -50,28 +50,28 @@ from rasa.core import run, utils
50
50
  from rasa.core.constants import DEFAULT_SERVER_FORMAT, DEFAULT_SERVER_PORT
51
51
  from rasa.core.utils import AvailableEndpoints
52
52
  from rasa.shared.constants import (
53
- INTENT_MESSAGE_PREFIX,
54
53
  DEFAULT_SENDER_ID,
55
- UTTER_PREFIX,
56
54
  DOCS_URL_NLU_BASED_POLICIES,
55
+ INTENT_MESSAGE_PREFIX,
56
+ UTTER_PREFIX,
57
57
  )
58
58
  from rasa.shared.core.constants import (
59
- USER_INTENT_RESTART,
60
59
  ACTION_LISTEN_NAME,
61
- LOOP_NAME,
60
+ ACTION_UNLIKELY_INTENT_NAME,
62
61
  ACTIVE_LOOP,
62
+ LOOP_INTERRUPTED,
63
+ LOOP_NAME,
63
64
  LOOP_REJECTED,
64
65
  REQUESTED_SLOT,
65
- LOOP_INTERRUPTED,
66
- ACTION_UNLIKELY_INTENT_NAME,
66
+ USER_INTENT_RESTART,
67
67
  )
68
68
  from rasa.shared.core.domain import (
69
- Domain,
70
- KEY_INTENTS,
69
+ KEY_ACTIONS,
71
70
  KEY_ENTITIES,
71
+ KEY_INTENTS,
72
72
  KEY_RESPONSES,
73
- KEY_ACTIONS,
74
73
  KEY_RESPONSES_TEXT,
74
+ Domain,
75
75
  )
76
76
  from rasa.shared.core.events import (
77
77
  ActionExecuted,
@@ -79,11 +79,11 @@ from rasa.shared.core.events import (
79
79
  BotUttered,
80
80
  Event,
81
81
  Restarted,
82
- UserUttered,
83
82
  UserUtteranceReverted,
83
+ UserUttered,
84
84
  )
85
85
  from rasa.shared.core.generator import TrackerWithCachedStates
86
- from rasa.shared.core.trackers import EventVerbosity, DialogueStateTracker
86
+ from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
87
87
  from rasa.shared.core.training_data import visualization
88
88
  from rasa.shared.core.training_data.visualization import (
89
89
  VISUALIZATION_TEMPLATE_PATH,
@@ -91,7 +91,7 @@ from rasa.shared.core.training_data.visualization import (
91
91
  )
92
92
  from rasa.shared.exceptions import InvalidConfigException
93
93
  from rasa.shared.importers.rasa import TrainingDataImporter
94
- from rasa.shared.nlu.constants import TEXT, INTENT_NAME_KEY
94
+ from rasa.shared.nlu.constants import INTENT_NAME_KEY, TEXT
95
95
 
96
96
  # noinspection PyProtectedMember
97
97
  from rasa.shared.nlu.training_data import loading
@@ -1,20 +1,19 @@
1
- from collections import defaultdict
2
- import logging
3
1
  import json
2
+ import logging
3
+ from collections import defaultdict
4
4
  from typing import DefaultDict, Dict, Generator, List, NamedTuple, Optional, Text, Tuple
5
5
 
6
6
  from rasa.core.featurizers.tracker_featurizers import MaxHistoryTrackerFeaturizer
7
+ from rasa.nlu.tokenizers.tokenizer import Tokenizer
7
8
  from rasa.shared.core.constants import (
8
9
  ACTION_LISTEN_NAME,
9
- PREVIOUS_ACTION,
10
10
  ACTION_UNLIKELY_INTENT_NAME,
11
+ PREVIOUS_ACTION,
11
12
  USER,
12
13
  )
13
14
  from rasa.shared.core.domain import Domain, State
14
15
  from rasa.shared.core.events import ActionExecuted, Event
15
16
  from rasa.shared.core.generator import TrackerWithCachedStates
16
-
17
- from rasa.nlu.tokenizers.tokenizer import Tokenizer
18
17
  from rasa.shared.nlu.constants import TEXT
19
18
  from rasa.shared.nlu.training_data.message import Message
20
19
 
@@ -1,15 +1,13 @@
1
1
  import dataclasses
2
-
3
- from typing import DefaultDict, Dict, List, Optional, Set, Text, TYPE_CHECKING
4
2
  from collections import defaultdict
3
+ from typing import TYPE_CHECKING, DefaultDict, Dict, List, Optional, Set, Text
5
4
 
6
- from rasa.shared.core.events import ActionExecuted, UserUttered
7
- from rasa.shared.core.events import SlotSet, ActiveLoop
5
+ from rasa.shared.core.events import ActionExecuted, ActiveLoop, SlotSet, UserUttered
8
6
 
9
7
  if TYPE_CHECKING:
10
8
  from rasa.shared.core.domain import Domain
11
- from rasa.shared.core.trackers import DialogueStateTracker
12
9
  from rasa.shared.core.events import Event
10
+ from rasa.shared.core.trackers import DialogueStateTracker
13
11
 
14
12
 
15
13
  @dataclasses.dataclass
rasa/core/utils.py CHANGED
@@ -1,23 +1,23 @@
1
- import structlog
2
1
  import logging
3
2
  import os
4
3
  from pathlib import Path
5
4
  from socket import SOCK_DGRAM, SOCK_STREAM
6
- from typing import Any, Dict, Optional, List, Set, TYPE_CHECKING, Text, Tuple, Union
5
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Text, Tuple, Union
7
6
 
8
7
  import numpy as np
8
+ import structlog
9
9
  from sanic import Sanic
10
10
 
11
11
  import rasa.cli.utils as cli_utils
12
12
  import rasa.shared.utils.io
13
13
  from rasa.constants import DEFAULT_SANIC_WORKERS, ENV_SANIC_WORKERS
14
14
  from rasa.core.constants import (
15
- DOMAIN_GROUND_TRUTH_METADATA_KEY,
16
- UTTER_SOURCE_METADATA_KEY,
17
15
  ACTIVE_FLOW_METADATA_KEY,
16
+ DOMAIN_GROUND_TRUTH_METADATA_KEY,
18
17
  STEP_ID_METADATA_KEY,
18
+ UTTER_SOURCE_METADATA_KEY,
19
19
  )
20
- from rasa.core.lock_store import LockStore, RedisLockStore, InMemoryLockStore
20
+ from rasa.core.lock_store import InMemoryLockStore, LockStore, RedisLockStore
21
21
  from rasa.shared.constants import DEFAULT_ENDPOINTS_PATH, TCP_PROTOCOL
22
22
  from rasa.shared.core.trackers import DialogueStateTracker
23
23
  from rasa.utils.endpoints import (
rasa/core/visualize.py CHANGED
@@ -3,9 +3,9 @@ import os
3
3
  from typing import Text
4
4
 
5
5
  from rasa import telemetry
6
+ from rasa.shared.core.domain import Domain, InvalidDomain
6
7
  from rasa.shared.core.training_data import loading
7
8
  from rasa.shared.utils.cli import print_error
8
- from rasa.shared.core.domain import InvalidDomain, Domain
9
9
 
10
10
  logger = logging.getLogger(__name__)
11
11
 
@@ -1,4 +1,5 @@
1
1
  from __future__ import annotations
2
+
2
3
  from typing import Any, Dict, List, Optional
3
4
 
4
5
  import structlog
@@ -6,8 +7,8 @@ import structlog
6
7
  from rasa.dialogue_understanding.coexistence.constants import (
7
8
  CALM_ENTRY,
8
9
  NLU_ENTRY,
9
- STICKY,
10
10
  NON_STICKY,
11
+ STICKY,
11
12
  )
12
13
  from rasa.dialogue_understanding.commands import Command, SetSlotCommand
13
14
  from rasa.dialogue_understanding.commands.noop_command import NoopCommand
@@ -27,7 +28,6 @@ from rasa.shared.nlu.constants import COMMANDS, INTENT, INTENT_NAME_KEY
27
28
  from rasa.shared.nlu.training_data.message import Message
28
29
  from rasa.shared.nlu.training_data.training_data import TrainingData
29
30
 
30
-
31
31
  structlogger = structlog.get_logger()
32
32
 
33
33
 
@@ -10,8 +10,8 @@ import rasa.shared.utils.io
10
10
  from rasa.dialogue_understanding.coexistence.constants import (
11
11
  CALM_ENTRY,
12
12
  NLU_ENTRY,
13
- STICKY,
14
13
  NON_STICKY,
14
+ STICKY,
15
15
  )
16
16
  from rasa.dialogue_understanding.commands import Command, SetSlotCommand
17
17
  from rasa.dialogue_understanding.commands.noop_command import NoopCommand
@@ -23,15 +23,15 @@ from rasa.engine.recipes.default_recipe import DefaultV1Recipe
23
23
  from rasa.engine.storage.resource import Resource
24
24
  from rasa.engine.storage.storage import ModelStorage
25
25
  from rasa.shared.constants import (
26
- ROUTE_TO_CALM_SLOT,
27
- PROMPT_CONFIG_KEY,
28
- PROVIDER_CONFIG_KEY,
29
26
  MODEL_CONFIG_KEY,
30
27
  OPENAI_PROVIDER,
28
+ PROMPT_CONFIG_KEY,
29
+ PROVIDER_CONFIG_KEY,
30
+ ROUTE_TO_CALM_SLOT,
31
31
  TIMEOUT_CONFIG_KEY,
32
32
  )
33
33
  from rasa.shared.core.trackers import DialogueStateTracker
34
- from rasa.shared.exceptions import InvalidConfigException, FileIOException
34
+ from rasa.shared.exceptions import FileIOException, InvalidConfigException
35
35
  from rasa.shared.nlu.constants import COMMANDS, TEXT
36
36
  from rasa.shared.nlu.training_data.message import Message
37
37
  from rasa.shared.nlu.training_data.training_data import TrainingData