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