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,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  from dataclasses import asdict, dataclass, field
4
2
  from typing import List, Optional
5
3
 
@@ -18,9 +16,6 @@ from rasa.shared.constants import (
18
16
  MODELS_CONFIG_KEY,
19
17
  PROVIDER_CONFIG_KEY,
20
18
  )
21
- from rasa.shared.providers._configs._lite_llm_config.lite_llm_config_adapter import (
22
- to_lite_llm_config,
23
- )
24
19
  from rasa.shared.providers.mappings import get_client_config_class_from_provider
25
20
 
26
21
  structlogger = structlog.get_logger()
@@ -46,7 +41,7 @@ class ModelConfig:
46
41
  api_type: Optional[str] = None
47
42
 
48
43
  @classmethod
49
- def from_dict(cls, config: dict) -> ModelConfig:
44
+ def from_dict(cls, config: dict) -> "ModelConfig":
50
45
  """Initializes a dataclass from the passed config. The provider config param is
51
46
  used to determine the client config class to use. The client config class takes
52
47
  care of resolving config aliases and throwing deprecation warnings.
@@ -136,7 +131,7 @@ class ModelGroupConfig:
136
131
  raise ValueError(message)
137
132
 
138
133
  @classmethod
139
- def from_dict(cls, config: dict) -> ModelGroupConfig:
134
+ def from_dict(cls, config: dict) -> "ModelGroupConfig":
140
135
  """Initializes a dataclass from the passed config.
141
136
 
142
137
  Args:
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  from dataclasses import asdict, dataclass, field
4
2
  from typing import Any, Dict, Optional
5
3
 
@@ -113,7 +111,7 @@ class OpenAIClientConfig:
113
111
  raise ValueError(message)
114
112
 
115
113
  @classmethod
116
- def from_dict(cls, config: dict) -> OpenAIClientConfig:
114
+ def from_dict(cls, config: dict) -> "OpenAIClientConfig":
117
115
  """
118
116
  Initializes a dataclass from the passed config.
119
117
 
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  from dataclasses import asdict, dataclass, field
4
2
  from typing import Optional
5
3
 
@@ -39,7 +37,7 @@ class RasaLLMClientConfig:
39
37
  extra_parameters: dict = field(default_factory=dict)
40
38
 
41
39
  @classmethod
42
- def from_dict(cls, config: dict) -> RasaLLMClientConfig:
40
+ def from_dict(cls, config: dict) -> "RasaLLMClientConfig":
43
41
  """
44
42
  Initializes a dataclass from the passed config.
45
43
 
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  from dataclasses import asdict, dataclass, field
4
2
  from typing import Any, Dict, Optional
5
3
 
@@ -115,7 +113,7 @@ class SelfHostedLLMClientConfig:
115
113
  raise ValueError(message)
116
114
 
117
115
  @classmethod
118
- def from_dict(cls, config: dict) -> SelfHostedLLMClientConfig:
116
+ def from_dict(cls, config: dict) -> "SelfHostedLLMClientConfig":
119
117
  """
120
118
  Initializes a dataclass from the passed config.
121
119
 
@@ -1,4 +1,5 @@
1
1
  import structlog
2
+
2
3
  from rasa.shared.utils.io import raise_deprecation_warning
3
4
 
4
5
  structlogger = structlog.get_logger()
@@ -3,16 +3,15 @@ from typing import Optional, Union
3
3
 
4
4
  import httpx
5
5
  import litellm
6
+ import structlog
7
+
6
8
  from rasa.shared.constants import (
9
+ LITELLM_SSL_CERTIFICATE_ENV_VAR,
10
+ LITELLM_SSL_VERIFY_ENV_VAR,
7
11
  RASA_CA_BUNDLE_ENV_VAR,
8
- REQUESTS_CA_BUNDLE_ENV_VAR,
9
12
  RASA_SSL_CERTIFICATE_ENV_VAR,
10
- LITELLM_SSL_VERIFY_ENV_VAR,
11
- LITELLM_SSL_CERTIFICATE_ENV_VAR,
13
+ REQUESTS_CA_BUNDLE_ENV_VAR,
12
14
  )
13
-
14
- import structlog
15
-
16
15
  from rasa.shared.utils.io import raise_deprecation_warning
17
16
 
18
17
  structlogger = structlog.get_logger()
@@ -1,17 +1,17 @@
1
1
  import structlog
2
+ from litellm import validate_environment
2
3
 
3
4
  from rasa.shared.constants import (
4
- AWS_ACCESS_KEY_ID_ENV_VAR,
5
5
  AWS_ACCESS_KEY_ID_CONFIG_KEY,
6
- AWS_SECRET_ACCESS_KEY_ENV_VAR,
7
- AWS_SECRET_ACCESS_KEY_CONFIG_KEY,
8
- AWS_REGION_NAME_ENV_VAR,
6
+ AWS_ACCESS_KEY_ID_ENV_VAR,
9
7
  AWS_REGION_NAME_CONFIG_KEY,
8
+ AWS_REGION_NAME_ENV_VAR,
9
+ AWS_SECRET_ACCESS_KEY_CONFIG_KEY,
10
+ AWS_SECRET_ACCESS_KEY_ENV_VAR,
10
11
  AWS_SESSION_TOKEN_CONFIG_KEY,
11
12
  AWS_SESSION_TOKEN_ENV_VAR,
12
13
  )
13
14
  from rasa.shared.exceptions import ProviderClientValidationError
14
- from litellm import validate_environment
15
15
  from rasa.shared.providers.embedding._base_litellm_embedding_client import (
16
16
  _VALIDATE_ENVIRONMENT_MISSING_KEYS_KEY,
17
17
  )
@@ -19,7 +19,7 @@ from rasa.shared.providers.embedding.embedding_response import (
19
19
  EmbeddingResponse,
20
20
  EmbeddingUsage,
21
21
  )
22
- from rasa.shared.utils.io import suppress_logs, resolve_environment_variables
22
+ from rasa.shared.utils.io import resolve_environment_variables, suppress_logs
23
23
 
24
24
  structlogger = structlog.get_logger()
25
25
 
@@ -19,14 +19,8 @@ from rasa.shared.constants import (
19
19
  )
20
20
  from rasa.shared.exceptions import ProviderClientValidationError
21
21
  from rasa.shared.providers._configs.azure_openai_client_config import (
22
- AzureEntraIDOAuthConfig,
23
22
  AzureOpenAIClientConfig,
24
23
  )
25
- from rasa.shared.providers.constants import (
26
- DEFAULT_AZURE_API_KEY_NAME,
27
- LITE_LLM_API_KEY_FIELD,
28
- LITE_LLM_AZURE_AD_TOKEN,
29
- )
30
24
  from rasa.shared.providers.embedding._base_litellm_embedding_client import (
31
25
  _BaseLiteLLMEmbeddingClient,
32
26
  )
@@ -47,8 +41,6 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
47
41
  If not provided, it will be set via environment variable.
48
42
  api_version (Optional[str]): The version of the API to use.
49
43
  If not provided, it will be set via environment variable.
50
- oauth (Optional[AzureEntraIDOAuthConfig]): Optional OAuth configuration. If provided,
51
- the client will use OAuth for authentication.
52
44
  kwargs (Optional[Dict[str, Any]]): Optional configuration parameters specific
53
45
  to the embedding model deployment.
54
46
 
@@ -65,7 +57,6 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
65
57
  api_base: Optional[str] = None,
66
58
  api_type: Optional[str] = None,
67
59
  api_version: Optional[str] = None,
68
- oauth: Optional[AzureEntraIDOAuthConfig] = None,
69
60
  **kwargs: Any,
70
61
  ):
71
62
  super().__init__() # type: ignore
@@ -93,11 +84,7 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
93
84
  # Litellm does not support use of OPENAI_API_KEY, so we need to map it
94
85
  # because of backward compatibility. However, we're first looking at
95
86
  # AZURE_API_KEY.
96
-
97
- self._oauth = oauth
98
- self._api_key_env_var = (
99
- self._resolve_api_key_env_var() if not self._oauth else None
100
- )
87
+ self._api_key_env_var = self._resolve_api_key_env_var()
101
88
 
102
89
  self.validate_client_setup()
103
90
 
@@ -113,7 +100,7 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
113
100
  return self._extra_parameters[API_KEY]
114
101
 
115
102
  if os.getenv(AZURE_API_KEY_ENV_VAR) is not None:
116
- return f"${DEFAULT_AZURE_API_KEY_NAME}"
103
+ return "${AZURE_API_KEY}"
117
104
 
118
105
  if os.getenv(OPENAI_API_KEY_ENV_VAR) is not None:
119
106
  # API key can be set through OPENAI_API_KEY too,
@@ -176,7 +163,6 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
176
163
  api_base=azure_openai_config.api_base,
177
164
  api_type=azure_openai_config.api_type,
178
165
  api_version=azure_openai_config.api_version,
179
- oauth=azure_openai_config.oauth,
180
166
  **azure_openai_config.extra_parameters,
181
167
  )
182
168
 
@@ -191,7 +177,6 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
191
177
  api_base=self.api_base,
192
178
  api_type=self.api_type,
193
179
  api_version=self.api_version,
194
- oauth=self._oauth,
195
180
  extra_parameters=self._extra_parameters,
196
181
  )
197
182
  return config.to_dict()
@@ -234,21 +219,13 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
234
219
 
235
220
  @property
236
221
  def _embedding_fn_args(self) -> dict:
237
- auth_parameter = (
238
- {
239
- LITE_LLM_AZURE_AD_TOKEN: self._oauth.get_bearer_token(),
240
- }
241
- if self._oauth
242
- else {LITE_LLM_API_KEY_FIELD: self._api_key_env_var}
243
- )
244
-
245
222
  return {
246
223
  **self._litellm_extra_parameters,
247
224
  "model": self._litellm_model_name,
248
225
  "api_base": self.api_base,
249
226
  "api_type": self.api_type,
250
227
  "api_version": self.api_version,
251
- **auth_parameter,
228
+ "api_key": self._api_key_env_var,
252
229
  }
253
230
 
254
231
  @property
@@ -1,4 +1,4 @@
1
- from typing import Protocol, Dict, List, TYPE_CHECKING, runtime_checkable
1
+ from typing import TYPE_CHECKING, Dict, List, Protocol, runtime_checkable
2
2
 
3
3
  if TYPE_CHECKING:
4
4
  from rasa.shared.providers.embedding.embedding_response import EmbeddingResponse
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  import logging
4
2
  from typing import Any, Dict, List
5
3
 
@@ -48,7 +46,7 @@ class LiteLLMRouterEmbeddingClient(
48
46
  )
49
47
 
50
48
  @classmethod
51
- def from_config(cls, config: Dict[str, Any]) -> LiteLLMRouterEmbeddingClient:
49
+ def from_config(cls, config: Dict[str, Any]) -> "LiteLLMRouterEmbeddingClient":
52
50
  """Instantiates a LiteLLM Router Embedding client from a configuration dict.
53
51
 
54
52
  Args:
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  import logging
4
2
  from abc import abstractmethod
5
3
  from typing import Any, Dict, List, Union
@@ -52,7 +50,7 @@ class _BaseLiteLLMClient:
52
50
 
53
51
  @classmethod
54
52
  @abstractmethod
55
- def from_config(cls, config: Dict[str, Any]) -> _BaseLiteLLMClient:
53
+ def from_config(cls, config: Dict[str, Any]) -> "_BaseLiteLLMClient":
56
54
  pass
57
55
 
58
56
  @property
@@ -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
@@ -23,38 +21,13 @@ from rasa.shared.constants import (
23
21
  )
24
22
  from rasa.shared.exceptions import ProviderClientValidationError
25
23
  from rasa.shared.providers._configs.azure_openai_client_config import (
26
- AzureEntraIDOAuthConfig,
27
24
  AzureOpenAIClientConfig,
28
25
  )
29
- from rasa.shared.providers.constants import (
30
- DEFAULT_AZURE_API_KEY_NAME,
31
- LITE_LLM_API_BASE_FIELD,
32
- LITE_LLM_API_KEY_FIELD,
33
- LITE_LLM_API_VERSION_FIELD,
34
- LITE_LLM_AZURE_AD_TOKEN,
35
- )
36
26
  from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
37
27
  from rasa.shared.utils.io import raise_deprecation_warning
38
28
 
39
29
  structlogger = structlog.get_logger()
40
30
 
41
- AZURE_CLIENT_ID = "AZURE_CLIENT_ID"
42
- AZURE_CLIENT_SECRET = "AZURE_CLIENT_SECRET"
43
- AZURE_TENANT_ID = "AZURE_TENANT_ID"
44
- CLIENT_SECRET_VARS = (AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID)
45
-
46
- AZURE_CLIENT_CERTIFICATE_PATH = "AZURE_CLIENT_CERTIFICATE_PATH"
47
- AZURE_CLIENT_CERTIFICATE_PASSWORD = "AZURE_CLIENT_CERTIFICATE_PASSWORD"
48
- AZURE_CLIENT_SEND_CERTIFICATE_CHAIN = "AZURE_CLIENT_SEND_CERTIFICATE_CHAIN"
49
- CERT_VARS = (AZURE_CLIENT_ID, AZURE_CLIENT_CERTIFICATE_PATH, AZURE_TENANT_ID)
50
-
51
-
52
- class AzureADConfig:
53
- def __init__(
54
- self, client_id: str, client_secret: str, tenant_id: str, scopes: str
55
- ) -> None:
56
- self.scopes = scopes
57
-
58
31
 
59
32
  class AzureOpenAILLMClient(_BaseLiteLLMClient):
60
33
  """A client for interfacing with Azure's OpenAI LLM deployments.
@@ -68,7 +41,6 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
68
41
  it will be set via environment variables.
69
42
  api_version (Optional[str]): The version of the API to use. If not provided,
70
43
  it will be set via environment variable.
71
-
72
44
  kwargs (Optional[Dict[str, Any]]): Optional configuration parameters specific
73
45
  to the model deployment.
74
46
 
@@ -85,7 +57,6 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
85
57
  api_type: Optional[str] = None,
86
58
  api_base: Optional[str] = None,
87
59
  api_version: Optional[str] = None,
88
- oauth: Optional[AzureEntraIDOAuthConfig] = None,
89
60
  **kwargs: Any,
90
61
  ):
91
62
  super().__init__() # type: ignore
@@ -109,6 +80,8 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
109
80
  or os.getenv(OPENAI_API_VERSION_ENV_VAR)
110
81
  )
111
82
 
83
+ self._api_key_env_var = self._resolve_api_key_env_var()
84
+
112
85
  # Not used by LiteLLM, here for backward compatibility
113
86
  self._api_type = (
114
87
  api_type
@@ -116,19 +89,6 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
116
89
  or os.getenv(OPENAI_API_TYPE_ENV_VAR)
117
90
  )
118
91
 
119
- os.unsetenv("OPENAI_API_KEY")
120
- os.unsetenv("AZURE_API_KEY")
121
-
122
- self._oauth = oauth
123
-
124
- if self._oauth:
125
- os.unsetenv(DEFAULT_AZURE_API_KEY_NAME)
126
- os.unsetenv(AZURE_API_KEY_ENV_VAR)
127
- os.unsetenv(OPENAI_API_KEY_ENV_VAR)
128
- self._api_key_env_var = (
129
- self._resolve_api_key_env_var() if not self._oauth else None
130
- )
131
-
132
92
  # Run helper function to check and raise deprecation warning if
133
93
  # deprecated environment variables were used for initialization of the
134
94
  # client settings
@@ -197,7 +157,7 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
197
157
  return self._extra_parameters[API_KEY]
198
158
 
199
159
  if os.getenv(AZURE_API_KEY_ENV_VAR) is not None:
200
- return f"${DEFAULT_AZURE_API_KEY_NAME}"
160
+ return "${AZURE_API_KEY}"
201
161
 
202
162
  if os.getenv(OPENAI_API_KEY_ENV_VAR) is not None:
203
163
  # API key can be set through OPENAI_API_KEY too,
@@ -228,7 +188,7 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
228
188
  )
229
189
 
230
190
  @classmethod
231
- def from_config(cls, config: Dict[str, Any]) -> AzureOpenAILLMClient:
191
+ def from_config(cls, config: Dict[str, Any]) -> "AzureOpenAILLMClient":
232
192
  """Initializes the client from given configuration.
233
193
 
234
194
  Args:
@@ -255,12 +215,11 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
255
215
  raise
256
216
 
257
217
  return cls(
258
- deployment=azure_openai_config.deployment,
259
- model=azure_openai_config.model,
260
- api_type=azure_openai_config.api_type,
261
- api_base=azure_openai_config.api_base,
262
- api_version=azure_openai_config.api_version,
263
- oauth=azure_openai_config.oauth,
218
+ azure_openai_config.deployment,
219
+ azure_openai_config.model,
220
+ azure_openai_config.api_type,
221
+ azure_openai_config.api_base,
222
+ azure_openai_config.api_version,
264
223
  **azure_openai_config.extra_parameters,
265
224
  )
266
225
 
@@ -275,7 +234,6 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
275
234
  api_base=self._api_base,
276
235
  api_version=self._api_version,
277
236
  api_type=self._api_type,
278
- oauth=self._oauth,
279
237
  extra_parameters=self._extra_parameters,
280
238
  )
281
239
  return config.to_dict()
@@ -324,21 +282,12 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
324
282
  """Returns the completion arguments for invoking a call through
325
283
  LiteLLM's completion functions.
326
284
  """
327
- # Set the API key env var to None if OAuth is used
328
- auth_parameter = (
329
- {
330
- LITE_LLM_AZURE_AD_TOKEN: self._oauth.get_bearer_token(),
331
- }
332
- if self._oauth
333
- else {LITE_LLM_API_KEY_FIELD: self._api_key_env_var}
334
- )
335
-
336
285
  fn_args = super()._completion_fn_args
337
286
  fn_args.update(
338
287
  {
339
- LITE_LLM_API_BASE_FIELD: self.api_base,
340
- LITE_LLM_API_VERSION_FIELD: self.api_version,
341
- **auth_parameter,
288
+ "api_base": self.api_base,
289
+ "api_version": self.api_version,
290
+ "api_key": self._api_key_env_var,
342
291
  }
343
292
  )
344
293
  return fn_args
@@ -365,44 +314,41 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
365
314
 
366
315
  return info.format(setting=setting, options=options)
367
316
 
368
- env_var_field = "env_var"
369
- config_key_field = "config_key"
370
- current_value_field = "current_value"
371
317
  # All required settings for Azure OpenAI client
372
318
  settings: Dict[str, Dict[str, Any]] = {
373
319
  "API Base": {
374
- current_value_field: self.api_base,
375
- env_var_field: AZURE_API_BASE_ENV_VAR,
376
- config_key_field: API_BASE_CONFIG_KEY,
320
+ "current_value": self.api_base,
321
+ "env_var": AZURE_API_BASE_ENV_VAR,
322
+ "config_key": API_BASE_CONFIG_KEY,
377
323
  },
378
324
  "API Version": {
379
- current_value_field: self.api_version,
380
- env_var_field: AZURE_API_VERSION_ENV_VAR,
381
- config_key_field: API_VERSION_CONFIG_KEY,
325
+ "current_value": self.api_version,
326
+ "env_var": AZURE_API_VERSION_ENV_VAR,
327
+ "config_key": API_VERSION_CONFIG_KEY,
382
328
  },
383
329
  "Deployment Name": {
384
- current_value_field: self.deployment,
385
- env_var_field: None,
386
- config_key_field: DEPLOYMENT_CONFIG_KEY,
330
+ "current_value": self.deployment,
331
+ "env_var": None,
332
+ "config_key": DEPLOYMENT_CONFIG_KEY,
387
333
  },
388
334
  }
389
335
 
390
336
  missing_settings = [
391
337
  setting_name
392
338
  for setting_name, setting_info in settings.items()
393
- if setting_info[current_value_field] is None
339
+ if setting_info["current_value"] is None
394
340
  ]
395
341
 
396
342
  if missing_settings:
397
343
  event_info = f"Client settings not set: " f"{', '.join(missing_settings)}. "
398
344
 
399
345
  for missing_setting in missing_settings:
400
- if settings[missing_setting][current_value_field] is not None:
346
+ if settings[missing_setting]["current_value"] is not None:
401
347
  continue
402
348
  event_info += generate_event_info_for_missing_setting(
403
349
  missing_setting,
404
- settings[missing_setting][env_var_field],
405
- settings[missing_setting][config_key_field],
350
+ settings[missing_setting]["env_var"],
351
+ settings[missing_setting]["config_key"],
406
352
  )
407
353
 
408
354
  structlogger.error(
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  from typing import Any, Dict
4
2
 
5
3
  from rasa.shared.constants import (
@@ -37,7 +35,7 @@ class DefaultLiteLLMClient(_BaseLiteLLMClient):
37
35
  self.validate_client_setup()
38
36
 
39
37
  @classmethod
40
- def from_config(cls, config: Dict[str, Any]) -> DefaultLiteLLMClient:
38
+ def from_config(cls, config: Dict[str, Any]) -> "DefaultLiteLLMClient":
41
39
  default_config = DefaultLiteLLMClientConfig.from_dict(config)
42
40
  return cls(
43
41
  model=default_config.model,
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  import logging
4
2
  from typing import Any, Dict, List, Union
5
3
 
@@ -9,7 +7,6 @@ from rasa.shared.exceptions import ProviderClientAPIException
9
7
  from rasa.shared.providers._configs.litellm_router_client_config import (
10
8
  LiteLLMRouterClientConfig,
11
9
  )
12
- from rasa.shared.providers.constants import LITE_LLM_MODEL_FIELD
13
10
  from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
14
11
  from rasa.shared.providers.llm.llm_response import LLMResponse
15
12
  from rasa.shared.providers.router._base_litellm_router_client import (
@@ -45,7 +42,7 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
45
42
  )
46
43
 
47
44
  @classmethod
48
- def from_config(cls, config: Dict[str, Any]) -> LiteLLMRouterLLMClient:
45
+ def from_config(cls, config: Dict[str, Any]) -> "LiteLLMRouterLLMClient":
49
46
  """Instantiates a LiteLLM Router LLM client from a configuration dict.
50
47
 
51
48
  Args:
@@ -90,10 +87,6 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
90
87
  ProviderClientAPIException: If the API request fails.
91
88
  """
92
89
  try:
93
- structlogger.info(
94
- "litellm_router_llm_client.text_completion",
95
- _completion_fn_args=self._completion_fn_args,
96
- )
97
90
  response = self.router_client.text_completion(
98
91
  prompt=prompt, **self._completion_fn_args
99
92
  )
@@ -114,10 +107,6 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
114
107
  ProviderClientAPIException: If the API request fails.
115
108
  """
116
109
  try:
117
- structlogger.info(
118
- "litellm_router_llm_client.atext_completion",
119
- _completion_fn_args=self._completion_fn_args,
120
- )
121
110
  response = await self.router_client.atext_completion(
122
111
  prompt=prompt, **self._completion_fn_args
123
112
  )
@@ -147,10 +136,6 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
147
136
  return self._text_completion(messages)
148
137
  try:
149
138
  formatted_messages = self._format_messages(messages)
150
- structlogger.info(
151
- "litellm_router_llm_client.completion",
152
- _completion_fn_args=self._completion_fn_args,
153
- )
154
139
  response = self.router_client.completion(
155
140
  messages=formatted_messages, **self._completion_fn_args
156
141
  )
@@ -180,10 +165,6 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
180
165
  return await self._atext_completion(messages)
181
166
  try:
182
167
  formatted_messages = self._format_messages(messages)
183
- structlogger.info(
184
- "litellm_router_llm_client.acompletion",
185
- _completion_fn_args=self._completion_fn_args,
186
- )
187
168
  response = await self.router_client.acompletion(
188
169
  messages=formatted_messages, **self._completion_fn_args
189
170
  )
@@ -198,5 +179,5 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
198
179
  """
199
180
  return {
200
181
  **self._litellm_extra_parameters,
201
- LITE_LLM_MODEL_FIELD: self.model_group_id,
182
+ "model": self.model_group_id,
202
183
  }
@@ -1,5 +1,3 @@
1
- from __future__ import annotations
2
-
3
1
  from typing import Dict, List, Protocol, Union, runtime_checkable
4
2
 
5
3
  from rasa.shared.providers.llm.llm_response import LLMResponse
@@ -13,7 +11,7 @@ class LLMClient(Protocol):
13
11
  """
14
12
 
15
13
  @classmethod
16
- def from_config(cls, config: dict) -> LLMClient:
14
+ def from_config(cls, config: dict) -> "LLMClient":
17
15
  """
18
16
  Initializes the llm client with the given configuration.
19
17
 
@@ -1,5 +1,9 @@
1
- from dataclasses import dataclass, field, asdict
2
- from typing import Dict, List, Optional
1
+ from dataclasses import asdict, dataclass, field
2
+ from typing import Any, Dict, List, Optional, Text, Union
3
+
4
+ import structlog
5
+
6
+ structlogger = structlog.get_logger()
3
7
 
4
8
 
5
9
  @dataclass
@@ -16,6 +20,17 @@ class LLMUsage:
16
20
  def __post_init__(self) -> None:
17
21
  self.total_tokens = self.prompt_tokens + self.completion_tokens
18
22
 
23
+ @classmethod
24
+ def from_dict(cls, data: Dict[Text, Any]) -> "LLMUsage":
25
+ """Creates an LLMUsage object from a dictionary.
26
+ If any keys are missing, they will default to zero
27
+ or whatever default you prefer.
28
+ """
29
+ return cls(
30
+ prompt_tokens=data.get("prompt_tokens"),
31
+ completion_tokens=data.get("completion_tokens"),
32
+ )
33
+
19
34
  def to_dict(self) -> dict:
20
35
  """Converts the LLMUsage dataclass instance into a dictionary."""
21
36
  return asdict(self)
@@ -42,6 +57,30 @@ class LLMResponse:
42
57
  """Optional dictionary for storing additional information related to the
43
58
  completion that may not be covered by other fields."""
44
59
 
60
+ @classmethod
61
+ def from_dict(cls, data: Dict[Text, Any]) -> "LLMResponse":
62
+ """Creates an LLMResponse from a dictionary."""
63
+ usage_data = data.get("usage", {})
64
+ usage_obj = LLMUsage.from_dict(usage_data) if usage_data else None
65
+
66
+ return cls(
67
+ id=data["id"],
68
+ choices=data["choices"],
69
+ created=data["created"],
70
+ model=data.get("model"),
71
+ usage=usage_obj,
72
+ additional_info=data.get("additional_info"),
73
+ )
74
+
75
+ @classmethod
76
+ def ensure_llm_response(cls, response: Union[str, "LLMResponse"]) -> "LLMResponse":
77
+ if isinstance(response, LLMResponse):
78
+ return response
79
+
80
+ structlogger.warn("llm_response.deprecated_response_type", response=response)
81
+ data = {"id": None, "choices": [response], "created": None}
82
+ return LLMResponse.from_dict(data)
83
+
45
84
  def to_dict(self) -> dict:
46
85
  """Converts the LLMResponse dataclass instance into a dictionary."""
47
86
  result = asdict(self)