rasa-pro 3.12.0.dev2__py3-none-any.whl → 3.12.0.dev4__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 (502) hide show
  1. rasa/__main__.py +7 -7
  2. rasa/anonymization/anonymisation_rule_yaml_reader.py +1 -1
  3. rasa/anonymization/anonymization_pipeline.py +3 -3
  4. rasa/anonymization/anonymization_rule_executor.py +1 -1
  5. rasa/anonymization/anonymization_rule_orchestrator.py +2 -3
  6. rasa/cli/arguments/data.py +2 -2
  7. rasa/cli/arguments/evaluate.py +2 -1
  8. rasa/cli/arguments/interactive.py +1 -1
  9. rasa/cli/arguments/run.py +1 -1
  10. rasa/cli/arguments/test.py +7 -5
  11. rasa/cli/arguments/train.py +3 -3
  12. rasa/cli/arguments/visualize.py +2 -2
  13. rasa/cli/arguments/x.py +1 -0
  14. rasa/cli/data.py +4 -3
  15. rasa/cli/dialogue_understanding_test.py +121 -18
  16. rasa/cli/evaluate.py +1 -1
  17. rasa/cli/export.py +6 -6
  18. rasa/cli/interactive.py +4 -5
  19. rasa/cli/llm_fine_tuning.py +5 -5
  20. rasa/cli/markers.py +1 -2
  21. rasa/cli/project_templates/calm/actions/add_contact.py +1 -1
  22. rasa/cli/project_templates/tutorial/actions/actions.py +3 -2
  23. rasa/cli/shell.py +2 -3
  24. rasa/cli/studio/download.py +1 -2
  25. rasa/cli/studio/studio.py +2 -3
  26. rasa/cli/studio/train.py +0 -1
  27. rasa/cli/telemetry.py +2 -2
  28. rasa/cli/test.py +11 -11
  29. rasa/cli/utils.py +7 -5
  30. rasa/core/__init__.py +0 -1
  31. rasa/core/actions/action.py +42 -21
  32. rasa/core/actions/action_hangup.py +1 -1
  33. rasa/core/actions/action_repeat_bot_messages.py +2 -2
  34. rasa/core/actions/action_run_slot_rejections.py +2 -2
  35. rasa/core/actions/action_trigger_chitchat.py +1 -1
  36. rasa/core/actions/action_trigger_flow.py +5 -5
  37. rasa/core/actions/action_trigger_search.py +1 -1
  38. rasa/core/actions/forms.py +14 -12
  39. rasa/core/actions/http_custom_action_executor.py +8 -1
  40. rasa/core/actions/loops.py +3 -3
  41. rasa/core/actions/two_stage_fallback.py +13 -13
  42. rasa/core/auth_retry_tracker_store.py +1 -2
  43. rasa/core/brokers/broker.py +2 -1
  44. rasa/core/brokers/file.py +1 -1
  45. rasa/core/brokers/kafka.py +8 -8
  46. rasa/core/brokers/pika.py +8 -9
  47. rasa/core/brokers/sql.py +4 -3
  48. rasa/core/channels/__init__.py +3 -0
  49. rasa/core/channels/botframework.py +2 -2
  50. rasa/core/channels/callback.py +4 -4
  51. rasa/core/channels/channel.py +11 -11
  52. rasa/core/channels/console.py +0 -1
  53. rasa/core/channels/development_inspector.py +6 -6
  54. rasa/core/channels/facebook.py +5 -5
  55. rasa/core/channels/hangouts.py +7 -8
  56. rasa/core/channels/inspector/dist/assets/{arc-861ddd57.js → arc-632a63ec.js} +1 -1
  57. rasa/core/channels/inspector/dist/assets/{c4Diagram-d0fbc5ce-921f02db.js → c4Diagram-d0fbc5ce-081e0df4.js} +1 -1
  58. rasa/core/channels/inspector/dist/assets/{classDiagram-936ed81e-b436c4f8.js → classDiagram-936ed81e-3df0afc2.js} +1 -1
  59. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-c3cb15f1-511a23cb.js → classDiagram-v2-c3cb15f1-8c5ed31e.js} +1 -1
  60. rasa/core/channels/inspector/dist/assets/{createText-62fc7601-ef476ecd.js → createText-62fc7601-89c73b31.js} +1 -1
  61. rasa/core/channels/inspector/dist/assets/{edges-f2ad444c-f1878e0a.js → edges-f2ad444c-4fc48c3e.js} +1 -1
  62. rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-fac75185.js → erDiagram-9d236eb7-907e0440.js} +1 -1
  63. rasa/core/channels/inspector/dist/assets/{flowDb-1972c806-201c5bbc.js → flowDb-1972c806-9ec53a3c.js} +1 -1
  64. rasa/core/channels/inspector/dist/assets/{flowDiagram-7ea5b25a-f904ae41.js → flowDiagram-7ea5b25a-41da787a.js} +1 -1
  65. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-8bea338b.js +1 -0
  66. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-abe16c3d-1813da66.js → flowchart-elk-definition-abe16c3d-ce370633.js} +1 -1
  67. rasa/core/channels/inspector/dist/assets/{ganttDiagram-9b5ea136-872af172.js → ganttDiagram-9b5ea136-90a36523.js} +1 -1
  68. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-99d0ae7c-34a0af5a.js → gitGraphDiagram-99d0ae7c-41e1aa3f.js} +1 -1
  69. rasa/core/channels/inspector/dist/assets/{index-2c4b9a3b-42ba3e3d.js → index-2c4b9a3b-e6f2af62.js} +1 -1
  70. rasa/core/channels/inspector/dist/assets/{index-37817b51.js → index-e793d777.js} +3 -3
  71. rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-6b731386.js → infoDiagram-736b4530-8ceba4db.js} +1 -1
  72. rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-e8579ac6.js → journeyDiagram-df861f2b-960d3809.js} +1 -1
  73. rasa/core/channels/inspector/dist/assets/{layout-89e6403a.js → layout-498807d8.js} +1 -1
  74. rasa/core/channels/inspector/dist/assets/{line-dc73d3fc.js → line-eeccc4e2.js} +1 -1
  75. rasa/core/channels/inspector/dist/assets/{linear-f5b1d2bc.js → linear-8a078617.js} +1 -1
  76. rasa/core/channels/inspector/dist/assets/{mindmap-definition-beec6740-82cb74fa.js → mindmap-definition-beec6740-396d17dd.js} +1 -1
  77. rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-bdf5f29b.js → pieDiagram-dbbf0591-dc9b5e1b.js} +1 -1
  78. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-c7a0cbe4.js → quadrantDiagram-4d7f4fd6-a08cba6d.js} +1 -1
  79. rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-7ec5410f.js → requirementDiagram-6fc4c22a-87242b9e.js} +1 -1
  80. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-8f13d901-caee5554.js → sankeyDiagram-8f13d901-53f6f391.js} +1 -1
  81. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-b655622a-2935f8db.js → sequenceDiagram-b655622a-715c9c20.js} +1 -1
  82. rasa/core/channels/inspector/dist/assets/{stateDiagram-59f0c015-8f5d9693.js → stateDiagram-59f0c015-2e8fb31f.js} +1 -1
  83. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-2b26beab-d565d1de.js → stateDiagram-v2-2b26beab-7e2d2aa0.js} +1 -1
  84. rasa/core/channels/inspector/dist/assets/{styles-080da4f6-75ad421d.js → styles-080da4f6-4420cea6.js} +1 -1
  85. rasa/core/channels/inspector/dist/assets/{styles-3dcbcfbf-7e764226.js → styles-3dcbcfbf-28676cf4.js} +1 -1
  86. rasa/core/channels/inspector/dist/assets/{styles-9c745c82-7a4e0e61.js → styles-9c745c82-cef936a6.js} +1 -1
  87. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-4835440b-4019d1bf.js → svgDrawCommon-4835440b-151251e9.js} +1 -1
  88. rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-01ea12df.js → timeline-definition-5b62e21b-0d39bdb2.js} +1 -1
  89. rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-89407137.js → xychartDiagram-2b33534f-a03fa445.js} +1 -1
  90. rasa/core/channels/inspector/dist/index.html +3 -1
  91. rasa/core/channels/inspector/index.html +2 -0
  92. rasa/core/channels/inspector/src/App.tsx +1 -4
  93. rasa/core/channels/mattermost.py +4 -4
  94. rasa/core/channels/rasa_chat.py +4 -4
  95. rasa/core/channels/rest.py +11 -12
  96. rasa/core/channels/rocketchat.py +4 -3
  97. rasa/core/channels/slack.py +6 -5
  98. rasa/core/channels/socketio.py +7 -28
  99. rasa/core/channels/studio_chat.py +193 -0
  100. rasa/core/channels/telegram.py +73 -41
  101. rasa/core/channels/twilio.py +3 -3
  102. rasa/core/channels/vier_cvg.py +2 -2
  103. rasa/core/channels/voice_ready/audiocodes.py +8 -8
  104. rasa/core/channels/voice_ready/jambonz.py +5 -5
  105. rasa/core/channels/voice_ready/jambonz_protocol.py +3 -4
  106. rasa/core/channels/voice_ready/twilio_voice.py +9 -8
  107. rasa/core/channels/voice_ready/utils.py +1 -1
  108. rasa/core/channels/voice_stream/asr/asr_engine.py +2 -2
  109. rasa/core/channels/voice_stream/asr/azure.py +2 -2
  110. rasa/core/channels/voice_stream/asr/deepgram.py +57 -16
  111. rasa/core/channels/voice_stream/browser_audio.py +9 -6
  112. rasa/core/channels/voice_stream/call_state.py +2 -1
  113. rasa/core/channels/voice_stream/tts/azure.py +1 -2
  114. rasa/core/channels/voice_stream/tts/cartesia.py +5 -4
  115. rasa/core/channels/voice_stream/tts/tts_cache.py +3 -2
  116. rasa/core/channels/voice_stream/tts/tts_engine.py +1 -1
  117. rasa/core/channels/voice_stream/twilio_media_streams.py +10 -7
  118. rasa/core/channels/voice_stream/util.py +1 -1
  119. rasa/core/channels/voice_stream/voice_channel.py +15 -15
  120. rasa/core/channels/webexteams.py +3 -4
  121. rasa/core/evaluation/marker.py +7 -6
  122. rasa/core/evaluation/marker_base.py +15 -16
  123. rasa/core/evaluation/marker_stats.py +3 -4
  124. rasa/core/evaluation/marker_tracker_loader.py +5 -4
  125. rasa/core/exporter.py +4 -4
  126. rasa/core/featurizers/precomputation.py +8 -8
  127. rasa/core/featurizers/single_state_featurizer.py +7 -7
  128. rasa/core/featurizers/tracker_featurizers.py +13 -13
  129. rasa/core/http_interpreter.py +3 -4
  130. rasa/core/information_retrieval/__init__.py +1 -1
  131. rasa/core/information_retrieval/faiss.py +4 -4
  132. rasa/core/information_retrieval/information_retrieval.py +2 -2
  133. rasa/core/information_retrieval/milvus.py +3 -3
  134. rasa/core/information_retrieval/qdrant.py +3 -3
  135. rasa/core/jobs.py +1 -0
  136. rasa/core/lock.py +2 -3
  137. rasa/core/lock_store.py +3 -3
  138. rasa/core/migrate.py +11 -8
  139. rasa/core/nlg/__init__.py +1 -1
  140. rasa/core/nlg/callback.py +2 -3
  141. rasa/core/nlg/contextual_response_rephraser.py +63 -13
  142. rasa/core/nlg/generator.py +2 -2
  143. rasa/core/nlg/interpolator.py +4 -3
  144. rasa/core/nlg/response.py +3 -4
  145. rasa/core/nlg/summarize.py +1 -0
  146. rasa/core/persistor.py +3 -3
  147. rasa/core/policies/ensemble.py +10 -9
  148. rasa/core/policies/enterprise_search_policy.py +86 -21
  149. rasa/core/policies/flow_policy.py +13 -14
  150. rasa/core/policies/flows/flow_executor.py +35 -11
  151. rasa/core/policies/intentless_policy.py +6 -7
  152. rasa/core/policies/memoization.py +22 -20
  153. rasa/core/policies/policy.py +24 -22
  154. rasa/core/policies/rule_policy.py +37 -36
  155. rasa/core/policies/ted_policy.py +87 -85
  156. rasa/core/policies/unexpected_intent_policy.py +77 -75
  157. rasa/core/processor.py +96 -65
  158. rasa/core/run.py +1 -1
  159. rasa/core/secrets_manager/endpoints.py +2 -3
  160. rasa/core/secrets_manager/factory.py +2 -3
  161. rasa/core/secrets_manager/secret_manager.py +2 -3
  162. rasa/core/secrets_manager/vault.py +2 -2
  163. rasa/core/test.py +30 -30
  164. rasa/core/tracker_store.py +15 -15
  165. rasa/core/train.py +1 -1
  166. rasa/core/training/__init__.py +2 -2
  167. rasa/core/training/converters/responses_prefix_converter.py +1 -2
  168. rasa/core/training/interactive.py +13 -13
  169. rasa/core/training/story_conflict.py +4 -5
  170. rasa/core/training/training.py +3 -5
  171. rasa/core/utils.py +5 -5
  172. rasa/core/visualize.py +1 -1
  173. rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -2
  174. rasa/dialogue_understanding/coexistence/llm_based_router.py +5 -5
  175. rasa/dialogue_understanding/commands/__init__.py +22 -22
  176. rasa/dialogue_understanding/commands/can_not_handle_command.py +20 -1
  177. rasa/dialogue_understanding/commands/cancel_flow_command.py +18 -7
  178. rasa/dialogue_understanding/commands/change_flow_command.py +18 -2
  179. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +18 -4
  180. rasa/dialogue_understanding/commands/clarify_command.py +19 -3
  181. rasa/dialogue_understanding/commands/command.py +19 -3
  182. rasa/dialogue_understanding/commands/correct_slots_command.py +3 -3
  183. rasa/dialogue_understanding/commands/error_command.py +1 -1
  184. rasa/dialogue_understanding/commands/free_form_answer_command.py +2 -1
  185. rasa/dialogue_understanding/commands/handle_code_change_command.py +2 -2
  186. rasa/dialogue_understanding/commands/human_handoff_command.py +16 -4
  187. rasa/dialogue_understanding/commands/knowledge_answer_command.py +18 -4
  188. rasa/dialogue_understanding/commands/noop_command.py +2 -1
  189. rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +16 -4
  190. rasa/dialogue_understanding/commands/restart_command.py +2 -5
  191. rasa/dialogue_understanding/commands/session_end_command.py +3 -5
  192. rasa/dialogue_understanding/commands/session_start_command.py +3 -5
  193. rasa/dialogue_understanding/commands/set_slot_command.py +27 -3
  194. rasa/dialogue_understanding/commands/skip_question_command.py +16 -4
  195. rasa/dialogue_understanding/commands/start_flow_command.py +17 -2
  196. rasa/dialogue_understanding/commands/user_silence_command.py +3 -5
  197. rasa/dialogue_understanding/commands/utils.py +64 -45
  198. rasa/dialogue_understanding/constants.py +1 -0
  199. rasa/dialogue_understanding/generator/command_generator.py +2 -119
  200. rasa/dialogue_understanding/generator/command_parser.py +201 -0
  201. rasa/dialogue_understanding/generator/constants.py +2 -2
  202. rasa/dialogue_understanding/generator/flow_retrieval.py +7 -7
  203. rasa/dialogue_understanding/generator/llm_based_command_generator.py +11 -57
  204. rasa/dialogue_understanding/generator/llm_command_generator.py +2 -1
  205. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +67 -120
  206. rasa/dialogue_understanding/generator/nlu_command_adapter.py +8 -10
  207. rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +32 -93
  208. rasa/dialogue_understanding/generator/utils.py +45 -0
  209. rasa/dialogue_understanding/patterns/cancel.py +2 -1
  210. rasa/dialogue_understanding/patterns/cannot_handle.py +1 -0
  211. rasa/dialogue_understanding/patterns/chitchat.py +1 -1
  212. rasa/dialogue_understanding/patterns/clarify.py +2 -1
  213. rasa/dialogue_understanding/patterns/code_change.py +2 -0
  214. rasa/dialogue_understanding/patterns/collect_information.py +6 -3
  215. rasa/dialogue_understanding/patterns/completed.py +1 -1
  216. rasa/dialogue_understanding/patterns/continue_interrupted.py +10 -1
  217. rasa/dialogue_understanding/patterns/correction.py +4 -2
  218. rasa/dialogue_understanding/patterns/human_handoff.py +1 -1
  219. rasa/dialogue_understanding/patterns/internal_error.py +1 -0
  220. rasa/dialogue_understanding/patterns/search.py +1 -1
  221. rasa/dialogue_understanding/patterns/session_start.py +1 -1
  222. rasa/dialogue_understanding/patterns/skip_question.py +1 -0
  223. rasa/dialogue_understanding/patterns/user_silence.py +1 -1
  224. rasa/dialogue_understanding/processor/command_processor.py +13 -9
  225. rasa/dialogue_understanding/processor/command_processor_component.py +1 -1
  226. rasa/dialogue_understanding/stack/dialogue_stack.py +4 -3
  227. rasa/dialogue_understanding/stack/frames/__init__.py +2 -2
  228. rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +4 -1
  229. rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +2 -3
  230. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +5 -2
  231. rasa/dialogue_understanding/stack/frames/search_frame.py +4 -1
  232. rasa/dialogue_understanding/stack/utils.py +8 -4
  233. rasa/dialogue_understanding/utils.py +121 -2
  234. rasa/dialogue_understanding_test/README.md +379 -0
  235. rasa/dialogue_understanding_test/command_comparison.py +60 -0
  236. rasa/dialogue_understanding_test/command_metric_calculation.py +110 -4
  237. rasa/dialogue_understanding_test/constants.py +6 -1
  238. rasa/dialogue_understanding_test/du_test_case.py +252 -38
  239. rasa/dialogue_understanding_test/du_test_result.py +291 -2
  240. rasa/dialogue_understanding_test/du_test_runner.py +239 -10
  241. rasa/dialogue_understanding_test/du_test_schema.yml +161 -0
  242. rasa/dialogue_understanding_test/io.py +338 -20
  243. rasa/dialogue_understanding_test/test_case_simulation/__init__.py +0 -0
  244. rasa/dialogue_understanding_test/test_case_simulation/exception.py +28 -0
  245. rasa/dialogue_understanding_test/test_case_simulation/test_case_tracker_simulator.py +336 -0
  246. rasa/dialogue_understanding_test/utils.py +70 -0
  247. rasa/dialogue_understanding_test/validation.py +59 -4
  248. rasa/e2e_test/aggregate_test_stats_calculator.py +1 -1
  249. rasa/e2e_test/assertions.py +1 -1
  250. rasa/e2e_test/e2e_config.py +1 -1
  251. rasa/e2e_test/e2e_test_case.py +3 -4
  252. rasa/e2e_test/e2e_test_converter.py +2 -3
  253. rasa/e2e_test/e2e_test_coverage_report.py +6 -6
  254. rasa/e2e_test/e2e_test_result.py +1 -1
  255. rasa/e2e_test/e2e_test_runner.py +134 -31
  256. rasa/e2e_test/stub_custom_action.py +1 -1
  257. rasa/e2e_test/utils/e2e_yaml_utils.py +1 -1
  258. rasa/e2e_test/utils/io.py +132 -65
  259. rasa/e2e_test/utils/validation.py +1 -1
  260. rasa/engine/caching.py +5 -7
  261. rasa/engine/constants.py +1 -1
  262. rasa/engine/graph.py +2 -2
  263. rasa/engine/recipes/default_components.py +13 -15
  264. rasa/engine/recipes/recipe.py +2 -2
  265. rasa/engine/runner/dask.py +2 -2
  266. rasa/engine/runner/interface.py +1 -0
  267. rasa/engine/storage/local_model_storage.py +5 -4
  268. rasa/engine/storage/resource.py +2 -1
  269. rasa/engine/storage/storage.py +5 -3
  270. rasa/engine/training/components.py +2 -1
  271. rasa/engine/training/fingerprinting.py +4 -2
  272. rasa/engine/training/graph_trainer.py +4 -4
  273. rasa/engine/training/hooks.py +2 -2
  274. rasa/engine/validation.py +34 -33
  275. rasa/exceptions.py +3 -2
  276. rasa/graph_components/converters/nlu_message_converter.py +3 -3
  277. rasa/graph_components/providers/domain_for_core_training_provider.py +3 -3
  278. rasa/graph_components/providers/domain_provider.py +3 -2
  279. rasa/graph_components/providers/flows_provider.py +2 -3
  280. rasa/graph_components/providers/forms_provider.py +4 -4
  281. rasa/graph_components/providers/nlu_training_data_provider.py +5 -3
  282. rasa/graph_components/providers/responses_provider.py +4 -4
  283. rasa/graph_components/providers/rule_only_provider.py +3 -2
  284. rasa/graph_components/providers/story_graph_provider.py +8 -8
  285. rasa/graph_components/providers/training_tracker_provider.py +3 -2
  286. rasa/graph_components/validators/default_recipe_validator.py +16 -16
  287. rasa/graph_components/validators/finetuning_validator.py +10 -8
  288. rasa/hooks.py +18 -12
  289. rasa/jupyter.py +2 -2
  290. rasa/llm_fine_tuning/annotation_module.py +4 -4
  291. rasa/llm_fine_tuning/conversations.py +6 -6
  292. rasa/llm_fine_tuning/llm_data_preparation_module.py +1 -1
  293. rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -4
  294. rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +1 -1
  295. rasa/llm_fine_tuning/paraphrasing_module.py +1 -1
  296. rasa/llm_fine_tuning/storage.py +3 -3
  297. rasa/markers/marker.py +2 -3
  298. rasa/markers/marker_base.py +1 -2
  299. rasa/markers/upload.py +2 -2
  300. rasa/markers/validate.py +2 -3
  301. rasa/model.py +3 -5
  302. rasa/model_manager/config.py +1 -1
  303. rasa/model_manager/model_api.py +5 -4
  304. rasa/model_manager/runner_service.py +6 -6
  305. rasa/model_manager/socket_bridge.py +8 -3
  306. rasa/model_manager/studio_jwt_auth.py +1 -0
  307. rasa/model_manager/trainer_service.py +9 -7
  308. rasa/model_manager/utils.py +1 -1
  309. rasa/model_manager/warm_rasa_process.py +14 -8
  310. rasa/model_service.py +5 -6
  311. rasa/model_testing.py +13 -15
  312. rasa/nlu/classifiers/diet_classifier.py +72 -73
  313. rasa/nlu/classifiers/fallback_classifier.py +9 -11
  314. rasa/nlu/classifiers/keyword_intent_classifier.py +7 -6
  315. rasa/nlu/classifiers/logistic_regression_classifier.py +3 -3
  316. rasa/nlu/classifiers/mitie_intent_classifier.py +5 -4
  317. rasa/nlu/classifiers/regex_message_handler.py +3 -2
  318. rasa/nlu/classifiers/sklearn_intent_classifier.py +2 -2
  319. rasa/nlu/convert.py +2 -2
  320. rasa/nlu/emulators/dialogflow.py +3 -3
  321. rasa/nlu/emulators/luis.py +5 -5
  322. rasa/nlu/emulators/no_emulator.py +1 -0
  323. rasa/nlu/emulators/wit.py +4 -4
  324. rasa/nlu/extractors/crf_entity_extractor.py +11 -11
  325. rasa/nlu/extractors/duckling_entity_extractor.py +7 -6
  326. rasa/nlu/extractors/entity_synonyms.py +10 -9
  327. rasa/nlu/extractors/extractor.py +16 -16
  328. rasa/nlu/extractors/mitie_entity_extractor.py +10 -9
  329. rasa/nlu/extractors/regex_entity_extractor.py +11 -10
  330. rasa/nlu/extractors/spacy_entity_extractor.py +2 -2
  331. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +15 -14
  332. rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +2 -1
  333. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +10 -9
  334. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +9 -7
  335. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +13 -12
  336. rasa/nlu/featurizers/featurizer.py +5 -4
  337. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +6 -6
  338. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -4
  339. rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +4 -4
  340. rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +2 -0
  341. rasa/nlu/model.py +0 -1
  342. rasa/nlu/selectors/response_selector.py +67 -68
  343. rasa/nlu/test.py +38 -38
  344. rasa/nlu/tokenizers/jieba_tokenizer.py +1 -2
  345. rasa/nlu/tokenizers/mitie_tokenizer.py +2 -2
  346. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -3
  347. rasa/nlu/tokenizers/tokenizer.py +6 -7
  348. rasa/nlu/tokenizers/whitespace_tokenizer.py +1 -1
  349. rasa/nlu/utils/bilou_utils.py +7 -7
  350. rasa/nlu/utils/hugging_face/registry.py +22 -22
  351. rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +2 -1
  352. rasa/nlu/utils/mitie_utils.py +2 -1
  353. rasa/nlu/utils/pattern_utils.py +1 -1
  354. rasa/nlu/utils/spacy_utils.py +3 -3
  355. rasa/plugin.py +12 -1
  356. rasa/server.py +37 -1
  357. rasa/shared/constants.py +22 -2
  358. rasa/shared/core/command_payload_reader.py +15 -7
  359. rasa/shared/core/constants.py +4 -1
  360. rasa/shared/core/conversation.py +1 -2
  361. rasa/shared/core/events.py +47 -37
  362. rasa/shared/core/flows/__init__.py +0 -1
  363. rasa/shared/core/flows/flow.py +11 -11
  364. rasa/shared/core/flows/flow_step.py +19 -13
  365. rasa/shared/core/flows/flow_step_links.py +21 -14
  366. rasa/shared/core/flows/flow_step_sequence.py +6 -4
  367. rasa/shared/core/flows/flows_list.py +3 -3
  368. rasa/shared/core/flows/nlu_trigger.py +1 -1
  369. rasa/shared/core/flows/steps/__init__.py +2 -2
  370. rasa/shared/core/flows/steps/action.py +4 -3
  371. rasa/shared/core/flows/steps/call.py +4 -4
  372. rasa/shared/core/flows/steps/collect.py +7 -4
  373. rasa/shared/core/flows/steps/continuation.py +3 -1
  374. rasa/shared/core/flows/steps/end.py +3 -1
  375. rasa/shared/core/flows/steps/internal.py +3 -2
  376. rasa/shared/core/flows/steps/link.py +6 -4
  377. rasa/shared/core/flows/steps/no_operation.py +7 -5
  378. rasa/shared/core/flows/steps/set_slots.py +4 -3
  379. rasa/shared/core/flows/steps/start.py +3 -1
  380. rasa/shared/core/flows/utils.py +1 -0
  381. rasa/shared/core/flows/validation.py +3 -5
  382. rasa/shared/core/generator.py +20 -21
  383. rasa/shared/core/slot_mappings.py +15 -15
  384. rasa/shared/core/slots.py +3 -3
  385. rasa/shared/core/trackers.py +31 -31
  386. rasa/shared/core/training_data/loading.py +1 -1
  387. rasa/shared/core/training_data/story_reader/story_reader.py +3 -3
  388. rasa/shared/core/training_data/story_reader/story_step_builder.py +4 -4
  389. rasa/shared/core/training_data/story_reader/yaml_story_reader.py +29 -31
  390. rasa/shared/core/training_data/story_writer/yaml_story_writer.py +22 -24
  391. rasa/shared/core/training_data/structures.py +11 -12
  392. rasa/shared/core/training_data/visualization.py +10 -10
  393. rasa/shared/data.py +6 -6
  394. rasa/shared/engine/caching.py +0 -1
  395. rasa/shared/exceptions.py +2 -2
  396. rasa/shared/importers/rasa.py +5 -6
  397. rasa/shared/importers/utils.py +1 -1
  398. rasa/shared/nlu/constants.py +3 -0
  399. rasa/shared/nlu/training_data/entities_parser.py +6 -6
  400. rasa/shared/nlu/training_data/features.py +3 -3
  401. rasa/shared/nlu/training_data/formats/__init__.py +1 -1
  402. rasa/shared/nlu/training_data/formats/dialogflow.py +4 -5
  403. rasa/shared/nlu/training_data/formats/luis.py +7 -8
  404. rasa/shared/nlu/training_data/formats/rasa.py +4 -5
  405. rasa/shared/nlu/training_data/formats/rasa_yaml.py +17 -16
  406. rasa/shared/nlu/training_data/formats/readerwriter.py +8 -11
  407. rasa/shared/nlu/training_data/formats/wit.py +3 -4
  408. rasa/shared/nlu/training_data/loading.py +4 -4
  409. rasa/shared/nlu/training_data/lookup_tables_parser.py +1 -1
  410. rasa/shared/nlu/training_data/message.py +13 -14
  411. rasa/shared/nlu/training_data/schemas/data_schema.py +1 -1
  412. rasa/shared/nlu/training_data/schemas/responses.yml +1 -0
  413. rasa/shared/nlu/training_data/synonyms_parser.py +3 -3
  414. rasa/shared/nlu/training_data/training_data.py +12 -13
  415. rasa/shared/nlu/training_data/util.py +11 -10
  416. rasa/shared/providers/_configs/azure_openai_client_config.py +3 -119
  417. rasa/shared/providers/_configs/client_config.py +1 -3
  418. rasa/shared/providers/_configs/default_litellm_client_config.py +1 -3
  419. rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +1 -3
  420. rasa/shared/providers/_configs/litellm_router_client_config.py +1 -3
  421. rasa/shared/providers/_configs/model_group_config.py +2 -7
  422. rasa/shared/providers/_configs/openai_client_config.py +1 -3
  423. rasa/shared/providers/_configs/rasa_llm_client_config.py +1 -3
  424. rasa/shared/providers/_configs/self_hosted_llm_client_config.py +1 -3
  425. rasa/shared/providers/_configs/utils.py +1 -0
  426. rasa/shared/providers/_ssl_verification_utils.py +5 -6
  427. rasa/shared/providers/_utils.py +5 -5
  428. rasa/shared/providers/embedding/_base_litellm_embedding_client.py +1 -1
  429. rasa/shared/providers/embedding/azure_openai_embedding_client.py +3 -26
  430. rasa/shared/providers/embedding/embedding_client.py +1 -1
  431. rasa/shared/providers/embedding/litellm_router_embedding_client.py +1 -3
  432. rasa/shared/providers/llm/_base_litellm_client.py +1 -3
  433. rasa/shared/providers/llm/azure_openai_llm_client.py +25 -79
  434. rasa/shared/providers/llm/default_litellm_llm_client.py +1 -3
  435. rasa/shared/providers/llm/litellm_router_llm_client.py +2 -21
  436. rasa/shared/providers/llm/llm_client.py +1 -3
  437. rasa/shared/providers/llm/llm_response.py +41 -2
  438. rasa/shared/providers/llm/openai_llm_client.py +3 -9
  439. rasa/shared/providers/llm/rasa_llm_client.py +6 -20
  440. rasa/shared/providers/llm/self_hosted_llm_client.py +3 -9
  441. rasa/shared/providers/mappings.py +18 -19
  442. rasa/shared/providers/router/_base_litellm_router_client.py +1 -3
  443. rasa/shared/providers/router/router_client.py +1 -3
  444. rasa/shared/utils/cli.py +1 -1
  445. rasa/shared/utils/common.py +1 -1
  446. rasa/shared/utils/health_check/embeddings_health_check_mixin.py +1 -1
  447. rasa/shared/utils/health_check/health_check.py +3 -3
  448. rasa/shared/utils/health_check/llm_health_check_mixin.py +1 -1
  449. rasa/shared/utils/io.py +1 -1
  450. rasa/shared/utils/llm.py +5 -9
  451. rasa/shared/utils/pykwalify_extensions.py +1 -1
  452. rasa/shared/utils/schemas/events.py +1 -1
  453. rasa/shared/utils/yaml.py +29 -26
  454. rasa/studio/auth.py +3 -3
  455. rasa/studio/config.py +1 -2
  456. rasa/studio/data_handler.py +3 -3
  457. rasa/studio/download.py +1 -1
  458. rasa/studio/results_logger.py +3 -3
  459. rasa/studio/upload.py +2 -0
  460. rasa/telemetry.py +31 -0
  461. rasa/tracing/config.py +3 -3
  462. rasa/tracing/instrumentation/attribute_extractors.py +54 -0
  463. rasa/tracing/instrumentation/instrumentation.py +25 -5
  464. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -1
  465. rasa/tracing/instrumentation/metrics.py +11 -11
  466. rasa/tracing/metric_instrument_provider.py +14 -14
  467. rasa/utils/common.py +12 -9
  468. rasa/utils/endpoints.py +1 -1
  469. rasa/utils/io.py +7 -7
  470. rasa/utils/licensing.py +3 -4
  471. rasa/utils/log_utils.py +7 -6
  472. rasa/utils/ml_utils.py +1 -0
  473. rasa/utils/plotting.py +3 -3
  474. rasa/utils/sanic_error_handler.py +1 -1
  475. rasa/utils/tensorflow/callback.py +2 -2
  476. rasa/utils/tensorflow/crf.py +2 -2
  477. rasa/utils/tensorflow/data_generator.py +5 -5
  478. rasa/utils/tensorflow/environment.py +3 -3
  479. rasa/utils/tensorflow/feature_array.py +2 -3
  480. rasa/utils/tensorflow/layers.py +18 -12
  481. rasa/utils/tensorflow/layers_utils.py +2 -1
  482. rasa/utils/tensorflow/metrics.py +2 -2
  483. rasa/utils/tensorflow/model_data.py +7 -7
  484. rasa/utils/tensorflow/model_data_utils.py +10 -9
  485. rasa/utils/tensorflow/models.py +31 -32
  486. rasa/utils/tensorflow/rasa_layers.py +20 -19
  487. rasa/utils/tensorflow/types.py +2 -1
  488. rasa/utils/train_utils.py +23 -21
  489. rasa/utils/url_tools.py +1 -1
  490. rasa/validator.py +17 -1
  491. rasa/version.py +1 -1
  492. {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev4.dist-info}/METADATA +9 -10
  493. rasa_pro-3.12.0.dev4.dist-info/RECORD +800 -0
  494. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +0 -1
  495. rasa/shared/providers/_configs/azure_entra_id_client_creds.py +0 -40
  496. rasa/shared/providers/_configs/azure_entra_id_config.py +0 -533
  497. rasa/shared/providers/_configs/oauth_config.py +0 -33
  498. rasa/shared/providers/constants.py +0 -6
  499. rasa_pro-3.12.0.dev2.dist-info/RECORD +0 -793
  500. {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev4.dist-info}/NOTICE +0 -0
  501. {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev4.dist-info}/WHEEL +0 -0
  502. {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev4.dist-info}/entry_points.txt +0 -0
@@ -1,12 +1,12 @@
1
1
  import logging
2
- from typing import List, Optional, Union, Text, Any, Dict
2
+ from typing import Any, Dict, List, Optional, Text, Union
3
3
 
4
4
  import rasa.shared.utils.common
5
5
  import rasa.shared.utils.io
6
6
  from rasa.shared.constants import CHANNEL, RESPONSE_CONDITION
7
7
  from rasa.shared.core.domain import Domain
8
- from rasa.utils.endpoints import EndpointConfig
9
8
  from rasa.shared.core.trackers import DialogueStateTracker
9
+ from rasa.utils.endpoints import EndpointConfig
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -1,10 +1,11 @@
1
1
  import copy
2
- import re
3
2
  import logging
4
- from jinja2 import Template
3
+ import re
4
+ from typing import Any, Dict, List, Text, Union
5
+
5
6
  import jinja2
6
7
  import structlog
7
- from typing import Text, Dict, Union, Any, List
8
+ from jinja2 import Template
8
9
 
9
10
  from rasa.core.constants import JINJA2_TEMPLATE_ENGINE, RASA_FORMAT_TEMPLATE_ENGINE
10
11
 
rasa/core/nlg/response.py CHANGED
@@ -1,14 +1,13 @@
1
1
  import copy
2
2
  import logging
3
- from rasa.core.constants import DEFAULT_TEMPLATE_ENGINE, TEMPLATE_ENGINE_CONFIG_KEY
4
-
5
- from rasa.shared.core.trackers import DialogueStateTracker
6
- from typing import Text, Any, Dict, Optional, List
3
+ from typing import Any, Dict, List, Optional, Text
7
4
 
5
+ from rasa.core.constants import DEFAULT_TEMPLATE_ENGINE, TEMPLATE_ENGINE_CONFIG_KEY
8
6
  from rasa.core.nlg import interpolator
9
7
  from rasa.core.nlg.generator import NaturalLanguageGenerator, ResponseVariationFilter
10
8
  from rasa.shared.constants import RESPONSE_CONDITION
11
9
  from rasa.shared.core.domain import RESPONSE_KEYS_TO_INTERPOLATE
10
+ from rasa.shared.core.trackers import DialogueStateTracker
12
11
  from rasa.shared.nlu.constants import METADATA
13
12
 
14
13
  logger = logging.getLogger(__name__)
@@ -2,6 +2,7 @@ from typing import Optional
2
2
 
3
3
  import structlog
4
4
  from jinja2 import Template
5
+
5
6
  from rasa.core.tracker_store import DialogueStateTracker
6
7
  from rasa.shared.providers.llm.llm_client import LLMClient
7
8
  from rasa.shared.utils.llm import (
rasa/core/persistor.py CHANGED
@@ -9,14 +9,13 @@ from typing import TYPE_CHECKING, List, Optional, Text, Tuple, Union
9
9
 
10
10
  import structlog
11
11
 
12
- from rasa.exceptions import ModelNotFound
13
12
  import rasa.shared.utils.common
14
13
  import rasa.utils.common
15
14
  from rasa.constants import (
15
+ DEFAULT_BUCKET_NAME,
16
16
  HTTP_STATUS_FORBIDDEN,
17
17
  HTTP_STATUS_NOT_FOUND,
18
18
  MODEL_ARCHIVE_EXTENSION,
19
- DEFAULT_BUCKET_NAME,
20
19
  )
21
20
  from rasa.env import (
22
21
  AWS_ENDPOINT_URL_ENV,
@@ -26,6 +25,7 @@ from rasa.env import (
26
25
  BUCKET_NAME_ENV,
27
26
  REMOTE_STORAGE_PATH_ENV,
28
27
  )
28
+ from rasa.exceptions import ModelNotFound
29
29
  from rasa.shared.exceptions import RasaException
30
30
  from rasa.shared.utils.io import raise_warning
31
31
 
@@ -367,8 +367,8 @@ class GCSPersistor(Persistor):
367
367
  self.bucket = self.storage_client.bucket(bucket_name)
368
368
 
369
369
  def _ensure_bucket_exists(self, bucket_name: Text) -> None:
370
- from google.cloud import exceptions
371
370
  from google.auth import exceptions as auth_exceptions
371
+ from google.cloud import exceptions
372
372
 
373
373
  try:
374
374
  self.storage_client.get_bucket(bucket_name)
@@ -1,22 +1,23 @@
1
1
  from __future__ import annotations
2
- from abc import abstractmethod, ABC
3
- from typing import Optional, Text, List, Dict, Any
2
+
4
3
  import logging
4
+ from abc import ABC, abstractmethod
5
+ from typing import Any, Dict, List, Optional, Text
5
6
 
7
+ from rasa.core.policies.policy import PolicyPrediction
6
8
  from rasa.engine.graph import GraphComponent
7
- from rasa.engine.storage.storage import ModelStorage
8
- from rasa.engine.storage.resource import Resource
9
9
  from rasa.engine.runner.interface import ExecutionContext
10
- from rasa.core.policies.policy import PolicyPrediction
11
- from rasa.shared.exceptions import RasaException, InvalidConfigException
10
+ from rasa.engine.storage.resource import Resource
11
+ from rasa.engine.storage.storage import ModelStorage
12
12
  from rasa.shared.core.constants import ACTION_LISTEN_NAME
13
13
  from rasa.shared.core.domain import Domain
14
14
  from rasa.shared.core.events import (
15
- ActionExecutionRejected,
16
15
  ActionExecuted,
16
+ ActionExecutionRejected,
17
17
  DefinePrevUserUtteredFeaturization,
18
18
  )
19
19
  from rasa.shared.core.trackers import DialogueStateTracker
20
+ from rasa.shared.exceptions import InvalidConfigException, RasaException
20
21
 
21
22
  logger = logging.getLogger(__name__)
22
23
 
@@ -34,11 +35,11 @@ def is_not_in_training_data(
34
35
  `False` if and only if an action was predicted (i.e. `max_confidence` > 0) by
35
36
  a `MemoizationPolicy`
36
37
  """
37
- from rasa.core.policies.rule_policy import RulePolicy
38
38
  from rasa.core.policies.memoization import (
39
- MemoizationPolicy,
40
39
  AugmentedMemoizationPolicy,
40
+ MemoizationPolicy,
41
41
  )
42
+ from rasa.core.policies.rule_policy import RulePolicy
42
43
 
43
44
  if not policy_name:
44
45
  return True
@@ -2,6 +2,7 @@ import importlib.resources
2
2
  import json
3
3
  import re
4
4
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text
5
+
5
6
  import dotenv
6
7
  import structlog
7
8
  from jinja2 import Template
@@ -16,8 +17,8 @@ from rasa.core.constants import (
16
17
  )
17
18
  from rasa.core.information_retrieval import (
18
19
  InformationRetrieval,
19
- SearchResult,
20
20
  InformationRetrievalException,
21
+ SearchResult,
21
22
  create_from_endpoint_config,
22
23
  )
23
24
  from rasa.core.information_retrieval.faiss import FAISS_Store
@@ -34,9 +35,9 @@ from rasa.dialogue_understanding.patterns.internal_error import (
34
35
  )
35
36
  from rasa.dialogue_understanding.stack.frames import (
36
37
  DialogueStackFrame,
38
+ PatternFlowStackFrame,
37
39
  SearchStackFrame,
38
40
  )
39
- from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
40
41
  from rasa.engine.graph import ExecutionContext
41
42
  from rasa.engine.recipes.default_recipe import DefaultV1Recipe
42
43
  from rasa.engine.storage.resource import Resource
@@ -46,12 +47,12 @@ from rasa.graph_components.providers.responses_provider import Responses
46
47
  from rasa.shared.constants import (
47
48
  EMBEDDINGS_CONFIG_KEY,
48
49
  MODEL_CONFIG_KEY,
50
+ MODEL_GROUP_ID_CONFIG_KEY,
51
+ MODEL_NAME_CONFIG_KEY,
52
+ OPENAI_PROVIDER,
49
53
  PROMPT_CONFIG_KEY,
50
54
  PROVIDER_CONFIG_KEY,
51
- OPENAI_PROVIDER,
52
55
  TIMEOUT_CONFIG_KEY,
53
- MODEL_NAME_CONFIG_KEY,
54
- MODEL_GROUP_ID_CONFIG_KEY,
55
56
  )
56
57
  from rasa.shared.core.constants import (
57
58
  ACTION_CANCEL_FLOW,
@@ -59,15 +60,23 @@ from rasa.shared.core.constants import (
59
60
  DEFAULT_SLOT_NAMES,
60
61
  )
61
62
  from rasa.shared.core.domain import Domain
62
- from rasa.shared.core.events import Event, UserUttered, BotUttered
63
+ from rasa.shared.core.events import BotUttered, Event, UserUttered
63
64
  from rasa.shared.core.generator import TrackerWithCachedStates
64
65
  from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
65
- from rasa.shared.exceptions import RasaException, FileIOException
66
+ from rasa.shared.exceptions import FileIOException, RasaException
67
+ from rasa.shared.nlu.constants import (
68
+ KEY_COMPONENT_NAME,
69
+ KEY_LLM_RESPONSE_METADATA,
70
+ KEY_PROMPT_NAME,
71
+ KEY_USER_PROMPT,
72
+ PROMPTS,
73
+ )
66
74
  from rasa.shared.nlu.training_data.training_data import TrainingData
67
75
  from rasa.shared.providers.embedding._langchain_embedding_client_adapter import (
68
76
  _LangchainEmbeddingClientAdapter,
69
77
  )
70
78
  from rasa.shared.providers.llm.llm_client import LLMClient
79
+ from rasa.shared.providers.llm.llm_response import LLMResponse
71
80
  from rasa.shared.utils.cli import print_error_and_exit
72
81
  from rasa.shared.utils.health_check.embeddings_health_check_mixin import (
73
82
  EmbeddingsHealthCheckMixin,
@@ -80,9 +89,9 @@ from rasa.shared.utils.llm import (
80
89
  embedder_factory,
81
90
  get_prompt_template,
82
91
  llm_factory,
92
+ resolve_model_client_config,
83
93
  sanitize_message_for_prompt,
84
94
  tracker_as_readable_transcript,
85
- resolve_model_client_config,
86
95
  )
87
96
  from rasa.telemetry import (
88
97
  track_enterprise_search_policy_predict,
@@ -92,6 +101,7 @@ from rasa.telemetry import (
92
101
 
93
102
  if TYPE_CHECKING:
94
103
  from langchain.schema.embeddings import Embeddings
104
+
95
105
  from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
96
106
 
97
107
  from rasa.utils.log_utils import log_llm
@@ -272,6 +282,43 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
272
282
  # Wrap the embedding client in the adapter
273
283
  return _LangchainEmbeddingClientAdapter(client)
274
284
 
285
+ @classmethod
286
+ def _add_prompt_and_llm_response_to_latest_message(
287
+ cls,
288
+ tracker: DialogueStateTracker,
289
+ prompt_name: str,
290
+ user_prompt: str,
291
+ llm_response: Optional[LLMResponse] = None,
292
+ ) -> None:
293
+ """Stores the prompt and LLMResponse metadata in the tracker.
294
+
295
+ Args:
296
+ tracker: The DialogueStateTracker containing the current conversation state.
297
+ prompt_name: A name identifying prompt usage.
298
+ user_prompt: The user prompt that was sent to the LLM.
299
+ llm_response: The response object from the LLM (None if no response).
300
+ """
301
+ from rasa.dialogue_understanding.utils import record_commands_and_prompts
302
+
303
+ if not record_commands_and_prompts:
304
+ return
305
+
306
+ if not tracker.latest_message:
307
+ return
308
+
309
+ parse_data = tracker.latest_message.parse_data
310
+ if PROMPTS not in parse_data:
311
+ parse_data[PROMPTS] = [] # type: ignore[literal-required]
312
+
313
+ prompt_data: Dict[Text, Any] = {
314
+ KEY_COMPONENT_NAME: cls.__name__,
315
+ KEY_PROMPT_NAME: prompt_name,
316
+ KEY_USER_PROMPT: user_prompt,
317
+ KEY_LLM_RESPONSE_METADATA: llm_response.to_dict() if llm_response else None,
318
+ }
319
+
320
+ parse_data[PROMPTS].append(prompt_data) # type: ignore[literal-required]
321
+
275
322
  def train( # type: ignore[override]
276
323
  self,
277
324
  training_trackers: List[TrackerWithCachedStates],
@@ -498,13 +545,27 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
498
545
 
499
546
  if self.use_llm:
500
547
  prompt = self._render_prompt(tracker, documents.results)
501
- llm_answer = await self._generate_llm_answer(llm, prompt)
548
+ llm_response = await self._generate_llm_answer(llm, prompt)
549
+ llm_response = LLMResponse.ensure_llm_response(llm_response)
550
+
551
+ self._add_prompt_and_llm_response_to_latest_message(
552
+ tracker=tracker,
553
+ prompt_name="enterprise_search_prompt",
554
+ user_prompt=prompt,
555
+ llm_response=llm_response,
556
+ )
557
+
558
+ if llm_response is None or not llm_response.choices:
559
+ logger.debug(f"{logger_key}.no_llm_response")
560
+ response = None
561
+ else:
562
+ llm_answer = llm_response.choices[0]
502
563
 
503
- if self.citation_enabled:
504
- llm_answer = self.post_process_citations(llm_answer)
564
+ if self.citation_enabled:
565
+ llm_answer = self.post_process_citations(llm_answer)
505
566
 
506
- logger.debug(f"{logger_key}.llm_answer", llm_answer=llm_answer)
507
- response = llm_answer
567
+ logger.debug(f"{logger_key}.llm_answer", llm_answer=llm_answer)
568
+ response = llm_answer
508
569
  else:
509
570
  response = documents.results[0].metadata.get("answer", None)
510
571
  if not response:
@@ -516,7 +577,6 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
516
577
  "enterprise_search_policy.predict_action_probabilities.no_llm",
517
578
  search_results=documents,
518
579
  )
519
-
520
580
  if response is None:
521
581
  return self._create_prediction_internal_error(domain, tracker)
522
582
 
@@ -581,10 +641,18 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
581
641
 
582
642
  async def _generate_llm_answer(
583
643
  self, llm: LLMClient, prompt: Text
584
- ) -> Optional[Text]:
644
+ ) -> Optional[LLMResponse]:
645
+ """Fetches an LLM completion for the provided prompt.
646
+
647
+ Args:
648
+ llm: The LLM client used to get the completion.
649
+ prompt: The prompt text to send to the model.
650
+
651
+ Returns:
652
+ An LLMResponse object, or None if the call fails.
653
+ """
585
654
  try:
586
- llm_response = await llm.acompletion(prompt)
587
- llm_answer = llm_response.choices[0]
655
+ return await llm.acompletion(prompt)
588
656
  except Exception as e:
589
657
  # unfortunately, langchain does not wrap LLM exceptions which means
590
658
  # we have to catch all exceptions here
@@ -592,9 +660,7 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
592
660
  "enterprise_search_policy._generate_llm_answer.llm_error",
593
661
  error=e,
594
662
  )
595
- llm_answer = None
596
-
597
- return llm_answer
663
+ return None
598
664
 
599
665
  def _create_prediction(
600
666
  self,
@@ -692,7 +758,6 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
692
758
  **kwargs: Any,
693
759
  ) -> "EnterpriseSearchPolicy":
694
760
  """Loads a trained policy (see parent class for full docstring)."""
695
-
696
761
  # Perform health checks for both LLM and embeddings client configs
697
762
  cls._perform_health_checks(config, "enterprise_search_policy.load")
698
763
 
@@ -1,9 +1,18 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, Text, List, Optional
4
- from rasa.core.policies.flows import flow_executor
3
+ from typing import Any, Dict, List, Optional, Text
4
+
5
+ import structlog
5
6
 
7
+ from rasa.core.constants import (
8
+ FLOW_POLICY_PRIORITY,
9
+ POLICY_MAX_HISTORY,
10
+ POLICY_PRIORITY,
11
+ )
12
+ from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
13
+ from rasa.core.policies.flows import flow_executor
6
14
  from rasa.core.policies.flows.flow_exceptions import FlowCircuitBreakerTrippedException
15
+ from rasa.core.policies.policy import Policy, PolicyPrediction
7
16
  from rasa.dialogue_understanding.patterns.internal_error import (
8
17
  InternalErrorPatternFlowStackFrame,
9
18
  )
@@ -14,27 +23,17 @@ from rasa.dialogue_understanding.stack.frames import (
14
23
  from rasa.dialogue_understanding.stack.utils import (
15
24
  end_top_user_flow,
16
25
  )
17
-
18
- from rasa.core.constants import (
19
- FLOW_POLICY_PRIORITY,
20
- POLICY_MAX_HISTORY,
21
- POLICY_PRIORITY,
22
- )
23
-
24
- from rasa.shared.core.events import Event
25
- from rasa.shared.core.flows import FlowsList
26
- from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
27
- from rasa.core.policies.policy import Policy, PolicyPrediction
28
26
  from rasa.engine.graph import ExecutionContext
29
27
  from rasa.engine.recipes.default_recipe import DefaultV1Recipe
30
28
  from rasa.engine.storage.resource import Resource
31
29
  from rasa.engine.storage.storage import ModelStorage
32
30
  from rasa.shared.core.domain import Domain
31
+ from rasa.shared.core.events import Event
32
+ from rasa.shared.core.flows import FlowsList
33
33
  from rasa.shared.core.generator import TrackerWithCachedStates
34
34
  from rasa.shared.core.trackers import (
35
35
  DialogueStateTracker,
36
36
  )
37
- import structlog
38
37
 
39
38
  structlogger = structlog.get_logger()
40
39
 
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, Text, List, Optional
3
+ from typing import Any, Dict, List, Optional, Text
4
4
 
5
5
  import structlog
6
6
  from jinja2 import Template
@@ -9,15 +9,15 @@ from structlog.contextvars import (
9
9
  bound_contextvars,
10
10
  )
11
11
 
12
- from rasa.core.constants import STEP_ID_METADATA_KEY, ACTIVE_FLOW_METADATA_KEY
12
+ from rasa.core.constants import ACTIVE_FLOW_METADATA_KEY, STEP_ID_METADATA_KEY
13
13
  from rasa.core.policies.flows.flow_exceptions import (
14
14
  FlowCircuitBreakerTrippedException,
15
15
  FlowException,
16
16
  NoNextStepInFlowException,
17
17
  )
18
18
  from rasa.core.policies.flows.flow_step_result import (
19
- FlowActionPrediction,
20
19
  ContinueFlowWithNextStep,
20
+ FlowActionPrediction,
21
21
  FlowStepResult,
22
22
  PauseFlowReturnPrediction,
23
23
  )
@@ -67,21 +67,22 @@ from rasa.shared.core.flows.flow import (
67
67
  FlowStep,
68
68
  )
69
69
  from rasa.shared.core.flows.flow_step_links import (
70
- StaticFlowStepLink,
71
- IfFlowStepLink,
72
70
  ElseFlowStepLink,
71
+ IfFlowStepLink,
72
+ StaticFlowStepLink,
73
73
  )
74
74
  from rasa.shared.core.flows.steps import (
75
75
  ActionFlowStep,
76
- SetSlotsFlowStep,
77
- LinkFlowStep,
78
- ContinueFlowStep,
79
- EndFlowStep,
80
76
  CallFlowStep,
81
77
  CollectInformationFlowStep,
78
+ ContinueFlowStep,
79
+ EndFlowStep,
80
+ LinkFlowStep,
82
81
  NoOperationFlowStep,
82
+ SetSlotsFlowStep,
83
83
  )
84
84
  from rasa.shared.core.flows.steps.collect import SlotRejection
85
+ from rasa.shared.core.flows.steps.constants import START_STEP
85
86
  from rasa.shared.core.slots import Slot
86
87
  from rasa.shared.core.trackers import (
87
88
  DialogueStateTracker,
@@ -316,7 +317,7 @@ def reset_scoped_slots(
316
317
  def _reset_slot(slot_name: Text, dialogue_tracker: DialogueStateTracker) -> None:
317
318
  slot = dialogue_tracker.slots.get(slot_name, None)
318
319
  initial_value = slot.initial_value if slot else None
319
- events.append(SlotSet(slot_name, initial_value))
320
+ events.append(SlotSet(slot_name, initial_value, metadata={"reset": True}))
320
321
 
321
322
  if (
322
323
  isinstance(current_frame, UserFlowStackFrame)
@@ -448,6 +449,7 @@ def advance_flows_until_next_action(
448
449
  tracker,
449
450
  available_actions,
450
451
  flows,
452
+ previous_step_id,
451
453
  )
452
454
  new_events = step_result.events
453
455
  if (
@@ -464,6 +466,9 @@ def advance_flows_until_next_action(
464
466
  new_events.insert(
465
467
  idx, FlowCompleted(active_frame.flow_id, previous_step_id)
466
468
  )
469
+ attach_stack_metadata_to_events(
470
+ next_step.id, current_flow.id, new_events
471
+ )
467
472
  tracker.update_stack(step_stack)
468
473
  tracker.update_with_events(new_events)
469
474
 
@@ -567,6 +572,17 @@ def validate_custom_slot_mappings(
567
572
  return True
568
573
 
569
574
 
575
+ def attach_stack_metadata_to_events(
576
+ step_id: str,
577
+ flow_id: str,
578
+ events: List[Event],
579
+ ) -> None:
580
+ """Attach the stack metadata to the events."""
581
+ for event in events:
582
+ event.metadata[STEP_ID_METADATA_KEY] = step_id
583
+ event.metadata[ACTIVE_FLOW_METADATA_KEY] = flow_id
584
+
585
+
570
586
  def run_step(
571
587
  step: FlowStep,
572
588
  flow: Flow,
@@ -574,6 +590,7 @@ def run_step(
574
590
  tracker: DialogueStateTracker,
575
591
  available_actions: List[str],
576
592
  flows: FlowsList,
593
+ previous_step_id: str,
577
594
  ) -> FlowStepResult:
578
595
  """Run a single step of a flow.
579
596
 
@@ -591,12 +608,19 @@ def run_step(
591
608
  tracker: The tracker to run the step on.
592
609
  available_actions: The actions that are available in the domain.
593
610
  flows: All flows.
611
+ previous_step_id: The ID of the previous step.
594
612
 
595
613
  Returns:
596
614
  A result of running the step describing where to transition to.
597
615
  """
598
616
  initial_events: List[Event] = []
599
- if step == flow.first_step_in_flow():
617
+ if previous_step_id == START_STEP:
618
+ # if the previous step id is the start step, we need to add a flow
619
+ # started event to the initial events.
620
+ # we can't use the current step to check this, as the current step is the
621
+ # first step in the flow -> other steps might link to this flow, so the
622
+ # only reliable way to check if we are starting a new flow is checking for
623
+ # the START_STEP meta step
600
624
  initial_events.append(FlowStarted(flow.id, metadata=stack.current_context()))
601
625
 
602
626
  if isinstance(step, CollectInformationFlowStep):
@@ -1,7 +1,7 @@
1
1
  import importlib.resources
2
2
  import math
3
3
  from dataclasses import dataclass, field
4
- from typing import Any, Dict, List, Optional, Set, TYPE_CHECKING, Text, Tuple
4
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Text, Tuple
5
5
 
6
6
  import structlog
7
7
  import tiktoken
@@ -30,19 +30,18 @@ from rasa.engine.storage.storage import ModelStorage
30
30
  from rasa.graph_components.providers.forms_provider import Forms
31
31
  from rasa.graph_components.providers.responses_provider import Responses
32
32
  from rasa.shared.constants import (
33
- REQUIRED_SLOTS_KEY,
34
33
  EMBEDDINGS_CONFIG_KEY,
35
34
  LLM_CONFIG_KEY,
36
35
  MODEL_CONFIG_KEY,
36
+ MODEL_GROUP_ID_CONFIG_KEY,
37
37
  MODEL_NAME_CONFIG_KEY,
38
+ OPENAI_PROVIDER,
38
39
  PROMPT_CONFIG_KEY,
39
40
  PROVIDER_CONFIG_KEY,
40
- OPENAI_PROVIDER,
41
+ REQUIRED_SLOTS_KEY,
41
42
  TIMEOUT_CONFIG_KEY,
42
- MODEL_GROUP_ID_CONFIG_KEY,
43
43
  )
44
- from rasa.shared.core.constants import ACTION_LISTEN_NAME
45
- from rasa.shared.core.constants import ACTION_TRIGGER_CHITCHAT
44
+ from rasa.shared.core.constants import ACTION_LISTEN_NAME, ACTION_TRIGGER_CHITCHAT
46
45
  from rasa.shared.core.domain import KEY_RESPONSES_TEXT, Domain
47
46
  from rasa.shared.core.events import (
48
47
  ActionExecuted,
@@ -75,9 +74,9 @@ from rasa.shared.utils.llm import (
75
74
  embedder_factory,
76
75
  get_prompt_template,
77
76
  llm_factory,
77
+ resolve_model_client_config,
78
78
  sanitize_message_for_prompt,
79
79
  tracker_as_readable_transcript,
80
- resolve_model_client_config,
81
80
  )
82
81
  from rasa.utils.log_utils import log_llm
83
82
  from rasa.utils.ml_utils import (
@@ -1,39 +1,41 @@
1
1
  from __future__ import annotations
2
- import copy
3
- import zlib
4
2
 
5
3
  import base64
4
+ import copy
6
5
  import json
7
6
  import logging
8
- import structlog
7
+ import zlib
8
+ from pathlib import Path
9
+ from typing import Any, Dict, List, Optional, Text
9
10
 
11
+ import structlog
10
12
  from tqdm import tqdm
11
- from typing import Optional, Any, Dict, List, Text
12
- from pathlib import Path
13
13
 
14
- import rasa.utils.io
15
14
  import rasa.shared.utils.io
15
+ import rasa.utils.io
16
+ from rasa.core.constants import (
17
+ DEFAULT_MAX_HISTORY,
18
+ MEMOIZATION_POLICY_PRIORITY,
19
+ POLICY_MAX_HISTORY,
20
+ POLICY_PRIORITY,
21
+ )
22
+ from rasa.core.featurizers.tracker_featurizers import (
23
+ FEATURIZER_FILE,
24
+ MaxHistoryTrackerFeaturizer,
25
+ TrackerFeaturizer,
26
+ )
27
+ from rasa.core.policies.policy import Policy, PolicyPrediction, SupportedData
16
28
  from rasa.engine.graph import ExecutionContext
17
29
  from rasa.engine.recipes.default_recipe import DefaultV1Recipe
18
30
  from rasa.engine.storage.resource import Resource
19
31
  from rasa.engine.storage.storage import ModelStorage
20
- from rasa.shared.core.domain import State, Domain
32
+ from rasa.shared.core.constants import ACTION_LISTEN_NAME
33
+ from rasa.shared.core.domain import Domain, State
21
34
  from rasa.shared.core.events import ActionExecuted
22
- from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
23
- from rasa.core.featurizers.tracker_featurizers import MaxHistoryTrackerFeaturizer
24
- from rasa.core.featurizers.tracker_featurizers import FEATURIZER_FILE
25
- from rasa.shared.exceptions import FileIOException
26
- from rasa.core.policies.policy import PolicyPrediction, Policy, SupportedData
27
- from rasa.shared.core.trackers import DialogueStateTracker
28
35
  from rasa.shared.core.generator import TrackerWithCachedStates
36
+ from rasa.shared.core.trackers import DialogueStateTracker
37
+ from rasa.shared.exceptions import FileIOException
29
38
  from rasa.shared.utils.io import is_logging_disabled
30
- from rasa.core.constants import (
31
- MEMOIZATION_POLICY_PRIORITY,
32
- DEFAULT_MAX_HISTORY,
33
- POLICY_MAX_HISTORY,
34
- POLICY_PRIORITY,
35
- )
36
- from rasa.shared.core.constants import ACTION_LISTEN_NAME
37
39
 
38
40
  logger = logging.getLogger(__name__)
39
41
  structlogger = structlog.get_logger()