rasa-pro 3.12.0.dev1__py3-none-any.whl → 3.12.0.dev3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- 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 -497
- 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 -28
- 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 -81
- 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.dev1.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/constants.py +0 -7
- rasa_pro-3.12.0.dev1.dist-info/RECORD +0 -790
- {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/NOTICE +0 -0
- {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/WHEEL +0 -0
- {rasa_pro-3.12.0.dev1.dist-info → rasa_pro-3.12.0.dev3.dist-info}/entry_points.txt +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import re
|
|
3
4
|
from dataclasses import dataclass
|
|
4
5
|
from typing import Any, Dict, List
|
|
5
|
-
|
|
6
|
+
|
|
7
|
+
from rasa.dialogue_understanding.commands.command import Command
|
|
6
8
|
from rasa.dialogue_understanding.patterns.repeat import (
|
|
7
9
|
RepeatBotMessagesPatternFlowStackFrame,
|
|
8
10
|
)
|
|
@@ -54,7 +56,17 @@ class RepeatBotMessagesCommand(Command):
|
|
|
54
56
|
return hash(self.command())
|
|
55
57
|
|
|
56
58
|
def __eq__(self, other: object) -> bool:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
return isinstance(other, RepeatBotMessagesCommand)
|
|
60
|
+
|
|
61
|
+
def to_dsl(self) -> str:
|
|
62
|
+
"""Converts the command to a DSL string."""
|
|
63
|
+
return "RepeatLastBotMessages()"
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def from_dsl(cls, match: re.Match, **kwargs: Any) -> RepeatBotMessagesCommand:
|
|
67
|
+
"""Converts the DSL string to a command."""
|
|
68
|
+
return RepeatBotMessagesCommand()
|
|
59
69
|
|
|
60
|
-
|
|
70
|
+
@staticmethod
|
|
71
|
+
def regex_pattern() -> str:
|
|
72
|
+
return r"RepeatLastBotMessages\(\)"
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Any, Dict, List
|
|
5
5
|
|
|
6
|
-
from rasa.dialogue_understanding.commands import Command
|
|
6
|
+
from rasa.dialogue_understanding.commands.command import Command
|
|
7
7
|
from rasa.dialogue_understanding.patterns.restart import RestartPatternFlowStackFrame
|
|
8
8
|
from rasa.shared.core.events import Event
|
|
9
9
|
from rasa.shared.core.flows import FlowsList
|
|
@@ -52,7 +52,4 @@ class RestartCommand(Command):
|
|
|
52
52
|
return hash(self.command())
|
|
53
53
|
|
|
54
54
|
def __eq__(self, other: object) -> bool:
|
|
55
|
-
|
|
56
|
-
return False
|
|
57
|
-
|
|
58
|
-
return True
|
|
55
|
+
return isinstance(other, RestartCommand)
|
|
@@ -2,7 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Any, Dict, List
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
from rasa.dialogue_understanding.commands.command import Command
|
|
6
7
|
from rasa.shared.core.events import Event, SessionEnded
|
|
7
8
|
from rasa.shared.core.flows import FlowsList
|
|
8
9
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
@@ -55,7 +56,4 @@ class SessionEndCommand(Command):
|
|
|
55
56
|
return hash(self.command())
|
|
56
57
|
|
|
57
58
|
def __eq__(self, other: object) -> bool:
|
|
58
|
-
|
|
59
|
-
return False
|
|
60
|
-
|
|
61
|
-
return True
|
|
59
|
+
return isinstance(other, SessionEndCommand)
|
|
@@ -2,7 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Any, Dict, List
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
from rasa.dialogue_understanding.commands.command import Command
|
|
6
7
|
from rasa.dialogue_understanding.patterns.session_start import (
|
|
7
8
|
SessionStartPatternFlowStackFrame,
|
|
8
9
|
)
|
|
@@ -53,7 +54,4 @@ class SessionStartCommand(Command):
|
|
|
53
54
|
return hash(self.command())
|
|
54
55
|
|
|
55
56
|
def __eq__(self, other: object) -> bool:
|
|
56
|
-
|
|
57
|
-
return False
|
|
58
|
-
|
|
59
|
-
return True
|
|
57
|
+
return isinstance(other, SessionStartCommand)
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import re
|
|
3
4
|
from dataclasses import dataclass
|
|
4
5
|
from enum import Enum
|
|
5
6
|
from typing import Any, Dict, List
|
|
6
7
|
|
|
7
8
|
import structlog
|
|
8
|
-
|
|
9
|
+
|
|
10
|
+
from rasa.dialogue_understanding.commands.command import Command
|
|
11
|
+
from rasa.dialogue_understanding.commands.utils import (
|
|
12
|
+
clean_extracted_value,
|
|
13
|
+
get_nullable_slot_value,
|
|
14
|
+
)
|
|
9
15
|
from rasa.dialogue_understanding.patterns.collect_information import (
|
|
10
16
|
CollectInformationPatternFlowStackFrame,
|
|
11
17
|
)
|
|
@@ -44,8 +50,8 @@ def get_flows_predicted_to_start_from_tracker(
|
|
|
44
50
|
The flows that are predicted to start from the current state.
|
|
45
51
|
"""
|
|
46
52
|
from rasa.dialogue_understanding.processor.command_processor import (
|
|
47
|
-
get_commands_from_tracker,
|
|
48
53
|
filter_start_flow_commands,
|
|
54
|
+
get_commands_from_tracker,
|
|
49
55
|
)
|
|
50
56
|
|
|
51
57
|
commands = get_commands_from_tracker(tracker)
|
|
@@ -157,4 +163,22 @@ class SetSlotCommand(Command):
|
|
|
157
163
|
if not isinstance(other, SetSlotCommand):
|
|
158
164
|
return False
|
|
159
165
|
|
|
160
|
-
return
|
|
166
|
+
return (
|
|
167
|
+
str(other.value).lower() == str(self.value).lower()
|
|
168
|
+
and other.name == self.name
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
def to_dsl(self) -> str:
|
|
172
|
+
"""Converts the command to a DSL string."""
|
|
173
|
+
return f"SetSlot({self.name}, {self.value})"
|
|
174
|
+
|
|
175
|
+
@classmethod
|
|
176
|
+
def from_dsl(cls, match: re.Match, **kwargs: Any) -> SetSlotCommand:
|
|
177
|
+
"""Converts the DSL string to a command."""
|
|
178
|
+
slot_name = str(match.group(1).strip())
|
|
179
|
+
slot_value = clean_extracted_value(match.group(2))
|
|
180
|
+
return SetSlotCommand(name=slot_name, value=get_nullable_slot_value(slot_value))
|
|
181
|
+
|
|
182
|
+
@staticmethod
|
|
183
|
+
def regex_pattern() -> str:
|
|
184
|
+
return r"""SetSlot\(['"]?([a-zA-Z_][a-zA-Z0-9_-]*)['"]?, ?['"]?(.*)['"]?\)"""
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import re
|
|
3
4
|
from dataclasses import dataclass
|
|
4
5
|
from typing import Any, Dict, List
|
|
5
6
|
|
|
6
7
|
import structlog
|
|
7
|
-
|
|
8
|
+
|
|
9
|
+
from rasa.dialogue_understanding.commands.command import Command
|
|
8
10
|
from rasa.dialogue_understanding.patterns.skip_question import (
|
|
9
11
|
SkipQuestionPatternFlowStackFrame,
|
|
10
12
|
)
|
|
@@ -69,7 +71,17 @@ class SkipQuestionCommand(Command):
|
|
|
69
71
|
return hash(self.command())
|
|
70
72
|
|
|
71
73
|
def __eq__(self, other: object) -> bool:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
return isinstance(other, SkipQuestionCommand)
|
|
75
|
+
|
|
76
|
+
def to_dsl(self) -> str:
|
|
77
|
+
"""Converts the command to a DSL string."""
|
|
78
|
+
return "SkipQuestion()"
|
|
79
|
+
|
|
80
|
+
@classmethod
|
|
81
|
+
def from_dsl(cls, match: re.Match, **kwargs: Any) -> SkipQuestionCommand:
|
|
82
|
+
"""Converts the DSL string to a command."""
|
|
83
|
+
return SkipQuestionCommand()
|
|
74
84
|
|
|
75
|
-
|
|
85
|
+
@staticmethod
|
|
86
|
+
def regex_pattern() -> str:
|
|
87
|
+
return r"SkipQuestion\(\)"
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import re
|
|
3
4
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any, Dict, List
|
|
5
|
+
from typing import Any, Dict, List, Optional
|
|
5
6
|
|
|
6
7
|
import structlog
|
|
7
|
-
|
|
8
|
+
|
|
9
|
+
from rasa.dialogue_understanding.commands.command import Command
|
|
8
10
|
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
9
11
|
FlowStackFrameType,
|
|
10
12
|
UserFlowStackFrame,
|
|
@@ -105,3 +107,16 @@ class StartFlowCommand(Command):
|
|
|
105
107
|
return False
|
|
106
108
|
|
|
107
109
|
return other.flow == self.flow
|
|
110
|
+
|
|
111
|
+
def to_dsl(self) -> str:
|
|
112
|
+
"""Converts the command to a DSL string."""
|
|
113
|
+
return f"StartFlow({self.flow})"
|
|
114
|
+
|
|
115
|
+
@classmethod
|
|
116
|
+
def from_dsl(cls, match: re.Match, **kwargs: Any) -> Optional[StartFlowCommand]:
|
|
117
|
+
"""Converts the DSL string to a command."""
|
|
118
|
+
return StartFlowCommand(flow=str(match.group(1).strip()))
|
|
119
|
+
|
|
120
|
+
@staticmethod
|
|
121
|
+
def regex_pattern() -> str:
|
|
122
|
+
return r"StartFlow\(['\"]?([a-zA-Z0-9_-]+)['\"]?\)"
|
|
@@ -2,7 +2,8 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Any, Dict, List
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
from rasa.dialogue_understanding.commands.command import Command
|
|
6
7
|
from rasa.dialogue_understanding.patterns.user_silence import (
|
|
7
8
|
UserSilencePatternFlowStackFrame,
|
|
8
9
|
)
|
|
@@ -53,7 +54,4 @@ class UserSilenceCommand(Command):
|
|
|
53
54
|
return hash(self.command())
|
|
54
55
|
|
|
55
56
|
def __eq__(self, other: object) -> bool:
|
|
56
|
-
|
|
57
|
-
return False
|
|
58
|
-
|
|
59
|
-
return True
|
|
57
|
+
return isinstance(other, UserSilenceCommand)
|
|
@@ -1,45 +1,64 @@
|
|
|
1
|
-
from typing import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
from rasa.dialogue_understanding.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
1
|
+
from typing import TYPE_CHECKING, List, Optional, Union
|
|
2
|
+
|
|
3
|
+
import structlog
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from rasa.dialogue_understanding.commands import StartFlowCommand
|
|
7
|
+
from rasa.shared.core.flows import FlowsList
|
|
8
|
+
|
|
9
|
+
structlogger = structlog.get_logger()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def start_flow_by_name(
|
|
13
|
+
flow_name: str, flows: "FlowsList"
|
|
14
|
+
) -> Optional["StartFlowCommand"]:
|
|
15
|
+
from rasa.dialogue_understanding.commands import StartFlowCommand
|
|
16
|
+
|
|
17
|
+
if flow_name in flows.user_flow_ids:
|
|
18
|
+
return StartFlowCommand(flow=flow_name)
|
|
19
|
+
else:
|
|
20
|
+
structlogger.debug(
|
|
21
|
+
"command_parser.start_flow_by_name.invalid_flow_id", flow=flow_name
|
|
22
|
+
)
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def extract_cleaned_options(options_str: str) -> List[str]:
|
|
27
|
+
"""Extract and clean options from a string."""
|
|
28
|
+
return sorted(
|
|
29
|
+
opt.strip().strip('"').strip("'")
|
|
30
|
+
for opt in options_str.split(",")
|
|
31
|
+
if opt.strip()
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def is_none_value(value: str) -> bool:
|
|
36
|
+
"""Check if the value is a none value."""
|
|
37
|
+
if not value:
|
|
38
|
+
return True
|
|
39
|
+
return value in {
|
|
40
|
+
"[missing information]",
|
|
41
|
+
"[missing]",
|
|
42
|
+
"None",
|
|
43
|
+
"undefined",
|
|
44
|
+
"null",
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def clean_extracted_value(value: str) -> str:
|
|
49
|
+
"""Clean up the extracted value from the llm."""
|
|
50
|
+
# replace any combination of single quotes, double quotes, and spaces
|
|
51
|
+
# from the beginning and end of the string
|
|
52
|
+
return value.strip("'\" ")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def get_nullable_slot_value(slot_value: str) -> Union[str, None]:
|
|
56
|
+
"""Get the slot value or None if the value is a none value.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
slot_value: the value to coerce
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
The slot value or None if the value is a none value.
|
|
63
|
+
"""
|
|
64
|
+
return slot_value if not is_none_value(slot_value) else None
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
RASA_RECORD_COMMANDS_AND_PROMPTS_ENV_VAR_NAME = "RASA_RECORD_COMMANDS_AND_PROMPTS"
|
|
@@ -5,14 +5,14 @@ import structlog
|
|
|
5
5
|
|
|
6
6
|
from rasa.dialogue_understanding.commands import (
|
|
7
7
|
Command,
|
|
8
|
+
ErrorCommand,
|
|
8
9
|
SetSlotCommand,
|
|
9
10
|
StartFlowCommand,
|
|
10
|
-
ErrorCommand,
|
|
11
11
|
)
|
|
12
12
|
from rasa.dialogue_understanding.commands.set_slot_command import SetSlotExtractor
|
|
13
13
|
from rasa.shared.constants import (
|
|
14
|
-
RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG,
|
|
15
14
|
RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_EMPTY,
|
|
15
|
+
RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG,
|
|
16
16
|
)
|
|
17
17
|
from rasa.shared.core.constants import SlotMappingType
|
|
18
18
|
from rasa.shared.core.domain import Domain
|
|
@@ -22,10 +22,6 @@ from rasa.shared.core.trackers import DialogueStateTracker
|
|
|
22
22
|
from rasa.shared.nlu.constants import (
|
|
23
23
|
COMMANDS,
|
|
24
24
|
TEXT,
|
|
25
|
-
PREDICTED_COMMANDS,
|
|
26
|
-
PROMPTS,
|
|
27
|
-
KEY_USER_PROMPT,
|
|
28
|
-
KEY_SYSTEM_PROMPT,
|
|
29
25
|
)
|
|
30
26
|
from rasa.shared.nlu.training_data.message import Message
|
|
31
27
|
from rasa.shared.utils.llm import DEFAULT_MAX_USER_INPUT_CHARACTERS
|
|
@@ -349,116 +345,3 @@ class CommandGenerator:
|
|
|
349
345
|
]
|
|
350
346
|
|
|
351
347
|
return filtered_commands
|
|
352
|
-
|
|
353
|
-
@staticmethod
|
|
354
|
-
def _add_commands_to_message_parse_data(
|
|
355
|
-
message: Message, component_name: str, commands: List[Command]
|
|
356
|
-
) -> None:
|
|
357
|
-
"""Add commands to the message parse data.
|
|
358
|
-
|
|
359
|
-
Commands are only added in case the flag 'record_commands_and_prompts' is set.
|
|
360
|
-
Example of predicted commands in the message parse data:
|
|
361
|
-
Message(data={
|
|
362
|
-
PREDICTED_COMMANDS: {
|
|
363
|
-
"MultiStepLLMCommandGenerator": [
|
|
364
|
-
{"command": "set_slot", "name": "slot_name", "value": "slot_value"},
|
|
365
|
-
],
|
|
366
|
-
"NLUCommandAdapter": [
|
|
367
|
-
{"command": "start_flow", "name": "test_flow"},
|
|
368
|
-
]
|
|
369
|
-
}
|
|
370
|
-
})
|
|
371
|
-
"""
|
|
372
|
-
from rasa.dialogue_understanding.utils import record_commands_and_prompts
|
|
373
|
-
|
|
374
|
-
# only set commands if the flag "record_commands_and_prompts" is set to True
|
|
375
|
-
if not record_commands_and_prompts:
|
|
376
|
-
return
|
|
377
|
-
|
|
378
|
-
commands_as_dict = [command.as_dict() for command in commands]
|
|
379
|
-
|
|
380
|
-
if message.get(PREDICTED_COMMANDS) is not None:
|
|
381
|
-
predicted_commands = message.get(PREDICTED_COMMANDS)
|
|
382
|
-
if component_name in predicted_commands:
|
|
383
|
-
predicted_commands[component_name].extend(commands_as_dict)
|
|
384
|
-
else:
|
|
385
|
-
predicted_commands[component_name] = commands_as_dict
|
|
386
|
-
else:
|
|
387
|
-
predicted_commands = {component_name: commands_as_dict}
|
|
388
|
-
|
|
389
|
-
message.set(
|
|
390
|
-
PREDICTED_COMMANDS,
|
|
391
|
-
predicted_commands,
|
|
392
|
-
add_to_output=True,
|
|
393
|
-
)
|
|
394
|
-
|
|
395
|
-
@staticmethod
|
|
396
|
-
def _add_prompt_to_message_parse_data(
|
|
397
|
-
message: Message,
|
|
398
|
-
component_name: str,
|
|
399
|
-
prompt_name: str,
|
|
400
|
-
user_prompt: str,
|
|
401
|
-
system_prompt: Optional[str] = None,
|
|
402
|
-
) -> None:
|
|
403
|
-
"""Add prompt to the message parse data.
|
|
404
|
-
|
|
405
|
-
Prompt is only added in case the flag 'record_commands_and_prompts' is set.
|
|
406
|
-
Example of prompts in the message parse data:
|
|
407
|
-
Message(data={
|
|
408
|
-
PROMPTS: {
|
|
409
|
-
"MultiStepLLMCommandGenerator": [
|
|
410
|
-
(
|
|
411
|
-
"fill_slots_prompt",
|
|
412
|
-
{
|
|
413
|
-
"user_prompt": <prompt content>",
|
|
414
|
-
"system_prompt": <prompt content>"
|
|
415
|
-
}
|
|
416
|
-
),
|
|
417
|
-
(
|
|
418
|
-
"handle_flows_prompt",
|
|
419
|
-
{
|
|
420
|
-
"user_prompt": <prompt content>",
|
|
421
|
-
"system_prompt": <prompt content>"
|
|
422
|
-
}
|
|
423
|
-
),
|
|
424
|
-
],
|
|
425
|
-
"SingleStepLLMCommandGenerator": [
|
|
426
|
-
(
|
|
427
|
-
"prompt_template",
|
|
428
|
-
{
|
|
429
|
-
"user_prompt": <prompt content>",
|
|
430
|
-
"system_prompt": <prompt content>"
|
|
431
|
-
}
|
|
432
|
-
),
|
|
433
|
-
]
|
|
434
|
-
}
|
|
435
|
-
})
|
|
436
|
-
"""
|
|
437
|
-
from rasa.dialogue_understanding.utils import record_commands_and_prompts
|
|
438
|
-
|
|
439
|
-
# only set prompt if the flag "record_commands_and_prompts" is set to True
|
|
440
|
-
if not record_commands_and_prompts:
|
|
441
|
-
return
|
|
442
|
-
|
|
443
|
-
prompt_tuple = (
|
|
444
|
-
prompt_name,
|
|
445
|
-
{
|
|
446
|
-
KEY_USER_PROMPT: user_prompt,
|
|
447
|
-
**({KEY_SYSTEM_PROMPT: system_prompt} if system_prompt else {}),
|
|
448
|
-
},
|
|
449
|
-
)
|
|
450
|
-
|
|
451
|
-
if message.get(PROMPTS) is not None:
|
|
452
|
-
prompts = message.get(PROMPTS)
|
|
453
|
-
if component_name in prompts:
|
|
454
|
-
prompts[component_name].append(prompt_tuple)
|
|
455
|
-
else:
|
|
456
|
-
prompts[component_name] = [prompt_tuple]
|
|
457
|
-
else:
|
|
458
|
-
prompts = {component_name: [prompt_tuple]}
|
|
459
|
-
|
|
460
|
-
message.set(
|
|
461
|
-
PROMPTS,
|
|
462
|
-
prompts,
|
|
463
|
-
add_to_output=True,
|
|
464
|
-
)
|