rasa-pro 3.11.4__py3-none-any.whl → 3.12.0__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.
- README.md +10 -13
- 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 +17 -11
- rasa/anonymization/anonymization_rule_orchestrator.py +2 -3
- rasa/cli/arguments/data.py +2 -2
- rasa/cli/arguments/default_arguments.py +1 -1
- 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 +20 -3
- rasa/cli/dialogue_understanding_test.py +386 -0
- rasa/cli/evaluate.py +1 -1
- rasa/cli/export.py +6 -6
- rasa/cli/inspect.py +20 -1
- rasa/cli/interactive.py +4 -5
- rasa/cli/llm_fine_tuning.py +51 -16
- rasa/cli/markers.py +1 -2
- rasa/cli/project_templates/calm/actions/add_contact.py +1 -1
- rasa/cli/project_templates/calm/config.yml +2 -2
- rasa/cli/project_templates/calm/domain/list_contacts.yml +1 -2
- rasa/cli/project_templates/calm/domain/remove_contact.yml +1 -2
- rasa/cli/project_templates/calm/domain/shared.yml +1 -4
- rasa/cli/project_templates/calm/endpoints.yml +2 -2
- rasa/cli/project_templates/tutorial/actions/actions.py +3 -2
- rasa/cli/shell.py +5 -6
- 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/train.py +3 -0
- rasa/cli/utils.py +25 -5
- rasa/constants.py +0 -1
- rasa/core/__init__.py +0 -1
- rasa/core/actions/action.py +137 -208
- rasa/core/actions/action_handle_digressions.py +164 -0
- 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 +18 -6
- 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/custom_action_executor.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +1 -0
- rasa/core/actions/forms.py +22 -15
- 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 +7 -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 +80 -24
- rasa/core/channels/facebook.py +5 -5
- rasa/core/channels/hangouts.py +7 -8
- rasa/core/channels/inspector/dist/assets/Tableau10-1b767f5e.js +1 -0
- rasa/core/channels/inspector/dist/assets/arc-9f1365dc.js +1 -0
- rasa/core/channels/inspector/dist/assets/blockDiagram-38ab4fdb-e0f81b12.js +118 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-3d4e48cf-9deaee1c.js +10 -0
- rasa/core/channels/inspector/dist/assets/channel-44956714.js +1 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-70f12bd4-20450a96.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-f2320105-749d2abf.js +2 -0
- rasa/core/channels/inspector/dist/assets/clone-a9475142.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-62fc7601-89c73b31.js → createText-2e5e7dd3-bef0b38c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/edges-e0da2a9e-943801a7.js +4 -0
- rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-907e0440.js → erDiagram-9861fffd-d523a948.js} +4 -4
- rasa/core/channels/inspector/dist/assets/flowDb-956e92f1-54e4cf19.js +10 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-66a62f08-48bfbbe8.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-43fa749a.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-4a651766-17c30827.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-c361ad54-43086f2d.js +257 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-72cf32ee-5c8b693e.js +70 -0
- rasa/core/channels/inspector/dist/assets/graph-41a90d26.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-3862675e-b43eeae9.js +1 -0
- rasa/core/channels/inspector/dist/assets/{index-e793d777.js → index-e8affe45.js} +201 -196
- rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-8ceba4db.js → infoDiagram-f8f76790-0b20676b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-960d3809.js → journeyDiagram-49397b02-39bce7b5.js} +4 -4
- rasa/core/channels/inspector/dist/assets/katex-498eb57e.js +261 -0
- rasa/core/channels/inspector/dist/assets/layout-dc8eeea4.js +1 -0
- rasa/core/channels/inspector/dist/assets/{line-eeccc4e2.js → line-c4d2e756.js} +1 -1
- rasa/core/channels/inspector/dist/assets/linear-86f6f2d9.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-fc14e90a-4216f771.js +312 -0
- rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-dc9b5e1b.js → pieDiagram-8a3498a8-1a0cfa96.js} +7 -7
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-a08cba6d.js → quadrantDiagram-120e2f19-f91e67cf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-87242b9e.js → requirementDiagram-deff3bca-d4046bed.js} +2 -2
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-04a897e0-2cf6d1d7.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-704730f1-751ac4f5.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-587899a1-f734f4d4.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-d93cdb3a-91c65710.js +1 -0
- rasa/core/channels/inspector/dist/assets/{styles-9c745c82-cef936a6.js → styles-6aaf32cf-e0cff7be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/styles-9a916d00-c8029e5d.js +160 -0
- rasa/core/channels/inspector/dist/assets/styles-c10674c1-114f312a.js +116 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-08f97a94-b7b9dc00.js +1 -0
- rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-0d39bdb2.js → timeline-definition-85554ec2-9536d189.js} +3 -3
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-a03fa445.js → xychartDiagram-e933f94c-bf3b0f36.js} +3 -3
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +11 -3
- rasa/core/channels/inspector/src/App.tsx +15 -2
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +31 -0
- rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +68 -0
- rasa/core/channels/inspector/src/components/Welcome.tsx +19 -13
- rasa/core/channels/inspector/yarn.lock +94 -99
- 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 +8 -28
- rasa/core/channels/studio_chat.py +212 -0
- rasa/core/channels/telegram.py +105 -55
- rasa/core/channels/twilio.py +3 -3
- rasa/core/channels/vier_cvg.py +2 -2
- rasa/core/channels/voice_ready/audiocodes.py +51 -32
- 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 +2 -2
- rasa/core/channels/voice_stream/asr/asr_engine.py +12 -6
- rasa/core/channels/voice_stream/asr/asr_event.py +5 -0
- rasa/core/channels/voice_stream/asr/azure.py +16 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +76 -19
- rasa/core/channels/voice_stream/audiocodes.py +292 -0
- rasa/core/channels/voice_stream/browser_audio.py +14 -7
- rasa/core/channels/voice_stream/call_state.py +6 -2
- rasa/core/channels/voice_stream/genesys.py +320 -0
- rasa/core/channels/voice_stream/tts/azure.py +13 -5
- rasa/core/channels/voice_stream/tts/cartesia.py +34 -14
- 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 +12 -8
- rasa/core/channels/voice_stream/util.py +1 -1
- rasa/core/channels/voice_stream/voice_channel.py +100 -56
- rasa/core/channels/webexteams.py +3 -4
- rasa/core/constants.py +2 -0
- 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 +12 -9
- rasa/core/nlg/__init__.py +1 -1
- rasa/core/nlg/callback.py +2 -3
- rasa/core/nlg/contextual_response_rephraser.py +82 -14
- rasa/core/nlg/generator.py +85 -17
- rasa/core/nlg/interpolator.py +4 -3
- rasa/core/nlg/response.py +9 -7
- rasa/core/nlg/summarize.py +1 -0
- rasa/core/nlg/translate.py +55 -0
- rasa/core/persistor.py +3 -3
- rasa/core/policies/ensemble.py +10 -9
- rasa/core/policies/enterprise_search_policy.py +87 -21
- rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +1 -1
- rasa/core/policies/flow_policy.py +13 -14
- rasa/core/policies/flows/flow_executor.py +85 -55
- 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 +167 -74
- rasa/core/run.py +5 -4
- 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 +138 -49
- 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 +38 -1
- rasa/dialogue_understanding/commands/cancel_flow_command.py +96 -9
- rasa/dialogue_understanding/commands/change_flow_command.py +36 -2
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +36 -4
- rasa/dialogue_understanding/commands/clarify_command.py +46 -4
- rasa/dialogue_understanding/commands/command.py +3 -2
- rasa/dialogue_understanding/commands/command_syntax_manager.py +55 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +14 -5
- 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/handle_digressions_command.py +144 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +34 -4
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +36 -4
- rasa/dialogue_understanding/commands/noop_command.py +2 -1
- rasa/dialogue_understanding/commands/prompt_command.py +94 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +34 -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 +55 -16
- rasa/dialogue_understanding/commands/skip_question_command.py +34 -4
- rasa/dialogue_understanding/commands/start_flow_command.py +78 -2
- rasa/dialogue_understanding/commands/user_silence_command.py +3 -5
- rasa/dialogue_understanding/commands/utils.py +126 -43
- rasa/dialogue_understanding/constants.py +2 -0
- rasa/dialogue_understanding/generator/__init__.py +2 -0
- rasa/dialogue_understanding/generator/command_generator.py +120 -79
- rasa/dialogue_understanding/generator/command_parser.py +245 -0
- rasa/dialogue_understanding/generator/constants.py +12 -4
- rasa/dialogue_understanding/generator/flow_retrieval.py +7 -7
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +187 -59
- rasa/dialogue_understanding/generator/llm_command_generator.py +6 -3
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +106 -110
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +53 -11
- rasa/dialogue_understanding/generator/prompt_templates/__init__.py +0 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +58 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +57 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +574 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +41 -386
- rasa/dialogue_understanding/generator/utils.py +76 -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 +7 -4
- rasa/dialogue_understanding/patterns/completed.py +1 -1
- rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -1
- rasa/dialogue_understanding/patterns/correction.py +17 -3
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +78 -2
- rasa/dialogue_understanding/patterns/handle_digressions.py +81 -0
- 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/patterns/validate_slot.py +65 -0
- rasa/dialogue_understanding/processor/command_processor.py +193 -43
- 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 +56 -10
- rasa/dialogue_understanding/utils.py +164 -0
- rasa/dialogue_understanding_test/README.md +429 -0
- rasa/dialogue_understanding_test/__init__.py +0 -0
- rasa/dialogue_understanding_test/command_comparison.py +60 -0
- rasa/dialogue_understanding_test/command_metric_calculation.py +122 -0
- rasa/dialogue_understanding_test/constants.py +22 -0
- rasa/dialogue_understanding_test/du_test_case.py +448 -0
- rasa/dialogue_understanding_test/du_test_result.py +390 -0
- rasa/dialogue_understanding_test/du_test_runner.py +322 -0
- rasa/dialogue_understanding_test/du_test_schema.yml +161 -0
- rasa/dialogue_understanding_test/io.py +443 -0
- 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 +77 -0
- rasa/e2e_test/aggregate_test_stats_calculator.py +1 -1
- rasa/e2e_test/assertions.py +202 -175
- rasa/e2e_test/assertions_schema.yml +6 -0
- rasa/e2e_test/constants.py +16 -1
- rasa/e2e_test/e2e_config.py +102 -41
- rasa/e2e_test/e2e_config_schema.yml +28 -10
- rasa/e2e_test/e2e_test_case.py +5 -5
- 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 +143 -38
- rasa/e2e_test/llm_judge_prompts/answer_relevance_prompt_template.jinja2 +93 -0
- rasa/e2e_test/llm_judge_prompts/groundedness_prompt_template.jinja2 +169 -0
- rasa/e2e_test/stub_custom_action.py +1 -1
- rasa/e2e_test/utils/generative_assertions.py +243 -0
- rasa/e2e_test/utils/io.py +123 -93
- rasa/e2e_test/utils/validation.py +101 -3
- rasa/engine/caching.py +5 -7
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +3 -2
- rasa/engine/language.py +182 -0
- rasa/engine/recipes/config_files/default_config.yml +4 -0
- rasa/engine/recipes/default_components.py +13 -15
- rasa/engine/recipes/default_recipe.py +65 -49
- rasa/engine/recipes/graph_recipe.py +10 -7
- 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 +6 -4
- rasa/engine/storage/resource.py +2 -1
- rasa/engine/storage/storage.py +8 -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 +36 -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 +19 -14
- rasa/jupyter.py +2 -2
- rasa/llm_fine_tuning/annotation_module.py +4 -4
- rasa/llm_fine_tuning/conversations.py +5 -33
- rasa/llm_fine_tuning/llm_data_preparation_module.py +6 -4
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -4
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +18 -13
- rasa/llm_fine_tuning/paraphrasing_module.py +6 -2
- rasa/llm_fine_tuning/storage.py +3 -3
- rasa/llm_fine_tuning/train_test_split_module.py +27 -27
- rasa/llm_fine_tuning/utils.py +7 -0
- 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 +13 -10
- rasa/model_manager/socket_bridge.py +15 -9
- 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 -9
- rasa/model_service.py +5 -6
- rasa/model_testing.py +13 -15
- rasa/model_training.py +29 -29
- 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 +6 -3
- rasa/shared/constants.py +45 -18
- rasa/shared/core/command_payload_reader.py +15 -7
- rasa/shared/core/constants.py +34 -4
- rasa/shared/core/conversation.py +1 -2
- rasa/shared/core/domain.py +19 -20
- rasa/shared/core/events.py +60 -39
- rasa/shared/core/flows/__init__.py +0 -1
- rasa/shared/core/flows/constants.py +11 -0
- rasa/shared/core/flows/flow.py +107 -26
- rasa/shared/core/flows/flow_step.py +4 -3
- rasa/shared/core/flows/flow_step_links.py +1 -2
- rasa/shared/core/flows/flow_step_sequence.py +1 -1
- rasa/shared/core/flows/flows_list.py +3 -3
- rasa/shared/core/flows/flows_yaml_schema.json +69 -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 +1 -1
- rasa/shared/core/flows/steps/call.py +1 -1
- rasa/shared/core/flows/steps/collect.py +22 -40
- rasa/shared/core/flows/steps/internal.py +1 -1
- rasa/shared/core/flows/steps/link.py +1 -1
- rasa/shared/core/flows/steps/no_operation.py +2 -2
- rasa/shared/core/flows/steps/set_slots.py +1 -1
- rasa/shared/core/flows/utils.py +44 -4
- rasa/shared/core/flows/validation.py +4 -6
- rasa/shared/core/generator.py +20 -21
- rasa/shared/core/slot_mappings.py +360 -121
- rasa/shared/core/slots.py +163 -6
- rasa/shared/core/trackers.py +108 -33
- 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/importer.py +58 -2
- rasa/shared/importers/rasa.py +5 -6
- rasa/shared/importers/utils.py +1 -1
- rasa/shared/nlu/constants.py +9 -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 +19 -11
- 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_entra_id_config.py +541 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +150 -15
- rasa/shared/providers/_configs/client_config.py +3 -1
- rasa/shared/providers/_configs/default_litellm_client_config.py +9 -7
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +13 -11
- rasa/shared/providers/_configs/litellm_router_client_config.py +12 -10
- rasa/shared/providers/_configs/model_group_config.py +8 -5
- rasa/shared/providers/_configs/oauth_config.py +33 -0
- rasa/shared/providers/_configs/openai_client_config.py +14 -12
- rasa/shared/providers/_configs/rasa_llm_client_config.py +5 -3
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +12 -11
- 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/constants.py +6 -0
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +1 -1
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +32 -7
- rasa/shared/providers/embedding/embedding_client.py +1 -1
- rasa/shared/providers/embedding/litellm_router_embedding_client.py +5 -2
- rasa/shared/providers/llm/_base_litellm_client.py +43 -18
- rasa/shared/providers/llm/azure_openai_llm_client.py +90 -34
- rasa/shared/providers/llm/default_litellm_llm_client.py +4 -2
- rasa/shared/providers/llm/litellm_router_llm_client.py +32 -9
- rasa/shared/providers/llm/llm_client.py +24 -8
- rasa/shared/providers/llm/llm_response.py +61 -2
- rasa/shared/providers/llm/openai_llm_client.py +11 -5
- rasa/shared/providers/llm/rasa_llm_client.py +17 -14
- rasa/shared/providers/llm/self_hosted_llm_client.py +35 -15
- rasa/shared/providers/mappings.py +18 -19
- rasa/shared/providers/router/_base_litellm_router_client.py +48 -15
- rasa/shared/providers/router/router_client.py +3 -1
- rasa/shared/utils/cli.py +1 -1
- rasa/shared/utils/common.py +15 -1
- rasa/shared/utils/constants.py +3 -0
- 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 +100 -18
- rasa/shared/utils/pykwalify_extensions.py +25 -1
- rasa/shared/utils/schemas/domain.yml +26 -1
- rasa/shared/utils/schemas/events.py +1 -1
- rasa/shared/utils/yaml.py +24 -20
- 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 +21 -5
- rasa/telemetry.py +127 -48
- rasa/tracing/config.py +5 -3
- rasa/tracing/constants.py +12 -0
- rasa/tracing/instrumentation/attribute_extractors.py +92 -14
- rasa/tracing/instrumentation/instrumentation.py +61 -5
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -1
- rasa/tracing/instrumentation/metrics.py +52 -11
- rasa/tracing/metric_instrument_provider.py +54 -14
- rasa/utils/common.py +12 -24
- 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 +594 -115
- rasa/version.py +1 -1
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/METADATA +23 -26
- rasa_pro-3.12.0.dist-info/RECORD +829 -0
- rasa/core/channels/inspector/dist/assets/arc-632a63ec.js +0 -1
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-081e0df4.js +0 -10
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-3df0afc2.js +0 -2
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-8c5ed31e.js +0 -2
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-4fc48c3e.js +0 -4
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-9ec53a3c.js +0 -6
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-41da787a.js +0 -4
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-8bea338b.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-ce370633.js +0 -139
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-90a36523.js +0 -266
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-41e1aa3f.js +0 -70
- rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-e6f2af62.js +0 -1
- rasa/core/channels/inspector/dist/assets/layout-498807d8.js +0 -1
- rasa/core/channels/inspector/dist/assets/linear-8a078617.js +0 -1
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-396d17dd.js +0 -109
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-53f6f391.js +0 -8
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-715c9c20.js +0 -122
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-2e8fb31f.js +0 -1
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-7e2d2aa0.js +0 -1
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-4420cea6.js +0 -110
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-28676cf4.js +0 -159
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-151251e9.js +0 -1
- rasa_pro-3.11.4.dist-info/RECORD +0 -779
- /rasa/dialogue_understanding/generator/{single_step → prompt_templates}/command_prompt_template.jinja2 +0 -0
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/entry_points.txt +0 -0
rasa/shared/core/slots.py
CHANGED
|
@@ -1,16 +1,24 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import logging
|
|
2
4
|
from abc import ABC, abstractmethod
|
|
5
|
+
from dataclasses import dataclass
|
|
3
6
|
from typing import Any, Dict, List, Optional, Text, Type
|
|
4
7
|
|
|
8
|
+
from pydantic import BaseModel, Field
|
|
9
|
+
|
|
5
10
|
import rasa.shared.core.constants
|
|
6
|
-
from rasa.shared.exceptions import RasaException
|
|
7
11
|
import rasa.shared.utils.common
|
|
8
12
|
import rasa.shared.utils.io
|
|
9
13
|
from rasa.shared.constants import (
|
|
10
|
-
DOCS_URL_SLOTS,
|
|
11
|
-
DOCS_URL_NLU_BASED_SLOTS,
|
|
12
14
|
DOCS_URL_CATEGORICAL_SLOTS,
|
|
15
|
+
DOCS_URL_NLU_BASED_SLOTS,
|
|
16
|
+
DOCS_URL_SLOTS,
|
|
17
|
+
REFILL_UTTER,
|
|
18
|
+
REJECTIONS,
|
|
19
|
+
UTTER_ASK_PREFIX,
|
|
13
20
|
)
|
|
21
|
+
from rasa.shared.exceptions import RasaException
|
|
14
22
|
|
|
15
23
|
logger = logging.getLogger(__name__)
|
|
16
24
|
|
|
@@ -23,6 +31,80 @@ class InvalidSlotConfigError(RasaException, ValueError):
|
|
|
23
31
|
"""Raised if a slot's config is invalid."""
|
|
24
32
|
|
|
25
33
|
|
|
34
|
+
@dataclass
|
|
35
|
+
class SlotRejection:
|
|
36
|
+
"""A pair of validation condition and an utterance for the case of failure."""
|
|
37
|
+
|
|
38
|
+
if_: str
|
|
39
|
+
"""The condition that should be checked."""
|
|
40
|
+
utter: str
|
|
41
|
+
"""The utterance that should be executed if the condition is met."""
|
|
42
|
+
|
|
43
|
+
@staticmethod
|
|
44
|
+
def from_dict(data: Dict[str, Any]) -> SlotRejection:
|
|
45
|
+
"""Create a SlotRejection object from serialized data.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
data: data for a SlotRejection object in a serialized format
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
A SlotRejection object
|
|
52
|
+
"""
|
|
53
|
+
return SlotRejection(
|
|
54
|
+
if_=data["if"],
|
|
55
|
+
utter=data["utter"],
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
59
|
+
"""Serialize the SlotRejection object.
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
the SlotRejection object as serialized data
|
|
63
|
+
"""
|
|
64
|
+
return {
|
|
65
|
+
"if": self.if_,
|
|
66
|
+
"utter": self.utter,
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class SlotValidation(BaseModel):
|
|
71
|
+
rejections: List[SlotRejection] = Field(alias=REJECTIONS)
|
|
72
|
+
"""how the slot value is validated using predicate evaluation."""
|
|
73
|
+
refill_utter: str = Field(alias=REFILL_UTTER)
|
|
74
|
+
"""The utterance that the assistant uses to ask for the slot."""
|
|
75
|
+
|
|
76
|
+
@staticmethod
|
|
77
|
+
def from_dict(data: Dict[str, Any]) -> SlotValidation:
|
|
78
|
+
"""Creates a SlotValidation object from serialised data.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
data: data for a SlotValidation object in a serialized format
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
A SlotValidation object
|
|
85
|
+
"""
|
|
86
|
+
rejections = data.get(REJECTIONS)
|
|
87
|
+
if rejections is not None:
|
|
88
|
+
rejections = [
|
|
89
|
+
SlotRejection.from_dict(rejection) for rejection in rejections
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
return SlotValidation(
|
|
93
|
+
rejections=rejections, refill_utter=data.get(REFILL_UTTER)
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
97
|
+
"""Serialize the SlotValidation object.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
the SlotValidation object as serialized data
|
|
101
|
+
"""
|
|
102
|
+
return {
|
|
103
|
+
REJECTIONS: [rejection.as_dict() for rejection in self.rejections],
|
|
104
|
+
REFILL_UTTER: self.refill_utter,
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
26
108
|
class Slot(ABC):
|
|
27
109
|
"""Key-value store for storing information during a conversation."""
|
|
28
110
|
|
|
@@ -41,6 +123,8 @@ class Slot(ABC):
|
|
|
41
123
|
influence_conversation: bool = True,
|
|
42
124
|
is_builtin: bool = False,
|
|
43
125
|
shared_for_coexistence: bool = False,
|
|
126
|
+
filled_by: Optional[str] = None,
|
|
127
|
+
validation: Optional[Dict[str, Any]] = None,
|
|
44
128
|
) -> None:
|
|
45
129
|
"""Create a Slot.
|
|
46
130
|
|
|
@@ -57,9 +141,14 @@ class Slot(ABC):
|
|
|
57
141
|
such as `return_value`.
|
|
58
142
|
shared_for_coexistence: If `True` the slot is not forgotten after either
|
|
59
143
|
dm1 or CALM finishes.
|
|
144
|
+
filled_by: The name of the extractor that fills the slot.
|
|
145
|
+
validation: The validation rules that should be used to validate
|
|
146
|
+
slot values.
|
|
60
147
|
"""
|
|
148
|
+
from rasa.shared.core.slot_mappings import SlotMapping
|
|
149
|
+
|
|
61
150
|
self.name = name
|
|
62
|
-
self.mappings = mappings
|
|
151
|
+
self.mappings = [SlotMapping.from_dict(mapping, name) for mapping in mappings]
|
|
63
152
|
self._value = initial_value
|
|
64
153
|
self.initial_value = initial_value
|
|
65
154
|
self._value_reset_delay = value_reset_delay
|
|
@@ -67,6 +156,13 @@ class Slot(ABC):
|
|
|
67
156
|
self._has_been_set = False
|
|
68
157
|
self.is_builtin = is_builtin
|
|
69
158
|
self.shared_for_coexistence = shared_for_coexistence
|
|
159
|
+
self._filled_by = filled_by
|
|
160
|
+
|
|
161
|
+
if validation:
|
|
162
|
+
validation.setdefault(REFILL_UTTER, f"{UTTER_ASK_PREFIX}{self.name}")
|
|
163
|
+
self.validation = (
|
|
164
|
+
SlotValidation.from_dict(validation) if validation else validation
|
|
165
|
+
)
|
|
70
166
|
|
|
71
167
|
def feature_dimensionality(self) -> int:
|
|
72
168
|
"""How many features this single slot creates.
|
|
@@ -132,6 +228,16 @@ class Slot(ABC):
|
|
|
132
228
|
self._value = value
|
|
133
229
|
self._has_been_set = True
|
|
134
230
|
|
|
231
|
+
@property
|
|
232
|
+
def filled_by(self) -> Optional[str]:
|
|
233
|
+
"""Gets the slot's latest value extractor."""
|
|
234
|
+
return self._filled_by
|
|
235
|
+
|
|
236
|
+
@filled_by.setter
|
|
237
|
+
def filled_by(self, extractor: str) -> None:
|
|
238
|
+
"""Sets the slot's latest value extractor."""
|
|
239
|
+
self._filled_by = extractor
|
|
240
|
+
|
|
135
241
|
def has_same_coerced_value(self, other_value: Any) -> bool:
|
|
136
242
|
"""Checks if the coerced value of is the same as the slot value.
|
|
137
243
|
|
|
@@ -176,12 +282,15 @@ class Slot(ABC):
|
|
|
176
282
|
|
|
177
283
|
def persistence_info(self) -> Dict[str, Any]:
|
|
178
284
|
"""Returns relevant information to persist this slot."""
|
|
179
|
-
|
|
285
|
+
persistence_info_dict = {
|
|
180
286
|
"type": rasa.shared.utils.common.module_path_from_instance(self),
|
|
181
287
|
"initial_value": self.initial_value,
|
|
182
288
|
"influence_conversation": self.influence_conversation,
|
|
183
|
-
"mappings": self.mappings,
|
|
289
|
+
"mappings": [mapping.as_dict() for mapping in self.mappings],
|
|
184
290
|
}
|
|
291
|
+
if self.validation:
|
|
292
|
+
persistence_info_dict["validation"] = self.validation.as_dict() # type: ignore
|
|
293
|
+
return persistence_info_dict
|
|
185
294
|
|
|
186
295
|
def fingerprint(self) -> Text:
|
|
187
296
|
"""Returns a unique hash for the slot which is stable across python runs.
|
|
@@ -198,6 +307,10 @@ class Slot(ABC):
|
|
|
198
307
|
return False
|
|
199
308
|
return self.name == other.name and self.value == other.value
|
|
200
309
|
|
|
310
|
+
def requires_validation(self) -> bool:
|
|
311
|
+
"""Indicates if the slot requires validation."""
|
|
312
|
+
return True if self.validation else False
|
|
313
|
+
|
|
201
314
|
|
|
202
315
|
class FloatSlot(Slot):
|
|
203
316
|
"""A slot storing a float value."""
|
|
@@ -215,6 +328,8 @@ class FloatSlot(Slot):
|
|
|
215
328
|
influence_conversation: bool = True,
|
|
216
329
|
is_builtin: bool = False,
|
|
217
330
|
shared_for_coexistence: bool = False,
|
|
331
|
+
filled_by: Optional[str] = None,
|
|
332
|
+
validation: Optional[Dict[str, Any]] = None,
|
|
218
333
|
) -> None:
|
|
219
334
|
"""Creates a FloatSlot.
|
|
220
335
|
|
|
@@ -230,6 +345,8 @@ class FloatSlot(Slot):
|
|
|
230
345
|
influence_conversation,
|
|
231
346
|
is_builtin,
|
|
232
347
|
shared_for_coexistence,
|
|
348
|
+
filled_by=filled_by,
|
|
349
|
+
validation=validation,
|
|
233
350
|
)
|
|
234
351
|
self.max_value = max_value
|
|
235
352
|
self.min_value = min_value
|
|
@@ -387,6 +504,8 @@ class CategoricalSlot(Slot):
|
|
|
387
504
|
influence_conversation: bool = True,
|
|
388
505
|
is_builtin: bool = False,
|
|
389
506
|
shared_for_coexistence: bool = False,
|
|
507
|
+
filled_by: Optional[str] = None,
|
|
508
|
+
validation: Optional[Dict[str, Any]] = None,
|
|
390
509
|
) -> None:
|
|
391
510
|
"""Creates a `Categorical Slot` (see parent class for detailed docstring)."""
|
|
392
511
|
super().__init__(
|
|
@@ -397,6 +516,8 @@ class CategoricalSlot(Slot):
|
|
|
397
516
|
influence_conversation,
|
|
398
517
|
is_builtin,
|
|
399
518
|
shared_for_coexistence,
|
|
519
|
+
filled_by=filled_by,
|
|
520
|
+
validation=validation,
|
|
400
521
|
)
|
|
401
522
|
if values and None in values:
|
|
402
523
|
rasa.shared.utils.io.raise_warning(
|
|
@@ -607,6 +728,8 @@ class AnySlot(Slot):
|
|
|
607
728
|
influence_conversation: bool = False,
|
|
608
729
|
is_builtin: bool = False,
|
|
609
730
|
shared_for_coexistence: bool = False,
|
|
731
|
+
filled_by: Optional[str] = None,
|
|
732
|
+
validation: Optional[Dict[str, Any]] = None,
|
|
610
733
|
) -> None:
|
|
611
734
|
"""Creates an `Any Slot` (see parent class for detailed docstring).
|
|
612
735
|
|
|
@@ -630,6 +753,8 @@ class AnySlot(Slot):
|
|
|
630
753
|
influence_conversation,
|
|
631
754
|
is_builtin,
|
|
632
755
|
shared_for_coexistence,
|
|
756
|
+
filled_by=filled_by,
|
|
757
|
+
validation=validation,
|
|
633
758
|
)
|
|
634
759
|
|
|
635
760
|
def __eq__(self, other: Any) -> bool:
|
|
@@ -652,3 +777,35 @@ class AnySlot(Slot):
|
|
|
652
777
|
f"implement a custom slot type by subclassing '{Slot.__name__}'. "
|
|
653
778
|
f"See the documentation for more information: {DOCS_URL_NLU_BASED_SLOTS}"
|
|
654
779
|
)
|
|
780
|
+
|
|
781
|
+
|
|
782
|
+
class StrictCategoricalSlot(CategoricalSlot):
|
|
783
|
+
"""A categorical slot that strictly enforces allowed values."""
|
|
784
|
+
|
|
785
|
+
type_name = "strict_categorical"
|
|
786
|
+
|
|
787
|
+
def coerce_value(self, value: Any) -> Any:
|
|
788
|
+
"""Coerce the value to one of the allowed ones or raise an error if invalid."""
|
|
789
|
+
if value is None:
|
|
790
|
+
return value
|
|
791
|
+
|
|
792
|
+
for allowed_value in self.values:
|
|
793
|
+
# Allowed values are always stored as strings, so we can use casefold().
|
|
794
|
+
if value.casefold() == allowed_value.casefold():
|
|
795
|
+
return allowed_value
|
|
796
|
+
|
|
797
|
+
raise InvalidSlotConfigError(
|
|
798
|
+
f"Value '{value}' is not allowed for the slot '{self.name}'. "
|
|
799
|
+
f"Allowed values are: {self.values}"
|
|
800
|
+
)
|
|
801
|
+
|
|
802
|
+
@Slot.value.setter # type: ignore[attr-defined,misc]
|
|
803
|
+
def value(self, value: Any) -> None:
|
|
804
|
+
"""Set the slot's value using strict coercion."""
|
|
805
|
+
coerced_value = self.coerce_value(value)
|
|
806
|
+
super(StrictCategoricalSlot, self.__class__).value.fset(self, coerced_value)
|
|
807
|
+
|
|
808
|
+
def add_default_value(self) -> None:
|
|
809
|
+
# StrictCategoricalSlot enforces validation against a specified set of values,
|
|
810
|
+
# so default values should not be automatically added.
|
|
811
|
+
pass
|
rasa/shared/core/trackers.py
CHANGED
|
@@ -6,26 +6,28 @@ import os
|
|
|
6
6
|
import time
|
|
7
7
|
from collections import deque
|
|
8
8
|
from enum import Enum
|
|
9
|
+
from functools import cached_property
|
|
9
10
|
from typing import (
|
|
10
|
-
|
|
11
|
-
Text,
|
|
11
|
+
TYPE_CHECKING,
|
|
12
12
|
Any,
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
Deque,
|
|
14
|
+
Dict,
|
|
15
|
+
FrozenSet,
|
|
15
16
|
Generator,
|
|
17
|
+
Iterable,
|
|
18
|
+
Iterator,
|
|
19
|
+
List,
|
|
20
|
+
Optional,
|
|
21
|
+
Text,
|
|
22
|
+
Tuple,
|
|
16
23
|
Type,
|
|
17
24
|
TypeVar,
|
|
18
|
-
List,
|
|
19
|
-
Deque,
|
|
20
|
-
Iterable,
|
|
21
25
|
Union,
|
|
22
|
-
FrozenSet,
|
|
23
|
-
Tuple,
|
|
24
|
-
TYPE_CHECKING,
|
|
25
26
|
cast,
|
|
26
27
|
)
|
|
27
28
|
|
|
28
29
|
import rasa.shared.utils.io
|
|
30
|
+
from rasa.engine.language import Language
|
|
29
31
|
from rasa.shared.constants import (
|
|
30
32
|
ASSISTANT_ID_KEY,
|
|
31
33
|
DEFAULT_SENDER_ID,
|
|
@@ -34,50 +36,52 @@ from rasa.shared.constants import (
|
|
|
34
36
|
from rasa.shared.core import events
|
|
35
37
|
from rasa.shared.core.constants import (
|
|
36
38
|
ACTION_LISTEN_NAME,
|
|
37
|
-
LOOP_NAME,
|
|
38
|
-
SHOULD_NOT_BE_SET,
|
|
39
|
-
PREVIOUS_ACTION,
|
|
40
|
-
ACTIVE_LOOP,
|
|
41
39
|
ACTION_SESSION_START_NAME,
|
|
40
|
+
ACTIVE_LOOP,
|
|
42
41
|
FOLLOWUP_ACTION,
|
|
42
|
+
LANGUAGE_SLOT,
|
|
43
|
+
LOOP_NAME,
|
|
44
|
+
PREVIOUS_ACTION,
|
|
45
|
+
SHOULD_NOT_BE_SET,
|
|
43
46
|
)
|
|
44
47
|
from rasa.shared.core.conversation import Dialogue
|
|
45
48
|
from rasa.shared.core.domain import Domain, State
|
|
46
49
|
from rasa.shared.core.events import (
|
|
47
|
-
DialogueStackUpdated,
|
|
48
|
-
RoutingSessionEnded,
|
|
49
|
-
SlotSet,
|
|
50
|
-
UserUttered,
|
|
51
50
|
ActionExecuted,
|
|
52
|
-
|
|
53
|
-
Restarted,
|
|
51
|
+
ActionExecutionRejected,
|
|
54
52
|
ActionReverted,
|
|
55
|
-
UserUtteranceReverted,
|
|
56
|
-
BotUttered,
|
|
57
53
|
ActiveLoop,
|
|
58
|
-
|
|
59
|
-
ActionExecutionRejected,
|
|
54
|
+
BotUttered,
|
|
60
55
|
DefinePrevUserUtteredFeaturization,
|
|
56
|
+
DialogueStackUpdated,
|
|
57
|
+
Event,
|
|
61
58
|
FlowStarted,
|
|
59
|
+
Restarted,
|
|
60
|
+
RoutingSessionEnded,
|
|
61
|
+
SessionStarted,
|
|
62
|
+
SlotSet,
|
|
63
|
+
UserUtteranceReverted,
|
|
64
|
+
UserUttered,
|
|
62
65
|
)
|
|
63
66
|
from rasa.shared.core.flows import FlowsList
|
|
64
|
-
from rasa.shared.core.slots import AnySlot, Slot
|
|
67
|
+
from rasa.shared.core.slots import AnySlot, Slot, StrictCategoricalSlot
|
|
68
|
+
from rasa.shared.exceptions import RasaException
|
|
65
69
|
from rasa.shared.nlu.constants import (
|
|
66
|
-
ENTITY_ATTRIBUTE_VALUE,
|
|
67
|
-
ENTITY_ATTRIBUTE_TYPE,
|
|
68
|
-
ENTITY_ATTRIBUTE_GROUP,
|
|
69
|
-
ENTITY_ATTRIBUTE_ROLE,
|
|
70
|
-
ACTION_TEXT,
|
|
71
70
|
ACTION_NAME,
|
|
71
|
+
ACTION_TEXT,
|
|
72
72
|
ENTITIES,
|
|
73
|
+
ENTITY_ATTRIBUTE_GROUP,
|
|
74
|
+
ENTITY_ATTRIBUTE_ROLE,
|
|
75
|
+
ENTITY_ATTRIBUTE_TYPE,
|
|
76
|
+
ENTITY_ATTRIBUTE_VALUE,
|
|
73
77
|
METADATA_MODEL_ID,
|
|
74
78
|
)
|
|
75
79
|
|
|
76
80
|
if TYPE_CHECKING:
|
|
81
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
77
82
|
from rasa.shared.core.events import NLUPredictionData
|
|
78
|
-
from rasa.shared.core.training_data.structures import Story
|
|
79
83
|
from rasa.shared.core.training_data.story_writer.story_writer import StoryWriter
|
|
80
|
-
from rasa.
|
|
84
|
+
from rasa.shared.core.training_data.structures import Story
|
|
81
85
|
|
|
82
86
|
EventTypeAlias = TypeVar("EventTypeAlias", bound=Event)
|
|
83
87
|
|
|
@@ -916,11 +920,13 @@ class DialogueStateTracker:
|
|
|
916
920
|
continue
|
|
917
921
|
slot.reset()
|
|
918
922
|
|
|
919
|
-
def _set_slot(self, key: Text, value: Any) -> None:
|
|
923
|
+
def _set_slot(self, key: Text, value: Any, filled_by: Optional[str] = None) -> None:
|
|
920
924
|
"""Sets the value of a slot if that slot exists."""
|
|
921
925
|
if key in self.slots:
|
|
922
926
|
slot = self.slots[key]
|
|
923
927
|
slot.value = value
|
|
928
|
+
if filled_by is not None:
|
|
929
|
+
slot.filled_by = filled_by
|
|
924
930
|
else:
|
|
925
931
|
logger.error(
|
|
926
932
|
f"Tried to set non existent slot '{key}'. Make sure you "
|
|
@@ -1095,6 +1101,75 @@ class DialogueStateTracker:
|
|
|
1095
1101
|
|
|
1096
1102
|
return FlowsList(active_flows)
|
|
1097
1103
|
|
|
1104
|
+
@cached_property
|
|
1105
|
+
def supported_languages(self) -> List[Language]:
|
|
1106
|
+
"""Returns the supported languages for this model configuration
|
|
1107
|
+
|
|
1108
|
+
Returns:
|
|
1109
|
+
A list of supported languages.
|
|
1110
|
+
"""
|
|
1111
|
+
if LANGUAGE_SLOT not in self.slots:
|
|
1112
|
+
raise RasaException(
|
|
1113
|
+
f"The required slot '{LANGUAGE_SLOT}' is missing from the tracker. "
|
|
1114
|
+
f"Please ensure that a slot named '{LANGUAGE_SLOT}' exists."
|
|
1115
|
+
)
|
|
1116
|
+
|
|
1117
|
+
language_slot = self.slots[LANGUAGE_SLOT]
|
|
1118
|
+
|
|
1119
|
+
if not isinstance(language_slot, StrictCategoricalSlot):
|
|
1120
|
+
raise RasaException(
|
|
1121
|
+
f"The slot '{LANGUAGE_SLOT}' must be of type "
|
|
1122
|
+
f"'{StrictCategoricalSlot.type_name}'. "
|
|
1123
|
+
f"Please update the slot configuration accordingly."
|
|
1124
|
+
)
|
|
1125
|
+
|
|
1126
|
+
return [
|
|
1127
|
+
Language.from_language_code(language_code)
|
|
1128
|
+
for language_code in language_slot.values
|
|
1129
|
+
]
|
|
1130
|
+
|
|
1131
|
+
@property
|
|
1132
|
+
def current_language(self) -> Optional[Language]:
|
|
1133
|
+
"""Get the language of the current conversation.
|
|
1134
|
+
|
|
1135
|
+
Returns:
|
|
1136
|
+
The language of the current conversation or `None` if not set.
|
|
1137
|
+
"""
|
|
1138
|
+
language_code = self.get_slot("language")
|
|
1139
|
+
if not language_code:
|
|
1140
|
+
return None
|
|
1141
|
+
|
|
1142
|
+
supported_languages = self.supported_languages or []
|
|
1143
|
+
matching_language = (
|
|
1144
|
+
language
|
|
1145
|
+
for language in supported_languages
|
|
1146
|
+
if language.code == language_code
|
|
1147
|
+
)
|
|
1148
|
+
return next(matching_language, None)
|
|
1149
|
+
|
|
1150
|
+
@property
|
|
1151
|
+
def default_language(self) -> Language:
|
|
1152
|
+
"""Get the assistant's default language.
|
|
1153
|
+
|
|
1154
|
+
Returns:
|
|
1155
|
+
The assistant's default language.
|
|
1156
|
+
|
|
1157
|
+
Raises:
|
|
1158
|
+
RasaException: If no default language is defined in the config.
|
|
1159
|
+
"""
|
|
1160
|
+
supported_languages = self.supported_languages or []
|
|
1161
|
+
matching_language = (
|
|
1162
|
+
language for language in supported_languages if language.is_default is True
|
|
1163
|
+
)
|
|
1164
|
+
try:
|
|
1165
|
+
return next(matching_language)
|
|
1166
|
+
except StopIteration:
|
|
1167
|
+
raise RasaException(
|
|
1168
|
+
"No default language configured. "
|
|
1169
|
+
"Please configure the `language` parameter in config.yml file. "
|
|
1170
|
+
"Example: `language: en`."
|
|
1171
|
+
)
|
|
1172
|
+
|
|
1098
1173
|
|
|
1099
1174
|
class TrackerEventDiffEngine:
|
|
1100
1175
|
"""Computes event difference of two trackers."""
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from pathlib import Path
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import Any, Dict, List, Optional, Text, Union
|
|
4
4
|
|
|
5
5
|
from rasa.shared.core.domain import Domain
|
|
6
|
-
from rasa.shared.core.events import
|
|
7
|
-
from rasa.shared.exceptions import RasaCoreException
|
|
6
|
+
from rasa.shared.core.events import ActionExecuted, Event, SlotSet
|
|
8
7
|
from rasa.shared.core.training_data.story_reader.story_step_builder import (
|
|
9
8
|
StoryStepBuilder,
|
|
10
9
|
)
|
|
11
10
|
from rasa.shared.core.training_data.structures import StoryStep
|
|
11
|
+
from rasa.shared.exceptions import RasaCoreException
|
|
12
12
|
|
|
13
13
|
logger = logging.getLogger(__name__)
|
|
14
14
|
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import Any, Dict, List, Optional, Text
|
|
3
3
|
|
|
4
4
|
import rasa.shared.core.training_data.structures
|
|
5
5
|
import rasa.shared.utils.io
|
|
6
6
|
from rasa.shared.constants import DOCS_URL_STORIES
|
|
7
|
-
from rasa.shared.core.events import
|
|
7
|
+
from rasa.shared.core.events import Event, UserUttered
|
|
8
8
|
from rasa.shared.core.training_data.structures import (
|
|
9
|
-
Checkpoint,
|
|
10
9
|
GENERATED_CHECKPOINT_PREFIX,
|
|
11
10
|
GENERATED_HASH_LENGTH,
|
|
12
11
|
STORY_START,
|
|
13
|
-
|
|
12
|
+
Checkpoint,
|
|
14
13
|
RuleStep,
|
|
14
|
+
StoryStep,
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
logger = logging.getLogger(__name__)
|
|
@@ -1,60 +1,58 @@
|
|
|
1
1
|
import copy
|
|
2
2
|
import functools
|
|
3
3
|
import json
|
|
4
|
-
from json import JSONDecodeError
|
|
5
4
|
import logging
|
|
6
|
-
import structlog
|
|
7
|
-
from pathlib import Path
|
|
8
5
|
import re
|
|
6
|
+
from json import JSONDecodeError
|
|
7
|
+
from pathlib import Path
|
|
9
8
|
from re import Match, Pattern
|
|
10
|
-
from typing import
|
|
9
|
+
from typing import Any, Dict, List, Optional, Text, Tuple, Union
|
|
10
|
+
|
|
11
|
+
import structlog
|
|
11
12
|
|
|
12
|
-
from rasa.shared.core.domain import Domain
|
|
13
13
|
import rasa.shared.data
|
|
14
|
-
from rasa.shared.core.slots import TextSlot, ListSlot
|
|
15
|
-
from rasa.shared.exceptions import YamlException
|
|
16
14
|
import rasa.shared.utils.io
|
|
17
|
-
from rasa.shared.
|
|
15
|
+
from rasa.shared.constants import (
|
|
16
|
+
DOCS_URL_RULES,
|
|
17
|
+
DOCS_URL_SLOTS,
|
|
18
|
+
DOCS_URL_STORIES,
|
|
19
|
+
INTENT_MESSAGE_PREFIX,
|
|
20
|
+
TEST_STORIES_FILE_PREFIX,
|
|
21
|
+
)
|
|
22
|
+
from rasa.shared.core.constants import LOOP_NAME, RULE_SNIPPET_ACTION_NAME
|
|
23
|
+
from rasa.shared.core.domain import Domain
|
|
24
|
+
from rasa.shared.core.events import (
|
|
25
|
+
ActiveLoop,
|
|
26
|
+
DialogueStackUpdated,
|
|
27
|
+
SlotSet,
|
|
28
|
+
UserUttered,
|
|
29
|
+
)
|
|
30
|
+
from rasa.shared.core.slots import ListSlot, TextSlot
|
|
31
|
+
from rasa.shared.core.training_data.story_reader.story_reader import StoryReader
|
|
32
|
+
from rasa.shared.core.training_data.structures import StoryStep
|
|
33
|
+
from rasa.shared.exceptions import YamlException
|
|
18
34
|
from rasa.shared.nlu.constants import (
|
|
35
|
+
ACTION_TEXT,
|
|
19
36
|
ENTITIES,
|
|
20
37
|
ENTITY_ATTRIBUTE_END,
|
|
21
38
|
ENTITY_ATTRIBUTE_START,
|
|
22
39
|
ENTITY_ATTRIBUTE_TYPE,
|
|
23
40
|
ENTITY_ATTRIBUTE_VALUE,
|
|
41
|
+
EXTRACTOR,
|
|
42
|
+
FULL_RETRIEVAL_INTENT_NAME_KEY,
|
|
24
43
|
INTENT,
|
|
25
44
|
INTENT_NAME_KEY,
|
|
26
45
|
INTENT_RANKING_KEY,
|
|
27
46
|
PREDICTED_CONFIDENCE_KEY,
|
|
28
|
-
FULL_RETRIEVAL_INTENT_NAME_KEY,
|
|
29
|
-
ACTION_TEXT,
|
|
30
47
|
TEXT,
|
|
31
|
-
EXTRACTOR,
|
|
32
48
|
)
|
|
33
49
|
from rasa.shared.nlu.training_data import entities_parser
|
|
34
|
-
|
|
35
|
-
from rasa.shared.constants import (
|
|
36
|
-
INTENT_MESSAGE_PREFIX,
|
|
37
|
-
DOCS_URL_STORIES,
|
|
38
|
-
TEST_STORIES_FILE_PREFIX,
|
|
39
|
-
DOCS_URL_RULES,
|
|
40
|
-
DOCS_URL_SLOTS,
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
from rasa.shared.core.constants import RULE_SNIPPET_ACTION_NAME
|
|
44
|
-
from rasa.shared.core.events import (
|
|
45
|
-
UserUttered,
|
|
46
|
-
SlotSet,
|
|
47
|
-
ActiveLoop,
|
|
48
|
-
DialogueStackUpdated,
|
|
49
|
-
)
|
|
50
|
-
from rasa.shared.core.training_data.story_reader.story_reader import StoryReader
|
|
51
|
-
from rasa.shared.core.training_data.structures import StoryStep
|
|
52
50
|
from rasa.shared.nlu.training_data.message import Message
|
|
53
51
|
from rasa.shared.utils.yaml import (
|
|
54
|
-
|
|
52
|
+
is_key_in_yaml,
|
|
55
53
|
read_yaml,
|
|
54
|
+
validate_raw_yaml_using_schema_file,
|
|
56
55
|
validate_training_data_format_version,
|
|
57
|
-
is_key_in_yaml,
|
|
58
56
|
)
|
|
59
57
|
|
|
60
58
|
logger = logging.getLogger(__name__)
|
|
@@ -1,55 +1,53 @@
|
|
|
1
|
+
import json
|
|
1
2
|
from collections import OrderedDict
|
|
2
3
|
from pathlib import Path
|
|
3
|
-
from typing import Any, Dict, List, Text, Union
|
|
4
|
+
from typing import Any, Dict, List, Optional, Text, Union
|
|
4
5
|
|
|
5
6
|
from ruamel import yaml
|
|
6
|
-
import json
|
|
7
7
|
from ruamel.yaml.comments import CommentedMap
|
|
8
8
|
from ruamel.yaml.scalarstring import DoubleQuotedScalarString, LiteralScalarString
|
|
9
9
|
|
|
10
|
-
import rasa.shared.utils.io
|
|
11
10
|
import rasa.shared.core.constants
|
|
12
|
-
from rasa.shared.constants import LATEST_TRAINING_DATA_FORMAT_VERSION
|
|
13
11
|
import rasa.shared.core.events
|
|
12
|
+
import rasa.shared.utils.io
|
|
13
|
+
from rasa.shared.constants import LATEST_TRAINING_DATA_FORMAT_VERSION
|
|
14
14
|
from rasa.shared.core.constants import FLOW_HASHES_SLOT
|
|
15
15
|
from rasa.shared.core.events import (
|
|
16
|
-
UserUttered,
|
|
17
16
|
ActionExecuted,
|
|
18
|
-
SlotSet,
|
|
19
17
|
ActiveLoop,
|
|
20
|
-
Event,
|
|
21
18
|
DialogueStackUpdated,
|
|
19
|
+
Event,
|
|
20
|
+
SlotSet,
|
|
21
|
+
UserUttered,
|
|
22
22
|
)
|
|
23
|
-
|
|
24
23
|
from rasa.shared.core.training_data.story_reader.yaml_story_reader import (
|
|
25
|
-
KEY_STORIES,
|
|
26
|
-
KEY_STORY_NAME,
|
|
27
|
-
KEY_USER_INTENT,
|
|
28
|
-
KEY_ENTITIES,
|
|
29
24
|
KEY_ACTION,
|
|
30
|
-
|
|
25
|
+
KEY_ACTIVE_LOOP,
|
|
26
|
+
KEY_BOT_END_TO_END_MESSAGE,
|
|
31
27
|
KEY_CHECKPOINT,
|
|
32
|
-
KEY_SLOT_NAME,
|
|
33
28
|
KEY_CHECKPOINT_SLOTS,
|
|
29
|
+
KEY_COMMANDS,
|
|
30
|
+
KEY_ENTITIES,
|
|
34
31
|
KEY_OR,
|
|
35
|
-
KEY_USER_MESSAGE,
|
|
36
|
-
KEY_ACTIVE_LOOP,
|
|
37
|
-
KEY_BOT_END_TO_END_MESSAGE,
|
|
38
|
-
KEY_RULES,
|
|
39
|
-
KEY_RULE_FOR_CONVERSATION_START,
|
|
40
|
-
KEY_WAIT_FOR_USER_INPUT_AFTER_RULE,
|
|
41
32
|
KEY_RULE_CONDITION,
|
|
33
|
+
KEY_RULE_FOR_CONVERSATION_START,
|
|
42
34
|
KEY_RULE_NAME,
|
|
35
|
+
KEY_RULES,
|
|
36
|
+
KEY_SLOT_NAME,
|
|
43
37
|
KEY_STACK_UPDATE,
|
|
44
|
-
|
|
38
|
+
KEY_STEPS,
|
|
39
|
+
KEY_STORIES,
|
|
40
|
+
KEY_STORY_NAME,
|
|
41
|
+
KEY_USER_INTENT,
|
|
42
|
+
KEY_USER_MESSAGE,
|
|
43
|
+
KEY_WAIT_FOR_USER_INPUT_AFTER_RULE,
|
|
45
44
|
)
|
|
46
|
-
|
|
47
45
|
from rasa.shared.core.training_data.story_writer.story_writer import StoryWriter
|
|
48
46
|
from rasa.shared.core.training_data.structures import (
|
|
49
|
-
StoryStep,
|
|
50
|
-
Checkpoint,
|
|
51
47
|
STORY_START,
|
|
48
|
+
Checkpoint,
|
|
52
49
|
RuleStep,
|
|
50
|
+
StoryStep,
|
|
53
51
|
)
|
|
54
52
|
from rasa.shared.utils.yaml import write_yaml
|
|
55
53
|
|