rasa-pro 3.12.21__py3-none-any.whl → 3.13.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.
- rasa/__main__.py +3 -4
- rasa/api.py +1 -1
- rasa/cli/dialogue_understanding_test.py +1 -1
- rasa/cli/e2e_test.py +1 -8
- rasa/cli/evaluate.py +2 -2
- rasa/cli/export.py +5 -3
- rasa/cli/inspect.py +7 -0
- rasa/cli/llm_fine_tuning.py +1 -1
- rasa/cli/project_templates/default/config.yml +5 -32
- rasa/cli/project_templates/{calm → default}/e2e_tests/cancelations/user_cancels_during_a_correction.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/corrections/user_corrects_contact_handle.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/corrections/user_corrects_contact_name.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_lists_contacts.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_removes_contact.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_removes_contact_from_list.yml +1 -1
- rasa/cli/project_templates/default/endpoints.yml +18 -2
- rasa/cli/project_templates/defaults.py +133 -0
- rasa/cli/project_templates/tutorial/config.yml +1 -1
- rasa/cli/project_templates/tutorial/endpoints.yml +1 -1
- rasa/cli/run.py +1 -1
- rasa/cli/scaffold.py +2 -3
- rasa/cli/shell.py +6 -1
- rasa/cli/studio/download.py +0 -22
- rasa/cli/studio/link.py +36 -0
- rasa/cli/studio/pull.py +79 -0
- rasa/cli/studio/push.py +78 -0
- rasa/cli/studio/studio.py +12 -0
- rasa/cli/studio/train.py +1 -5
- rasa/cli/studio/upload.py +6 -4
- rasa/cli/train.py +5 -1
- rasa/cli/utils.py +1 -1
- rasa/cli/x.py +1 -1
- rasa/constants.py +2 -0
- rasa/core/__init__.py +0 -16
- rasa/core/actions/action.py +43 -29
- rasa/core/actions/action_repeat_bot_messages.py +18 -22
- rasa/core/actions/action_run_slot_rejections.py +1 -2
- rasa/core/agent.py +24 -3
- rasa/core/available_endpoints.py +146 -0
- rasa/core/brokers/kafka.py +4 -0
- rasa/core/brokers/pika.py +5 -2
- rasa/core/brokers/sql.py +1 -1
- rasa/core/channels/__init__.py +3 -0
- rasa/core/channels/botframework.py +2 -2
- rasa/core/channels/channel.py +2 -2
- rasa/core/channels/development_inspector.py +1 -1
- rasa/core/channels/facebook.py +1 -4
- rasa/core/channels/hangouts.py +8 -5
- rasa/core/channels/inspector/.eslintrc.cjs +12 -6
- rasa/core/channels/inspector/.prettierrc +5 -0
- rasa/core/channels/inspector/README.md +11 -5
- rasa/core/channels/inspector/dist/assets/{arc-9f75cc3b.js → arc-371401b1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-7f34db23.js → blockDiagram-38ab4fdb-3f126156.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-948bab2c.js → c4Diagram-3d4e48cf-12f22eb7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-f1efda17.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-53b0dd0e.js → classDiagram-70f12bd4-03b1d386.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-fdf789e7.js → classDiagram-v2-f2320105-84f69d63.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-fdf164e2.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-87c4ece5.js → createText-2e5e7dd3-ca47fd38.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-5a8b0749.js → edges-e0da2a9e-f837ca8a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-66da90e2.js → erDiagram-9861fffd-8717ac54.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-10044f05.js → flowDb-956e92f1-94f38b83.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f338f66a.js → flowDiagram-66a62f08-b616f9fb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-7d7a1629.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-b13140aa.js → flowchart-elk-definition-4a651766-f5d24bb8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-f2b4a55a.js → ganttDiagram-c361ad54-b43ba8d9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-dedc298d.js → gitGraphDiagram-72cf32ee-c3aafaa5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-4ede11ff.js → graph-0d0a2c10.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-65549d37.js → index-3862675e-58ea0305.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3a23e736.js → index-cce6f8a1.js} +123 -123
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-65439671.js → infoDiagram-f8f76790-b8f60461.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-56d03d98.js → journeyDiagram-49397b02-95be5545.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-dd48f7f4.js → layout-da885b9b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-1569ad2c.js → line-f1c817d3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-48bf4935.js → linear-d42801e6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-688504c1.js → mindmap-definition-fc14e90a-a38923a6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78b6d7e6.js → pieDiagram-8a3498a8-ca6e71e9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-048b84b3.js → quadrantDiagram-120e2f19-b290dae9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-dd67f107.js → requirementDiagram-deff3bca-03f02ceb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-8128436e.js → sankeyDiagram-04a897e0-c49eee40.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-1a0d1461.js → sequenceDiagram-704730f1-b2cd6a3d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-46d388ed.js → stateDiagram-587899a1-e53a2028.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-ea42951a.js → stateDiagram-v2-d93cdb3a-e1982a03.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-7427ed0c.js → styles-6aaf32cf-d0226ca5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-ff5e5a16.js → styles-9a916d00-0e21dc00.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-7b3680cf.js → styles-c10674c1-9588494e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-f860f2ad.js → svgDrawCommon-08f97a94-be478d4f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-2eebf0c8.js → timeline-definition-85554ec2-74631749.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-5d7f4e96.js → xychartDiagram-e933f94c-a043552f.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +3 -1
- rasa/core/channels/inspector/src/App.tsx +91 -90
- rasa/core/channels/inspector/src/components/Chat.tsx +45 -41
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +40 -40
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +57 -57
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +36 -27
- rasa/core/channels/inspector/src/components/ExpandIcon.tsx +4 -4
- rasa/core/channels/inspector/src/components/FullscreenButton.tsx +7 -7
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +28 -12
- rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +9 -9
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +5 -5
- rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +55 -60
- rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +5 -5
- rasa/core/channels/inspector/src/components/Slots.tsx +22 -22
- rasa/core/channels/inspector/src/components/Welcome.tsx +28 -31
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +245 -0
- rasa/core/channels/inspector/src/helpers/audio/microphone-processor.js +12 -0
- rasa/core/channels/inspector/src/helpers/audio/playback-processor.js +36 -0
- rasa/core/channels/inspector/src/helpers/conversation.ts +7 -7
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +181 -181
- rasa/core/channels/inspector/src/helpers/formatters.ts +111 -111
- rasa/core/channels/inspector/src/helpers/utils.ts +78 -61
- rasa/core/channels/inspector/src/main.tsx +8 -8
- rasa/core/channels/inspector/src/theme/Button/Button.ts +8 -8
- rasa/core/channels/inspector/src/theme/Heading/Heading.ts +7 -7
- rasa/core/channels/inspector/src/theme/Input/Input.ts +9 -9
- rasa/core/channels/inspector/src/theme/Link/Link.ts +6 -6
- rasa/core/channels/inspector/src/theme/Modal/Modal.ts +13 -13
- rasa/core/channels/inspector/src/theme/Table/Table.tsx +10 -10
- rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +5 -5
- rasa/core/channels/inspector/src/theme/base/breakpoints.ts +7 -7
- rasa/core/channels/inspector/src/theme/base/colors.ts +64 -64
- rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +21 -18
- rasa/core/channels/inspector/src/theme/base/radii.ts +8 -8
- rasa/core/channels/inspector/src/theme/base/shadows.ts +5 -5
- rasa/core/channels/inspector/src/theme/base/sizes.ts +5 -5
- rasa/core/channels/inspector/src/theme/base/space.ts +12 -12
- rasa/core/channels/inspector/src/theme/base/styles.ts +5 -5
- rasa/core/channels/inspector/src/theme/base/typography.ts +12 -12
- rasa/core/channels/inspector/src/theme/base/zIndices.ts +3 -3
- rasa/core/channels/inspector/src/theme/index.ts +38 -38
- rasa/core/channels/inspector/src/types.ts +56 -50
- rasa/core/channels/inspector/yarn.lock +5 -0
- rasa/core/channels/mattermost.py +1 -1
- rasa/core/channels/rasa_chat.py +2 -4
- rasa/core/channels/rest.py +5 -4
- rasa/core/channels/socketio.py +56 -41
- rasa/core/channels/studio_chat.py +329 -68
- rasa/core/channels/vier_cvg.py +1 -2
- rasa/core/channels/voice_ready/audiocodes.py +4 -11
- rasa/core/channels/voice_ready/jambonz.py +5 -6
- rasa/core/channels/voice_ready/twilio_voice.py +13 -12
- rasa/core/channels/voice_ready/utils.py +22 -0
- rasa/core/channels/voice_stream/audiocodes.py +13 -16
- rasa/core/channels/voice_stream/browser_audio.py +1 -1
- rasa/core/channels/voice_stream/genesys.py +37 -18
- rasa/core/channels/voice_stream/jambonz.py +232 -0
- rasa/core/channels/voice_stream/tts/__init__.py +8 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +15 -12
- rasa/core/channels/voice_stream/voice_channel.py +71 -27
- rasa/core/concurrent_lock_store.py +24 -10
- rasa/core/evaluation/marker_tracker_loader.py +1 -1
- rasa/core/exporter.py +37 -1
- rasa/core/http_interpreter.py +3 -7
- rasa/core/information_retrieval/faiss.py +18 -11
- rasa/core/information_retrieval/ingestion/faq_parser.py +158 -0
- rasa/core/jobs.py +2 -1
- rasa/core/lock_store.py +151 -60
- rasa/core/nlg/contextual_response_rephraser.py +17 -7
- rasa/core/nlg/generator.py +5 -22
- rasa/core/nlg/interpolator.py +2 -3
- rasa/core/nlg/response.py +6 -43
- rasa/core/nlg/summarize.py +1 -1
- rasa/core/nlg/translate.py +0 -8
- rasa/core/policies/enterprise_search_policy.py +305 -189
- rasa/core/policies/enterprise_search_policy_config.py +241 -0
- rasa/core/policies/enterprise_search_prompt_with_relevancy_check_and_citation_template.jinja2 +67 -0
- rasa/core/policies/flow_policy.py +1 -1
- rasa/core/policies/flows/flow_executor.py +102 -17
- rasa/core/policies/intentless_policy.py +56 -17
- rasa/core/processor.py +70 -49
- rasa/core/run.py +33 -11
- rasa/core/tracker_stores/__init__.py +0 -0
- rasa/core/{auth_retry_tracker_store.py → tracker_stores/auth_retry_tracker_store.py} +66 -1
- rasa/core/tracker_stores/dynamo_tracker_store.py +256 -0
- rasa/core/tracker_stores/mongo_tracker_store.py +223 -0
- rasa/core/tracker_stores/redis_tracker_store.py +252 -0
- rasa/core/tracker_stores/sql_tracker_store.py +582 -0
- rasa/core/tracker_stores/tracker_store.py +839 -0
- rasa/core/training/interactive.py +1 -1
- rasa/core/utils.py +24 -95
- rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -1
- rasa/dialogue_understanding/coexistence/llm_based_router.py +13 -11
- rasa/dialogue_understanding/commands/can_not_handle_command.py +2 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +3 -1
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +2 -0
- rasa/dialogue_understanding/commands/clarify_command.py +6 -2
- rasa/dialogue_understanding/commands/command_syntax_manager.py +1 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +5 -6
- rasa/dialogue_understanding/commands/error_command.py +1 -1
- rasa/dialogue_understanding/commands/human_handoff_command.py +3 -3
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +2 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +2 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +8 -4
- rasa/dialogue_understanding/commands/skip_question_command.py +3 -3
- rasa/dialogue_understanding/commands/start_flow_command.py +7 -3
- rasa/dialogue_understanding/generator/__init__.py +7 -1
- rasa/dialogue_understanding/generator/command_generator.py +4 -2
- rasa/dialogue_understanding/generator/command_parser.py +2 -2
- rasa/dialogue_understanding/generator/command_parser_validator.py +63 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +1 -2
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +3 -2
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +2 -2
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_template.jinja2 +0 -2
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +1 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +1 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +79 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +79 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +26 -461
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +147 -0
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +461 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +20 -64
- rasa/dialogue_understanding/patterns/cancel.py +1 -2
- rasa/dialogue_understanding/patterns/clarify.py +1 -1
- rasa/dialogue_understanding/patterns/correction.py +2 -2
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +42 -27
- rasa/dialogue_understanding/patterns/domain_for_patterns.py +190 -0
- rasa/dialogue_understanding/processor/command_processor.py +6 -7
- rasa/dialogue_understanding_test/command_metric_calculation.py +7 -40
- rasa/dialogue_understanding_test/command_metrics.py +38 -0
- rasa/dialogue_understanding_test/du_test_case.py +58 -25
- rasa/dialogue_understanding_test/du_test_result.py +228 -132
- rasa/dialogue_understanding_test/du_test_runner.py +11 -2
- rasa/dialogue_understanding_test/du_test_schema.yml +3 -3
- rasa/dialogue_understanding_test/io.py +35 -8
- rasa/e2e_test/constants.py +1 -1
- rasa/e2e_test/e2e_test_runner.py +1 -1
- rasa/e2e_test/e2e_test_schema.yml +3 -3
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +2 -2
- rasa/engine/recipes/default_recipe.py +1 -1
- rasa/engine/validation.py +3 -2
- rasa/hooks.py +2 -30
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +2 -6
- rasa/model_manager/model_api.py +89 -1
- rasa/model_manager/runner_service.py +20 -4
- rasa/model_manager/socket_bridge.py +0 -7
- rasa/model_manager/trainer_service.py +10 -4
- rasa/plugin.py +2 -15
- rasa/privacy/__init__.py +0 -0
- rasa/privacy/constants.py +83 -0
- rasa/privacy/event_broker_utils.py +77 -0
- rasa/privacy/privacy_config.py +281 -0
- rasa/privacy/privacy_config_schema.json +86 -0
- rasa/privacy/privacy_filter.py +393 -0
- rasa/privacy/privacy_manager.py +594 -0
- rasa/server.py +23 -2
- rasa/shared/constants.py +17 -0
- rasa/shared/core/command_payload_reader.py +1 -5
- rasa/shared/core/constants.py +4 -3
- rasa/shared/core/domain.py +172 -11
- rasa/shared/core/events.py +100 -6
- rasa/shared/core/flows/flow.py +30 -5
- rasa/shared/core/flows/flow_step.py +19 -3
- rasa/shared/core/flows/flow_step_links.py +15 -0
- rasa/shared/core/flows/flow_step_sequence.py +6 -0
- rasa/shared/core/flows/flows_yaml_schema.json +3 -0
- rasa/shared/core/flows/nlu_trigger.py +13 -0
- rasa/shared/core/flows/steps/action.py +7 -4
- rasa/shared/core/flows/steps/call.py +11 -4
- rasa/shared/core/flows/steps/collect.py +71 -6
- rasa/shared/core/flows/steps/internal.py +6 -1
- rasa/shared/core/flows/steps/link.py +7 -4
- rasa/shared/core/flows/steps/no_operation.py +7 -4
- rasa/shared/core/flows/steps/set_slots.py +8 -4
- rasa/shared/core/flows/validation.py +25 -5
- rasa/shared/core/flows/yaml_flows_io.py +106 -5
- rasa/shared/core/slots.py +29 -1
- rasa/shared/core/trackers.py +21 -10
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +1 -4
- rasa/shared/importers/importer.py +8 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +2 -2
- rasa/shared/providers/_configs/default_litellm_client_config.py +1 -1
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +1 -1
- rasa/shared/providers/_configs/openai_client_config.py +1 -1
- rasa/shared/providers/_configs/rasa_llm_client_config.py +1 -1
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +1 -1
- rasa/shared/providers/_configs/utils.py +0 -99
- rasa/shared/providers/llm/default_litellm_llm_client.py +2 -2
- rasa/shared/utils/common.py +43 -1
- rasa/shared/utils/configs.py +110 -0
- rasa/shared/utils/constants.py +0 -3
- rasa/shared/utils/llm.py +245 -8
- rasa/shared/utils/pykwalify_extensions.py +0 -9
- rasa/shared/utils/yaml.py +32 -0
- rasa/studio/constants.py +1 -0
- rasa/studio/data_handler.py +33 -12
- rasa/studio/download.py +117 -435
- rasa/studio/link.py +211 -0
- rasa/studio/prompts.py +221 -0
- rasa/studio/pull/__init__.py +0 -0
- rasa/studio/pull/data.py +222 -0
- rasa/studio/pull/domains.py +60 -0
- rasa/studio/pull/pull.py +239 -0
- rasa/studio/push.py +138 -0
- rasa/studio/results_logger.py +6 -1
- rasa/studio/train.py +1 -1
- rasa/studio/upload.py +243 -72
- rasa/studio/utils.py +33 -0
- rasa/telemetry.py +83 -26
- rasa/tracing/config.py +4 -5
- rasa/tracing/constants.py +19 -1
- rasa/tracing/instrumentation/attribute_extractors.py +68 -16
- rasa/tracing/instrumentation/instrumentation.py +54 -3
- rasa/tracing/instrumentation/metrics.py +98 -15
- rasa/tracing/metric_instrument_provider.py +75 -3
- rasa/utils/common.py +43 -22
- rasa/utils/endpoints.py +22 -1
- rasa/utils/licensing.py +2 -3
- rasa/utils/log_utils.py +1 -45
- rasa/validator.py +2 -8
- rasa/version.py +1 -1
- {rasa_pro-3.12.21.dist-info → rasa_pro-3.13.0.dist-info}/METADATA +13 -14
- {rasa_pro-3.12.21.dist-info → rasa_pro-3.13.0.dist-info}/RECORD +333 -309
- rasa/anonymization/__init__.py +0 -2
- rasa/anonymization/anonymisation_rule_yaml_reader.py +0 -91
- rasa/anonymization/anonymization_pipeline.py +0 -286
- rasa/anonymization/anonymization_rule_executor.py +0 -266
- rasa/anonymization/anonymization_rule_orchestrator.py +0 -119
- rasa/anonymization/schemas/config.yml +0 -47
- rasa/anonymization/utils.py +0 -118
- rasa/cli/project_templates/calm/config.yml +0 -10
- rasa/cli/project_templates/calm/credentials.yml +0 -33
- rasa/cli/project_templates/calm/endpoints.yml +0 -58
- rasa/cli/project_templates/default/actions/actions.py +0 -27
- rasa/cli/project_templates/default/data/nlu.yml +0 -91
- rasa/cli/project_templates/default/data/rules.yml +0 -13
- rasa/cli/project_templates/default/data/stories.yml +0 -30
- rasa/cli/project_templates/default/domain.yml +0 -34
- rasa/cli/project_templates/default/tests/test_stories.yml +0 -91
- rasa/core/channels/inspector/dist/assets/channel-dfa68278.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-edb7f119.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-65e7c670.js +0 -1
- rasa/core/channels/inspector/src/helpers/audiostream.ts +0 -191
- rasa/core/tracker_store.py +0 -1792
- /rasa/cli/project_templates/{calm → default}/actions/action_template.py +0 -0
- /rasa/cli/project_templates/{calm → default}/actions/add_contact.py +0 -0
- /rasa/cli/project_templates/{calm → default}/actions/db.py +0 -0
- /rasa/cli/project_templates/{calm → default}/actions/list_contacts.py +0 -0
- /rasa/cli/project_templates/{calm → default}/actions/remove_contact.py +0 -0
- /rasa/cli/project_templates/{calm → default}/data/flows/add_contact.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/data/flows/list_contacts.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/data/flows/remove_contact.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/db/contacts.json +0 -0
- /rasa/cli/project_templates/{calm → default}/domain/add_contact.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/domain/list_contacts.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/domain/remove_contact.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/domain/shared.yml +0 -0
- /rasa/{cli/project_templates/calm/actions → core/information_retrieval/ingestion}/__init__.py +0 -0
- {rasa_pro-3.12.21.dist-info → rasa_pro-3.13.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.12.21.dist-info → rasa_pro-3.13.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.12.21.dist-info → rasa_pro-3.13.0.dist-info}/entry_points.txt +0 -0
rasa/cli/studio/push.py
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
from typing import List, Text
|
|
3
|
+
|
|
4
|
+
from rasa.cli import SubParsersAction
|
|
5
|
+
from rasa.cli.arguments.default_arguments import (
|
|
6
|
+
add_config_param,
|
|
7
|
+
add_data_param,
|
|
8
|
+
add_domain_param,
|
|
9
|
+
add_endpoint_param,
|
|
10
|
+
)
|
|
11
|
+
from rasa.shared.constants import (
|
|
12
|
+
DEFAULT_DOMAIN_PATH,
|
|
13
|
+
DEFAULT_ENDPOINTS_PATH,
|
|
14
|
+
)
|
|
15
|
+
from rasa.studio.push import (
|
|
16
|
+
handle_push,
|
|
17
|
+
handle_push_config,
|
|
18
|
+
handle_push_endpoints,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def add_subparser(
|
|
23
|
+
subparsers: SubParsersAction,
|
|
24
|
+
parents: List[argparse.ArgumentParser],
|
|
25
|
+
domain: Text = DEFAULT_DOMAIN_PATH,
|
|
26
|
+
) -> None:
|
|
27
|
+
"""Register the `rasa studio push` command and its sub-commands.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
subparsers: The subparsers to add the command to.
|
|
31
|
+
parents: Parent parsers, needed to ensure tree structure in argparse
|
|
32
|
+
domain: Path to the assistant's domain file.
|
|
33
|
+
"""
|
|
34
|
+
push_parser = subparsers.add_parser(
|
|
35
|
+
"push",
|
|
36
|
+
parents=parents,
|
|
37
|
+
conflict_handler="resolve",
|
|
38
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
39
|
+
help="Push assistant data to Rasa Studio.",
|
|
40
|
+
)
|
|
41
|
+
push_subparsers = push_parser.add_subparsers()
|
|
42
|
+
|
|
43
|
+
# Arguments for pushing configuration only
|
|
44
|
+
config_parser = push_subparsers.add_parser(
|
|
45
|
+
"config",
|
|
46
|
+
parents=parents,
|
|
47
|
+
conflict_handler="resolve",
|
|
48
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
49
|
+
help="Push only the assistant configuration file.",
|
|
50
|
+
)
|
|
51
|
+
add_config_param(config_parser)
|
|
52
|
+
config_parser.set_defaults(func=handle_push_config)
|
|
53
|
+
|
|
54
|
+
# Arguments for pushing endpoints only
|
|
55
|
+
endpoints_parser = push_subparsers.add_parser(
|
|
56
|
+
"endpoints",
|
|
57
|
+
parents=parents,
|
|
58
|
+
conflict_handler="resolve",
|
|
59
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
60
|
+
help="Push ONLY the endpoints configuration file.",
|
|
61
|
+
)
|
|
62
|
+
add_endpoint_param(
|
|
63
|
+
endpoints_parser,
|
|
64
|
+
"Configuration file for the model endpoints.",
|
|
65
|
+
default=DEFAULT_ENDPOINTS_PATH,
|
|
66
|
+
)
|
|
67
|
+
endpoints_parser.set_defaults(func=handle_push_endpoints)
|
|
68
|
+
|
|
69
|
+
# Arguments for pushing the whole assistant data
|
|
70
|
+
add_domain_param(push_parser, domain)
|
|
71
|
+
add_data_param(push_parser)
|
|
72
|
+
add_config_param(push_parser)
|
|
73
|
+
add_endpoint_param(
|
|
74
|
+
push_parser,
|
|
75
|
+
"Configuration file for the model endpoints.",
|
|
76
|
+
default=DEFAULT_ENDPOINTS_PATH,
|
|
77
|
+
)
|
|
78
|
+
push_parser.set_defaults(func=handle_push)
|
rasa/cli/studio/studio.py
CHANGED
|
@@ -5,10 +5,15 @@ from urllib.parse import ParseResult, urlparse
|
|
|
5
5
|
import questionary
|
|
6
6
|
|
|
7
7
|
import rasa.cli.studio.download
|
|
8
|
+
import rasa.cli.studio.link
|
|
9
|
+
import rasa.cli.studio.pull
|
|
10
|
+
import rasa.cli.studio.push
|
|
8
11
|
import rasa.cli.studio.train
|
|
9
12
|
import rasa.cli.studio.upload
|
|
10
13
|
import rasa.shared.utils.cli
|
|
11
14
|
from rasa.cli import SubParsersAction
|
|
15
|
+
from rasa.cli.utils import get_validated_path
|
|
16
|
+
from rasa.shared.constants import DEFAULT_DOMAIN_PATH, DEFAULT_DOMAIN_PATHS
|
|
12
17
|
from rasa.studio.auth import StudioAuth
|
|
13
18
|
from rasa.studio.config import StudioConfig
|
|
14
19
|
|
|
@@ -33,6 +38,13 @@ def add_subparser(
|
|
|
33
38
|
rasa.cli.studio.upload.add_subparser(studio_subparsers, parents)
|
|
34
39
|
rasa.cli.studio.download.add_subparser(studio_subparsers, parents)
|
|
35
40
|
|
|
41
|
+
domain = get_validated_path(
|
|
42
|
+
DEFAULT_DOMAIN_PATH, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
|
|
43
|
+
)
|
|
44
|
+
rasa.cli.studio.link.add_subparser(studio_subparsers, parents, domain)
|
|
45
|
+
rasa.cli.studio.push.add_subparser(studio_subparsers, parents, domain)
|
|
46
|
+
rasa.cli.studio.pull.add_subparser(studio_subparsers, parents, domain)
|
|
47
|
+
|
|
36
48
|
_add_config_subparser(studio_subparsers, parents)
|
|
37
49
|
_add_login_subparser(studio_subparsers, parents)
|
|
38
50
|
|
rasa/cli/studio/train.py
CHANGED
|
@@ -20,10 +20,7 @@ def add_subparser(
|
|
|
20
20
|
parents=parents,
|
|
21
21
|
conflict_handler="resolve",
|
|
22
22
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
23
|
-
help=
|
|
24
|
-
"Trains a Rasa model using Rasa Studio "
|
|
25
|
-
"data and your NLU data and stories."
|
|
26
|
-
),
|
|
23
|
+
help="Trains a Rasa model using Rasa Studio data.",
|
|
27
24
|
)
|
|
28
25
|
|
|
29
26
|
train_parser.set_defaults(func=handle_train)
|
|
@@ -36,7 +33,6 @@ def set_studio_train_arguments(parser: argparse.ArgumentParser) -> None:
|
|
|
36
33
|
parser.add_argument(
|
|
37
34
|
"assistant_name",
|
|
38
35
|
default=None,
|
|
39
|
-
nargs=1,
|
|
40
36
|
type=str,
|
|
41
37
|
help="Name of the assistant on Rasa Studio",
|
|
42
38
|
)
|
rasa/cli/studio/upload.py
CHANGED
|
@@ -25,7 +25,7 @@ def add_subparser(
|
|
|
25
25
|
parents=parents,
|
|
26
26
|
conflict_handler="resolve",
|
|
27
27
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
28
|
-
help="Upload primitives to Rasa Studio.
|
|
28
|
+
help="Upload primitives to Rasa Studio.",
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
upload_parser.set_defaults(func=handle_upload)
|
|
@@ -56,7 +56,9 @@ def set_upload_arguments(parser: argparse.ArgumentParser) -> None:
|
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
parser.add_argument(
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
"assistant_name",
|
|
60
|
+
default=None,
|
|
61
|
+
nargs="?",
|
|
62
|
+
type=str,
|
|
63
|
+
help="Name of the assistant on Rasa Studio",
|
|
62
64
|
)
|
rasa/cli/train.py
CHANGED
|
@@ -11,7 +11,7 @@ import rasa.cli.utils
|
|
|
11
11
|
import rasa.core.utils
|
|
12
12
|
import rasa.utils.common
|
|
13
13
|
from rasa.cli import SubParsersAction
|
|
14
|
-
from rasa.core import ContextualResponseRephraser
|
|
14
|
+
from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
|
|
15
15
|
from rasa.core.nlg.generator import NaturalLanguageGenerator
|
|
16
16
|
from rasa.core.train import do_compare_training
|
|
17
17
|
from rasa.engine.validation import validate_api_type_config_key_usage
|
|
@@ -112,6 +112,10 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
|
|
|
112
112
|
)
|
|
113
113
|
config = rasa.cli.utils.get_validated_config(args.config, CONFIG_MANDATORY_KEYS)
|
|
114
114
|
|
|
115
|
+
# Validates and loads endpoints with proper endpoint file location
|
|
116
|
+
# This will initialise the endpoints singleton properly so that
|
|
117
|
+
# it can be used safely throughout the codebase with
|
|
118
|
+
# `AvailableEndpoints.get_instance()`
|
|
115
119
|
_check_nlg_endpoint_validity(args.endpoints)
|
|
116
120
|
|
|
117
121
|
training_files = [
|
rasa/cli/utils.py
CHANGED
|
@@ -104,7 +104,7 @@ def get_validated_path(
|
|
|
104
104
|
parameter=parameter,
|
|
105
105
|
event_info=(f"Parameter '{parameter}' was not set. {shared_info}"),
|
|
106
106
|
)
|
|
107
|
-
|
|
107
|
+
elif current not in default_options:
|
|
108
108
|
structlogger.warn(
|
|
109
109
|
"cli.get_validated_path.path_does_not_exists",
|
|
110
110
|
path=current,
|
rasa/cli/x.py
CHANGED
|
@@ -15,7 +15,7 @@ import rasa.utils.common
|
|
|
15
15
|
import rasa.utils.io
|
|
16
16
|
from rasa.cli import SubParsersAction
|
|
17
17
|
from rasa.cli.arguments import x as arguments
|
|
18
|
-
from rasa.core.
|
|
18
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
19
19
|
from rasa.shared.constants import (
|
|
20
20
|
DEFAULT_CREDENTIALS_PATH,
|
|
21
21
|
DEFAULT_ENDPOINTS_PATH,
|
rasa/constants.py
CHANGED
rasa/core/__init__.py
CHANGED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
import rasa
|
|
4
|
-
from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
|
|
5
|
-
from rasa.core.policies.enterprise_search_policy import EnterpriseSearchPolicy
|
|
6
|
-
from rasa.core.policies.intentless_policy import IntentlessPolicy
|
|
7
|
-
|
|
8
|
-
logging.getLogger(__name__).addHandler(logging.NullHandler())
|
|
9
|
-
|
|
10
|
-
__version__ = rasa.__version__
|
|
11
|
-
|
|
12
|
-
__all__ = [
|
|
13
|
-
"EnterpriseSearchPolicy",
|
|
14
|
-
"IntentlessPolicy",
|
|
15
|
-
"ContextualResponseRephraser",
|
|
16
|
-
]
|
rasa/core/actions/action.py
CHANGED
|
@@ -23,9 +23,11 @@ from rasa.core.constants import (
|
|
|
23
23
|
KEY_IS_COEXISTENCE_ASSISTANT,
|
|
24
24
|
UTTER_SOURCE_METADATA_KEY,
|
|
25
25
|
)
|
|
26
|
+
from rasa.core.nlg.translate import get_translated_buttons, get_translated_text
|
|
26
27
|
from rasa.core.policies.policy import PolicyPrediction
|
|
27
28
|
from rasa.core.utils import add_bot_utterance_metadata
|
|
28
29
|
from rasa.e2e_test.constants import KEY_STUB_CUSTOM_ACTIONS
|
|
30
|
+
from rasa.engine.language import Language
|
|
29
31
|
from rasa.nlu.constants import (
|
|
30
32
|
RESPONSE_SELECTOR_DEFAULT_INTENT,
|
|
31
33
|
RESPONSE_SELECTOR_PREDICTION_KEY,
|
|
@@ -82,6 +84,7 @@ from rasa.shared.core.events import (
|
|
|
82
84
|
UserUttered,
|
|
83
85
|
)
|
|
84
86
|
from rasa.shared.core.flows import FlowsList
|
|
87
|
+
from rasa.shared.core.flows.constants import KEY_TRANSLATION
|
|
85
88
|
from rasa.shared.core.slot_mappings import (
|
|
86
89
|
SlotFillingManager,
|
|
87
90
|
extract_slot_value,
|
|
@@ -248,25 +251,36 @@ def action_for_name_or_text(
|
|
|
248
251
|
return RemoteAction(action_name_or_text, action_endpoint)
|
|
249
252
|
|
|
250
253
|
|
|
251
|
-
def create_bot_utterance(
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
CUSTOM: message.pop(CUSTOM, None),
|
|
266
|
-
},
|
|
267
|
-
metadata=message,
|
|
254
|
+
def create_bot_utterance(
|
|
255
|
+
message: Dict[Text, Any], language: Optional[Language] = None
|
|
256
|
+
) -> BotUttered:
|
|
257
|
+
"""Create BotUttered event from message with translation support."""
|
|
258
|
+
message_copy = copy.deepcopy(message)
|
|
259
|
+
|
|
260
|
+
text = get_translated_text(
|
|
261
|
+
text=message_copy.pop(TEXT, None),
|
|
262
|
+
translation=message_copy.pop(KEY_TRANSLATION, {}),
|
|
263
|
+
language=language,
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
buttons = get_translated_buttons(
|
|
267
|
+
buttons=message_copy.pop(BUTTONS, None), language=language
|
|
268
268
|
)
|
|
269
|
-
|
|
269
|
+
|
|
270
|
+
data = {
|
|
271
|
+
ELEMENTS: message_copy.pop(ELEMENTS, None),
|
|
272
|
+
QUICK_REPLIES: message_copy.pop(QUICK_REPLIES, None),
|
|
273
|
+
BUTTONS: buttons,
|
|
274
|
+
# for legacy / compatibility reasons we need to set the image
|
|
275
|
+
# to be the attachment if there is no other attachment (the
|
|
276
|
+
# `.get` is intentional - no `pop` as we still need the image`
|
|
277
|
+
# property to set it in the following line)
|
|
278
|
+
ATTACHMENT: message_copy.pop(ATTACHMENT, None) or message_copy.get(IMAGE, None),
|
|
279
|
+
IMAGE: message_copy.pop(IMAGE, None),
|
|
280
|
+
CUSTOM: message_copy.pop(CUSTOM, None),
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return BotUttered(text=text, data=data, metadata=message_copy)
|
|
270
284
|
|
|
271
285
|
|
|
272
286
|
class Action:
|
|
@@ -379,7 +393,7 @@ class ActionBotResponse(Action):
|
|
|
379
393
|
message = add_bot_utterance_metadata(
|
|
380
394
|
message, self.utter_action, nlg, domain, tracker
|
|
381
395
|
)
|
|
382
|
-
return [create_bot_utterance(message)]
|
|
396
|
+
return [create_bot_utterance(message, tracker.current_language)]
|
|
383
397
|
|
|
384
398
|
def name(self) -> Text:
|
|
385
399
|
"""Returns action name."""
|
|
@@ -413,7 +427,7 @@ class ActionEndToEndResponse(Action):
|
|
|
413
427
|
) -> List[Event]:
|
|
414
428
|
"""Runs action (see parent class for full docstring)."""
|
|
415
429
|
message = {"text": self.action_text}
|
|
416
|
-
return [create_bot_utterance(message)]
|
|
430
|
+
return [create_bot_utterance(message, tracker.current_language)]
|
|
417
431
|
|
|
418
432
|
def event_for_successful_execution(
|
|
419
433
|
self,
|
|
@@ -879,10 +893,7 @@ class RemoteAction(Action):
|
|
|
879
893
|
generated_response = response.pop("response", None)
|
|
880
894
|
if generated_response is not None:
|
|
881
895
|
draft = await nlg.generate(
|
|
882
|
-
generated_response,
|
|
883
|
-
tracker,
|
|
884
|
-
output_channel.name(),
|
|
885
|
-
**response,
|
|
896
|
+
generated_response, tracker, output_channel.name(), **response
|
|
886
897
|
)
|
|
887
898
|
if not draft:
|
|
888
899
|
continue
|
|
@@ -898,9 +909,9 @@ class RemoteAction(Action):
|
|
|
898
909
|
draft["buttons"].extend(buttons)
|
|
899
910
|
|
|
900
911
|
# Avoid overwriting `draft` values with empty values
|
|
901
|
-
response = {k: v for k, v in response.items() if v
|
|
912
|
+
response = {k: v for k, v in response.items() if v}
|
|
902
913
|
draft.update(response)
|
|
903
|
-
bot_messages.append(create_bot_utterance(draft))
|
|
914
|
+
bot_messages.append(create_bot_utterance(draft, tracker.current_language))
|
|
904
915
|
|
|
905
916
|
return bot_messages
|
|
906
917
|
|
|
@@ -1057,7 +1068,6 @@ def _revert_rephrasing_events() -> List[Event]:
|
|
|
1057
1068
|
]
|
|
1058
1069
|
|
|
1059
1070
|
|
|
1060
|
-
# TODO: this should be removed, e.g. it uses a hardcoded message and no translation
|
|
1061
1071
|
class ActionDefaultAskAffirmation(Action):
|
|
1062
1072
|
"""Default implementation which asks the user to affirm his intent.
|
|
1063
1073
|
|
|
@@ -1109,7 +1119,7 @@ class ActionDefaultAskAffirmation(Action):
|
|
|
1109
1119
|
"utter_action": self.name(),
|
|
1110
1120
|
}
|
|
1111
1121
|
|
|
1112
|
-
return [create_bot_utterance(message)]
|
|
1122
|
+
return [create_bot_utterance(message, tracker.current_language)]
|
|
1113
1123
|
|
|
1114
1124
|
|
|
1115
1125
|
class ActionDefaultAskRephrase(ActionBotResponse):
|
|
@@ -1142,7 +1152,11 @@ class ActionSendText(Action):
|
|
|
1142
1152
|
fallback = {"text": ""}
|
|
1143
1153
|
metadata_copy = copy.deepcopy(metadata) if metadata else {}
|
|
1144
1154
|
message = metadata_copy.get("message", fallback)
|
|
1145
|
-
|
|
1155
|
+
|
|
1156
|
+
should_send_text = metadata_copy.get("should_send_text", True)
|
|
1157
|
+
if should_send_text:
|
|
1158
|
+
return [create_bot_utterance(message, tracker.current_language)]
|
|
1159
|
+
return []
|
|
1146
1160
|
|
|
1147
1161
|
|
|
1148
1162
|
class ActionExtractSlots(Action):
|
|
@@ -25,7 +25,7 @@ class ActionRepeatBotMessages(Action):
|
|
|
25
25
|
"""Return the name of the action."""
|
|
26
26
|
return ACTION_REPEAT_BOT_MESSAGES
|
|
27
27
|
|
|
28
|
-
def _get_last_bot_events(self, tracker: DialogueStateTracker) -> List[
|
|
28
|
+
def _get_last_bot_events(self, tracker: DialogueStateTracker) -> List[BotUttered]:
|
|
29
29
|
"""Get the last consecutive bot events before the most recent user message.
|
|
30
30
|
|
|
31
31
|
This function scans the dialogue history in reverse to find the last sequence of
|
|
@@ -48,33 +48,21 @@ class ActionRepeatBotMessages(Action):
|
|
|
48
48
|
The elif condition doesn't break when it sees User3 event.
|
|
49
49
|
But it does at User2 event.
|
|
50
50
|
"""
|
|
51
|
-
# Skip action if we are in a collect information step whose
|
|
52
|
-
# default behavior is to repeat anyways
|
|
53
|
-
top_frame = tracker.stack.top(
|
|
54
|
-
lambda frame: isinstance(frame, RepeatBotMessagesPatternFlowStackFrame)
|
|
55
|
-
or isinstance(frame, UserSilencePatternFlowStackFrame)
|
|
56
|
-
)
|
|
57
|
-
if isinstance(top_frame, CollectInformationPatternFlowStackFrame):
|
|
58
|
-
return []
|
|
59
51
|
# filter user and bot events
|
|
60
|
-
|
|
52
|
+
user_and_bot_events = [
|
|
61
53
|
e for e in tracker.events if isinstance(e, (BotUttered, UserUttered))
|
|
62
54
|
]
|
|
63
|
-
|
|
55
|
+
last_bot_events: List[BotUttered] = []
|
|
64
56
|
|
|
65
57
|
# find the last BotUttered events
|
|
66
|
-
for e in reversed(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
bot_events.insert(0, e)
|
|
70
|
-
|
|
71
|
-
# stop if a UserUttered event is found
|
|
72
|
-
# only if we have collected some bot events already
|
|
73
|
-
# this condition skips the first N UserUttered events
|
|
74
|
-
elif bot_events:
|
|
58
|
+
for e in reversed(user_and_bot_events):
|
|
59
|
+
# stop when seeing a user event after having seen bot events already
|
|
60
|
+
if isinstance(e, UserUttered) and len(last_bot_events) > 0:
|
|
75
61
|
break
|
|
62
|
+
elif isinstance(e, BotUttered):
|
|
63
|
+
last_bot_events.append(e)
|
|
76
64
|
|
|
77
|
-
return
|
|
65
|
+
return list(reversed(last_bot_events))
|
|
78
66
|
|
|
79
67
|
async def run(
|
|
80
68
|
self,
|
|
@@ -85,5 +73,13 @@ class ActionRepeatBotMessages(Action):
|
|
|
85
73
|
metadata: Optional[Dict[str, Any]] = None,
|
|
86
74
|
) -> List[Event]:
|
|
87
75
|
"""Send the last bot messages to the channel again"""
|
|
88
|
-
|
|
76
|
+
top_frame = tracker.stack.top(
|
|
77
|
+
lambda frame: isinstance(frame, RepeatBotMessagesPatternFlowStackFrame)
|
|
78
|
+
or isinstance(frame, UserSilencePatternFlowStackFrame)
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
bot_events: List[Event] = list(self._get_last_bot_events(tracker))
|
|
82
|
+
# drop the last bot event in a collect step as that part will be repeated anyway
|
|
83
|
+
if isinstance(top_frame, CollectInformationPatternFlowStackFrame):
|
|
84
|
+
bot_events = bot_events[:-1]
|
|
89
85
|
return bot_events
|
|
@@ -105,7 +105,6 @@ def run_rejections(
|
|
|
105
105
|
structlogger.error(
|
|
106
106
|
"run.predicate.error",
|
|
107
107
|
predicate=condition,
|
|
108
|
-
document=document,
|
|
109
108
|
error=str(e),
|
|
110
109
|
)
|
|
111
110
|
violation = True
|
|
@@ -217,6 +216,6 @@ class ActionRunSlotRejections(Action):
|
|
|
217
216
|
message = add_bot_utterance_metadata(
|
|
218
217
|
message, utterance, nlg, domain, tracker
|
|
219
218
|
)
|
|
220
|
-
events.append(create_bot_utterance(message))
|
|
219
|
+
events.append(create_bot_utterance(message, tracker.current_language))
|
|
221
220
|
|
|
222
221
|
return events
|
rasa/core/agent.py
CHANGED
|
@@ -13,6 +13,7 @@ from aiohttp import ClientError
|
|
|
13
13
|
|
|
14
14
|
import rasa.shared.utils.io
|
|
15
15
|
from rasa.core import jobs
|
|
16
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
16
17
|
from rasa.core.channels.channel import OutputChannel, UserMessage
|
|
17
18
|
from rasa.core.constants import DEFAULT_REQUEST_TIMEOUT
|
|
18
19
|
from rasa.core.exceptions import AgentNotReady
|
|
@@ -22,18 +23,19 @@ from rasa.core.nlg import NaturalLanguageGenerator, TemplatedNaturalLanguageGene
|
|
|
22
23
|
from rasa.core.persistor import StorageType
|
|
23
24
|
from rasa.core.policies.policy import PolicyPrediction
|
|
24
25
|
from rasa.core.processor import MessageProcessor
|
|
25
|
-
from rasa.core.tracker_store import (
|
|
26
|
+
from rasa.core.tracker_stores.tracker_store import (
|
|
26
27
|
FailSafeTrackerStore,
|
|
27
28
|
InMemoryTrackerStore,
|
|
28
29
|
TrackerStore,
|
|
29
30
|
)
|
|
30
|
-
from rasa.core.utils import AvailableEndpoints
|
|
31
31
|
from rasa.exceptions import ModelNotFound
|
|
32
32
|
from rasa.nlu.utils import is_url
|
|
33
|
+
from rasa.privacy.privacy_manager import BackgroundPrivacyManager
|
|
33
34
|
from rasa.shared.constants import DEFAULT_SENDER_ID
|
|
34
35
|
from rasa.shared.core.domain import Domain
|
|
35
36
|
from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
|
|
36
37
|
from rasa.shared.exceptions import RasaException
|
|
38
|
+
from rasa.telemetry import track_privacy_enabled
|
|
37
39
|
from rasa.utils.common import TempDirectoryPath, get_temp_dir_name
|
|
38
40
|
from rasa.utils.endpoints import EndpointConfig
|
|
39
41
|
|
|
@@ -215,13 +217,14 @@ async def load_agent(
|
|
|
215
217
|
The instantiated `Agent` or `None`.
|
|
216
218
|
"""
|
|
217
219
|
from rasa.core.brokers.broker import EventBroker
|
|
218
|
-
from rasa.core.tracker_store import TrackerStore
|
|
220
|
+
from rasa.core.tracker_stores.tracker_store import TrackerStore
|
|
219
221
|
|
|
220
222
|
tracker_store = None
|
|
221
223
|
lock_store = None
|
|
222
224
|
generator = None
|
|
223
225
|
action_endpoint = None
|
|
224
226
|
http_interpreter = None
|
|
227
|
+
privacy_manager = None
|
|
225
228
|
|
|
226
229
|
if endpoints:
|
|
227
230
|
broker = await EventBroker.create(endpoints.event_broker, loop=loop)
|
|
@@ -234,6 +237,18 @@ async def load_agent(
|
|
|
234
237
|
model_server = endpoints.model if endpoints.model else model_server
|
|
235
238
|
if endpoints.nlu:
|
|
236
239
|
http_interpreter = RasaNLUHttpInterpreter(endpoints.nlu)
|
|
240
|
+
if endpoints.privacy:
|
|
241
|
+
in_memory_tracker_store = (
|
|
242
|
+
tracker_store
|
|
243
|
+
if isinstance(tracker_store, InMemoryTrackerStore)
|
|
244
|
+
else None
|
|
245
|
+
)
|
|
246
|
+
privacy_manager = await BackgroundPrivacyManager.create_instance(
|
|
247
|
+
endpoints=endpoints,
|
|
248
|
+
event_loop=loop,
|
|
249
|
+
in_memory_tracker_store=in_memory_tracker_store,
|
|
250
|
+
)
|
|
251
|
+
track_privacy_enabled(privacy_manager.config, broker)
|
|
237
252
|
|
|
238
253
|
agent = Agent(
|
|
239
254
|
generator=generator,
|
|
@@ -244,6 +259,7 @@ async def load_agent(
|
|
|
244
259
|
remote_storage=remote_storage,
|
|
245
260
|
http_interpreter=http_interpreter,
|
|
246
261
|
endpoints=endpoints,
|
|
262
|
+
privacy_manager=privacy_manager,
|
|
247
263
|
)
|
|
248
264
|
|
|
249
265
|
try:
|
|
@@ -306,6 +322,7 @@ class Agent:
|
|
|
306
322
|
remote_storage: Optional[StorageType] = None,
|
|
307
323
|
http_interpreter: Optional[RasaNLUHttpInterpreter] = None,
|
|
308
324
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
325
|
+
privacy_manager: Optional[BackgroundPrivacyManager] = None,
|
|
309
326
|
):
|
|
310
327
|
"""Initializes an `Agent`."""
|
|
311
328
|
self.domain = domain
|
|
@@ -321,6 +338,7 @@ class Agent:
|
|
|
321
338
|
self._set_fingerprint(fingerprint)
|
|
322
339
|
self.model_server = model_server
|
|
323
340
|
self.remote_storage = remote_storage
|
|
341
|
+
self.privacy_manager = privacy_manager
|
|
324
342
|
|
|
325
343
|
@classmethod
|
|
326
344
|
def load(
|
|
@@ -336,6 +354,7 @@ class Agent:
|
|
|
336
354
|
remote_storage: Optional[StorageType] = None,
|
|
337
355
|
http_interpreter: Optional[RasaNLUHttpInterpreter] = None,
|
|
338
356
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
357
|
+
privacy_manager: Optional[BackgroundPrivacyManager] = None,
|
|
339
358
|
) -> Agent:
|
|
340
359
|
"""Constructs a new agent and loads the processor and model."""
|
|
341
360
|
agent = Agent(
|
|
@@ -349,6 +368,7 @@ class Agent:
|
|
|
349
368
|
remote_storage=remote_storage,
|
|
350
369
|
http_interpreter=http_interpreter,
|
|
351
370
|
endpoints=endpoints,
|
|
371
|
+
privacy_manager=privacy_manager,
|
|
352
372
|
)
|
|
353
373
|
agent.load_model(model_path=model_path, fingerprint=fingerprint)
|
|
354
374
|
return agent
|
|
@@ -365,6 +385,7 @@ class Agent:
|
|
|
365
385
|
generator=self.nlg,
|
|
366
386
|
http_interpreter=self.http_interpreter,
|
|
367
387
|
endpoints=self.endpoints,
|
|
388
|
+
privacy_manager=self.privacy_manager,
|
|
368
389
|
)
|
|
369
390
|
self.domain = self.processor.domain
|
|
370
391
|
|