rasa-pro 3.12.0.dev2__py3-none-any.whl → 3.12.0.dev3__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 +116 -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 +281 -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 -8
  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 +2 -0
  463. rasa/tracing/instrumentation/instrumentation.py +4 -4
  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.dev3.dist-info}/METADATA +8 -9
  493. rasa_pro-3.12.0.dev3.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.dev3.dist-info}/NOTICE +0 -0
  501. {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev3.dist-info}/WHEEL +0 -0
  502. {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev3.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  import os
4
2
  import re
5
3
  from typing import Any, Dict, Optional
@@ -13,10 +11,6 @@ from rasa.shared.constants import (
13
11
  OPENAI_PROVIDER,
14
12
  )
15
13
  from rasa.shared.providers._configs.openai_client_config import OpenAIClientConfig
16
- from rasa.shared.providers.constants import (
17
- LITE_LLM_API_KEY_FIELD,
18
- LITE_LLM_API_VERSION_FIELD,
19
- )
20
14
  from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
21
15
 
22
16
  structlogger = structlog.get_logger()
@@ -63,7 +57,7 @@ class OpenAILLMClient(_BaseLiteLLMClient):
63
57
  self.validate_client_setup()
64
58
 
65
59
  @classmethod
66
- def from_config(cls, config: Dict[str, Any]) -> OpenAILLMClient:
60
+ def from_config(cls, config: Dict[str, Any]) -> "OpenAILLMClient":
67
61
  """
68
62
  Initializes the client from given configuration.
69
63
 
@@ -154,8 +148,8 @@ class OpenAILLMClient(_BaseLiteLLMClient):
154
148
  fn_args = super()._completion_fn_args
155
149
  fn_args.update(
156
150
  {
157
- LITE_LLM_API_KEY_FIELD: self.api_base,
158
- LITE_LLM_API_VERSION_FIELD: self.api_version,
151
+ "api_base": self.api_base,
152
+ "api_version": self.api_version,
159
153
  }
160
154
  )
161
155
  return fn_args
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  from typing import Any, Dict, Optional
4
2
 
5
3
  import structlog
@@ -11,10 +9,6 @@ from rasa.shared.constants import (
11
9
  from rasa.shared.providers._configs.rasa_llm_client_config import (
12
10
  RasaLLMClientConfig,
13
11
  )
14
- from rasa.shared.providers.constants import (
15
- LITE_LLM_API_BASE_FIELD,
16
- LITE_LLM_API_KEY_FIELD,
17
- )
18
12
  from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
19
13
  from rasa.utils.licensing import retrieve_license_from_env
20
14
 
@@ -22,7 +16,7 @@ structlogger = structlog.get_logger()
22
16
 
23
17
 
24
18
  class RasaLLMClient(_BaseLiteLLMClient):
25
- """A client for interfacing with a Rasa-Hosted LLM endpoint that uses
19
+ """A client for interfacing with a Rasa-Hosted LLM endpoint that uses.
26
20
 
27
21
  Parameters:
28
22
  model (str): The model or deployment name.
@@ -55,15 +49,12 @@ class RasaLLMClient(_BaseLiteLLMClient):
55
49
 
56
50
  @property
57
51
  def api_base(self) -> Optional[str]:
58
- """
59
- Returns the base API URL for the openai llm client.
60
- """
52
+ """Returns the base API URL for the openai llm client."""
61
53
  return self._api_base
62
54
 
63
55
  @property
64
56
  def provider(self) -> str:
65
- """
66
- Returns the provider name for the self hosted llm client.
57
+ """Returns the provider name for the self hosted llm client.
67
58
 
68
59
  Returns:
69
60
  String representing the provider name.
@@ -88,20 +79,15 @@ class RasaLLMClient(_BaseLiteLLMClient):
88
79
 
89
80
  @property
90
81
  def _completion_fn_args(self) -> Dict[str, Any]:
91
- """Returns the completion arguments for invoking a call through
92
- LiteLLM's completion functions.
93
- """
82
+ """Returns the completion arguments for invoking a call using completions."""
94
83
  fn_args = super()._completion_fn_args
95
84
  fn_args.update(
96
- {
97
- LITE_LLM_API_BASE_FIELD: self.api_base,
98
- LITE_LLM_API_KEY_FIELD: retrieve_license_from_env(),
99
- }
85
+ {"api_base": self.api_base, "api_key": retrieve_license_from_env()}
100
86
  )
101
87
  return fn_args
102
88
 
103
89
  @classmethod
104
- def from_config(cls, config: Dict[str, Any]) -> RasaLLMClient:
90
+ def from_config(cls, config: Dict[str, Any]) -> "RasaLLMClient":
105
91
  try:
106
92
  client_config = RasaLLMClientConfig.from_dict(config)
107
93
  except ValueError as e:
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  import logging
4
2
  import os
5
3
  from typing import Any, Dict, List, Optional, Union
@@ -19,10 +17,6 @@ from rasa.shared.exceptions import ProviderClientAPIException
19
17
  from rasa.shared.providers._configs.self_hosted_llm_client_config import (
20
18
  SelfHostedLLMClientConfig,
21
19
  )
22
- from rasa.shared.providers.constants import (
23
- LITE_LLM_API_BASE_FIELD,
24
- LITE_LLM_API_VERSION_FIELD,
25
- )
26
20
  from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
27
21
  from rasa.shared.providers.llm.llm_response import LLMResponse
28
22
  from rasa.shared.utils.io import suppress_logs
@@ -73,7 +67,7 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
73
67
  self._apply_dummy_api_key_if_missing()
74
68
 
75
69
  @classmethod
76
- def from_config(cls, config: Dict[str, Any]) -> SelfHostedLLMClient:
70
+ def from_config(cls, config: Dict[str, Any]) -> "SelfHostedLLMClient":
77
71
  try:
78
72
  client_config = SelfHostedLLMClientConfig.from_dict(config)
79
73
  except ValueError as e:
@@ -190,8 +184,8 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
190
184
  fn_args = super()._completion_fn_args
191
185
  fn_args.update(
192
186
  {
193
- LITE_LLM_API_BASE_FIELD: self.api_base,
194
- LITE_LLM_API_VERSION_FIELD: self.api_version,
187
+ "api_base": self.api_base,
188
+ "api_version": self.api_version,
195
189
  }
196
190
  )
197
191
  return fn_args
@@ -1,13 +1,28 @@
1
- from typing import Dict, Type, Optional
1
+ from typing import Dict, Optional, Type
2
2
 
3
3
  from rasa.shared.constants import (
4
4
  AZURE_OPENAI_PROVIDER,
5
5
  HUGGINGFACE_LOCAL_EMBEDDING_PROVIDER,
6
6
  OPENAI_PROVIDER,
7
- SELF_HOSTED_PROVIDER,
8
7
  RASA_PROVIDER,
8
+ SELF_HOSTED_PROVIDER,
9
9
  SELF_HOSTED_VLLM_PREFIX,
10
10
  )
11
+ from rasa.shared.providers._configs.azure_openai_client_config import (
12
+ AzureOpenAIClientConfig,
13
+ )
14
+ from rasa.shared.providers._configs.client_config import ClientConfig
15
+ from rasa.shared.providers._configs.default_litellm_client_config import (
16
+ DefaultLiteLLMClientConfig,
17
+ )
18
+ from rasa.shared.providers._configs.huggingface_local_embedding_client_config import (
19
+ HuggingFaceLocalEmbeddingClientConfig,
20
+ )
21
+ from rasa.shared.providers._configs.openai_client_config import OpenAIClientConfig
22
+ from rasa.shared.providers._configs.rasa_llm_client_config import RasaLLMClientConfig
23
+ from rasa.shared.providers._configs.self_hosted_llm_client_config import (
24
+ SelfHostedLLMClientConfig,
25
+ )
11
26
  from rasa.shared.providers.embedding.azure_openai_embedding_client import (
12
27
  AzureOpenAIEmbeddingClient,
13
28
  )
@@ -25,24 +40,8 @@ from rasa.shared.providers.llm.azure_openai_llm_client import AzureOpenAILLMClie
25
40
  from rasa.shared.providers.llm.default_litellm_llm_client import DefaultLiteLLMClient
26
41
  from rasa.shared.providers.llm.llm_client import LLMClient
27
42
  from rasa.shared.providers.llm.openai_llm_client import OpenAILLMClient
28
- from rasa.shared.providers.llm.self_hosted_llm_client import SelfHostedLLMClient
29
43
  from rasa.shared.providers.llm.rasa_llm_client import RasaLLMClient
30
- from rasa.shared.providers._configs.azure_openai_client_config import (
31
- AzureOpenAIClientConfig,
32
- )
33
- from rasa.shared.providers._configs.default_litellm_client_config import (
34
- DefaultLiteLLMClientConfig,
35
- )
36
- from rasa.shared.providers._configs.huggingface_local_embedding_client_config import (
37
- HuggingFaceLocalEmbeddingClientConfig,
38
- )
39
- from rasa.shared.providers._configs.openai_client_config import OpenAIClientConfig
40
- from rasa.shared.providers._configs.self_hosted_llm_client_config import (
41
- SelfHostedLLMClientConfig,
42
- )
43
- from rasa.shared.providers._configs.rasa_llm_client_config import RasaLLMClientConfig
44
-
45
- from rasa.shared.providers._configs.client_config import ClientConfig
44
+ from rasa.shared.providers.llm.self_hosted_llm_client import SelfHostedLLMClient
46
45
 
47
46
  _provider_to_llm_client_mapping: Dict[str, Type[LLMClient]] = {
48
47
  OPENAI_PROVIDER: OpenAILLMClient,
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  import os
4
2
  from typing import Any, Dict, List
5
3
 
@@ -95,7 +93,7 @@ class _BaseLiteLLMRouterClient:
95
93
  return
96
94
 
97
95
  @classmethod
98
- def from_config(cls, config: Dict[str, Any]) -> _BaseLiteLLMRouterClient:
96
+ def from_config(cls, config: Dict[str, Any]) -> "_BaseLiteLLMRouterClient":
99
97
  """Instantiates a LiteLLM Router Embedding client from a configuration dict.
100
98
 
101
99
  Args:
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  from typing import Any, Dict, List, Protocol, runtime_checkable
4
2
 
5
3
 
@@ -11,7 +9,7 @@ class RouterClient(Protocol):
11
9
  """
12
10
 
13
11
  @classmethod
14
- def from_config(cls, config: dict) -> RouterClient:
12
+ def from_config(cls, config: dict) -> "RouterClient":
15
13
  """
16
14
  Initializes the router client with the given configuration.
17
15
 
rasa/shared/utils/cli.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import math
2
2
  import shutil
3
3
  import sys
4
- from typing import Any, Text, NoReturn
4
+ from typing import Any, NoReturn, Text
5
5
 
6
6
  import rasa.shared.utils.io
7
7
 
@@ -7,7 +7,7 @@ import os
7
7
  import pkgutil
8
8
  import sys
9
9
  from types import ModuleType
10
- from typing import Sequence, Text, Dict, Optional, Any, List, Callable, Collection, Type
10
+ from typing import Any, Callable, Collection, Dict, List, Optional, Sequence, Text, Type
11
11
 
12
12
  import rasa.shared.utils.io
13
13
  from rasa.exceptions import MissingDependencyException
@@ -1,4 +1,4 @@
1
- from typing import Optional, Dict, Any
1
+ from typing import Any, Dict, Optional
2
2
 
3
3
 
4
4
  class EmbeddingsHealthCheckMixin:
@@ -1,16 +1,16 @@
1
1
  import os
2
2
  import sys
3
- from typing import Optional, Dict, Any
3
+ from typing import Any, Dict, Optional
4
4
 
5
5
  from rasa.shared.constants import (
6
+ LLM_API_HEALTH_CHECK_DEFAULT_VALUE,
6
7
  LLM_API_HEALTH_CHECK_ENV_VAR,
7
8
  MODELS_CONFIG_KEY,
8
- LLM_API_HEALTH_CHECK_DEFAULT_VALUE,
9
9
  )
10
10
  from rasa.shared.exceptions import ProviderClientValidationError
11
11
  from rasa.shared.providers.embedding.embedding_client import EmbeddingClient
12
12
  from rasa.shared.providers.llm.llm_client import LLMClient
13
- from rasa.shared.utils.llm import llm_factory, structlogger, embedder_factory
13
+ from rasa.shared.utils.llm import embedder_factory, llm_factory, structlogger
14
14
 
15
15
 
16
16
  def try_instantiate_llm_client(
@@ -1,4 +1,4 @@
1
- from typing import Optional, Dict, Any
1
+ from typing import Any, Dict, Optional
2
2
 
3
3
 
4
4
  class LLMHealthCheckMixin:
rasa/shared/utils/io.py CHANGED
@@ -12,7 +12,7 @@ from collections import OrderedDict
12
12
  from functools import wraps
13
13
  from hashlib import md5
14
14
  from pathlib import Path
15
- from typing import Any, cast, Callable, Dict, List, Optional, Text, Type, TypeVar, Union
15
+ from typing import Any, Callable, Dict, List, Optional, Text, Type, TypeVar, Union, cast
16
16
 
17
17
  import portalocker
18
18
 
rasa/shared/utils/llm.py CHANGED
@@ -14,7 +14,6 @@ from typing import (
14
14
  cast,
15
15
  )
16
16
 
17
- import litellm
18
17
  import structlog
19
18
 
20
19
  import rasa.shared.utils.io
@@ -74,7 +73,7 @@ DEFAULT_OPENAI_GENERATE_MODEL_NAME = "gpt-3.5-turbo"
74
73
 
75
74
  DEFAULT_OPENAI_CHAT_MODEL_NAME = "gpt-3.5-turbo"
76
75
 
77
- DEFAULT_OPENAI_CHAT_MODEL_NAME_ADVANCED = "gpt-4"
76
+ DEFAULT_OPENAI_CHAT_MODEL_NAME_ADVANCED = "gpt-4-0613"
78
77
 
79
78
  DEFAULT_OPENAI_EMBEDDING_MODEL_NAME = "text-embedding-ada-002"
80
79
 
@@ -104,9 +103,6 @@ _CombineConfigs_F = TypeVar(
104
103
  )
105
104
 
106
105
 
107
- litellm.set_verbose = True
108
-
109
-
110
106
  def _compute_hash_for_cache_from_configs(
111
107
  config_x: Dict[str, Any], config_y: Dict[str, Any]
112
108
  ) -> int:
@@ -359,13 +355,13 @@ def _combine_single_model_configs(
359
355
  )
360
356
  # Checks for deprecated keys, resolves aliases and returns a valid config.
361
357
  # This is done to ensure that the custom config is valid.
362
- return client_config_clazz.from_dict(deepcopy(custom_config)).to_dict()
358
+ return client_config_clazz.from_dict(custom_config).to_dict()
363
359
 
364
360
  # If the provider is the same in both configs
365
361
  # OR provider is not specified in the custom config
366
362
  # perform MERGE by overriding the default config keys and values
367
363
  # with custom config keys and values.
368
- merged_config = {**deepcopy(default_config), **deepcopy(custom_config)}
364
+ merged_config = {**default_config.copy(), **custom_config.copy()}
369
365
  # Check for deprecated keys, resolve aliases and return a valid config.
370
366
  # This is done to ensure that the merged config is valid.
371
367
  default_config_clazz = get_client_config_class_from_provider(
@@ -516,7 +512,7 @@ def llm_client_factory(
516
512
  Returns:
517
513
  Instantiated LLM based on the configuration.
518
514
  """
519
- config = combine_custom_and_default_config(deepcopy(custom_config), default_config)
515
+ config = combine_custom_and_default_config(custom_config, default_config)
520
516
 
521
517
  ensure_cache()
522
518
 
@@ -645,7 +641,7 @@ def embedder_client_factory(
645
641
  Returns:
646
642
  Instantiated Embedder based on the configuration.
647
643
  """
648
- config = combine_custom_and_default_config(deepcopy(custom_config), default_config)
644
+ config = combine_custom_and_default_config(custom_config, default_config)
649
645
 
650
646
  ensure_cache()
651
647
 
@@ -4,7 +4,7 @@ loaded as an extension of the pykwalify library:
4
4
  https://pykwalify.readthedocs.io/en/latest/extensions.html#extensions
5
5
  """
6
6
 
7
- from typing import Any, List, Dict, Text, Union
7
+ from typing import Any, Dict, List, Text, Union
8
8
 
9
9
  from pykwalify.errors import SchemaError
10
10
 
@@ -161,7 +161,7 @@ FLOW_CANCELLED = {
161
161
  }
162
162
  }
163
163
  DIALOGUE_STACK_UPDATED = {
164
- "properties": {"event": {"const": "stack"}, "update": {"type": "array"}}
164
+ "properties": {"event": {"const": "stack"}, "update": {"type": "string"}}
165
165
  }
166
166
  ROUTING_SESSION_ENDED = {"properties": {"event": {"const": "routing_session_ended"}}}
167
167
 
rasa/shared/utils/yaml.py CHANGED
@@ -1,57 +1,57 @@
1
- from contextlib import contextmanager
2
1
  import datetime
3
2
  import io
4
3
  import logging
5
4
  import os
6
5
  import re
7
6
  from collections import OrderedDict
8
- from dataclasses import dataclass
9
- from dataclasses import field
7
+ from contextlib import contextmanager
8
+ from dataclasses import dataclass, field
10
9
  from functools import lru_cache
11
10
  from io import StringIO
12
11
  from pathlib import Path
13
- from typing import Any, Generator, List, Optional, Tuple, Dict, Callable, Union
12
+ from typing import Any, Callable, Dict, Generator, List, Optional, Tuple, Union
14
13
 
15
14
  import jsonschema
16
15
  from importlib_resources import files
17
16
  from packaging import version
18
17
  from pykwalify.core import Core
19
18
  from pykwalify.errors import SchemaError
19
+ from ruamel import yaml as yaml
20
+ from ruamel.yaml import YAML, RoundTripRepresenter, YAMLError
21
+ from ruamel.yaml.comments import CommentedMap, CommentedSeq
22
+ from ruamel.yaml.constructor import BaseConstructor, DuplicateKeyError, ScalarNode
23
+ from ruamel.yaml.loader import SafeLoader
24
+
20
25
  from rasa.shared.constants import (
21
26
  ASSERTIONS_SCHEMA_EXTENSIONS_FILE,
22
27
  ASSERTIONS_SCHEMA_FILE,
23
- MODEL_CONFIG_SCHEMA_FILE,
24
28
  CONFIG_SCHEMA_FILE,
25
29
  DOCS_URL_TRAINING_DATA,
26
- PACKAGE_NAME,
27
30
  LATEST_TRAINING_DATA_FORMAT_VERSION,
28
- SCHEMA_EXTENSIONS_FILE,
31
+ MODEL_CONFIG_SCHEMA_FILE,
32
+ PACKAGE_NAME,
29
33
  RESPONSES_SCHEMA_FILE,
34
+ SCHEMA_EXTENSIONS_FILE,
30
35
  SENSITIVE_DATA,
31
36
  )
32
37
  from rasa.shared.exceptions import (
38
+ FileNotFoundException,
39
+ RasaException,
40
+ SchemaValidationError,
33
41
  YamlException,
34
42
  YamlSyntaxException,
35
- SchemaValidationError,
36
- RasaException,
37
- FileNotFoundException,
38
43
  )
39
44
  from rasa.shared.utils.constants import (
40
45
  DEFAULT_ENCODING,
41
- READ_YAML_FILE_CACHE_MAXSIZE_ENV_VAR,
42
46
  DEFAULT_READ_YAML_FILE_CACHE_MAXSIZE,
47
+ READ_YAML_FILE_CACHE_MAXSIZE_ENV_VAR,
43
48
  )
44
49
  from rasa.shared.utils.io import (
45
- read_file,
46
50
  convert_to_ordered_dict,
47
51
  raise_warning,
52
+ read_file,
48
53
  read_json_file,
49
54
  )
50
- from ruamel import yaml as yaml
51
- from ruamel.yaml import YAML, RoundTripRepresenter, YAMLError
52
- from ruamel.yaml.comments import CommentedSeq, CommentedMap
53
- from ruamel.yaml.constructor import DuplicateKeyError, BaseConstructor, ScalarNode
54
- from ruamel.yaml.loader import SafeLoader
55
55
 
56
56
  logger = logging.getLogger(__name__)
57
57
 
@@ -104,12 +104,6 @@ def _add_yaml_constructor_to_replace_environment_variables() -> None:
104
104
  def env_var_constructor(loader: BaseConstructor, node: ScalarNode) -> str:
105
105
  """Process environment variables found in the YAML."""
106
106
  value = loader.construct_scalar(node)
107
-
108
- # get key of current node
109
- key_node = list(loader.constructed_objects)[-1]
110
- if isinstance(key_node, ScalarNode) and key_node.value in SENSITIVE_DATA:
111
- return value
112
-
113
107
  expanded_vars = os.path.expandvars(value)
114
108
  not_expanded = [
115
109
  w for w in expanded_vars.split() if w.startswith("$") and w in value
@@ -121,6 +115,11 @@ def _add_yaml_constructor_to_replace_environment_variables() -> None:
121
115
  f"Please make sure to also set these "
122
116
  f"environment variables: '{not_expanded}'."
123
117
  )
118
+
119
+ # get key of current node
120
+ key_node = list(loader.constructed_objects)[-1]
121
+ if isinstance(key_node, ScalarNode) and key_node.value in SENSITIVE_DATA:
122
+ return value
124
123
  return expanded_vars
125
124
 
126
125
  yaml.SafeConstructor.add_constructor("!env_var", env_var_constructor)
@@ -700,7 +699,9 @@ def read_yaml_file(
700
699
 
701
700
 
702
701
  def read_config_file(
703
- filename: Union[Path, str], reader_type: Union[str, List[str]] = "safe"
702
+ filename: Union[Path, str],
703
+ reader_type: Union[str, List[str]] = "safe",
704
+ expand_env_vars: bool = True,
704
705
  ) -> Dict[str, Any]:
705
706
  """Parses a yaml configuration file. Content needs to be a dictionary.
706
707
 
@@ -714,7 +715,9 @@ def read_config_file(
714
715
  Returns:
715
716
  Parsed config file.
716
717
  """
717
- return read_validated_yaml(filename, CONFIG_SCHEMA_FILE, reader_type)
718
+ return read_validated_yaml(
719
+ filename, CONFIG_SCHEMA_FILE, reader_type, expand_env_vars=expand_env_vars
720
+ )
718
721
 
719
722
 
720
723
  def read_model_configuration(
@@ -1002,8 +1005,8 @@ def validate_yaml_with_jsonschema(
1002
1005
  YamlSyntaxException: if the yaml file is not valid.
1003
1006
  SchemaValidationError: if validation fails.
1004
1007
  """
1005
- from ruamel.yaml import YAMLError
1006
1008
  import importlib_resources
1009
+ from ruamel.yaml import YAMLError
1007
1010
 
1008
1011
  schema_file = str(importlib_resources.files(package_name).joinpath(schema_path))
1009
1012
  schema_content = read_json_file(schema_file)
rasa/studio/auth.py CHANGED
@@ -6,10 +6,10 @@ from pathlib import Path
6
6
  from typing import Any, Dict, List, Optional, Text, Union
7
7
 
8
8
  import jwt
9
- from keycloak import KeycloakOpenID, KeycloakError
9
+ from keycloak import KeycloakError, KeycloakOpenID
10
+
10
11
  from rasa.shared.exceptions import RasaException
11
12
  from rasa.shared.utils.yaml import read_yaml_file, write_yaml
12
-
13
13
  from rasa.studio.config import StudioConfig
14
14
  from rasa.studio.constants import (
15
15
  KEYCLOAK_ACCESS_TOKEN_KEY,
@@ -17,7 +17,7 @@ from rasa.studio.constants import (
17
17
  KEYCLOAK_REFRESH_EXPIRES_IN_KEY,
18
18
  KEYCLOAK_REFRESH_TOKEN,
19
19
  )
20
- from rasa.studio.results_logger import with_studio_error_handler, StudioResult
20
+ from rasa.studio.results_logger import StudioResult, with_studio_error_handler
21
21
 
22
22
 
23
23
  class StudioAuth:
rasa/studio/config.py CHANGED
@@ -4,8 +4,6 @@ import os
4
4
  from dataclasses import dataclass
5
5
  from typing import Any, Dict, Optional, Text
6
6
 
7
- from rasa.utils.common import read_global_config_value, write_global_config_value
8
-
9
7
  from rasa.studio.constants import (
10
8
  RASA_STUDIO_AUTH_SERVER_URL_ENV,
11
9
  RASA_STUDIO_CLI_CLIENT_ID_KEY_ENV,
@@ -14,6 +12,7 @@ from rasa.studio.constants import (
14
12
  RASA_STUDIO_CLI_STUDIO_URL_ENV,
15
13
  STUDIO_CONFIG_KEY,
16
14
  )
15
+ from rasa.utils.common import read_global_config_value, write_global_config_value
17
16
 
18
17
  AUTH_SERVER_URL_KEY = "authentication_server_url"
19
18
  STUDIO_URL_KEY = "studio_url"
@@ -3,17 +3,17 @@ import logging
3
3
  from pathlib import Path
4
4
  from typing import Any, Dict, List, Optional, Tuple
5
5
 
6
- import rasa.shared.utils.cli
7
6
  import requests
7
+
8
+ import rasa.shared.utils.cli
8
9
  from rasa.shared.core.domain import KEY_RESPONSES, KEY_SLOTS, Domain
9
10
  from rasa.shared.core.flows.flow import Flow
10
11
  from rasa.shared.exceptions import RasaException
11
12
  from rasa.shared.importers.importer import TrainingDataImporter
12
13
  from rasa.shared.utils.yaml import read_yaml, write_yaml
13
- from rasa.utils.common import get_temp_dir_name
14
-
15
14
  from rasa.studio.auth import KeycloakToken, KeycloakTokenReader, StudioAuth
16
15
  from rasa.studio.config import StudioConfig
16
+ from rasa.utils.common import get_temp_dir_name
17
17
 
18
18
  logger = logging.getLogger(__name__)
19
19
 
rasa/studio/download.py CHANGED
@@ -9,9 +9,9 @@ import structlog
9
9
  import rasa.cli.utils
10
10
  import rasa.shared.utils.cli
11
11
  from rasa.shared.constants import (
12
+ DEFAULT_CONFIG_PATH,
12
13
  DEFAULT_DATA_PATH,
13
14
  DEFAULT_DOMAIN_PATH,
14
- DEFAULT_CONFIG_PATH,
15
15
  DEFAULT_ENDPOINTS_PATH,
16
16
  )
17
17
  from rasa.shared.core.domain import Domain
@@ -1,13 +1,13 @@
1
1
  from dataclasses import dataclass
2
2
  from functools import wraps
3
- from typing import Callable, Any, Dict
3
+ from typing import Any, Callable, Dict
4
4
 
5
5
  import structlog
6
6
  from keycloak.exceptions import KeycloakError
7
- from requests.exceptions import RequestException, Timeout, ConnectionError
7
+ from requests.exceptions import ConnectionError, RequestException, Timeout
8
8
 
9
9
  from rasa.shared.exceptions import RasaException
10
- from rasa.shared.utils.cli import print_success, print_error
10
+ from rasa.shared.utils.cli import print_error, print_success
11
11
  from rasa.studio.config import StudioConfig
12
12
 
13
13
  structlogger = structlog.get_logger()
rasa/studio/upload.py CHANGED
@@ -38,6 +38,7 @@ from rasa.studio import results_logger
38
38
  from rasa.studio.auth import KeycloakTokenReader
39
39
  from rasa.studio.config import StudioConfig
40
40
  from rasa.studio.results_logger import StudioResult, with_studio_error_handler
41
+ from rasa.telemetry import track_upload_to_studio_failed
41
42
 
42
43
  structlogger = structlog.get_logger()
43
44
 
@@ -396,6 +397,7 @@ def make_request(endpoint: str, graphql_req: Dict, verify: bool = True) -> Studi
396
397
  )
397
398
 
398
399
  if results_logger.response_has_errors(res.json()):
400
+ track_upload_to_studio_failed(res.json())
399
401
  return StudioResult.error(res.json())
400
402
  return StudioResult.success("Upload successful")
401
403
 
rasa/telemetry.py CHANGED
@@ -19,6 +19,7 @@ from typing import Any, Callable, Dict, List, Optional, Text
19
19
 
20
20
  import importlib_resources
21
21
  import requests
22
+ import structlog
22
23
  from terminaltables import SingleTable
23
24
 
24
25
  import rasa
@@ -144,6 +145,8 @@ TELEMETRY_ENTERPRISE_SEARCH_POLICY_TRAINING_COMPLETED_EVENT = (
144
145
  "Enterprise Search Policy Training Completed"
145
146
  )
146
147
  TELEMETRY_ENTERPRISE_SEARCH_POLICY_PREDICT_EVENT = "Enterprise Search Policy Predicted"
148
+ TELEMETRY_VALIDATION_ERROR_LOG_EVENT = "Validation Error Logged"
149
+ TELEMETRY_UPLOAD_TO_STUDIO_FAILED_EVENT = "Upload to Studio Failed"
147
150
 
148
151
  # licensing events
149
152
  TELEMETRY_CONVERSATION_COUNT = "Conversation Count"
@@ -1874,3 +1877,31 @@ def track_e2e_test_conversion_completed(file_type: str, test_case_count: int) ->
1874
1877
  E2E_TEST_CONVERSION_TEST_CASE_COUNT: test_case_count,
1875
1878
  },
1876
1879
  )
1880
+
1881
+
1882
+ def track_validation_error_log(
1883
+ _: structlog.BoundLogger, method_name: str, event_dict: Dict
1884
+ ) -> Dict:
1885
+ """Track validation errors."""
1886
+ if is_telemetry_enabled() and method_name == "error":
1887
+ event_dict_copy = event_dict.copy()
1888
+
1889
+ _track(
1890
+ TELEMETRY_VALIDATION_ERROR_LOG_EVENT,
1891
+ {
1892
+ "log_level": method_name,
1893
+ "log_id": event_dict_copy.pop("event"),
1894
+ "message": event_dict_copy.pop("event_info", ""),
1895
+ **event_dict_copy,
1896
+ },
1897
+ )
1898
+ return event_dict
1899
+
1900
+
1901
+ @ensure_telemetry_enabled
1902
+ def track_upload_to_studio_failed(response_json: Dict[str, Any]) -> None:
1903
+ """Track when the upload to studio fails."""
1904
+ _track(
1905
+ TELEMETRY_UPLOAD_TO_STUDIO_FAILED_EVENT,
1906
+ {"studio_response_json": response_json},
1907
+ )