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.
- rasa/__main__.py +7 -7
- rasa/anonymization/anonymisation_rule_yaml_reader.py +1 -1
- rasa/anonymization/anonymization_pipeline.py +3 -3
- rasa/anonymization/anonymization_rule_executor.py +1 -1
- rasa/anonymization/anonymization_rule_orchestrator.py +2 -3
- rasa/cli/arguments/data.py +2 -2
- rasa/cli/arguments/evaluate.py +2 -1
- rasa/cli/arguments/interactive.py +1 -1
- rasa/cli/arguments/run.py +1 -1
- rasa/cli/arguments/test.py +7 -5
- rasa/cli/arguments/train.py +3 -3
- rasa/cli/arguments/visualize.py +2 -2
- rasa/cli/arguments/x.py +1 -0
- rasa/cli/data.py +4 -3
- rasa/cli/dialogue_understanding_test.py +121 -18
- rasa/cli/evaluate.py +1 -1
- rasa/cli/export.py +6 -6
- rasa/cli/interactive.py +4 -5
- rasa/cli/llm_fine_tuning.py +5 -5
- rasa/cli/markers.py +1 -2
- rasa/cli/project_templates/calm/actions/add_contact.py +1 -1
- rasa/cli/project_templates/tutorial/actions/actions.py +3 -2
- rasa/cli/shell.py +2 -3
- rasa/cli/studio/download.py +1 -2
- rasa/cli/studio/studio.py +2 -3
- rasa/cli/studio/train.py +0 -1
- rasa/cli/telemetry.py +2 -2
- rasa/cli/test.py +11 -11
- rasa/cli/utils.py +7 -5
- rasa/core/__init__.py +0 -1
- rasa/core/actions/action.py +42 -21
- rasa/core/actions/action_hangup.py +1 -1
- rasa/core/actions/action_repeat_bot_messages.py +2 -2
- rasa/core/actions/action_run_slot_rejections.py +2 -2
- rasa/core/actions/action_trigger_chitchat.py +1 -1
- rasa/core/actions/action_trigger_flow.py +5 -5
- rasa/core/actions/action_trigger_search.py +1 -1
- rasa/core/actions/forms.py +14 -12
- rasa/core/actions/http_custom_action_executor.py +8 -1
- rasa/core/actions/loops.py +3 -3
- rasa/core/actions/two_stage_fallback.py +13 -13
- rasa/core/auth_retry_tracker_store.py +1 -2
- rasa/core/brokers/broker.py +2 -1
- rasa/core/brokers/file.py +1 -1
- rasa/core/brokers/kafka.py +8 -8
- rasa/core/brokers/pika.py +8 -9
- rasa/core/brokers/sql.py +4 -3
- rasa/core/channels/__init__.py +3 -0
- rasa/core/channels/botframework.py +2 -2
- rasa/core/channels/callback.py +4 -4
- rasa/core/channels/channel.py +11 -11
- rasa/core/channels/console.py +0 -1
- rasa/core/channels/development_inspector.py +6 -6
- rasa/core/channels/facebook.py +5 -5
- rasa/core/channels/hangouts.py +7 -8
- rasa/core/channels/inspector/dist/assets/{arc-861ddd57.js → arc-632a63ec.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-d0fbc5ce-921f02db.js → c4Diagram-d0fbc5ce-081e0df4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-936ed81e-b436c4f8.js → classDiagram-936ed81e-3df0afc2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-c3cb15f1-511a23cb.js → classDiagram-v2-c3cb15f1-8c5ed31e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{createText-62fc7601-ef476ecd.js → createText-62fc7601-89c73b31.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-f2ad444c-f1878e0a.js → edges-f2ad444c-4fc48c3e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-fac75185.js → erDiagram-9d236eb7-907e0440.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-1972c806-201c5bbc.js → flowDb-1972c806-9ec53a3c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-7ea5b25a-f904ae41.js → flowDiagram-7ea5b25a-41da787a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-8bea338b.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-abe16c3d-1813da66.js → flowchart-elk-definition-abe16c3d-ce370633.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-9b5ea136-872af172.js → ganttDiagram-9b5ea136-90a36523.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-99d0ae7c-34a0af5a.js → gitGraphDiagram-99d0ae7c-41e1aa3f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-2c4b9a3b-42ba3e3d.js → index-2c4b9a3b-e6f2af62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-37817b51.js → index-e793d777.js} +3 -3
- rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-6b731386.js → infoDiagram-736b4530-8ceba4db.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-e8579ac6.js → journeyDiagram-df861f2b-960d3809.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-89e6403a.js → layout-498807d8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-dc73d3fc.js → line-eeccc4e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-f5b1d2bc.js → linear-8a078617.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-beec6740-82cb74fa.js → mindmap-definition-beec6740-396d17dd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-bdf5f29b.js → pieDiagram-dbbf0591-dc9b5e1b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-c7a0cbe4.js → quadrantDiagram-4d7f4fd6-a08cba6d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-7ec5410f.js → requirementDiagram-6fc4c22a-87242b9e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-8f13d901-caee5554.js → sankeyDiagram-8f13d901-53f6f391.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-b655622a-2935f8db.js → sequenceDiagram-b655622a-715c9c20.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-59f0c015-8f5d9693.js → stateDiagram-59f0c015-2e8fb31f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-2b26beab-d565d1de.js → stateDiagram-v2-2b26beab-7e2d2aa0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-080da4f6-75ad421d.js → styles-080da4f6-4420cea6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-3dcbcfbf-7e764226.js → styles-3dcbcfbf-28676cf4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9c745c82-7a4e0e61.js → styles-9c745c82-cef936a6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-4835440b-4019d1bf.js → svgDrawCommon-4835440b-151251e9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-01ea12df.js → timeline-definition-5b62e21b-0d39bdb2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-89407137.js → xychartDiagram-2b33534f-a03fa445.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +3 -1
- rasa/core/channels/inspector/index.html +2 -0
- rasa/core/channels/inspector/src/App.tsx +1 -4
- rasa/core/channels/mattermost.py +4 -4
- rasa/core/channels/rasa_chat.py +4 -4
- rasa/core/channels/rest.py +11 -12
- rasa/core/channels/rocketchat.py +4 -3
- rasa/core/channels/slack.py +6 -5
- rasa/core/channels/socketio.py +7 -28
- rasa/core/channels/studio_chat.py +193 -0
- rasa/core/channels/telegram.py +73 -41
- rasa/core/channels/twilio.py +3 -3
- rasa/core/channels/vier_cvg.py +2 -2
- rasa/core/channels/voice_ready/audiocodes.py +8 -8
- rasa/core/channels/voice_ready/jambonz.py +5 -5
- rasa/core/channels/voice_ready/jambonz_protocol.py +3 -4
- rasa/core/channels/voice_ready/twilio_voice.py +9 -8
- rasa/core/channels/voice_ready/utils.py +1 -1
- rasa/core/channels/voice_stream/asr/asr_engine.py +2 -2
- rasa/core/channels/voice_stream/asr/azure.py +2 -2
- rasa/core/channels/voice_stream/asr/deepgram.py +57 -16
- rasa/core/channels/voice_stream/browser_audio.py +9 -6
- rasa/core/channels/voice_stream/call_state.py +2 -1
- rasa/core/channels/voice_stream/tts/azure.py +1 -2
- rasa/core/channels/voice_stream/tts/cartesia.py +5 -4
- rasa/core/channels/voice_stream/tts/tts_cache.py +3 -2
- rasa/core/channels/voice_stream/tts/tts_engine.py +1 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +10 -7
- rasa/core/channels/voice_stream/util.py +1 -1
- rasa/core/channels/voice_stream/voice_channel.py +15 -15
- rasa/core/channels/webexteams.py +3 -4
- rasa/core/evaluation/marker.py +7 -6
- rasa/core/evaluation/marker_base.py +15 -16
- rasa/core/evaluation/marker_stats.py +3 -4
- rasa/core/evaluation/marker_tracker_loader.py +5 -4
- rasa/core/exporter.py +4 -4
- rasa/core/featurizers/precomputation.py +8 -8
- rasa/core/featurizers/single_state_featurizer.py +7 -7
- rasa/core/featurizers/tracker_featurizers.py +13 -13
- rasa/core/http_interpreter.py +3 -4
- rasa/core/information_retrieval/__init__.py +1 -1
- rasa/core/information_retrieval/faiss.py +4 -4
- rasa/core/information_retrieval/information_retrieval.py +2 -2
- rasa/core/information_retrieval/milvus.py +3 -3
- rasa/core/information_retrieval/qdrant.py +3 -3
- rasa/core/jobs.py +1 -0
- rasa/core/lock.py +2 -3
- rasa/core/lock_store.py +3 -3
- rasa/core/migrate.py +11 -8
- rasa/core/nlg/__init__.py +1 -1
- rasa/core/nlg/callback.py +2 -3
- rasa/core/nlg/contextual_response_rephraser.py +63 -13
- rasa/core/nlg/generator.py +2 -2
- rasa/core/nlg/interpolator.py +4 -3
- rasa/core/nlg/response.py +3 -4
- rasa/core/nlg/summarize.py +1 -0
- rasa/core/persistor.py +3 -3
- rasa/core/policies/ensemble.py +10 -9
- rasa/core/policies/enterprise_search_policy.py +86 -21
- rasa/core/policies/flow_policy.py +13 -14
- rasa/core/policies/flows/flow_executor.py +35 -11
- rasa/core/policies/intentless_policy.py +6 -7
- rasa/core/policies/memoization.py +22 -20
- rasa/core/policies/policy.py +24 -22
- rasa/core/policies/rule_policy.py +37 -36
- rasa/core/policies/ted_policy.py +87 -85
- rasa/core/policies/unexpected_intent_policy.py +77 -75
- rasa/core/processor.py +96 -65
- rasa/core/run.py +1 -1
- rasa/core/secrets_manager/endpoints.py +2 -3
- rasa/core/secrets_manager/factory.py +2 -3
- rasa/core/secrets_manager/secret_manager.py +2 -3
- rasa/core/secrets_manager/vault.py +2 -2
- rasa/core/test.py +30 -30
- rasa/core/tracker_store.py +15 -15
- rasa/core/train.py +1 -1
- rasa/core/training/__init__.py +2 -2
- rasa/core/training/converters/responses_prefix_converter.py +1 -2
- rasa/core/training/interactive.py +13 -13
- rasa/core/training/story_conflict.py +4 -5
- rasa/core/training/training.py +3 -5
- rasa/core/utils.py +5 -5
- rasa/core/visualize.py +1 -1
- rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -2
- rasa/dialogue_understanding/coexistence/llm_based_router.py +5 -5
- rasa/dialogue_understanding/commands/__init__.py +22 -22
- rasa/dialogue_understanding/commands/can_not_handle_command.py +20 -1
- rasa/dialogue_understanding/commands/cancel_flow_command.py +18 -7
- rasa/dialogue_understanding/commands/change_flow_command.py +18 -2
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +18 -4
- rasa/dialogue_understanding/commands/clarify_command.py +19 -3
- rasa/dialogue_understanding/commands/command.py +19 -3
- rasa/dialogue_understanding/commands/correct_slots_command.py +3 -3
- rasa/dialogue_understanding/commands/error_command.py +1 -1
- rasa/dialogue_understanding/commands/free_form_answer_command.py +2 -1
- rasa/dialogue_understanding/commands/handle_code_change_command.py +2 -2
- rasa/dialogue_understanding/commands/human_handoff_command.py +16 -4
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +18 -4
- rasa/dialogue_understanding/commands/noop_command.py +2 -1
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +16 -4
- rasa/dialogue_understanding/commands/restart_command.py +2 -5
- rasa/dialogue_understanding/commands/session_end_command.py +3 -5
- rasa/dialogue_understanding/commands/session_start_command.py +3 -5
- rasa/dialogue_understanding/commands/set_slot_command.py +27 -3
- rasa/dialogue_understanding/commands/skip_question_command.py +16 -4
- rasa/dialogue_understanding/commands/start_flow_command.py +17 -2
- rasa/dialogue_understanding/commands/user_silence_command.py +3 -5
- rasa/dialogue_understanding/commands/utils.py +64 -45
- rasa/dialogue_understanding/constants.py +1 -0
- rasa/dialogue_understanding/generator/command_generator.py +2 -119
- rasa/dialogue_understanding/generator/command_parser.py +201 -0
- rasa/dialogue_understanding/generator/constants.py +2 -2
- rasa/dialogue_understanding/generator/flow_retrieval.py +7 -7
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +11 -57
- rasa/dialogue_understanding/generator/llm_command_generator.py +2 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +67 -120
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +8 -10
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +32 -93
- rasa/dialogue_understanding/generator/utils.py +45 -0
- rasa/dialogue_understanding/patterns/cancel.py +2 -1
- rasa/dialogue_understanding/patterns/cannot_handle.py +1 -0
- rasa/dialogue_understanding/patterns/chitchat.py +1 -1
- rasa/dialogue_understanding/patterns/clarify.py +2 -1
- rasa/dialogue_understanding/patterns/code_change.py +2 -0
- rasa/dialogue_understanding/patterns/collect_information.py +6 -3
- rasa/dialogue_understanding/patterns/completed.py +1 -1
- rasa/dialogue_understanding/patterns/continue_interrupted.py +10 -1
- rasa/dialogue_understanding/patterns/correction.py +4 -2
- rasa/dialogue_understanding/patterns/human_handoff.py +1 -1
- rasa/dialogue_understanding/patterns/internal_error.py +1 -0
- rasa/dialogue_understanding/patterns/search.py +1 -1
- rasa/dialogue_understanding/patterns/session_start.py +1 -1
- rasa/dialogue_understanding/patterns/skip_question.py +1 -0
- rasa/dialogue_understanding/patterns/user_silence.py +1 -1
- rasa/dialogue_understanding/processor/command_processor.py +13 -9
- rasa/dialogue_understanding/processor/command_processor_component.py +1 -1
- rasa/dialogue_understanding/stack/dialogue_stack.py +4 -3
- rasa/dialogue_understanding/stack/frames/__init__.py +2 -2
- rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +4 -1
- rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +2 -3
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +5 -2
- rasa/dialogue_understanding/stack/frames/search_frame.py +4 -1
- rasa/dialogue_understanding/stack/utils.py +8 -4
- rasa/dialogue_understanding/utils.py +121 -2
- rasa/dialogue_understanding_test/README.md +379 -0
- rasa/dialogue_understanding_test/command_comparison.py +60 -0
- rasa/dialogue_understanding_test/command_metric_calculation.py +110 -4
- rasa/dialogue_understanding_test/constants.py +6 -1
- rasa/dialogue_understanding_test/du_test_case.py +252 -38
- rasa/dialogue_understanding_test/du_test_result.py +291 -2
- rasa/dialogue_understanding_test/du_test_runner.py +239 -10
- rasa/dialogue_understanding_test/du_test_schema.yml +161 -0
- rasa/dialogue_understanding_test/io.py +338 -20
- rasa/dialogue_understanding_test/test_case_simulation/__init__.py +0 -0
- rasa/dialogue_understanding_test/test_case_simulation/exception.py +28 -0
- rasa/dialogue_understanding_test/test_case_simulation/test_case_tracker_simulator.py +336 -0
- rasa/dialogue_understanding_test/utils.py +70 -0
- rasa/dialogue_understanding_test/validation.py +59 -4
- rasa/e2e_test/aggregate_test_stats_calculator.py +1 -1
- rasa/e2e_test/assertions.py +1 -1
- rasa/e2e_test/e2e_config.py +1 -1
- rasa/e2e_test/e2e_test_case.py +3 -4
- rasa/e2e_test/e2e_test_converter.py +2 -3
- rasa/e2e_test/e2e_test_coverage_report.py +6 -6
- rasa/e2e_test/e2e_test_result.py +1 -1
- rasa/e2e_test/e2e_test_runner.py +134 -31
- rasa/e2e_test/stub_custom_action.py +1 -1
- rasa/e2e_test/utils/e2e_yaml_utils.py +1 -1
- rasa/e2e_test/utils/io.py +132 -65
- rasa/e2e_test/utils/validation.py +1 -1
- rasa/engine/caching.py +5 -7
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +2 -2
- rasa/engine/recipes/default_components.py +13 -15
- rasa/engine/recipes/recipe.py +2 -2
- rasa/engine/runner/dask.py +2 -2
- rasa/engine/runner/interface.py +1 -0
- rasa/engine/storage/local_model_storage.py +5 -4
- rasa/engine/storage/resource.py +2 -1
- rasa/engine/storage/storage.py +5 -3
- rasa/engine/training/components.py +2 -1
- rasa/engine/training/fingerprinting.py +4 -2
- rasa/engine/training/graph_trainer.py +4 -4
- rasa/engine/training/hooks.py +2 -2
- rasa/engine/validation.py +34 -33
- rasa/exceptions.py +3 -2
- rasa/graph_components/converters/nlu_message_converter.py +3 -3
- rasa/graph_components/providers/domain_for_core_training_provider.py +3 -3
- rasa/graph_components/providers/domain_provider.py +3 -2
- rasa/graph_components/providers/flows_provider.py +2 -3
- rasa/graph_components/providers/forms_provider.py +4 -4
- rasa/graph_components/providers/nlu_training_data_provider.py +5 -3
- rasa/graph_components/providers/responses_provider.py +4 -4
- rasa/graph_components/providers/rule_only_provider.py +3 -2
- rasa/graph_components/providers/story_graph_provider.py +8 -8
- rasa/graph_components/providers/training_tracker_provider.py +3 -2
- rasa/graph_components/validators/default_recipe_validator.py +16 -16
- rasa/graph_components/validators/finetuning_validator.py +10 -8
- rasa/hooks.py +18 -12
- rasa/jupyter.py +2 -2
- rasa/llm_fine_tuning/annotation_module.py +4 -4
- rasa/llm_fine_tuning/conversations.py +6 -6
- rasa/llm_fine_tuning/llm_data_preparation_module.py +1 -1
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -4
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +1 -1
- rasa/llm_fine_tuning/paraphrasing_module.py +1 -1
- rasa/llm_fine_tuning/storage.py +3 -3
- rasa/markers/marker.py +2 -3
- rasa/markers/marker_base.py +1 -2
- rasa/markers/upload.py +2 -2
- rasa/markers/validate.py +2 -3
- rasa/model.py +3 -5
- rasa/model_manager/config.py +1 -1
- rasa/model_manager/model_api.py +5 -4
- rasa/model_manager/runner_service.py +6 -6
- rasa/model_manager/socket_bridge.py +8 -3
- rasa/model_manager/studio_jwt_auth.py +1 -0
- rasa/model_manager/trainer_service.py +9 -7
- rasa/model_manager/utils.py +1 -1
- rasa/model_manager/warm_rasa_process.py +14 -8
- rasa/model_service.py +5 -6
- rasa/model_testing.py +13 -15
- rasa/nlu/classifiers/diet_classifier.py +72 -73
- rasa/nlu/classifiers/fallback_classifier.py +9 -11
- rasa/nlu/classifiers/keyword_intent_classifier.py +7 -6
- rasa/nlu/classifiers/logistic_regression_classifier.py +3 -3
- rasa/nlu/classifiers/mitie_intent_classifier.py +5 -4
- rasa/nlu/classifiers/regex_message_handler.py +3 -2
- rasa/nlu/classifiers/sklearn_intent_classifier.py +2 -2
- rasa/nlu/convert.py +2 -2
- rasa/nlu/emulators/dialogflow.py +3 -3
- rasa/nlu/emulators/luis.py +5 -5
- rasa/nlu/emulators/no_emulator.py +1 -0
- rasa/nlu/emulators/wit.py +4 -4
- rasa/nlu/extractors/crf_entity_extractor.py +11 -11
- rasa/nlu/extractors/duckling_entity_extractor.py +7 -6
- rasa/nlu/extractors/entity_synonyms.py +10 -9
- rasa/nlu/extractors/extractor.py +16 -16
- rasa/nlu/extractors/mitie_entity_extractor.py +10 -9
- rasa/nlu/extractors/regex_entity_extractor.py +11 -10
- rasa/nlu/extractors/spacy_entity_extractor.py +2 -2
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +15 -14
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +2 -1
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +10 -9
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +9 -7
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +13 -12
- rasa/nlu/featurizers/featurizer.py +5 -4
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +6 -6
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -4
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +4 -4
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +2 -0
- rasa/nlu/model.py +0 -1
- rasa/nlu/selectors/response_selector.py +67 -68
- rasa/nlu/test.py +38 -38
- rasa/nlu/tokenizers/jieba_tokenizer.py +1 -2
- rasa/nlu/tokenizers/mitie_tokenizer.py +2 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -3
- rasa/nlu/tokenizers/tokenizer.py +6 -7
- rasa/nlu/tokenizers/whitespace_tokenizer.py +1 -1
- rasa/nlu/utils/bilou_utils.py +7 -7
- rasa/nlu/utils/hugging_face/registry.py +22 -22
- rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +2 -1
- rasa/nlu/utils/mitie_utils.py +2 -1
- rasa/nlu/utils/pattern_utils.py +1 -1
- rasa/nlu/utils/spacy_utils.py +3 -3
- rasa/plugin.py +12 -1
- rasa/server.py +37 -1
- rasa/shared/constants.py +22 -2
- rasa/shared/core/command_payload_reader.py +15 -7
- rasa/shared/core/constants.py +4 -1
- rasa/shared/core/conversation.py +1 -2
- rasa/shared/core/events.py +47 -37
- rasa/shared/core/flows/__init__.py +0 -1
- rasa/shared/core/flows/flow.py +11 -11
- rasa/shared/core/flows/flow_step.py +19 -13
- rasa/shared/core/flows/flow_step_links.py +21 -14
- rasa/shared/core/flows/flow_step_sequence.py +6 -4
- rasa/shared/core/flows/flows_list.py +3 -3
- rasa/shared/core/flows/nlu_trigger.py +1 -1
- rasa/shared/core/flows/steps/__init__.py +2 -2
- rasa/shared/core/flows/steps/action.py +4 -3
- rasa/shared/core/flows/steps/call.py +4 -4
- rasa/shared/core/flows/steps/collect.py +7 -4
- rasa/shared/core/flows/steps/continuation.py +3 -1
- rasa/shared/core/flows/steps/end.py +3 -1
- rasa/shared/core/flows/steps/internal.py +3 -2
- rasa/shared/core/flows/steps/link.py +6 -4
- rasa/shared/core/flows/steps/no_operation.py +7 -5
- rasa/shared/core/flows/steps/set_slots.py +4 -3
- rasa/shared/core/flows/steps/start.py +3 -1
- rasa/shared/core/flows/utils.py +1 -0
- rasa/shared/core/flows/validation.py +3 -5
- rasa/shared/core/generator.py +20 -21
- rasa/shared/core/slot_mappings.py +15 -15
- rasa/shared/core/slots.py +3 -3
- rasa/shared/core/trackers.py +31 -31
- rasa/shared/core/training_data/loading.py +1 -1
- rasa/shared/core/training_data/story_reader/story_reader.py +3 -3
- rasa/shared/core/training_data/story_reader/story_step_builder.py +4 -4
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +29 -31
- rasa/shared/core/training_data/story_writer/yaml_story_writer.py +22 -24
- rasa/shared/core/training_data/structures.py +11 -12
- rasa/shared/core/training_data/visualization.py +10 -10
- rasa/shared/data.py +6 -6
- rasa/shared/engine/caching.py +0 -1
- rasa/shared/exceptions.py +2 -2
- rasa/shared/importers/rasa.py +5 -6
- rasa/shared/importers/utils.py +1 -1
- rasa/shared/nlu/constants.py +3 -0
- rasa/shared/nlu/training_data/entities_parser.py +6 -6
- rasa/shared/nlu/training_data/features.py +3 -3
- rasa/shared/nlu/training_data/formats/__init__.py +1 -1
- rasa/shared/nlu/training_data/formats/dialogflow.py +4 -5
- rasa/shared/nlu/training_data/formats/luis.py +7 -8
- rasa/shared/nlu/training_data/formats/rasa.py +4 -5
- rasa/shared/nlu/training_data/formats/rasa_yaml.py +17 -16
- rasa/shared/nlu/training_data/formats/readerwriter.py +8 -11
- rasa/shared/nlu/training_data/formats/wit.py +3 -4
- rasa/shared/nlu/training_data/loading.py +4 -4
- rasa/shared/nlu/training_data/lookup_tables_parser.py +1 -1
- rasa/shared/nlu/training_data/message.py +13 -14
- rasa/shared/nlu/training_data/schemas/data_schema.py +1 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +1 -0
- rasa/shared/nlu/training_data/synonyms_parser.py +3 -3
- rasa/shared/nlu/training_data/training_data.py +12 -13
- rasa/shared/nlu/training_data/util.py +11 -10
- rasa/shared/providers/_configs/azure_openai_client_config.py +3 -119
- rasa/shared/providers/_configs/client_config.py +1 -3
- rasa/shared/providers/_configs/default_litellm_client_config.py +1 -3
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +1 -3
- rasa/shared/providers/_configs/litellm_router_client_config.py +1 -3
- rasa/shared/providers/_configs/model_group_config.py +2 -7
- rasa/shared/providers/_configs/openai_client_config.py +1 -3
- rasa/shared/providers/_configs/rasa_llm_client_config.py +1 -3
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +1 -3
- rasa/shared/providers/_configs/utils.py +1 -0
- rasa/shared/providers/_ssl_verification_utils.py +5 -6
- rasa/shared/providers/_utils.py +5 -5
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +1 -1
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +3 -26
- rasa/shared/providers/embedding/embedding_client.py +1 -1
- rasa/shared/providers/embedding/litellm_router_embedding_client.py +1 -3
- rasa/shared/providers/llm/_base_litellm_client.py +1 -3
- rasa/shared/providers/llm/azure_openai_llm_client.py +25 -79
- rasa/shared/providers/llm/default_litellm_llm_client.py +1 -3
- rasa/shared/providers/llm/litellm_router_llm_client.py +2 -21
- rasa/shared/providers/llm/llm_client.py +1 -3
- rasa/shared/providers/llm/llm_response.py +41 -2
- rasa/shared/providers/llm/openai_llm_client.py +3 -9
- rasa/shared/providers/llm/rasa_llm_client.py +6 -20
- rasa/shared/providers/llm/self_hosted_llm_client.py +3 -9
- rasa/shared/providers/mappings.py +18 -19
- rasa/shared/providers/router/_base_litellm_router_client.py +1 -3
- rasa/shared/providers/router/router_client.py +1 -3
- rasa/shared/utils/cli.py +1 -1
- rasa/shared/utils/common.py +1 -1
- rasa/shared/utils/health_check/embeddings_health_check_mixin.py +1 -1
- rasa/shared/utils/health_check/health_check.py +3 -3
- rasa/shared/utils/health_check/llm_health_check_mixin.py +1 -1
- rasa/shared/utils/io.py +1 -1
- rasa/shared/utils/llm.py +5 -9
- rasa/shared/utils/pykwalify_extensions.py +1 -1
- rasa/shared/utils/schemas/events.py +1 -1
- rasa/shared/utils/yaml.py +29 -26
- rasa/studio/auth.py +3 -3
- rasa/studio/config.py +1 -2
- rasa/studio/data_handler.py +3 -3
- rasa/studio/download.py +1 -1
- rasa/studio/results_logger.py +3 -3
- rasa/studio/upload.py +2 -0
- rasa/telemetry.py +31 -0
- rasa/tracing/config.py +3 -3
- rasa/tracing/instrumentation/attribute_extractors.py +54 -0
- rasa/tracing/instrumentation/instrumentation.py +25 -5
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -1
- rasa/tracing/instrumentation/metrics.py +11 -11
- rasa/tracing/metric_instrument_provider.py +14 -14
- rasa/utils/common.py +12 -9
- rasa/utils/endpoints.py +1 -1
- rasa/utils/io.py +7 -7
- rasa/utils/licensing.py +3 -4
- rasa/utils/log_utils.py +7 -6
- rasa/utils/ml_utils.py +1 -0
- rasa/utils/plotting.py +3 -3
- rasa/utils/sanic_error_handler.py +1 -1
- rasa/utils/tensorflow/callback.py +2 -2
- rasa/utils/tensorflow/crf.py +2 -2
- rasa/utils/tensorflow/data_generator.py +5 -5
- rasa/utils/tensorflow/environment.py +3 -3
- rasa/utils/tensorflow/feature_array.py +2 -3
- rasa/utils/tensorflow/layers.py +18 -12
- rasa/utils/tensorflow/layers_utils.py +2 -1
- rasa/utils/tensorflow/metrics.py +2 -2
- rasa/utils/tensorflow/model_data.py +7 -7
- rasa/utils/tensorflow/model_data_utils.py +10 -9
- rasa/utils/tensorflow/models.py +31 -32
- rasa/utils/tensorflow/rasa_layers.py +20 -19
- rasa/utils/tensorflow/types.py +2 -1
- rasa/utils/train_utils.py +23 -21
- rasa/utils/url_tools.py +1 -1
- rasa/validator.py +17 -1
- rasa/version.py +1 -1
- {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev4.dist-info}/METADATA +9 -10
- rasa_pro-3.12.0.dev4.dist-info/RECORD +800 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +0 -1
- rasa/shared/providers/_configs/azure_entra_id_client_creds.py +0 -40
- rasa/shared/providers/_configs/azure_entra_id_config.py +0 -533
- rasa/shared/providers/_configs/oauth_config.py +0 -33
- rasa/shared/providers/constants.py +0 -6
- rasa_pro-3.12.0.dev2.dist-info/RECORD +0 -793
- {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev4.dist-info}/NOTICE +0 -0
- {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev4.dist-info}/WHEEL +0 -0
- {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
|
|
|
@@ -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
|
-
|
|
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()
|
rasa/shared/providers/_utils.py
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
228
|
+
"api_key": self._api_key_env_var,
|
|
252
229
|
}
|
|
253
230
|
|
|
254
231
|
@property
|
|
@@ -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
|
|
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
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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
|
-
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
|
|
380
|
-
|
|
381
|
-
|
|
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
|
-
|
|
385
|
-
|
|
386
|
-
|
|
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[
|
|
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][
|
|
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][
|
|
405
|
-
settings[missing_setting][
|
|
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
|
-
|
|
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
|
|
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)
|