rasa-pro 3.12.0.dev2__py3-none-any.whl → 3.12.0.dev3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- 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 +116 -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 +281 -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 -8
- 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 +2 -0
- rasa/tracing/instrumentation/instrumentation.py +4 -4
- 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.dev3.dist-info}/METADATA +8 -9
- rasa_pro-3.12.0.dev3.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.dev3.dist-info}/NOTICE +0 -0
- {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev3.dist-info}/WHEEL +0 -0
- {rasa_pro-3.12.0.dev2.dist-info → rasa_pro-3.12.0.dev3.dist-info}/entry_points.txt +0 -0
rasa/core/nlg/generator.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import Any, Dict, List, Optional, Text, Union
|
|
3
3
|
|
|
4
4
|
import rasa.shared.utils.common
|
|
5
5
|
import rasa.shared.utils.io
|
|
6
6
|
from rasa.shared.constants import CHANNEL, RESPONSE_CONDITION
|
|
7
7
|
from rasa.shared.core.domain import Domain
|
|
8
|
-
from rasa.utils.endpoints import EndpointConfig
|
|
9
8
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
9
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
rasa/core/nlg/interpolator.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import copy
|
|
2
|
-
import re
|
|
3
2
|
import logging
|
|
4
|
-
|
|
3
|
+
import re
|
|
4
|
+
from typing import Any, Dict, List, Text, Union
|
|
5
|
+
|
|
5
6
|
import jinja2
|
|
6
7
|
import structlog
|
|
7
|
-
from
|
|
8
|
+
from jinja2 import Template
|
|
8
9
|
|
|
9
10
|
from rasa.core.constants import JINJA2_TEMPLATE_ENGINE, RASA_FORMAT_TEMPLATE_ENGINE
|
|
10
11
|
|
rasa/core/nlg/response.py
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import copy
|
|
2
2
|
import logging
|
|
3
|
-
from
|
|
4
|
-
|
|
5
|
-
from rasa.shared.core.trackers import DialogueStateTracker
|
|
6
|
-
from typing import Text, Any, Dict, Optional, List
|
|
3
|
+
from typing import Any, Dict, List, Optional, Text
|
|
7
4
|
|
|
5
|
+
from rasa.core.constants import DEFAULT_TEMPLATE_ENGINE, TEMPLATE_ENGINE_CONFIG_KEY
|
|
8
6
|
from rasa.core.nlg import interpolator
|
|
9
7
|
from rasa.core.nlg.generator import NaturalLanguageGenerator, ResponseVariationFilter
|
|
10
8
|
from rasa.shared.constants import RESPONSE_CONDITION
|
|
11
9
|
from rasa.shared.core.domain import RESPONSE_KEYS_TO_INTERPOLATE
|
|
10
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
12
11
|
from rasa.shared.nlu.constants import METADATA
|
|
13
12
|
|
|
14
13
|
logger = logging.getLogger(__name__)
|
rasa/core/nlg/summarize.py
CHANGED
rasa/core/persistor.py
CHANGED
|
@@ -9,14 +9,13 @@ from typing import TYPE_CHECKING, List, Optional, Text, Tuple, Union
|
|
|
9
9
|
|
|
10
10
|
import structlog
|
|
11
11
|
|
|
12
|
-
from rasa.exceptions import ModelNotFound
|
|
13
12
|
import rasa.shared.utils.common
|
|
14
13
|
import rasa.utils.common
|
|
15
14
|
from rasa.constants import (
|
|
15
|
+
DEFAULT_BUCKET_NAME,
|
|
16
16
|
HTTP_STATUS_FORBIDDEN,
|
|
17
17
|
HTTP_STATUS_NOT_FOUND,
|
|
18
18
|
MODEL_ARCHIVE_EXTENSION,
|
|
19
|
-
DEFAULT_BUCKET_NAME,
|
|
20
19
|
)
|
|
21
20
|
from rasa.env import (
|
|
22
21
|
AWS_ENDPOINT_URL_ENV,
|
|
@@ -26,6 +25,7 @@ from rasa.env import (
|
|
|
26
25
|
BUCKET_NAME_ENV,
|
|
27
26
|
REMOTE_STORAGE_PATH_ENV,
|
|
28
27
|
)
|
|
28
|
+
from rasa.exceptions import ModelNotFound
|
|
29
29
|
from rasa.shared.exceptions import RasaException
|
|
30
30
|
from rasa.shared.utils.io import raise_warning
|
|
31
31
|
|
|
@@ -367,8 +367,8 @@ class GCSPersistor(Persistor):
|
|
|
367
367
|
self.bucket = self.storage_client.bucket(bucket_name)
|
|
368
368
|
|
|
369
369
|
def _ensure_bucket_exists(self, bucket_name: Text) -> None:
|
|
370
|
-
from google.cloud import exceptions
|
|
371
370
|
from google.auth import exceptions as auth_exceptions
|
|
371
|
+
from google.cloud import exceptions
|
|
372
372
|
|
|
373
373
|
try:
|
|
374
374
|
self.storage_client.get_bucket(bucket_name)
|
rasa/core/policies/ensemble.py
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import Optional, Text, List, Dict, Any
|
|
2
|
+
|
|
4
3
|
import logging
|
|
4
|
+
from abc import ABC, abstractmethod
|
|
5
|
+
from typing import Any, Dict, List, Optional, Text
|
|
5
6
|
|
|
7
|
+
from rasa.core.policies.policy import PolicyPrediction
|
|
6
8
|
from rasa.engine.graph import GraphComponent
|
|
7
|
-
from rasa.engine.storage.storage import ModelStorage
|
|
8
|
-
from rasa.engine.storage.resource import Resource
|
|
9
9
|
from rasa.engine.runner.interface import ExecutionContext
|
|
10
|
-
from rasa.
|
|
11
|
-
from rasa.
|
|
10
|
+
from rasa.engine.storage.resource import Resource
|
|
11
|
+
from rasa.engine.storage.storage import ModelStorage
|
|
12
12
|
from rasa.shared.core.constants import ACTION_LISTEN_NAME
|
|
13
13
|
from rasa.shared.core.domain import Domain
|
|
14
14
|
from rasa.shared.core.events import (
|
|
15
|
-
ActionExecutionRejected,
|
|
16
15
|
ActionExecuted,
|
|
16
|
+
ActionExecutionRejected,
|
|
17
17
|
DefinePrevUserUtteredFeaturization,
|
|
18
18
|
)
|
|
19
19
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
20
|
+
from rasa.shared.exceptions import InvalidConfigException, RasaException
|
|
20
21
|
|
|
21
22
|
logger = logging.getLogger(__name__)
|
|
22
23
|
|
|
@@ -34,11 +35,11 @@ def is_not_in_training_data(
|
|
|
34
35
|
`False` if and only if an action was predicted (i.e. `max_confidence` > 0) by
|
|
35
36
|
a `MemoizationPolicy`
|
|
36
37
|
"""
|
|
37
|
-
from rasa.core.policies.rule_policy import RulePolicy
|
|
38
38
|
from rasa.core.policies.memoization import (
|
|
39
|
-
MemoizationPolicy,
|
|
40
39
|
AugmentedMemoizationPolicy,
|
|
40
|
+
MemoizationPolicy,
|
|
41
41
|
)
|
|
42
|
+
from rasa.core.policies.rule_policy import RulePolicy
|
|
42
43
|
|
|
43
44
|
if not policy_name:
|
|
44
45
|
return True
|
|
@@ -2,6 +2,7 @@ import importlib.resources
|
|
|
2
2
|
import json
|
|
3
3
|
import re
|
|
4
4
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text
|
|
5
|
+
|
|
5
6
|
import dotenv
|
|
6
7
|
import structlog
|
|
7
8
|
from jinja2 import Template
|
|
@@ -16,8 +17,8 @@ from rasa.core.constants import (
|
|
|
16
17
|
)
|
|
17
18
|
from rasa.core.information_retrieval import (
|
|
18
19
|
InformationRetrieval,
|
|
19
|
-
SearchResult,
|
|
20
20
|
InformationRetrievalException,
|
|
21
|
+
SearchResult,
|
|
21
22
|
create_from_endpoint_config,
|
|
22
23
|
)
|
|
23
24
|
from rasa.core.information_retrieval.faiss import FAISS_Store
|
|
@@ -34,9 +35,9 @@ from rasa.dialogue_understanding.patterns.internal_error import (
|
|
|
34
35
|
)
|
|
35
36
|
from rasa.dialogue_understanding.stack.frames import (
|
|
36
37
|
DialogueStackFrame,
|
|
38
|
+
PatternFlowStackFrame,
|
|
37
39
|
SearchStackFrame,
|
|
38
40
|
)
|
|
39
|
-
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
40
41
|
from rasa.engine.graph import ExecutionContext
|
|
41
42
|
from rasa.engine.recipes.default_recipe import DefaultV1Recipe
|
|
42
43
|
from rasa.engine.storage.resource import Resource
|
|
@@ -46,12 +47,12 @@ from rasa.graph_components.providers.responses_provider import Responses
|
|
|
46
47
|
from rasa.shared.constants import (
|
|
47
48
|
EMBEDDINGS_CONFIG_KEY,
|
|
48
49
|
MODEL_CONFIG_KEY,
|
|
50
|
+
MODEL_GROUP_ID_CONFIG_KEY,
|
|
51
|
+
MODEL_NAME_CONFIG_KEY,
|
|
52
|
+
OPENAI_PROVIDER,
|
|
49
53
|
PROMPT_CONFIG_KEY,
|
|
50
54
|
PROVIDER_CONFIG_KEY,
|
|
51
|
-
OPENAI_PROVIDER,
|
|
52
55
|
TIMEOUT_CONFIG_KEY,
|
|
53
|
-
MODEL_NAME_CONFIG_KEY,
|
|
54
|
-
MODEL_GROUP_ID_CONFIG_KEY,
|
|
55
56
|
)
|
|
56
57
|
from rasa.shared.core.constants import (
|
|
57
58
|
ACTION_CANCEL_FLOW,
|
|
@@ -59,15 +60,23 @@ from rasa.shared.core.constants import (
|
|
|
59
60
|
DEFAULT_SLOT_NAMES,
|
|
60
61
|
)
|
|
61
62
|
from rasa.shared.core.domain import Domain
|
|
62
|
-
from rasa.shared.core.events import Event, UserUttered
|
|
63
|
+
from rasa.shared.core.events import BotUttered, Event, UserUttered
|
|
63
64
|
from rasa.shared.core.generator import TrackerWithCachedStates
|
|
64
65
|
from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
|
|
65
|
-
from rasa.shared.exceptions import
|
|
66
|
+
from rasa.shared.exceptions import FileIOException, RasaException
|
|
67
|
+
from rasa.shared.nlu.constants import (
|
|
68
|
+
KEY_COMPONENT_NAME,
|
|
69
|
+
KEY_LLM_RESPONSE_METADATA,
|
|
70
|
+
KEY_PROMPT_NAME,
|
|
71
|
+
KEY_USER_PROMPT,
|
|
72
|
+
PROMPTS,
|
|
73
|
+
)
|
|
66
74
|
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
67
75
|
from rasa.shared.providers.embedding._langchain_embedding_client_adapter import (
|
|
68
76
|
_LangchainEmbeddingClientAdapter,
|
|
69
77
|
)
|
|
70
78
|
from rasa.shared.providers.llm.llm_client import LLMClient
|
|
79
|
+
from rasa.shared.providers.llm.llm_response import LLMResponse
|
|
71
80
|
from rasa.shared.utils.cli import print_error_and_exit
|
|
72
81
|
from rasa.shared.utils.health_check.embeddings_health_check_mixin import (
|
|
73
82
|
EmbeddingsHealthCheckMixin,
|
|
@@ -80,9 +89,9 @@ from rasa.shared.utils.llm import (
|
|
|
80
89
|
embedder_factory,
|
|
81
90
|
get_prompt_template,
|
|
82
91
|
llm_factory,
|
|
92
|
+
resolve_model_client_config,
|
|
83
93
|
sanitize_message_for_prompt,
|
|
84
94
|
tracker_as_readable_transcript,
|
|
85
|
-
resolve_model_client_config,
|
|
86
95
|
)
|
|
87
96
|
from rasa.telemetry import (
|
|
88
97
|
track_enterprise_search_policy_predict,
|
|
@@ -92,6 +101,7 @@ from rasa.telemetry import (
|
|
|
92
101
|
|
|
93
102
|
if TYPE_CHECKING:
|
|
94
103
|
from langchain.schema.embeddings import Embeddings
|
|
104
|
+
|
|
95
105
|
from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
|
|
96
106
|
|
|
97
107
|
from rasa.utils.log_utils import log_llm
|
|
@@ -272,6 +282,43 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
272
282
|
# Wrap the embedding client in the adapter
|
|
273
283
|
return _LangchainEmbeddingClientAdapter(client)
|
|
274
284
|
|
|
285
|
+
@classmethod
|
|
286
|
+
def _add_prompt_and_llm_response_to_latest_message(
|
|
287
|
+
cls,
|
|
288
|
+
tracker: DialogueStateTracker,
|
|
289
|
+
prompt_name: str,
|
|
290
|
+
user_prompt: str,
|
|
291
|
+
llm_response: Optional[LLMResponse] = None,
|
|
292
|
+
) -> None:
|
|
293
|
+
"""Stores the prompt and LLMResponse metadata in the tracker.
|
|
294
|
+
|
|
295
|
+
Args:
|
|
296
|
+
tracker: The DialogueStateTracker containing the current conversation state.
|
|
297
|
+
prompt_name: A name identifying prompt usage.
|
|
298
|
+
user_prompt: The user prompt that was sent to the LLM.
|
|
299
|
+
llm_response: The response object from the LLM (None if no response).
|
|
300
|
+
"""
|
|
301
|
+
from rasa.dialogue_understanding.utils import record_commands_and_prompts
|
|
302
|
+
|
|
303
|
+
if not record_commands_and_prompts:
|
|
304
|
+
return
|
|
305
|
+
|
|
306
|
+
if not tracker.latest_message:
|
|
307
|
+
return
|
|
308
|
+
|
|
309
|
+
parse_data = tracker.latest_message.parse_data
|
|
310
|
+
if PROMPTS not in parse_data:
|
|
311
|
+
parse_data[PROMPTS] = [] # type: ignore[literal-required]
|
|
312
|
+
|
|
313
|
+
prompt_data: Dict[Text, Any] = {
|
|
314
|
+
KEY_COMPONENT_NAME: cls.__name__,
|
|
315
|
+
KEY_PROMPT_NAME: prompt_name,
|
|
316
|
+
KEY_USER_PROMPT: user_prompt,
|
|
317
|
+
KEY_LLM_RESPONSE_METADATA: llm_response.to_dict() if llm_response else None,
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
parse_data[PROMPTS].append(prompt_data) # type: ignore[literal-required]
|
|
321
|
+
|
|
275
322
|
def train( # type: ignore[override]
|
|
276
323
|
self,
|
|
277
324
|
training_trackers: List[TrackerWithCachedStates],
|
|
@@ -498,13 +545,27 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
498
545
|
|
|
499
546
|
if self.use_llm:
|
|
500
547
|
prompt = self._render_prompt(tracker, documents.results)
|
|
501
|
-
|
|
548
|
+
llm_response = await self._generate_llm_answer(llm, prompt)
|
|
549
|
+
llm_response = LLMResponse.ensure_llm_response(llm_response)
|
|
550
|
+
|
|
551
|
+
self._add_prompt_and_llm_response_to_latest_message(
|
|
552
|
+
tracker=tracker,
|
|
553
|
+
prompt_name="enterprise_search_prompt",
|
|
554
|
+
user_prompt=prompt,
|
|
555
|
+
llm_response=llm_response,
|
|
556
|
+
)
|
|
557
|
+
|
|
558
|
+
if llm_response is None or not llm_response.choices:
|
|
559
|
+
logger.debug(f"{logger_key}.no_llm_response")
|
|
560
|
+
response = None
|
|
561
|
+
else:
|
|
562
|
+
llm_answer = llm_response.choices[0]
|
|
502
563
|
|
|
503
|
-
|
|
504
|
-
|
|
564
|
+
if self.citation_enabled:
|
|
565
|
+
llm_answer = self.post_process_citations(llm_answer)
|
|
505
566
|
|
|
506
|
-
|
|
507
|
-
|
|
567
|
+
logger.debug(f"{logger_key}.llm_answer", llm_answer=llm_answer)
|
|
568
|
+
response = llm_answer
|
|
508
569
|
else:
|
|
509
570
|
response = documents.results[0].metadata.get("answer", None)
|
|
510
571
|
if not response:
|
|
@@ -516,7 +577,6 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
516
577
|
"enterprise_search_policy.predict_action_probabilities.no_llm",
|
|
517
578
|
search_results=documents,
|
|
518
579
|
)
|
|
519
|
-
|
|
520
580
|
if response is None:
|
|
521
581
|
return self._create_prediction_internal_error(domain, tracker)
|
|
522
582
|
|
|
@@ -581,10 +641,18 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
581
641
|
|
|
582
642
|
async def _generate_llm_answer(
|
|
583
643
|
self, llm: LLMClient, prompt: Text
|
|
584
|
-
) -> Optional[
|
|
644
|
+
) -> Optional[LLMResponse]:
|
|
645
|
+
"""Fetches an LLM completion for the provided prompt.
|
|
646
|
+
|
|
647
|
+
Args:
|
|
648
|
+
llm: The LLM client used to get the completion.
|
|
649
|
+
prompt: The prompt text to send to the model.
|
|
650
|
+
|
|
651
|
+
Returns:
|
|
652
|
+
An LLMResponse object, or None if the call fails.
|
|
653
|
+
"""
|
|
585
654
|
try:
|
|
586
|
-
|
|
587
|
-
llm_answer = llm_response.choices[0]
|
|
655
|
+
return await llm.acompletion(prompt)
|
|
588
656
|
except Exception as e:
|
|
589
657
|
# unfortunately, langchain does not wrap LLM exceptions which means
|
|
590
658
|
# we have to catch all exceptions here
|
|
@@ -592,9 +660,7 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
592
660
|
"enterprise_search_policy._generate_llm_answer.llm_error",
|
|
593
661
|
error=e,
|
|
594
662
|
)
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
return llm_answer
|
|
663
|
+
return None
|
|
598
664
|
|
|
599
665
|
def _create_prediction(
|
|
600
666
|
self,
|
|
@@ -692,7 +758,6 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
692
758
|
**kwargs: Any,
|
|
693
759
|
) -> "EnterpriseSearchPolicy":
|
|
694
760
|
"""Loads a trained policy (see parent class for full docstring)."""
|
|
695
|
-
|
|
696
761
|
# Perform health checks for both LLM and embeddings client configs
|
|
697
762
|
cls._perform_health_checks(config, "enterprise_search_policy.load")
|
|
698
763
|
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any, Dict,
|
|
4
|
-
|
|
3
|
+
from typing import Any, Dict, List, Optional, Text
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
5
6
|
|
|
7
|
+
from rasa.core.constants import (
|
|
8
|
+
FLOW_POLICY_PRIORITY,
|
|
9
|
+
POLICY_MAX_HISTORY,
|
|
10
|
+
POLICY_PRIORITY,
|
|
11
|
+
)
|
|
12
|
+
from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
|
|
13
|
+
from rasa.core.policies.flows import flow_executor
|
|
6
14
|
from rasa.core.policies.flows.flow_exceptions import FlowCircuitBreakerTrippedException
|
|
15
|
+
from rasa.core.policies.policy import Policy, PolicyPrediction
|
|
7
16
|
from rasa.dialogue_understanding.patterns.internal_error import (
|
|
8
17
|
InternalErrorPatternFlowStackFrame,
|
|
9
18
|
)
|
|
@@ -14,27 +23,17 @@ from rasa.dialogue_understanding.stack.frames import (
|
|
|
14
23
|
from rasa.dialogue_understanding.stack.utils import (
|
|
15
24
|
end_top_user_flow,
|
|
16
25
|
)
|
|
17
|
-
|
|
18
|
-
from rasa.core.constants import (
|
|
19
|
-
FLOW_POLICY_PRIORITY,
|
|
20
|
-
POLICY_MAX_HISTORY,
|
|
21
|
-
POLICY_PRIORITY,
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
from rasa.shared.core.events import Event
|
|
25
|
-
from rasa.shared.core.flows import FlowsList
|
|
26
|
-
from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
|
|
27
|
-
from rasa.core.policies.policy import Policy, PolicyPrediction
|
|
28
26
|
from rasa.engine.graph import ExecutionContext
|
|
29
27
|
from rasa.engine.recipes.default_recipe import DefaultV1Recipe
|
|
30
28
|
from rasa.engine.storage.resource import Resource
|
|
31
29
|
from rasa.engine.storage.storage import ModelStorage
|
|
32
30
|
from rasa.shared.core.domain import Domain
|
|
31
|
+
from rasa.shared.core.events import Event
|
|
32
|
+
from rasa.shared.core.flows import FlowsList
|
|
33
33
|
from rasa.shared.core.generator import TrackerWithCachedStates
|
|
34
34
|
from rasa.shared.core.trackers import (
|
|
35
35
|
DialogueStateTracker,
|
|
36
36
|
)
|
|
37
|
-
import structlog
|
|
38
37
|
|
|
39
38
|
structlogger = structlog.get_logger()
|
|
40
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any, Dict,
|
|
3
|
+
from typing import Any, Dict, List, Optional, Text
|
|
4
4
|
|
|
5
5
|
import structlog
|
|
6
6
|
from jinja2 import Template
|
|
@@ -9,15 +9,15 @@ from structlog.contextvars import (
|
|
|
9
9
|
bound_contextvars,
|
|
10
10
|
)
|
|
11
11
|
|
|
12
|
-
from rasa.core.constants import
|
|
12
|
+
from rasa.core.constants import ACTIVE_FLOW_METADATA_KEY, STEP_ID_METADATA_KEY
|
|
13
13
|
from rasa.core.policies.flows.flow_exceptions import (
|
|
14
14
|
FlowCircuitBreakerTrippedException,
|
|
15
15
|
FlowException,
|
|
16
16
|
NoNextStepInFlowException,
|
|
17
17
|
)
|
|
18
18
|
from rasa.core.policies.flows.flow_step_result import (
|
|
19
|
-
FlowActionPrediction,
|
|
20
19
|
ContinueFlowWithNextStep,
|
|
20
|
+
FlowActionPrediction,
|
|
21
21
|
FlowStepResult,
|
|
22
22
|
PauseFlowReturnPrediction,
|
|
23
23
|
)
|
|
@@ -67,21 +67,22 @@ from rasa.shared.core.flows.flow import (
|
|
|
67
67
|
FlowStep,
|
|
68
68
|
)
|
|
69
69
|
from rasa.shared.core.flows.flow_step_links import (
|
|
70
|
-
StaticFlowStepLink,
|
|
71
|
-
IfFlowStepLink,
|
|
72
70
|
ElseFlowStepLink,
|
|
71
|
+
IfFlowStepLink,
|
|
72
|
+
StaticFlowStepLink,
|
|
73
73
|
)
|
|
74
74
|
from rasa.shared.core.flows.steps import (
|
|
75
75
|
ActionFlowStep,
|
|
76
|
-
SetSlotsFlowStep,
|
|
77
|
-
LinkFlowStep,
|
|
78
|
-
ContinueFlowStep,
|
|
79
|
-
EndFlowStep,
|
|
80
76
|
CallFlowStep,
|
|
81
77
|
CollectInformationFlowStep,
|
|
78
|
+
ContinueFlowStep,
|
|
79
|
+
EndFlowStep,
|
|
80
|
+
LinkFlowStep,
|
|
82
81
|
NoOperationFlowStep,
|
|
82
|
+
SetSlotsFlowStep,
|
|
83
83
|
)
|
|
84
84
|
from rasa.shared.core.flows.steps.collect import SlotRejection
|
|
85
|
+
from rasa.shared.core.flows.steps.constants import START_STEP
|
|
85
86
|
from rasa.shared.core.slots import Slot
|
|
86
87
|
from rasa.shared.core.trackers import (
|
|
87
88
|
DialogueStateTracker,
|
|
@@ -316,7 +317,7 @@ def reset_scoped_slots(
|
|
|
316
317
|
def _reset_slot(slot_name: Text, dialogue_tracker: DialogueStateTracker) -> None:
|
|
317
318
|
slot = dialogue_tracker.slots.get(slot_name, None)
|
|
318
319
|
initial_value = slot.initial_value if slot else None
|
|
319
|
-
events.append(SlotSet(slot_name, initial_value))
|
|
320
|
+
events.append(SlotSet(slot_name, initial_value, metadata={"reset": True}))
|
|
320
321
|
|
|
321
322
|
if (
|
|
322
323
|
isinstance(current_frame, UserFlowStackFrame)
|
|
@@ -448,6 +449,7 @@ def advance_flows_until_next_action(
|
|
|
448
449
|
tracker,
|
|
449
450
|
available_actions,
|
|
450
451
|
flows,
|
|
452
|
+
previous_step_id,
|
|
451
453
|
)
|
|
452
454
|
new_events = step_result.events
|
|
453
455
|
if (
|
|
@@ -464,6 +466,9 @@ def advance_flows_until_next_action(
|
|
|
464
466
|
new_events.insert(
|
|
465
467
|
idx, FlowCompleted(active_frame.flow_id, previous_step_id)
|
|
466
468
|
)
|
|
469
|
+
attach_stack_metadata_to_events(
|
|
470
|
+
next_step.id, current_flow.id, new_events
|
|
471
|
+
)
|
|
467
472
|
tracker.update_stack(step_stack)
|
|
468
473
|
tracker.update_with_events(new_events)
|
|
469
474
|
|
|
@@ -567,6 +572,17 @@ def validate_custom_slot_mappings(
|
|
|
567
572
|
return True
|
|
568
573
|
|
|
569
574
|
|
|
575
|
+
def attach_stack_metadata_to_events(
|
|
576
|
+
step_id: str,
|
|
577
|
+
flow_id: str,
|
|
578
|
+
events: List[Event],
|
|
579
|
+
) -> None:
|
|
580
|
+
"""Attach the stack metadata to the events."""
|
|
581
|
+
for event in events:
|
|
582
|
+
event.metadata[STEP_ID_METADATA_KEY] = step_id
|
|
583
|
+
event.metadata[ACTIVE_FLOW_METADATA_KEY] = flow_id
|
|
584
|
+
|
|
585
|
+
|
|
570
586
|
def run_step(
|
|
571
587
|
step: FlowStep,
|
|
572
588
|
flow: Flow,
|
|
@@ -574,6 +590,7 @@ def run_step(
|
|
|
574
590
|
tracker: DialogueStateTracker,
|
|
575
591
|
available_actions: List[str],
|
|
576
592
|
flows: FlowsList,
|
|
593
|
+
previous_step_id: str,
|
|
577
594
|
) -> FlowStepResult:
|
|
578
595
|
"""Run a single step of a flow.
|
|
579
596
|
|
|
@@ -591,12 +608,19 @@ def run_step(
|
|
|
591
608
|
tracker: The tracker to run the step on.
|
|
592
609
|
available_actions: The actions that are available in the domain.
|
|
593
610
|
flows: All flows.
|
|
611
|
+
previous_step_id: The ID of the previous step.
|
|
594
612
|
|
|
595
613
|
Returns:
|
|
596
614
|
A result of running the step describing where to transition to.
|
|
597
615
|
"""
|
|
598
616
|
initial_events: List[Event] = []
|
|
599
|
-
if
|
|
617
|
+
if previous_step_id == START_STEP:
|
|
618
|
+
# if the previous step id is the start step, we need to add a flow
|
|
619
|
+
# started event to the initial events.
|
|
620
|
+
# we can't use the current step to check this, as the current step is the
|
|
621
|
+
# first step in the flow -> other steps might link to this flow, so the
|
|
622
|
+
# only reliable way to check if we are starting a new flow is checking for
|
|
623
|
+
# the START_STEP meta step
|
|
600
624
|
initial_events.append(FlowStarted(flow.id, metadata=stack.current_context()))
|
|
601
625
|
|
|
602
626
|
if isinstance(step, CollectInformationFlowStep):
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import importlib.resources
|
|
2
2
|
import math
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
|
-
from typing import Any, Dict, List, Optional, Set,
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Text, Tuple
|
|
5
5
|
|
|
6
6
|
import structlog
|
|
7
7
|
import tiktoken
|
|
@@ -30,19 +30,18 @@ from rasa.engine.storage.storage import ModelStorage
|
|
|
30
30
|
from rasa.graph_components.providers.forms_provider import Forms
|
|
31
31
|
from rasa.graph_components.providers.responses_provider import Responses
|
|
32
32
|
from rasa.shared.constants import (
|
|
33
|
-
REQUIRED_SLOTS_KEY,
|
|
34
33
|
EMBEDDINGS_CONFIG_KEY,
|
|
35
34
|
LLM_CONFIG_KEY,
|
|
36
35
|
MODEL_CONFIG_KEY,
|
|
36
|
+
MODEL_GROUP_ID_CONFIG_KEY,
|
|
37
37
|
MODEL_NAME_CONFIG_KEY,
|
|
38
|
+
OPENAI_PROVIDER,
|
|
38
39
|
PROMPT_CONFIG_KEY,
|
|
39
40
|
PROVIDER_CONFIG_KEY,
|
|
40
|
-
|
|
41
|
+
REQUIRED_SLOTS_KEY,
|
|
41
42
|
TIMEOUT_CONFIG_KEY,
|
|
42
|
-
MODEL_GROUP_ID_CONFIG_KEY,
|
|
43
43
|
)
|
|
44
|
-
from rasa.shared.core.constants import ACTION_LISTEN_NAME
|
|
45
|
-
from rasa.shared.core.constants import ACTION_TRIGGER_CHITCHAT
|
|
44
|
+
from rasa.shared.core.constants import ACTION_LISTEN_NAME, ACTION_TRIGGER_CHITCHAT
|
|
46
45
|
from rasa.shared.core.domain import KEY_RESPONSES_TEXT, Domain
|
|
47
46
|
from rasa.shared.core.events import (
|
|
48
47
|
ActionExecuted,
|
|
@@ -75,9 +74,9 @@ from rasa.shared.utils.llm import (
|
|
|
75
74
|
embedder_factory,
|
|
76
75
|
get_prompt_template,
|
|
77
76
|
llm_factory,
|
|
77
|
+
resolve_model_client_config,
|
|
78
78
|
sanitize_message_for_prompt,
|
|
79
79
|
tracker_as_readable_transcript,
|
|
80
|
-
resolve_model_client_config,
|
|
81
80
|
)
|
|
82
81
|
from rasa.utils.log_utils import log_llm
|
|
83
82
|
from rasa.utils.ml_utils import (
|
|
@@ -1,39 +1,41 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
import copy
|
|
3
|
-
import zlib
|
|
4
2
|
|
|
5
3
|
import base64
|
|
4
|
+
import copy
|
|
6
5
|
import json
|
|
7
6
|
import logging
|
|
8
|
-
import
|
|
7
|
+
import zlib
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any, Dict, List, Optional, Text
|
|
9
10
|
|
|
11
|
+
import structlog
|
|
10
12
|
from tqdm import tqdm
|
|
11
|
-
from typing import Optional, Any, Dict, List, Text
|
|
12
|
-
from pathlib import Path
|
|
13
13
|
|
|
14
|
-
import rasa.utils.io
|
|
15
14
|
import rasa.shared.utils.io
|
|
15
|
+
import rasa.utils.io
|
|
16
|
+
from rasa.core.constants import (
|
|
17
|
+
DEFAULT_MAX_HISTORY,
|
|
18
|
+
MEMOIZATION_POLICY_PRIORITY,
|
|
19
|
+
POLICY_MAX_HISTORY,
|
|
20
|
+
POLICY_PRIORITY,
|
|
21
|
+
)
|
|
22
|
+
from rasa.core.featurizers.tracker_featurizers import (
|
|
23
|
+
FEATURIZER_FILE,
|
|
24
|
+
MaxHistoryTrackerFeaturizer,
|
|
25
|
+
TrackerFeaturizer,
|
|
26
|
+
)
|
|
27
|
+
from rasa.core.policies.policy import Policy, PolicyPrediction, SupportedData
|
|
16
28
|
from rasa.engine.graph import ExecutionContext
|
|
17
29
|
from rasa.engine.recipes.default_recipe import DefaultV1Recipe
|
|
18
30
|
from rasa.engine.storage.resource import Resource
|
|
19
31
|
from rasa.engine.storage.storage import ModelStorage
|
|
20
|
-
from rasa.shared.core.
|
|
32
|
+
from rasa.shared.core.constants import ACTION_LISTEN_NAME
|
|
33
|
+
from rasa.shared.core.domain import Domain, State
|
|
21
34
|
from rasa.shared.core.events import ActionExecuted
|
|
22
|
-
from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
|
|
23
|
-
from rasa.core.featurizers.tracker_featurizers import MaxHistoryTrackerFeaturizer
|
|
24
|
-
from rasa.core.featurizers.tracker_featurizers import FEATURIZER_FILE
|
|
25
|
-
from rasa.shared.exceptions import FileIOException
|
|
26
|
-
from rasa.core.policies.policy import PolicyPrediction, Policy, SupportedData
|
|
27
|
-
from rasa.shared.core.trackers import DialogueStateTracker
|
|
28
35
|
from rasa.shared.core.generator import TrackerWithCachedStates
|
|
36
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
37
|
+
from rasa.shared.exceptions import FileIOException
|
|
29
38
|
from rasa.shared.utils.io import is_logging_disabled
|
|
30
|
-
from rasa.core.constants import (
|
|
31
|
-
MEMOIZATION_POLICY_PRIORITY,
|
|
32
|
-
DEFAULT_MAX_HISTORY,
|
|
33
|
-
POLICY_MAX_HISTORY,
|
|
34
|
-
POLICY_PRIORITY,
|
|
35
|
-
)
|
|
36
|
-
from rasa.shared.core.constants import ACTION_LISTEN_NAME
|
|
37
39
|
|
|
38
40
|
logger = logging.getLogger(__name__)
|
|
39
41
|
structlogger = structlog.get_logger()
|