rasa-pro 3.12.0.dev1__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 (499) 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 -497
  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 -28
  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 -81
  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.dev1.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/constants.py +0 -7
  496. rasa_pro-3.12.0.dev1.dist-info/RECORD +0 -790
  497. {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/NOTICE +0 -0
  498. {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/WHEEL +0 -0
  499. {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/entry_points.txt +0 -0
@@ -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,15 +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
- AzureOAuthConfig,
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
- LITE_LLM_AZURE_AD_TOKEN_PROVIDER,
30
- )
31
24
  from rasa.shared.providers.embedding._base_litellm_embedding_client import (
32
25
  _BaseLiteLLMEmbeddingClient,
33
26
  )
@@ -48,8 +41,6 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
48
41
  If not provided, it will be set via environment variable.
49
42
  api_version (Optional[str]): The version of the API to use.
50
43
  If not provided, it will be set via environment variable.
51
- oauth (Optional[AzureOAuthConfig]): Optional OAuth configuration. If provided,
52
- the client will use OAuth for authentication.
53
44
  kwargs (Optional[Dict[str, Any]]): Optional configuration parameters specific
54
45
  to the embedding model deployment.
55
46
 
@@ -66,7 +57,6 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
66
57
  api_base: Optional[str] = None,
67
58
  api_type: Optional[str] = None,
68
59
  api_version: Optional[str] = None,
69
- oauth: Optional[AzureOAuthConfig] = None,
70
60
  **kwargs: Any,
71
61
  ):
72
62
  super().__init__() # type: ignore
@@ -94,11 +84,7 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
94
84
  # Litellm does not support use of OPENAI_API_KEY, so we need to map it
95
85
  # because of backward compatibility. However, we're first looking at
96
86
  # AZURE_API_KEY.
97
-
98
- self._oauth = oauth
99
- self._api_key_env_var = (
100
- self._resolve_api_key_env_var() if not self._oauth else None
101
- )
87
+ self._api_key_env_var = self._resolve_api_key_env_var()
102
88
 
103
89
  self.validate_client_setup()
104
90
 
@@ -114,7 +100,7 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
114
100
  return self._extra_parameters[API_KEY]
115
101
 
116
102
  if os.getenv(AZURE_API_KEY_ENV_VAR) is not None:
117
- return f"${DEFAULT_AZURE_API_KEY_NAME}"
103
+ return "${AZURE_API_KEY}"
118
104
 
119
105
  if os.getenv(OPENAI_API_KEY_ENV_VAR) is not None:
120
106
  # API key can be set through OPENAI_API_KEY too,
@@ -177,7 +163,6 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
177
163
  api_base=azure_openai_config.api_base,
178
164
  api_type=azure_openai_config.api_type,
179
165
  api_version=azure_openai_config.api_version,
180
- oauth=azure_openai_config.oauth,
181
166
  **azure_openai_config.extra_parameters,
182
167
  )
183
168
 
@@ -192,7 +177,6 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
192
177
  api_base=self.api_base,
193
178
  api_type=self.api_type,
194
179
  api_version=self.api_version,
195
- oauth=self._oauth,
196
180
  extra_parameters=self._extra_parameters,
197
181
  )
198
182
  return config.to_dict()
@@ -235,22 +219,13 @@ class AzureOpenAIEmbeddingClient(_BaseLiteLLMEmbeddingClient):
235
219
 
236
220
  @property
237
221
  def _embedding_fn_args(self) -> dict:
238
- auth_parameter = (
239
- {
240
- LITE_LLM_AZURE_AD_TOKEN: self._oauth.get_bearer_token(),
241
- LITE_LLM_AZURE_AD_TOKEN_PROVIDER: self._oauth.get_bearer_token_provider(), # noqa: E501
242
- }
243
- if self._oauth
244
- else {LITE_LLM_API_KEY_FIELD: self._api_key_env_var}
245
- )
246
-
247
222
  return {
248
223
  **self._litellm_extra_parameters,
249
224
  "model": self._litellm_model_name,
250
225
  "api_base": self.api_base,
251
226
  "api_type": self.api_type,
252
227
  "api_version": self.api_version,
253
- **auth_parameter,
228
+ "api_key": self._api_key_env_var,
254
229
  }
255
230
 
256
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,39 +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
- AzureOAuthConfig,
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
- LITE_LLM_AZURE_AD_TOKEN_PROVIDER,
36
- )
37
26
  from rasa.shared.providers.llm._base_litellm_client import _BaseLiteLLMClient
38
27
  from rasa.shared.utils.io import raise_deprecation_warning
39
28
 
40
29
  structlogger = structlog.get_logger()
41
30
 
42
- AZURE_CLIENT_ID = "AZURE_CLIENT_ID"
43
- AZURE_CLIENT_SECRET = "AZURE_CLIENT_SECRET"
44
- AZURE_TENANT_ID = "AZURE_TENANT_ID"
45
- CLIENT_SECRET_VARS = (AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID)
46
-
47
- AZURE_CLIENT_CERTIFICATE_PATH = "AZURE_CLIENT_CERTIFICATE_PATH"
48
- AZURE_CLIENT_CERTIFICATE_PASSWORD = "AZURE_CLIENT_CERTIFICATE_PASSWORD"
49
- AZURE_CLIENT_SEND_CERTIFICATE_CHAIN = "AZURE_CLIENT_SEND_CERTIFICATE_CHAIN"
50
- CERT_VARS = (AZURE_CLIENT_ID, AZURE_CLIENT_CERTIFICATE_PATH, AZURE_TENANT_ID)
51
-
52
-
53
- class AzureADConfig:
54
- def __init__(
55
- self, client_id: str, client_secret: str, tenant_id: str, scopes: str
56
- ) -> None:
57
- self.scopes = scopes
58
-
59
31
 
60
32
  class AzureOpenAILLMClient(_BaseLiteLLMClient):
61
33
  """A client for interfacing with Azure's OpenAI LLM deployments.
@@ -69,7 +41,6 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
69
41
  it will be set via environment variables.
70
42
  api_version (Optional[str]): The version of the API to use. If not provided,
71
43
  it will be set via environment variable.
72
-
73
44
  kwargs (Optional[Dict[str, Any]]): Optional configuration parameters specific
74
45
  to the model deployment.
75
46
 
@@ -86,7 +57,6 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
86
57
  api_type: Optional[str] = None,
87
58
  api_base: Optional[str] = None,
88
59
  api_version: Optional[str] = None,
89
- oauth: Optional[AzureOAuthConfig] = None,
90
60
  **kwargs: Any,
91
61
  ):
92
62
  super().__init__() # type: ignore
@@ -110,6 +80,8 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
110
80
  or os.getenv(OPENAI_API_VERSION_ENV_VAR)
111
81
  )
112
82
 
83
+ self._api_key_env_var = self._resolve_api_key_env_var()
84
+
113
85
  # Not used by LiteLLM, here for backward compatibility
114
86
  self._api_type = (
115
87
  api_type
@@ -117,19 +89,6 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
117
89
  or os.getenv(OPENAI_API_TYPE_ENV_VAR)
118
90
  )
119
91
 
120
- os.unsetenv("OPENAI_API_KEY")
121
- os.unsetenv("AZURE_API_KEY")
122
-
123
- self._oauth = oauth
124
-
125
- if self._oauth:
126
- os.unsetenv(DEFAULT_AZURE_API_KEY_NAME)
127
- os.unsetenv(AZURE_API_KEY_ENV_VAR)
128
- os.unsetenv(OPENAI_API_KEY_ENV_VAR)
129
- self._api_key_env_var = (
130
- self._resolve_api_key_env_var() if not self._oauth else None
131
- )
132
-
133
92
  # Run helper function to check and raise deprecation warning if
134
93
  # deprecated environment variables were used for initialization of the
135
94
  # client settings
@@ -198,7 +157,7 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
198
157
  return self._extra_parameters[API_KEY]
199
158
 
200
159
  if os.getenv(AZURE_API_KEY_ENV_VAR) is not None:
201
- return f"${DEFAULT_AZURE_API_KEY_NAME}"
160
+ return "${AZURE_API_KEY}"
202
161
 
203
162
  if os.getenv(OPENAI_API_KEY_ENV_VAR) is not None:
204
163
  # API key can be set through OPENAI_API_KEY too,
@@ -229,7 +188,7 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
229
188
  )
230
189
 
231
190
  @classmethod
232
- def from_config(cls, config: Dict[str, Any]) -> AzureOpenAILLMClient:
191
+ def from_config(cls, config: Dict[str, Any]) -> "AzureOpenAILLMClient":
233
192
  """Initializes the client from given configuration.
234
193
 
235
194
  Args:
@@ -256,12 +215,11 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
256
215
  raise
257
216
 
258
217
  return cls(
259
- deployment=azure_openai_config.deployment,
260
- model=azure_openai_config.model,
261
- api_type=azure_openai_config.api_type,
262
- api_base=azure_openai_config.api_base,
263
- api_version=azure_openai_config.api_version,
264
- 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,
265
223
  **azure_openai_config.extra_parameters,
266
224
  )
267
225
 
@@ -276,7 +234,6 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
276
234
  api_base=self._api_base,
277
235
  api_version=self._api_version,
278
236
  api_type=self._api_type,
279
- oauth=self._oauth,
280
237
  extra_parameters=self._extra_parameters,
281
238
  )
282
239
  return config.to_dict()
@@ -325,22 +282,12 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
325
282
  """Returns the completion arguments for invoking a call through
326
283
  LiteLLM's completion functions.
327
284
  """
328
- # Set the API key env var to None if OAuth is used
329
- auth_parameter = (
330
- {
331
- LITE_LLM_AZURE_AD_TOKEN: self._oauth.get_bearer_token(),
332
- LITE_LLM_AZURE_AD_TOKEN_PROVIDER: self._oauth.get_bearer_token_provider(), # noqa: E501
333
- }
334
- if self._oauth
335
- else {LITE_LLM_API_KEY_FIELD: self._api_key_env_var}
336
- )
337
-
338
285
  fn_args = super()._completion_fn_args
339
286
  fn_args.update(
340
287
  {
341
- LITE_LLM_API_BASE_FIELD: self.api_base,
342
- LITE_LLM_API_VERSION_FIELD: self.api_version,
343
- **auth_parameter,
288
+ "api_base": self.api_base,
289
+ "api_version": self.api_version,
290
+ "api_key": self._api_key_env_var,
344
291
  }
345
292
  )
346
293
  return fn_args
@@ -367,44 +314,41 @@ class AzureOpenAILLMClient(_BaseLiteLLMClient):
367
314
 
368
315
  return info.format(setting=setting, options=options)
369
316
 
370
- env_var_field = "env_var"
371
- config_key_field = "config_key"
372
- current_value_field = "current_value"
373
317
  # All required settings for Azure OpenAI client
374
318
  settings: Dict[str, Dict[str, Any]] = {
375
319
  "API Base": {
376
- current_value_field: self.api_base,
377
- env_var_field: AZURE_API_BASE_ENV_VAR,
378
- 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,
379
323
  },
380
324
  "API Version": {
381
- current_value_field: self.api_version,
382
- env_var_field: AZURE_API_VERSION_ENV_VAR,
383
- 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,
384
328
  },
385
329
  "Deployment Name": {
386
- current_value_field: self.deployment,
387
- env_var_field: None,
388
- config_key_field: DEPLOYMENT_CONFIG_KEY,
330
+ "current_value": self.deployment,
331
+ "env_var": None,
332
+ "config_key": DEPLOYMENT_CONFIG_KEY,
389
333
  },
390
334
  }
391
335
 
392
336
  missing_settings = [
393
337
  setting_name
394
338
  for setting_name, setting_info in settings.items()
395
- if setting_info[current_value_field] is None
339
+ if setting_info["current_value"] is None
396
340
  ]
397
341
 
398
342
  if missing_settings:
399
343
  event_info = f"Client settings not set: " f"{', '.join(missing_settings)}. "
400
344
 
401
345
  for missing_setting in missing_settings:
402
- if settings[missing_setting][current_value_field] is not None:
346
+ if settings[missing_setting]["current_value"] is not None:
403
347
  continue
404
348
  event_info += generate_event_info_for_missing_setting(
405
349
  missing_setting,
406
- settings[missing_setting][env_var_field],
407
- settings[missing_setting][config_key_field],
350
+ settings[missing_setting]["env_var"],
351
+ settings[missing_setting]["config_key"],
408
352
  )
409
353
 
410
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)
@@ -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: