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/core/processor.py
CHANGED
|
@@ -1,62 +1,84 @@
|
|
|
1
|
-
import inspect
|
|
2
1
|
import copy
|
|
2
|
+
import inspect
|
|
3
3
|
import logging
|
|
4
|
-
import structlog
|
|
5
4
|
import os
|
|
6
5
|
import re
|
|
7
|
-
from pathlib import Path
|
|
8
6
|
import tarfile
|
|
9
7
|
import time
|
|
8
|
+
from pathlib import Path
|
|
10
9
|
from types import LambdaType
|
|
11
|
-
from typing import Any, Dict, List, Optional,
|
|
10
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, Union
|
|
11
|
+
|
|
12
|
+
import structlog
|
|
13
|
+
|
|
14
|
+
import rasa.core.actions.action
|
|
15
|
+
import rasa.core.tracker_store
|
|
16
|
+
import rasa.core.utils
|
|
17
|
+
import rasa.shared.core.trackers
|
|
18
|
+
import rasa.shared.utils.io
|
|
19
|
+
from rasa.core import jobs
|
|
20
|
+
from rasa.core.actions.action import Action
|
|
12
21
|
from rasa.core.actions.action_exceptions import ActionExecutionRejection
|
|
13
22
|
from rasa.core.actions.forms import FormAction
|
|
23
|
+
from rasa.core.channels.channel import (
|
|
24
|
+
CollectingOutputChannel,
|
|
25
|
+
OutputChannel,
|
|
26
|
+
UserMessage,
|
|
27
|
+
)
|
|
28
|
+
from rasa.core.constants import KEY_IS_CALM_SYSTEM, KEY_IS_COEXISTENCE_ASSISTANT
|
|
14
29
|
from rasa.core.http_interpreter import RasaNLUHttpInterpreter
|
|
30
|
+
from rasa.core.lock_store import LockStore
|
|
31
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
32
|
+
from rasa.core.policies.policy import PolicyPrediction
|
|
15
33
|
from rasa.dialogue_understanding.commands import (
|
|
34
|
+
CannotHandleCommand,
|
|
16
35
|
Command,
|
|
17
36
|
NoopCommand,
|
|
18
37
|
SetSlotCommand,
|
|
19
|
-
CannotHandleCommand,
|
|
20
38
|
)
|
|
39
|
+
from rasa.dialogue_understanding.commands.utils import (
|
|
40
|
+
create_validate_frames_from_slot_set_events,
|
|
41
|
+
)
|
|
42
|
+
from rasa.dialogue_understanding.patterns.validate_slot import (
|
|
43
|
+
ValidateSlotPatternFlowStackFrame,
|
|
44
|
+
)
|
|
45
|
+
from rasa.dialogue_understanding.utils import add_commands_to_message_parse_data
|
|
21
46
|
from rasa.engine import loader
|
|
22
47
|
from rasa.engine.constants import (
|
|
48
|
+
PLACEHOLDER_ENDPOINTS,
|
|
23
49
|
PLACEHOLDER_MESSAGE,
|
|
24
50
|
PLACEHOLDER_TRACKER,
|
|
25
|
-
PLACEHOLDER_ENDPOINTS,
|
|
26
51
|
)
|
|
27
52
|
from rasa.engine.runner.dask import DaskGraphRunner
|
|
53
|
+
from rasa.engine.runner.interface import GraphRunner
|
|
28
54
|
from rasa.engine.storage.local_model_storage import LocalModelStorage
|
|
29
55
|
from rasa.engine.storage.storage import ModelMetadata
|
|
56
|
+
from rasa.exceptions import ActionLimitReached, ModelNotFound
|
|
30
57
|
from rasa.model import get_latest_model
|
|
31
58
|
from rasa.plugin import plugin_manager
|
|
32
|
-
from rasa.shared.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
OutputChannel,
|
|
41
|
-
UserMessage,
|
|
59
|
+
from rasa.shared.constants import (
|
|
60
|
+
ASSISTANT_ID_KEY,
|
|
61
|
+
DEFAULT_SENDER_ID,
|
|
62
|
+
DOCS_URL_DOMAINS,
|
|
63
|
+
DOCS_URL_NLU_BASED_POLICIES,
|
|
64
|
+
RASA_PATTERN_CANNOT_HANDLE_INVALID_INTENT,
|
|
65
|
+
ROUTE_TO_CALM_SLOT,
|
|
66
|
+
UTTER_PREFIX,
|
|
42
67
|
)
|
|
43
|
-
import rasa.core.utils
|
|
44
|
-
from rasa.core.policies.policy import PolicyPrediction
|
|
45
|
-
from rasa.engine.runner.interface import GraphRunner
|
|
46
|
-
from rasa.exceptions import ActionLimitReached, ModelNotFound
|
|
47
68
|
from rasa.shared.core.constants import (
|
|
48
69
|
ACTION_CORRECT_FLOW_SLOT,
|
|
49
|
-
|
|
50
|
-
SLOT_SILENCE_TIMEOUT,
|
|
51
|
-
USER_INTENT_RESTART,
|
|
70
|
+
ACTION_EXTRACT_SLOTS,
|
|
52
71
|
ACTION_LISTEN_NAME,
|
|
53
72
|
ACTION_SESSION_START_NAME,
|
|
54
73
|
FOLLOWUP_ACTION,
|
|
55
74
|
SESSION_START_METADATA_SLOT,
|
|
56
|
-
|
|
75
|
+
SLOT_CONSECUTIVE_SILENCE_TIMEOUTS,
|
|
76
|
+
SLOT_SILENCE_TIMEOUT,
|
|
77
|
+
USER_INTENT_RESTART,
|
|
57
78
|
USER_INTENT_SILENCE_TIMEOUT,
|
|
58
79
|
)
|
|
59
80
|
from rasa.shared.core.events import (
|
|
81
|
+
ActionExecuted,
|
|
60
82
|
ActionExecutionRejected,
|
|
61
83
|
BotUttered,
|
|
62
84
|
Event,
|
|
@@ -64,37 +86,25 @@ from rasa.shared.core.events import (
|
|
|
64
86
|
ReminderScheduled,
|
|
65
87
|
SlotSet,
|
|
66
88
|
UserUttered,
|
|
67
|
-
ActionExecuted,
|
|
68
|
-
)
|
|
69
|
-
from rasa.shared.constants import (
|
|
70
|
-
ASSISTANT_ID_KEY,
|
|
71
|
-
DOCS_URL_DOMAINS,
|
|
72
|
-
DEFAULT_SENDER_ID,
|
|
73
|
-
ROUTE_TO_CALM_SLOT,
|
|
74
|
-
DOCS_URL_NLU_BASED_POLICIES,
|
|
75
|
-
UTTER_PREFIX,
|
|
76
|
-
RASA_PATTERN_CANNOT_HANDLE_INVALID_INTENT,
|
|
77
89
|
)
|
|
78
|
-
from rasa.core.
|
|
79
|
-
from rasa.core.lock_store import LockStore
|
|
80
|
-
from rasa.utils.common import TempDirectoryPath, get_temp_dir_name
|
|
81
|
-
import rasa.core.tracker_store
|
|
82
|
-
import rasa.core.actions.action
|
|
83
|
-
import rasa.shared.core.trackers
|
|
90
|
+
from rasa.shared.core.flows import FlowsList
|
|
84
91
|
from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
|
|
92
|
+
from rasa.shared.data import TrainingType, create_regex_pattern_reader
|
|
85
93
|
from rasa.shared.nlu.constants import (
|
|
86
94
|
COMMANDS,
|
|
87
95
|
ENTITIES,
|
|
96
|
+
FULL_RETRIEVAL_INTENT_NAME_KEY,
|
|
88
97
|
INTENT,
|
|
89
98
|
INTENT_NAME_KEY,
|
|
90
99
|
INTENT_RESPONSE_KEY,
|
|
100
|
+
PREDICTED_COMMANDS,
|
|
91
101
|
PREDICTED_CONFIDENCE_KEY,
|
|
92
|
-
FULL_RETRIEVAL_INTENT_NAME_KEY,
|
|
93
|
-
RESPONSE_SELECTOR,
|
|
94
102
|
RESPONSE,
|
|
103
|
+
RESPONSE_SELECTOR,
|
|
95
104
|
TEXT,
|
|
96
105
|
)
|
|
97
106
|
from rasa.shared.nlu.training_data.message import Message
|
|
107
|
+
from rasa.utils.common import TempDirectoryPath, get_temp_dir_name
|
|
98
108
|
from rasa.utils.endpoints import EndpointConfig
|
|
99
109
|
|
|
100
110
|
if TYPE_CHECKING:
|
|
@@ -198,10 +208,7 @@ class MessageProcessor:
|
|
|
198
208
|
)
|
|
199
209
|
return None
|
|
200
210
|
|
|
201
|
-
|
|
202
|
-
tracker = await self.run_action_extract_slots(
|
|
203
|
-
message.output_channel, tracker
|
|
204
|
-
)
|
|
211
|
+
tracker = await self.run_action_extract_slots(message.output_channel, tracker)
|
|
205
212
|
|
|
206
213
|
await self._run_prediction_loop(message.output_channel, tracker)
|
|
207
214
|
|
|
@@ -215,7 +222,9 @@ class MessageProcessor:
|
|
|
215
222
|
return None
|
|
216
223
|
|
|
217
224
|
async def run_action_extract_slots(
|
|
218
|
-
self,
|
|
225
|
+
self,
|
|
226
|
+
output_channel: OutputChannel,
|
|
227
|
+
tracker: DialogueStateTracker,
|
|
219
228
|
) -> DialogueStateTracker:
|
|
220
229
|
"""Run action to extract slots and update the tracker accordingly.
|
|
221
230
|
|
|
@@ -230,6 +239,10 @@ class MessageProcessor:
|
|
|
230
239
|
ACTION_EXTRACT_SLOTS, self.domain, self.action_endpoint
|
|
231
240
|
)
|
|
232
241
|
metadata = await self._add_flows_to_metadata()
|
|
242
|
+
metadata[KEY_IS_CALM_SYSTEM] = self.message_contains_commands(
|
|
243
|
+
tracker.latest_message
|
|
244
|
+
)
|
|
245
|
+
metadata[KEY_IS_COEXISTENCE_ASSISTANT] = self._is_coexistence_assistant(tracker)
|
|
233
246
|
|
|
234
247
|
extraction_events = await action_extract_slots.run(
|
|
235
248
|
output_channel, self.nlg, tracker, self.domain, metadata
|
|
@@ -818,9 +831,7 @@ class MessageProcessor:
|
|
|
818
831
|
return parse_data
|
|
819
832
|
|
|
820
833
|
def _sanitize_message(self, message: UserMessage) -> UserMessage:
|
|
821
|
-
"""Sanitize user message by removing prepended slashes before the
|
|
822
|
-
actual content.
|
|
823
|
-
"""
|
|
834
|
+
"""Sanitize user message by removing prepended slashes before the content."""
|
|
824
835
|
# Regex pattern to match leading slashes and any whitespace before
|
|
825
836
|
# actual content
|
|
826
837
|
pattern = r"^[/\s]+"
|
|
@@ -898,9 +909,14 @@ class MessageProcessor:
|
|
|
898
909
|
NLUCommandAdapter,
|
|
899
910
|
)
|
|
900
911
|
|
|
912
|
+
message = Message(parse_data)
|
|
901
913
|
commands = NLUCommandAdapter.convert_nlu_to_commands(
|
|
902
|
-
|
|
914
|
+
message, tracker, await self.get_flows(), self.domain
|
|
903
915
|
)
|
|
916
|
+
add_commands_to_message_parse_data(
|
|
917
|
+
message, NLUCommandAdapter.__name__, commands
|
|
918
|
+
)
|
|
919
|
+
parse_data[PREDICTED_COMMANDS] = message.get(PREDICTED_COMMANDS, [])
|
|
904
920
|
|
|
905
921
|
# if there are no converted commands and parsed data contains invalid intent
|
|
906
922
|
# add CannotHandleCommand as fallback
|
|
@@ -921,9 +937,7 @@ class MessageProcessor:
|
|
|
921
937
|
return [command.as_dict() for command in commands]
|
|
922
938
|
|
|
923
939
|
def _contains_undefined_intent(self, message: Message) -> bool:
|
|
924
|
-
"""Checks if the message contains an intent
|
|
925
|
-
in the domain.
|
|
926
|
-
"""
|
|
940
|
+
"""Checks if the message contains an undefined intent."""
|
|
927
941
|
intent_name = message.get(INTENT, {}).get("name")
|
|
928
942
|
return intent_name is not None and intent_name not in self.domain.intents
|
|
929
943
|
|
|
@@ -987,6 +1001,8 @@ class MessageProcessor:
|
|
|
987
1001
|
if parse_data["entities"]:
|
|
988
1002
|
self._log_slots(tracker)
|
|
989
1003
|
|
|
1004
|
+
plugin_manager().hook.after_new_user_message(tracker=tracker)
|
|
1005
|
+
|
|
990
1006
|
logger.debug(
|
|
991
1007
|
f"Logged UserUtterance - tracker now has {len(tracker.events)} events."
|
|
992
1008
|
)
|
|
@@ -1245,6 +1261,12 @@ class MessageProcessor:
|
|
|
1245
1261
|
# events and return values are used to update
|
|
1246
1262
|
# the tracker state after an action has been taken
|
|
1247
1263
|
try:
|
|
1264
|
+
validate_frames: List[ValidateSlotPatternFlowStackFrame] = []
|
|
1265
|
+
# check if the last action was a correction action
|
|
1266
|
+
# before validating the corrected slots
|
|
1267
|
+
if tracker.latest_action_name == ACTION_CORRECT_FLOW_SLOT:
|
|
1268
|
+
tracker, validate_frames = self.validate_corrected_slots(tracker)
|
|
1269
|
+
|
|
1248
1270
|
# Use temporary tracker as we might need to discard the policy events in
|
|
1249
1271
|
# case of a rejection.
|
|
1250
1272
|
temporary_tracker = tracker.copy()
|
|
@@ -1256,6 +1278,12 @@ class MessageProcessor:
|
|
|
1256
1278
|
|
|
1257
1279
|
if isinstance(action, FormAction):
|
|
1258
1280
|
flows_metadata = await self._add_flows_to_metadata()
|
|
1281
|
+
flows_metadata[KEY_IS_CALM_SYSTEM] = self.message_contains_commands(
|
|
1282
|
+
temporary_tracker.latest_message
|
|
1283
|
+
)
|
|
1284
|
+
flows_metadata[KEY_IS_COEXISTENCE_ASSISTANT] = (
|
|
1285
|
+
self._is_coexistence_assistant(temporary_tracker)
|
|
1286
|
+
)
|
|
1259
1287
|
metadata = prediction.action_metadata or {}
|
|
1260
1288
|
metadata.update(flows_metadata)
|
|
1261
1289
|
|
|
@@ -1270,6 +1298,15 @@ class MessageProcessor:
|
|
|
1270
1298
|
events = await action.run(
|
|
1271
1299
|
output_channel, nlg, temporary_tracker, self.domain
|
|
1272
1300
|
)
|
|
1301
|
+
|
|
1302
|
+
if validate_frames:
|
|
1303
|
+
stack = tracker.stack
|
|
1304
|
+
for frame in validate_frames:
|
|
1305
|
+
stack.push(frame)
|
|
1306
|
+
new_events = tracker.create_stack_updated_events(stack)
|
|
1307
|
+
tracker.update_with_events(new_events)
|
|
1308
|
+
|
|
1309
|
+
self._log_action_and_events_on_tracker(tracker, action, events, prediction)
|
|
1273
1310
|
except ActionExecutionRejection:
|
|
1274
1311
|
events = [
|
|
1275
1312
|
ActionExecutionRejected(
|
|
@@ -1278,7 +1315,7 @@ class MessageProcessor:
|
|
|
1278
1315
|
]
|
|
1279
1316
|
tracker.update(events[0])
|
|
1280
1317
|
return self.should_predict_another_action(action.name())
|
|
1281
|
-
except Exception:
|
|
1318
|
+
except Exception as e:
|
|
1282
1319
|
structlogger.exception(
|
|
1283
1320
|
"rasa.core.processor.run_action.exception",
|
|
1284
1321
|
event_info=f"Encountered an exception while "
|
|
@@ -1287,9 +1324,15 @@ class MessageProcessor:
|
|
|
1287
1324
|
f"Please check the logs of your action server for "
|
|
1288
1325
|
f"more information.",
|
|
1289
1326
|
)
|
|
1327
|
+
error_messge = str(e)
|
|
1290
1328
|
events = []
|
|
1291
|
-
|
|
1292
|
-
|
|
1329
|
+
self._log_action_prediction_on_tracker(
|
|
1330
|
+
tracker,
|
|
1331
|
+
action,
|
|
1332
|
+
prediction,
|
|
1333
|
+
was_successful=False,
|
|
1334
|
+
error_message=error_messge,
|
|
1335
|
+
)
|
|
1293
1336
|
|
|
1294
1337
|
if any(isinstance(e, UserUttered) for e in events):
|
|
1295
1338
|
logger.debug(
|
|
@@ -1305,10 +1348,10 @@ class MessageProcessor:
|
|
|
1305
1348
|
self._log_slots(tracker)
|
|
1306
1349
|
|
|
1307
1350
|
await self.execute_side_effects(events, tracker, output_channel)
|
|
1308
|
-
|
|
1351
|
+
plugin_manager().hook.after_action_executed(tracker=tracker)
|
|
1309
1352
|
return self.should_predict_another_action(action.name())
|
|
1310
1353
|
|
|
1311
|
-
def
|
|
1354
|
+
def _log_action_and_events_on_tracker(
|
|
1312
1355
|
self,
|
|
1313
1356
|
tracker: DialogueStateTracker,
|
|
1314
1357
|
action: Action,
|
|
@@ -1325,16 +1368,9 @@ class MessageProcessor:
|
|
|
1325
1368
|
isinstance(event, ActionExecutionRejected) for event in events
|
|
1326
1369
|
)
|
|
1327
1370
|
if not action_was_rejected_manually:
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
prediction_events=copy.deepcopy(prediction.events),
|
|
1331
|
-
policy_name=prediction.policy_name,
|
|
1332
|
-
action_name=action.name(),
|
|
1371
|
+
self._log_action_prediction_on_tracker(
|
|
1372
|
+
tracker, action, prediction, was_successful=True, error_message=None
|
|
1333
1373
|
)
|
|
1334
|
-
tracker.update_with_events(prediction.events)
|
|
1335
|
-
|
|
1336
|
-
# log the action and its produced events
|
|
1337
|
-
tracker.update(action.event_for_successful_execution(prediction))
|
|
1338
1374
|
|
|
1339
1375
|
structlogger.debug(
|
|
1340
1376
|
"processor.actions.log",
|
|
@@ -1343,6 +1379,29 @@ class MessageProcessor:
|
|
|
1343
1379
|
)
|
|
1344
1380
|
tracker.update_with_events(events)
|
|
1345
1381
|
|
|
1382
|
+
def _log_action_prediction_on_tracker(
|
|
1383
|
+
self,
|
|
1384
|
+
tracker: DialogueStateTracker,
|
|
1385
|
+
action: Action,
|
|
1386
|
+
prediction: PolicyPrediction,
|
|
1387
|
+
was_successful: bool,
|
|
1388
|
+
error_message: Optional[str],
|
|
1389
|
+
) -> None:
|
|
1390
|
+
structlogger.debug(
|
|
1391
|
+
"processor.actions.policy_prediction",
|
|
1392
|
+
prediction_events=copy.deepcopy(prediction.events),
|
|
1393
|
+
policy_name=prediction.policy_name,
|
|
1394
|
+
action_name=action.name(),
|
|
1395
|
+
)
|
|
1396
|
+
tracker.update_with_events(prediction.events)
|
|
1397
|
+
|
|
1398
|
+
# log the action and its produced events
|
|
1399
|
+
tracker.update(
|
|
1400
|
+
action.event_for_successful_execution(
|
|
1401
|
+
prediction, was_successful, error_message
|
|
1402
|
+
)
|
|
1403
|
+
)
|
|
1404
|
+
|
|
1346
1405
|
def _has_session_expired(self, tracker: DialogueStateTracker) -> bool:
|
|
1347
1406
|
"""Determine whether the latest session in `tracker` has expired.
|
|
1348
1407
|
|
|
@@ -1441,25 +1500,59 @@ class MessageProcessor:
|
|
|
1441
1500
|
return len(filtered_commands) > 0
|
|
1442
1501
|
|
|
1443
1502
|
def _is_calm_assistant(self) -> bool:
|
|
1444
|
-
"""Inspects the nodes of the graph schema to
|
|
1445
|
-
|
|
1503
|
+
"""Inspects the nodes of the graph schema to decide if we are in CALM.
|
|
1504
|
+
|
|
1505
|
+
To determine whether we are in CALM mode, we check if any node is
|
|
1506
|
+
associated with the `FlowPolicy`, which is indicative of a
|
|
1446
1507
|
CALM assistant setup.
|
|
1447
1508
|
|
|
1448
1509
|
Returns:
|
|
1449
1510
|
bool: True if any node in the graph schema uses `FlowPolicy`.
|
|
1450
1511
|
"""
|
|
1512
|
+
flow_policy_class_path = "rasa.core.policies.flow_policy.FlowPolicy"
|
|
1513
|
+
return self._is_component_present_in_graph_nodes(flow_policy_class_path)
|
|
1514
|
+
|
|
1515
|
+
@staticmethod
|
|
1516
|
+
def _is_coexistence_assistant(tracker: DialogueStateTracker) -> bool:
|
|
1517
|
+
"""Inspect the tracker to decide if we are in coexistence.
|
|
1518
|
+
|
|
1519
|
+
Returns:
|
|
1520
|
+
bool: True if the tracker contains the routine slot.
|
|
1521
|
+
"""
|
|
1522
|
+
return tracker.slots.get(ROUTE_TO_CALM_SLOT) is not None
|
|
1523
|
+
|
|
1524
|
+
def _is_component_present_in_graph_nodes(self, component_path: Text) -> bool:
|
|
1525
|
+
"""Check if a component is present in the graph nodes.
|
|
1526
|
+
|
|
1527
|
+
Args:
|
|
1528
|
+
component_path: The path of the component to check for.
|
|
1529
|
+
|
|
1530
|
+
Returns:
|
|
1531
|
+
`True` if the component is present in the graph nodes, `False` otherwise.
|
|
1532
|
+
"""
|
|
1451
1533
|
# Get the graph schema's nodes from the graph runner.
|
|
1452
1534
|
nodes: dict[str, Any] = self.graph_runner._graph_schema.nodes # type: ignore[attr-defined]
|
|
1453
1535
|
|
|
1454
|
-
flow_policy_class_path = "rasa.core.policies.flow_policy.FlowPolicy"
|
|
1455
|
-
# Iterate over the nodes and check if any node uses `FlowPolicy`.
|
|
1456
1536
|
for node_name, schema_node in nodes.items():
|
|
1457
1537
|
if (
|
|
1458
1538
|
schema_node.uses is not None
|
|
1459
1539
|
and f"{schema_node.uses.__module__}.{schema_node.uses.__name__}"
|
|
1460
|
-
==
|
|
1540
|
+
== component_path
|
|
1461
1541
|
):
|
|
1462
1542
|
return True
|
|
1463
1543
|
|
|
1464
|
-
# Return False if no node is found using `FlowPolicy`.
|
|
1465
1544
|
return False
|
|
1545
|
+
|
|
1546
|
+
def validate_corrected_slots(
|
|
1547
|
+
self,
|
|
1548
|
+
tracker: DialogueStateTracker,
|
|
1549
|
+
) -> Tuple[DialogueStateTracker, List[ValidateSlotPatternFlowStackFrame]]:
|
|
1550
|
+
"""Validate the slots that were corrected in the tracker."""
|
|
1551
|
+
prior_tracker_events = list(reversed(tracker.events))
|
|
1552
|
+
tracker, validate_frames = create_validate_frames_from_slot_set_events(
|
|
1553
|
+
tracker,
|
|
1554
|
+
prior_tracker_events,
|
|
1555
|
+
should_break=True,
|
|
1556
|
+
)
|
|
1557
|
+
|
|
1558
|
+
return tracker, validate_frames
|
rasa/core/run.py
CHANGED
|
@@ -19,7 +19,6 @@ from typing import (
|
|
|
19
19
|
|
|
20
20
|
from sanic import Sanic
|
|
21
21
|
from sanic.worker.loader import AppLoader
|
|
22
|
-
from rasa.core.channels.development_inspector import DevelopmentInspectProxy
|
|
23
22
|
|
|
24
23
|
import rasa.core.utils
|
|
25
24
|
import rasa.shared.utils.common
|
|
@@ -33,6 +32,7 @@ from rasa.core import agent, channels, constants
|
|
|
33
32
|
from rasa.core.agent import Agent
|
|
34
33
|
from rasa.core.channels import console
|
|
35
34
|
from rasa.core.channels.channel import InputChannel
|
|
35
|
+
from rasa.core.channels.development_inspector import DevelopmentInspectProxy
|
|
36
36
|
from rasa.core.persistor import StorageType
|
|
37
37
|
from rasa.core.utils import AvailableEndpoints
|
|
38
38
|
from rasa.plugin import plugin_manager
|
|
@@ -283,9 +283,10 @@ def serve_application(
|
|
|
283
283
|
endpoints.lock_store if endpoints else None
|
|
284
284
|
)
|
|
285
285
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
286
|
+
if not inspect:
|
|
287
|
+
telemetry.track_server_start(
|
|
288
|
+
input_channels, endpoints, model_path, number_of_workers, enable_api
|
|
289
|
+
)
|
|
289
290
|
|
|
290
291
|
rasa.utils.common.update_sanic_log_level(
|
|
291
292
|
log_file, use_syslog, syslog_address, syslog_port, syslog_protocol
|
|
@@ -2,15 +2,14 @@ import logging
|
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
from typing import Any, Dict, List, Optional, Text, Union, cast
|
|
4
4
|
|
|
5
|
-
from rasa.shared.exceptions import RasaException
|
|
6
|
-
from rasa.utils.endpoints import EndpointConfig
|
|
7
|
-
|
|
8
5
|
from rasa.core.secrets_manager.constants import (
|
|
9
6
|
SECRET_KEY_LABEL,
|
|
10
7
|
SECRET_MANAGER_PREFIX,
|
|
11
8
|
SOURCE_KEY_LABEL,
|
|
12
9
|
SUPPORTED_SECRET_MANAGERS,
|
|
13
10
|
)
|
|
11
|
+
from rasa.shared.exceptions import RasaException
|
|
12
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
14
13
|
|
|
15
14
|
logger = logging.getLogger(__name__)
|
|
16
15
|
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from typing import Optional, Text, cast
|
|
3
3
|
|
|
4
|
-
from rasa.shared.exceptions import RasaException
|
|
5
|
-
from rasa.utils.endpoints import EndpointConfig, read_endpoint_config
|
|
6
|
-
|
|
7
4
|
from rasa.core.secrets_manager.constants import (
|
|
8
5
|
SECRET_MANAGER_ENV_NAME,
|
|
9
6
|
VAULT_DEFAULT_RASA_SECRETS_PATH,
|
|
@@ -29,6 +26,8 @@ from rasa.core.secrets_manager.vault import (
|
|
|
29
26
|
VaultSecretManagerNonStrictConfig,
|
|
30
27
|
VaultSecretsManager,
|
|
31
28
|
)
|
|
29
|
+
from rasa.shared.exceptions import RasaException
|
|
30
|
+
from rasa.utils.endpoints import EndpointConfig, read_endpoint_config
|
|
32
31
|
|
|
33
32
|
|
|
34
33
|
def create(config: SecretManagerConfig) -> Optional[SecretsManager]:
|
|
@@ -5,14 +5,13 @@ import copy
|
|
|
5
5
|
import logging
|
|
6
6
|
from typing import Any, ClassVar, Dict, List, Optional, Text, cast
|
|
7
7
|
|
|
8
|
-
from rasa.shared.exceptions import RasaException
|
|
9
|
-
from rasa.utils.endpoints import EndpointConfig
|
|
10
|
-
|
|
11
8
|
from rasa.core.secrets_manager.endpoints import (
|
|
12
9
|
CredentialsLocation,
|
|
13
10
|
EndpointReader,
|
|
14
11
|
EndpointTrait,
|
|
15
12
|
)
|
|
13
|
+
from rasa.shared.exceptions import RasaException
|
|
14
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
16
15
|
from rasa.utils.singleton import Singleton
|
|
17
16
|
|
|
18
17
|
logger = logging.getLogger(__name__)
|
|
@@ -9,8 +9,6 @@ from typing import Any, Dict, Optional, Text, Union, cast
|
|
|
9
9
|
import hvac.exceptions
|
|
10
10
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
11
11
|
from apscheduler.triggers.interval import IntervalTrigger
|
|
12
|
-
from rasa.shared.exceptions import RasaException
|
|
13
|
-
from rasa.utils.endpoints import EndpointConfig
|
|
14
12
|
|
|
15
13
|
from rasa.core.secrets_manager.constants import (
|
|
16
14
|
TRACKER_STORE_ENDPOINT_TYPE,
|
|
@@ -25,6 +23,8 @@ from rasa.core.secrets_manager.endpoints import (
|
|
|
25
23
|
TrackerStoreEndpointValidator,
|
|
26
24
|
)
|
|
27
25
|
from rasa.core.secrets_manager.secret_manager import SecretManagerConfig, SecretsManager
|
|
26
|
+
from rasa.shared.exceptions import RasaException
|
|
27
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
28
28
|
|
|
29
29
|
logger = logging.getLogger(__name__)
|
|
30
30
|
|
rasa/core/test.py
CHANGED
|
@@ -1,73 +1,72 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
|
-
from pathlib import Path
|
|
4
3
|
import tempfile
|
|
5
4
|
import warnings as pywarnings
|
|
6
5
|
from collections import defaultdict, namedtuple
|
|
7
|
-
from
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, cast
|
|
8
8
|
|
|
9
|
+
import rasa.shared.utils.io
|
|
9
10
|
from rasa import telemetry
|
|
11
|
+
from rasa.constants import PERCENTAGE_KEY, RESULTS_FILE
|
|
12
|
+
from rasa.core.actions.action import ActionRetrieveResponse
|
|
13
|
+
from rasa.core.channels import UserMessage
|
|
10
14
|
from rasa.core.constants import (
|
|
11
15
|
CONFUSION_MATRIX_STORIES_FILE,
|
|
12
|
-
REPORT_STORIES_FILE,
|
|
13
16
|
FAILED_STORIES_FILE,
|
|
14
|
-
|
|
17
|
+
REPORT_STORIES_FILE,
|
|
15
18
|
STORIES_WITH_WARNINGS_FILE,
|
|
19
|
+
SUCCESSFUL_STORIES_FILE,
|
|
16
20
|
)
|
|
17
|
-
from rasa.core.channels import UserMessage
|
|
18
21
|
from rasa.core.policies.policy import PolicyPrediction
|
|
22
|
+
from rasa.exceptions import ActionLimitReached
|
|
23
|
+
from rasa.nlu.constants import (
|
|
24
|
+
RESPONSE_SELECTOR_DEFAULT_INTENT,
|
|
25
|
+
RESPONSE_SELECTOR_PROPERTY_NAME,
|
|
26
|
+
RESPONSE_SELECTOR_RETRIEVAL_INTENTS,
|
|
27
|
+
TOKENS_NAMES,
|
|
28
|
+
)
|
|
19
29
|
from rasa.nlu.test import EntityEvaluationResult, evaluate_entities
|
|
20
30
|
from rasa.nlu.tokenizers.tokenizer import Token
|
|
21
31
|
from rasa.shared.constants import ROUTE_TO_CALM_SLOT
|
|
22
32
|
from rasa.shared.core.constants import (
|
|
23
|
-
POLICIES_THAT_EXTRACT_ENTITIES,
|
|
24
33
|
ACTION_UNLIKELY_INTENT_NAME,
|
|
34
|
+
POLICIES_THAT_EXTRACT_ENTITIES,
|
|
25
35
|
)
|
|
26
|
-
from rasa.shared.
|
|
27
|
-
|
|
36
|
+
from rasa.shared.core.domain import Domain
|
|
37
|
+
from rasa.shared.core.events import ActionExecuted, EntitiesAdded, SlotSet, UserUttered
|
|
38
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
28
39
|
from rasa.shared.core.training_data.story_writer.yaml_story_writer import (
|
|
29
40
|
YAMLStoryWriter,
|
|
30
41
|
)
|
|
31
42
|
from rasa.shared.core.training_data.structures import StoryStep
|
|
32
|
-
from rasa.shared.
|
|
33
|
-
from rasa.
|
|
34
|
-
RESPONSE_SELECTOR_DEFAULT_INTENT,
|
|
35
|
-
RESPONSE_SELECTOR_RETRIEVAL_INTENTS,
|
|
36
|
-
TOKENS_NAMES,
|
|
37
|
-
RESPONSE_SELECTOR_PROPERTY_NAME,
|
|
38
|
-
)
|
|
43
|
+
from rasa.shared.exceptions import RasaException
|
|
44
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
39
45
|
from rasa.shared.nlu.constants import (
|
|
40
|
-
INTENT,
|
|
41
46
|
ENTITIES,
|
|
42
|
-
ENTITY_ATTRIBUTE_VALUE,
|
|
43
|
-
ENTITY_ATTRIBUTE_START,
|
|
44
47
|
ENTITY_ATTRIBUTE_END,
|
|
45
|
-
|
|
48
|
+
ENTITY_ATTRIBUTE_START,
|
|
49
|
+
ENTITY_ATTRIBUTE_TEXT,
|
|
46
50
|
ENTITY_ATTRIBUTE_TYPE,
|
|
47
|
-
|
|
51
|
+
ENTITY_ATTRIBUTE_VALUE,
|
|
52
|
+
EXTRACTOR,
|
|
53
|
+
FULL_RETRIEVAL_INTENT_NAME_KEY,
|
|
54
|
+
INTENT,
|
|
48
55
|
INTENT_NAME_KEY,
|
|
56
|
+
INTENT_RESPONSE_KEY,
|
|
49
57
|
RESPONSE,
|
|
50
58
|
RESPONSE_SELECTOR,
|
|
51
|
-
FULL_RETRIEVAL_INTENT_NAME_KEY,
|
|
52
59
|
TEXT,
|
|
53
|
-
ENTITY_ATTRIBUTE_TEXT,
|
|
54
60
|
)
|
|
55
|
-
from rasa.constants import RESULTS_FILE, PERCENTAGE_KEY
|
|
56
|
-
from rasa.shared.core.events import ActionExecuted, EntitiesAdded, UserUttered, SlotSet
|
|
57
|
-
from rasa.shared.core.trackers import DialogueStateTracker
|
|
58
61
|
from rasa.shared.nlu.training_data.formats.readerwriter import TrainingDataWriter
|
|
59
|
-
from rasa.shared.importers.importer import TrainingDataImporter
|
|
60
62
|
from rasa.shared.utils.io import DEFAULT_ENCODING
|
|
61
63
|
from rasa.utils.tensorflow.constants import QUERY_INTENT_KEY, SEVERITY_KEY
|
|
62
|
-
from rasa.exceptions import ActionLimitReached
|
|
63
|
-
|
|
64
|
-
from rasa.core.actions.action import ActionRetrieveResponse
|
|
65
64
|
|
|
66
65
|
if TYPE_CHECKING:
|
|
67
66
|
from rasa.core.agent import Agent
|
|
68
67
|
from rasa.core.processor import MessageProcessor
|
|
68
|
+
from rasa.shared.core.events import EntityPrediction, Event
|
|
69
69
|
from rasa.shared.core.generator import TrainingDataGenerator
|
|
70
|
-
from rasa.shared.core.events import Event, EntityPrediction
|
|
71
70
|
|
|
72
71
|
logger = logging.getLogger(__name__)
|
|
73
72
|
|
|
@@ -1226,6 +1225,7 @@ def _plot_story_evaluation(
|
|
|
1226
1225
|
"""Plot a confusion matrix of story evaluation."""
|
|
1227
1226
|
from sklearn.metrics import confusion_matrix
|
|
1228
1227
|
from sklearn.utils.multiclass import unique_labels
|
|
1228
|
+
|
|
1229
1229
|
from rasa.utils.plotting import plot_confusion_matrix
|
|
1230
1230
|
|
|
1231
1231
|
confusion_matrix_filename = CONFUSION_MATRIX_STORIES_FILE
|