rasa-pro 3.9.18__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 +415 -0
- rasa/__init__.py +10 -0
- rasa/__main__.py +156 -0
- rasa/anonymization/__init__.py +2 -0
- rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
- rasa/anonymization/anonymization_pipeline.py +286 -0
- rasa/anonymization/anonymization_rule_executor.py +260 -0
- rasa/anonymization/anonymization_rule_orchestrator.py +120 -0
- rasa/anonymization/schemas/config.yml +47 -0
- rasa/anonymization/utils.py +118 -0
- rasa/api.py +146 -0
- rasa/cli/__init__.py +5 -0
- rasa/cli/arguments/__init__.py +0 -0
- rasa/cli/arguments/data.py +81 -0
- rasa/cli/arguments/default_arguments.py +165 -0
- rasa/cli/arguments/evaluate.py +65 -0
- rasa/cli/arguments/export.py +51 -0
- rasa/cli/arguments/interactive.py +74 -0
- rasa/cli/arguments/run.py +204 -0
- rasa/cli/arguments/shell.py +13 -0
- rasa/cli/arguments/test.py +211 -0
- rasa/cli/arguments/train.py +263 -0
- rasa/cli/arguments/visualize.py +34 -0
- rasa/cli/arguments/x.py +30 -0
- rasa/cli/data.py +292 -0
- rasa/cli/e2e_test.py +586 -0
- rasa/cli/evaluate.py +222 -0
- rasa/cli/export.py +250 -0
- rasa/cli/inspect.py +63 -0
- rasa/cli/interactive.py +164 -0
- rasa/cli/license.py +65 -0
- rasa/cli/markers.py +78 -0
- rasa/cli/project_templates/__init__.py +0 -0
- rasa/cli/project_templates/calm/actions/__init__.py +0 -0
- rasa/cli/project_templates/calm/actions/action_template.py +27 -0
- rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
- rasa/cli/project_templates/calm/actions/db.py +57 -0
- rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
- rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
- rasa/cli/project_templates/calm/config.yml +12 -0
- rasa/cli/project_templates/calm/credentials.yml +33 -0
- rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
- rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
- rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
- rasa/cli/project_templates/calm/db/contacts.json +10 -0
- rasa/cli/project_templates/calm/domain/add_contact.yml +39 -0
- rasa/cli/project_templates/calm/domain/list_contacts.yml +17 -0
- rasa/cli/project_templates/calm/domain/remove_contact.yml +38 -0
- rasa/cli/project_templates/calm/domain/shared.yml +10 -0
- rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
- rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
- rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
- rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
- rasa/cli/project_templates/calm/endpoints.yml +45 -0
- rasa/cli/project_templates/default/actions/__init__.py +0 -0
- rasa/cli/project_templates/default/actions/actions.py +27 -0
- rasa/cli/project_templates/default/config.yml +44 -0
- rasa/cli/project_templates/default/credentials.yml +33 -0
- rasa/cli/project_templates/default/data/nlu.yml +91 -0
- rasa/cli/project_templates/default/data/rules.yml +13 -0
- rasa/cli/project_templates/default/data/stories.yml +30 -0
- rasa/cli/project_templates/default/domain.yml +34 -0
- rasa/cli/project_templates/default/endpoints.yml +42 -0
- rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
- rasa/cli/project_templates/tutorial/actions.py +22 -0
- rasa/cli/project_templates/tutorial/config.yml +11 -0
- rasa/cli/project_templates/tutorial/credentials.yml +33 -0
- rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
- rasa/cli/project_templates/tutorial/data/patterns.yml +6 -0
- rasa/cli/project_templates/tutorial/domain.yml +21 -0
- rasa/cli/project_templates/tutorial/endpoints.yml +45 -0
- rasa/cli/run.py +135 -0
- rasa/cli/scaffold.py +269 -0
- rasa/cli/shell.py +141 -0
- rasa/cli/studio/__init__.py +0 -0
- rasa/cli/studio/download.py +62 -0
- rasa/cli/studio/studio.py +266 -0
- rasa/cli/studio/train.py +59 -0
- rasa/cli/studio/upload.py +77 -0
- rasa/cli/telemetry.py +102 -0
- rasa/cli/test.py +280 -0
- rasa/cli/train.py +260 -0
- rasa/cli/utils.py +464 -0
- rasa/cli/visualize.py +40 -0
- rasa/cli/x.py +206 -0
- rasa/constants.py +37 -0
- rasa/core/__init__.py +17 -0
- rasa/core/actions/__init__.py +0 -0
- rasa/core/actions/action.py +1225 -0
- rasa/core/actions/action_clean_stack.py +59 -0
- rasa/core/actions/action_exceptions.py +24 -0
- rasa/core/actions/action_run_slot_rejections.py +207 -0
- rasa/core/actions/action_trigger_chitchat.py +31 -0
- rasa/core/actions/action_trigger_flow.py +109 -0
- rasa/core/actions/action_trigger_search.py +31 -0
- rasa/core/actions/constants.py +5 -0
- rasa/core/actions/custom_action_executor.py +188 -0
- rasa/core/actions/forms.py +741 -0
- rasa/core/actions/grpc_custom_action_executor.py +251 -0
- rasa/core/actions/http_custom_action_executor.py +140 -0
- rasa/core/actions/loops.py +114 -0
- rasa/core/actions/two_stage_fallback.py +186 -0
- rasa/core/agent.py +555 -0
- rasa/core/auth_retry_tracker_store.py +122 -0
- rasa/core/brokers/__init__.py +0 -0
- rasa/core/brokers/broker.py +126 -0
- rasa/core/brokers/file.py +58 -0
- rasa/core/brokers/kafka.py +322 -0
- rasa/core/brokers/pika.py +386 -0
- rasa/core/brokers/sql.py +86 -0
- rasa/core/channels/__init__.py +55 -0
- rasa/core/channels/audiocodes.py +463 -0
- rasa/core/channels/botframework.py +338 -0
- rasa/core/channels/callback.py +84 -0
- rasa/core/channels/channel.py +419 -0
- rasa/core/channels/console.py +241 -0
- rasa/core/channels/development_inspector.py +93 -0
- rasa/core/channels/facebook.py +419 -0
- rasa/core/channels/hangouts.py +329 -0
- rasa/core/channels/inspector/.eslintrc.cjs +25 -0
- rasa/core/channels/inspector/.gitignore +23 -0
- rasa/core/channels/inspector/README.md +54 -0
- rasa/core/channels/inspector/assets/favicon.ico +0 -0
- rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
- rasa/core/channels/inspector/custom.d.ts +3 -0
- rasa/core/channels/inspector/dist/assets/arc-b6e548fe.js +1 -0
- rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-fa03ac9e.js +10 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-ee67392a.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-9b283fae.js +2 -0
- rasa/core/channels/inspector/dist/assets/createText-62fc7601-8b6fcc2a.js +7 -0
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-22e77f4f.js +4 -0
- rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-60ffc87f.js +51 -0
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-9dd802e4.js +6 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-5fa1912f.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-1844e5a5.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-622a1fd2.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-e285a63a.js +266 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-f237bdca.js +70 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-4b03d70e.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
- rasa/core/channels/inspector/dist/assets/index-a5d3e69d.js +1040 -0
- rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-72a0fa5f.js +7 -0
- rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
- rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-82218c41.js +139 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
- rasa/core/channels/inspector/dist/assets/layout-78cff630.js +1 -0
- rasa/core/channels/inspector/dist/assets/line-5038b469.js +1 -0
- rasa/core/channels/inspector/dist/assets/linear-c4fc4098.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-c33c8ea6.js +109 -0
- rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
- rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
- rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-a8d03059.js +35 -0
- rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-6a0e56b2.js +7 -0
- rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-2dc7c7bd.js +52 -0
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-2360fe39.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-41b9f9ad.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-0aad326f.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-9847d984.js +1 -0
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-564d890e.js +110 -0
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-38957613.js +159 -0
- rasa/core/channels/inspector/dist/assets/styles-9c745c82-f0fc6921.js +207 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-ef3c5a77.js +1 -0
- rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-bf3e91c1.js +61 -0
- rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-4d4026c0.js +7 -0
- rasa/core/channels/inspector/dist/index.html +41 -0
- rasa/core/channels/inspector/index.html +39 -0
- rasa/core/channels/inspector/jest.config.ts +13 -0
- rasa/core/channels/inspector/package.json +48 -0
- rasa/core/channels/inspector/setupTests.ts +2 -0
- rasa/core/channels/inspector/src/App.tsx +170 -0
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +107 -0
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +151 -0
- rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
- rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +19 -0
- rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
- rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
- rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
- rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +382 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +240 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +42 -0
- rasa/core/channels/inspector/src/main.tsx +13 -0
- rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
- rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
- rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
- rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
- rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
- rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
- rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
- rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
- rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
- rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
- rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
- rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
- rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
- rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
- rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
- rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
- rasa/core/channels/inspector/src/theme/index.ts +101 -0
- rasa/core/channels/inspector/src/types.ts +64 -0
- rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
- rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
- rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
- rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
- rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
- rasa/core/channels/inspector/tsconfig.json +26 -0
- rasa/core/channels/inspector/tsconfig.node.json +10 -0
- rasa/core/channels/inspector/vite.config.ts +8 -0
- rasa/core/channels/inspector/yarn.lock +6156 -0
- rasa/core/channels/mattermost.py +229 -0
- rasa/core/channels/rasa_chat.py +126 -0
- rasa/core/channels/rest.py +225 -0
- rasa/core/channels/rocketchat.py +174 -0
- rasa/core/channels/slack.py +620 -0
- rasa/core/channels/socketio.py +274 -0
- rasa/core/channels/telegram.py +298 -0
- rasa/core/channels/twilio.py +169 -0
- rasa/core/channels/twilio_voice.py +367 -0
- rasa/core/channels/vier_cvg.py +374 -0
- rasa/core/channels/webexteams.py +134 -0
- rasa/core/concurrent_lock_store.py +210 -0
- rasa/core/constants.py +107 -0
- rasa/core/evaluation/__init__.py +0 -0
- rasa/core/evaluation/marker.py +267 -0
- rasa/core/evaluation/marker_base.py +923 -0
- rasa/core/evaluation/marker_stats.py +293 -0
- rasa/core/evaluation/marker_tracker_loader.py +103 -0
- rasa/core/exceptions.py +29 -0
- rasa/core/exporter.py +284 -0
- rasa/core/featurizers/__init__.py +0 -0
- rasa/core/featurizers/precomputation.py +410 -0
- rasa/core/featurizers/single_state_featurizer.py +421 -0
- rasa/core/featurizers/tracker_featurizers.py +1262 -0
- rasa/core/http_interpreter.py +89 -0
- rasa/core/information_retrieval/__init__.py +7 -0
- rasa/core/information_retrieval/faiss.py +121 -0
- rasa/core/information_retrieval/information_retrieval.py +129 -0
- rasa/core/information_retrieval/milvus.py +52 -0
- rasa/core/information_retrieval/qdrant.py +95 -0
- rasa/core/jobs.py +63 -0
- rasa/core/lock.py +139 -0
- rasa/core/lock_store.py +343 -0
- rasa/core/migrate.py +403 -0
- rasa/core/nlg/__init__.py +3 -0
- rasa/core/nlg/callback.py +146 -0
- rasa/core/nlg/contextual_response_rephraser.py +270 -0
- rasa/core/nlg/generator.py +230 -0
- rasa/core/nlg/interpolator.py +143 -0
- rasa/core/nlg/response.py +155 -0
- rasa/core/nlg/summarize.py +69 -0
- rasa/core/policies/__init__.py +0 -0
- rasa/core/policies/ensemble.py +329 -0
- rasa/core/policies/enterprise_search_policy.py +781 -0
- rasa/core/policies/enterprise_search_prompt_template.jinja2 +25 -0
- rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +60 -0
- rasa/core/policies/flow_policy.py +205 -0
- rasa/core/policies/flows/__init__.py +0 -0
- rasa/core/policies/flows/flow_exceptions.py +44 -0
- rasa/core/policies/flows/flow_executor.py +705 -0
- rasa/core/policies/flows/flow_step_result.py +43 -0
- rasa/core/policies/intentless_policy.py +922 -0
- rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
- rasa/core/policies/memoization.py +538 -0
- rasa/core/policies/policy.py +725 -0
- rasa/core/policies/rule_policy.py +1273 -0
- rasa/core/policies/ted_policy.py +2169 -0
- rasa/core/policies/unexpected_intent_policy.py +1022 -0
- rasa/core/processor.py +1422 -0
- rasa/core/run.py +331 -0
- rasa/core/secrets_manager/__init__.py +0 -0
- rasa/core/secrets_manager/constants.py +32 -0
- rasa/core/secrets_manager/endpoints.py +391 -0
- rasa/core/secrets_manager/factory.py +233 -0
- rasa/core/secrets_manager/secret_manager.py +262 -0
- rasa/core/secrets_manager/vault.py +574 -0
- rasa/core/test.py +1335 -0
- rasa/core/tracker_store.py +1699 -0
- rasa/core/train.py +105 -0
- rasa/core/training/__init__.py +89 -0
- rasa/core/training/converters/__init__.py +0 -0
- rasa/core/training/converters/responses_prefix_converter.py +119 -0
- rasa/core/training/interactive.py +1745 -0
- rasa/core/training/story_conflict.py +381 -0
- rasa/core/training/training.py +93 -0
- rasa/core/utils.py +339 -0
- rasa/core/visualize.py +70 -0
- rasa/dialogue_understanding/__init__.py +0 -0
- rasa/dialogue_understanding/coexistence/__init__.py +0 -0
- rasa/dialogue_understanding/coexistence/constants.py +4 -0
- rasa/dialogue_understanding/coexistence/intent_based_router.py +196 -0
- rasa/dialogue_understanding/coexistence/llm_based_router.py +260 -0
- rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
- rasa/dialogue_understanding/commands/__init__.py +49 -0
- rasa/dialogue_understanding/commands/can_not_handle_command.py +70 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +125 -0
- rasa/dialogue_understanding/commands/change_flow_command.py +44 -0
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +57 -0
- rasa/dialogue_understanding/commands/clarify_command.py +86 -0
- rasa/dialogue_understanding/commands/command.py +85 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +297 -0
- rasa/dialogue_understanding/commands/error_command.py +79 -0
- rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
- rasa/dialogue_understanding/commands/handle_code_change_command.py +73 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +66 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +57 -0
- rasa/dialogue_understanding/commands/noop_command.py +54 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +160 -0
- rasa/dialogue_understanding/commands/skip_question_command.py +75 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +107 -0
- rasa/dialogue_understanding/generator/__init__.py +21 -0
- rasa/dialogue_understanding/generator/command_generator.py +343 -0
- rasa/dialogue_understanding/generator/constants.py +18 -0
- rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +412 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +467 -0
- rasa/dialogue_understanding/generator/llm_command_generator.py +67 -0
- rasa/dialogue_understanding/generator/multi_step/__init__.py +0 -0
- rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2 +62 -0
- rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2 +38 -0
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +827 -0
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +218 -0
- rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
- rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +57 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +345 -0
- rasa/dialogue_understanding/patterns/__init__.py +0 -0
- rasa/dialogue_understanding/patterns/cancel.py +111 -0
- rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
- rasa/dialogue_understanding/patterns/chitchat.py +37 -0
- rasa/dialogue_understanding/patterns/clarify.py +97 -0
- rasa/dialogue_understanding/patterns/code_change.py +41 -0
- rasa/dialogue_understanding/patterns/collect_information.py +90 -0
- rasa/dialogue_understanding/patterns/completed.py +40 -0
- rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
- rasa/dialogue_understanding/patterns/correction.py +278 -0
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +248 -0
- rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
- rasa/dialogue_understanding/patterns/internal_error.py +47 -0
- rasa/dialogue_understanding/patterns/search.py +37 -0
- rasa/dialogue_understanding/patterns/skip_question.py +38 -0
- rasa/dialogue_understanding/processor/__init__.py +0 -0
- rasa/dialogue_understanding/processor/command_processor.py +687 -0
- rasa/dialogue_understanding/processor/command_processor_component.py +39 -0
- rasa/dialogue_understanding/stack/__init__.py +0 -0
- rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
- rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
- rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
- rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
- rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
- rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
- rasa/dialogue_understanding/stack/utils.py +211 -0
- rasa/e2e_test/__init__.py +0 -0
- rasa/e2e_test/constants.py +11 -0
- rasa/e2e_test/e2e_test_case.py +366 -0
- rasa/e2e_test/e2e_test_result.py +34 -0
- rasa/e2e_test/e2e_test_runner.py +768 -0
- rasa/e2e_test/e2e_test_schema.yml +85 -0
- rasa/engine/__init__.py +0 -0
- rasa/engine/caching.py +463 -0
- rasa/engine/constants.py +17 -0
- rasa/engine/exceptions.py +14 -0
- rasa/engine/graph.py +637 -0
- rasa/engine/loader.py +36 -0
- rasa/engine/recipes/__init__.py +0 -0
- rasa/engine/recipes/config_files/default_config.yml +44 -0
- rasa/engine/recipes/default_components.py +99 -0
- rasa/engine/recipes/default_recipe.py +1251 -0
- rasa/engine/recipes/graph_recipe.py +79 -0
- rasa/engine/recipes/recipe.py +93 -0
- rasa/engine/runner/__init__.py +0 -0
- rasa/engine/runner/dask.py +250 -0
- rasa/engine/runner/interface.py +49 -0
- rasa/engine/storage/__init__.py +0 -0
- rasa/engine/storage/local_model_storage.py +246 -0
- rasa/engine/storage/resource.py +110 -0
- rasa/engine/storage/storage.py +203 -0
- rasa/engine/training/__init__.py +0 -0
- rasa/engine/training/components.py +176 -0
- rasa/engine/training/fingerprinting.py +64 -0
- rasa/engine/training/graph_trainer.py +256 -0
- rasa/engine/training/hooks.py +164 -0
- rasa/engine/validation.py +873 -0
- rasa/env.py +5 -0
- rasa/exceptions.py +69 -0
- rasa/graph_components/__init__.py +0 -0
- rasa/graph_components/converters/__init__.py +0 -0
- rasa/graph_components/converters/nlu_message_converter.py +48 -0
- rasa/graph_components/providers/__init__.py +0 -0
- rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
- rasa/graph_components/providers/domain_provider.py +71 -0
- rasa/graph_components/providers/flows_provider.py +74 -0
- rasa/graph_components/providers/forms_provider.py +44 -0
- rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
- rasa/graph_components/providers/responses_provider.py +44 -0
- rasa/graph_components/providers/rule_only_provider.py +49 -0
- rasa/graph_components/providers/story_graph_provider.py +43 -0
- rasa/graph_components/providers/training_tracker_provider.py +55 -0
- rasa/graph_components/validators/__init__.py +0 -0
- rasa/graph_components/validators/default_recipe_validator.py +550 -0
- rasa/graph_components/validators/finetuning_validator.py +302 -0
- rasa/hooks.py +112 -0
- rasa/jupyter.py +63 -0
- rasa/markers/__init__.py +0 -0
- rasa/markers/marker.py +269 -0
- rasa/markers/marker_base.py +828 -0
- rasa/markers/upload.py +74 -0
- rasa/markers/validate.py +21 -0
- rasa/model.py +118 -0
- rasa/model_testing.py +457 -0
- rasa/model_training.py +536 -0
- rasa/nlu/__init__.py +7 -0
- rasa/nlu/classifiers/__init__.py +3 -0
- rasa/nlu/classifiers/classifier.py +5 -0
- rasa/nlu/classifiers/diet_classifier.py +1881 -0
- rasa/nlu/classifiers/fallback_classifier.py +192 -0
- rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
- rasa/nlu/classifiers/llm_intent_classifier.py +519 -0
- rasa/nlu/classifiers/logistic_regression_classifier.py +253 -0
- rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
- rasa/nlu/classifiers/regex_message_handler.py +56 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +330 -0
- rasa/nlu/constants.py +77 -0
- rasa/nlu/convert.py +40 -0
- rasa/nlu/emulators/__init__.py +0 -0
- rasa/nlu/emulators/dialogflow.py +55 -0
- rasa/nlu/emulators/emulator.py +49 -0
- rasa/nlu/emulators/luis.py +86 -0
- rasa/nlu/emulators/no_emulator.py +10 -0
- rasa/nlu/emulators/wit.py +56 -0
- rasa/nlu/extractors/__init__.py +0 -0
- rasa/nlu/extractors/crf_entity_extractor.py +715 -0
- rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
- rasa/nlu/extractors/entity_synonyms.py +178 -0
- rasa/nlu/extractors/extractor.py +470 -0
- rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
- rasa/nlu/extractors/regex_entity_extractor.py +220 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
- rasa/nlu/featurizers/__init__.py +0 -0
- rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +445 -0
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +768 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
- rasa/nlu/featurizers/featurizer.py +89 -0
- rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +867 -0
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +571 -0
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +271 -0
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
- rasa/nlu/model.py +24 -0
- rasa/nlu/persistor.py +282 -0
- rasa/nlu/run.py +27 -0
- rasa/nlu/selectors/__init__.py +0 -0
- rasa/nlu/selectors/response_selector.py +987 -0
- rasa/nlu/test.py +1940 -0
- rasa/nlu/tokenizers/__init__.py +0 -0
- rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
- rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
- rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
- rasa/nlu/tokenizers/tokenizer.py +239 -0
- rasa/nlu/tokenizers/whitespace_tokenizer.py +106 -0
- rasa/nlu/utils/__init__.py +35 -0
- rasa/nlu/utils/bilou_utils.py +462 -0
- rasa/nlu/utils/hugging_face/__init__.py +0 -0
- rasa/nlu/utils/hugging_face/registry.py +108 -0
- rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
- rasa/nlu/utils/mitie_utils.py +113 -0
- rasa/nlu/utils/pattern_utils.py +168 -0
- rasa/nlu/utils/spacy_utils.py +310 -0
- rasa/plugin.py +90 -0
- rasa/server.py +1551 -0
- rasa/shared/__init__.py +0 -0
- rasa/shared/constants.py +192 -0
- rasa/shared/core/__init__.py +0 -0
- rasa/shared/core/command_payload_reader.py +109 -0
- rasa/shared/core/constants.py +167 -0
- rasa/shared/core/conversation.py +46 -0
- rasa/shared/core/domain.py +2107 -0
- rasa/shared/core/events.py +2504 -0
- rasa/shared/core/flows/__init__.py +7 -0
- rasa/shared/core/flows/flow.py +362 -0
- rasa/shared/core/flows/flow_step.py +146 -0
- rasa/shared/core/flows/flow_step_links.py +319 -0
- rasa/shared/core/flows/flow_step_sequence.py +70 -0
- rasa/shared/core/flows/flows_list.py +223 -0
- rasa/shared/core/flows/flows_yaml_schema.json +217 -0
- rasa/shared/core/flows/nlu_trigger.py +117 -0
- rasa/shared/core/flows/steps/__init__.py +24 -0
- rasa/shared/core/flows/steps/action.py +56 -0
- rasa/shared/core/flows/steps/call.py +64 -0
- rasa/shared/core/flows/steps/collect.py +112 -0
- rasa/shared/core/flows/steps/constants.py +5 -0
- rasa/shared/core/flows/steps/continuation.py +36 -0
- rasa/shared/core/flows/steps/end.py +22 -0
- rasa/shared/core/flows/steps/internal.py +44 -0
- rasa/shared/core/flows/steps/link.py +51 -0
- rasa/shared/core/flows/steps/no_operation.py +48 -0
- rasa/shared/core/flows/steps/set_slots.py +50 -0
- rasa/shared/core/flows/steps/start.py +30 -0
- rasa/shared/core/flows/validation.py +527 -0
- rasa/shared/core/flows/yaml_flows_io.py +278 -0
- rasa/shared/core/generator.py +908 -0
- rasa/shared/core/slot_mappings.py +526 -0
- rasa/shared/core/slots.py +649 -0
- rasa/shared/core/trackers.py +1177 -0
- rasa/shared/core/training_data/__init__.py +0 -0
- rasa/shared/core/training_data/loading.py +89 -0
- rasa/shared/core/training_data/story_reader/__init__.py +0 -0
- rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
- rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
- rasa/shared/core/training_data/story_writer/__init__.py +0 -0
- rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
- rasa/shared/core/training_data/story_writer/yaml_story_writer.py +444 -0
- rasa/shared/core/training_data/structures.py +838 -0
- rasa/shared/core/training_data/visualization.html +146 -0
- rasa/shared/core/training_data/visualization.py +603 -0
- rasa/shared/data.py +249 -0
- rasa/shared/engine/__init__.py +0 -0
- rasa/shared/engine/caching.py +26 -0
- rasa/shared/exceptions.py +163 -0
- rasa/shared/importers/__init__.py +0 -0
- rasa/shared/importers/importer.py +704 -0
- rasa/shared/importers/multi_project.py +203 -0
- rasa/shared/importers/rasa.py +99 -0
- rasa/shared/importers/utils.py +34 -0
- rasa/shared/nlu/__init__.py +0 -0
- rasa/shared/nlu/constants.py +47 -0
- rasa/shared/nlu/interpreter.py +10 -0
- rasa/shared/nlu/training_data/__init__.py +0 -0
- rasa/shared/nlu/training_data/entities_parser.py +208 -0
- rasa/shared/nlu/training_data/features.py +492 -0
- rasa/shared/nlu/training_data/formats/__init__.py +10 -0
- rasa/shared/nlu/training_data/formats/dialogflow.py +163 -0
- rasa/shared/nlu/training_data/formats/luis.py +87 -0
- rasa/shared/nlu/training_data/formats/rasa.py +135 -0
- rasa/shared/nlu/training_data/formats/rasa_yaml.py +603 -0
- rasa/shared/nlu/training_data/formats/readerwriter.py +244 -0
- rasa/shared/nlu/training_data/formats/wit.py +52 -0
- rasa/shared/nlu/training_data/loading.py +137 -0
- rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
- rasa/shared/nlu/training_data/message.py +490 -0
- rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
- rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
- rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
- rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
- rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
- rasa/shared/nlu/training_data/training_data.py +730 -0
- rasa/shared/nlu/training_data/util.py +223 -0
- rasa/shared/providers/__init__.py +0 -0
- rasa/shared/providers/openai/__init__.py +0 -0
- rasa/shared/providers/openai/clients.py +43 -0
- rasa/shared/providers/openai/session_handler.py +110 -0
- rasa/shared/utils/__init__.py +0 -0
- rasa/shared/utils/cli.py +72 -0
- rasa/shared/utils/common.py +308 -0
- rasa/shared/utils/constants.py +4 -0
- rasa/shared/utils/io.py +415 -0
- rasa/shared/utils/llm.py +404 -0
- rasa/shared/utils/pykwalify_extensions.py +27 -0
- rasa/shared/utils/schemas/__init__.py +0 -0
- rasa/shared/utils/schemas/config.yml +2 -0
- rasa/shared/utils/schemas/domain.yml +145 -0
- rasa/shared/utils/schemas/events.py +212 -0
- rasa/shared/utils/schemas/model_config.yml +46 -0
- rasa/shared/utils/schemas/stories.yml +173 -0
- rasa/shared/utils/yaml.py +786 -0
- rasa/studio/__init__.py +0 -0
- rasa/studio/auth.py +268 -0
- rasa/studio/config.py +127 -0
- rasa/studio/constants.py +18 -0
- rasa/studio/data_handler.py +359 -0
- rasa/studio/download.py +483 -0
- rasa/studio/results_logger.py +137 -0
- rasa/studio/train.py +135 -0
- rasa/studio/upload.py +433 -0
- rasa/telemetry.py +1737 -0
- rasa/tracing/__init__.py +0 -0
- rasa/tracing/config.py +353 -0
- rasa/tracing/constants.py +62 -0
- rasa/tracing/instrumentation/__init__.py +0 -0
- rasa/tracing/instrumentation/attribute_extractors.py +672 -0
- rasa/tracing/instrumentation/instrumentation.py +1185 -0
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +144 -0
- rasa/tracing/instrumentation/metrics.py +294 -0
- rasa/tracing/metric_instrument_provider.py +205 -0
- rasa/utils/__init__.py +0 -0
- rasa/utils/beta.py +83 -0
- rasa/utils/cli.py +28 -0
- rasa/utils/common.py +635 -0
- rasa/utils/converter.py +53 -0
- rasa/utils/endpoints.py +302 -0
- rasa/utils/io.py +260 -0
- rasa/utils/licensing.py +534 -0
- rasa/utils/log_utils.py +174 -0
- rasa/utils/mapper.py +210 -0
- rasa/utils/ml_utils.py +145 -0
- rasa/utils/plotting.py +362 -0
- rasa/utils/singleton.py +23 -0
- rasa/utils/tensorflow/__init__.py +0 -0
- rasa/utils/tensorflow/callback.py +112 -0
- rasa/utils/tensorflow/constants.py +116 -0
- rasa/utils/tensorflow/crf.py +492 -0
- rasa/utils/tensorflow/data_generator.py +440 -0
- rasa/utils/tensorflow/environment.py +161 -0
- rasa/utils/tensorflow/exceptions.py +5 -0
- rasa/utils/tensorflow/feature_array.py +366 -0
- rasa/utils/tensorflow/layers.py +1565 -0
- rasa/utils/tensorflow/layers_utils.py +113 -0
- rasa/utils/tensorflow/metrics.py +281 -0
- rasa/utils/tensorflow/model_data.py +798 -0
- rasa/utils/tensorflow/model_data_utils.py +499 -0
- rasa/utils/tensorflow/models.py +935 -0
- rasa/utils/tensorflow/rasa_layers.py +1094 -0
- rasa/utils/tensorflow/transformer.py +640 -0
- rasa/utils/tensorflow/types.py +6 -0
- rasa/utils/train_utils.py +572 -0
- rasa/utils/url_tools.py +53 -0
- rasa/utils/yaml.py +54 -0
- rasa/validator.py +1337 -0
- rasa/version.py +3 -0
- rasa_pro-3.9.18.dist-info/METADATA +563 -0
- rasa_pro-3.9.18.dist-info/NOTICE +5 -0
- rasa_pro-3.9.18.dist-info/RECORD +662 -0
- rasa_pro-3.9.18.dist-info/WHEEL +4 -0
- rasa_pro-3.9.18.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
from typing import Any, Dict, Text, List, Optional
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
6
|
+
from rasa.core.actions import action
|
|
7
|
+
from rasa.core.channels import OutputChannel
|
|
8
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
9
|
+
from rasa.dialogue_understanding.patterns.collect_information import (
|
|
10
|
+
CollectInformationPatternFlowStackFrame,
|
|
11
|
+
)
|
|
12
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
13
|
+
from rasa.dialogue_understanding.stack.frames import (
|
|
14
|
+
BaseFlowStackFrame,
|
|
15
|
+
PatternFlowStackFrame,
|
|
16
|
+
)
|
|
17
|
+
from rasa.dialogue_understanding.stack.frames.dialogue_stack_frame import (
|
|
18
|
+
DialogueStackFrame,
|
|
19
|
+
)
|
|
20
|
+
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
21
|
+
FlowStackFrameType,
|
|
22
|
+
UserFlowStackFrame,
|
|
23
|
+
)
|
|
24
|
+
from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
|
|
25
|
+
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
26
|
+
from rasa.shared.core.constants import ACTION_CORRECT_FLOW_SLOT
|
|
27
|
+
from rasa.shared.core.domain import Domain
|
|
28
|
+
from rasa.shared.core.events import Event, SlotSet
|
|
29
|
+
from rasa.shared.core.flows.flow import ContinueFlowStep, END_STEP, START_STEP
|
|
30
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
31
|
+
|
|
32
|
+
structlogger = structlog.get_logger()
|
|
33
|
+
|
|
34
|
+
FLOW_PATTERN_CORRECTION_ID = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "correction"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@dataclass
|
|
38
|
+
class CorrectionPatternFlowStackFrame(PatternFlowStackFrame):
|
|
39
|
+
"""A pattern flow stack frame which gets added if a slot value is corrected."""
|
|
40
|
+
|
|
41
|
+
flow_id: str = FLOW_PATTERN_CORRECTION_ID
|
|
42
|
+
"""The ID of the flow."""
|
|
43
|
+
is_reset_only: bool = False
|
|
44
|
+
"""Whether the correction is only a reset of the flow.
|
|
45
|
+
|
|
46
|
+
This is the case if all corrected slots have `ask_before_filling=True`.
|
|
47
|
+
In this case, we do not set their value directly but rather reset the flow
|
|
48
|
+
to the position where the first question is asked to fill the slot."""
|
|
49
|
+
corrected_slots: Dict[str, Any] = field(default_factory=dict)
|
|
50
|
+
"""The slots that were corrected."""
|
|
51
|
+
reset_flow_id: Optional[str] = None
|
|
52
|
+
"""The ID of the flow to reset to."""
|
|
53
|
+
reset_step_id: Optional[str] = None
|
|
54
|
+
"""The ID of the step to reset to."""
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
def type(cls) -> str:
|
|
58
|
+
"""Returns the type of the frame."""
|
|
59
|
+
return FLOW_PATTERN_CORRECTION_ID
|
|
60
|
+
|
|
61
|
+
@staticmethod
|
|
62
|
+
def from_dict(data: Dict[Text, Any]) -> CorrectionPatternFlowStackFrame:
|
|
63
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
The created `DialogueStackFrame`.
|
|
70
|
+
"""
|
|
71
|
+
return CorrectionPatternFlowStackFrame(
|
|
72
|
+
frame_id=data["frame_id"],
|
|
73
|
+
step_id=data["step_id"],
|
|
74
|
+
is_reset_only=data["is_reset_only"],
|
|
75
|
+
corrected_slots=data["corrected_slots"],
|
|
76
|
+
reset_flow_id=data["reset_flow_id"],
|
|
77
|
+
reset_step_id=data["reset_step_id"],
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class ActionCorrectFlowSlot(action.Action):
|
|
82
|
+
"""Action which corrects a slots value in a flow."""
|
|
83
|
+
|
|
84
|
+
def __init__(self) -> None:
|
|
85
|
+
"""Creates a `ActionCorrectFlowSlot`."""
|
|
86
|
+
super().__init__()
|
|
87
|
+
|
|
88
|
+
def name(self) -> Text:
|
|
89
|
+
"""Return the flow name."""
|
|
90
|
+
return ACTION_CORRECT_FLOW_SLOT
|
|
91
|
+
|
|
92
|
+
async def run(
|
|
93
|
+
self,
|
|
94
|
+
output_channel: "OutputChannel",
|
|
95
|
+
nlg: "NaturalLanguageGenerator",
|
|
96
|
+
tracker: "DialogueStateTracker",
|
|
97
|
+
domain: "Domain",
|
|
98
|
+
metadata: Optional[Dict[Text, Any]] = None,
|
|
99
|
+
) -> List[Event]:
|
|
100
|
+
"""Correct the slots."""
|
|
101
|
+
stack = tracker.stack
|
|
102
|
+
if not (top := stack.top()):
|
|
103
|
+
structlogger.warning("action.correct_flow_slot.no_active_flow")
|
|
104
|
+
return []
|
|
105
|
+
|
|
106
|
+
if not isinstance(top, CorrectionPatternFlowStackFrame):
|
|
107
|
+
structlogger.warning(
|
|
108
|
+
"action.correct_flow_slot.no_correction_frame", top=top
|
|
109
|
+
)
|
|
110
|
+
return []
|
|
111
|
+
|
|
112
|
+
events: List[Event] = []
|
|
113
|
+
if top.reset_flow_id:
|
|
114
|
+
updated_stack = reset_stack_on_tracker_to_prior_state(
|
|
115
|
+
top.reset_flow_id, top.reset_step_id or START_STEP, tracker
|
|
116
|
+
)
|
|
117
|
+
events.extend(tracker.create_stack_updated_events(updated_stack))
|
|
118
|
+
|
|
119
|
+
events.extend([SlotSet(k, v) for k, v in top.corrected_slots.items()])
|
|
120
|
+
return events
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def find_previous_state_to_reset_to(
|
|
124
|
+
reset_flow_id: str, reset_step_id: str, tracker: DialogueStateTracker
|
|
125
|
+
) -> Optional[DialogueStack]:
|
|
126
|
+
"""Find the previous stack state where the reset step was the active stack frame.
|
|
127
|
+
|
|
128
|
+
Looks for the most recent state of the stack in the tracker where the top
|
|
129
|
+
flow has the same flow id and step id as the reset flow id and reset step id.
|
|
130
|
+
"""
|
|
131
|
+
stack_to_reset_to: Optional[DialogueStack] = None
|
|
132
|
+
for previous_stack_state in tracker.previous_stack_states():
|
|
133
|
+
top_frame = previous_stack_state.top()
|
|
134
|
+
if (
|
|
135
|
+
isinstance(top_frame, BaseFlowStackFrame)
|
|
136
|
+
and top_frame.flow_id == reset_flow_id
|
|
137
|
+
and top_frame.step_id == reset_step_id
|
|
138
|
+
):
|
|
139
|
+
stack_to_reset_to = previous_stack_state
|
|
140
|
+
return stack_to_reset_to
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def slice_of_stack_below_target(
|
|
144
|
+
target_frame: DialogueStackFrame, stack: DialogueStack
|
|
145
|
+
) -> List[DialogueStackFrame]:
|
|
146
|
+
"""Get all the frames from the current stack up until the target frame.
|
|
147
|
+
|
|
148
|
+
The target frame is not included."""
|
|
149
|
+
replacement_stack: List[DialogueStackFrame] = []
|
|
150
|
+
|
|
151
|
+
for frame in stack.frames:
|
|
152
|
+
if frame.frame_id == target_frame.frame_id:
|
|
153
|
+
break
|
|
154
|
+
replacement_stack.append(frame)
|
|
155
|
+
return replacement_stack
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def slice_of_stack_with_target_and_above(
|
|
159
|
+
target_frame: DialogueStackFrame, stack: DialogueStack
|
|
160
|
+
) -> List[DialogueStackFrame]:
|
|
161
|
+
"""Get all the frames from the current stack starting at the target frame."""
|
|
162
|
+
replacement_frames: List[DialogueStackFrame] = []
|
|
163
|
+
for frame in reversed(stack.frames):
|
|
164
|
+
replacement_frames.insert(0, frame) # push to front, since reversed
|
|
165
|
+
if frame.frame_id == target_frame.frame_id:
|
|
166
|
+
break
|
|
167
|
+
return replacement_frames
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def set_topmost_flow_frame_to_continue(stack_frames: List[DialogueStackFrame]) -> None:
|
|
171
|
+
"""Ensure that the topmost flow frame continues its step.
|
|
172
|
+
|
|
173
|
+
This ensures that the topmost step can be re-executed."""
|
|
174
|
+
for frame in reversed(stack_frames):
|
|
175
|
+
if isinstance(frame, BaseFlowStackFrame) and frame.step_id != START_STEP:
|
|
176
|
+
frame.step_id = ContinueFlowStep.continue_step_for_id(frame.step_id)
|
|
177
|
+
break
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def create_termination_frames_for_missing_frames(
|
|
181
|
+
new_stack_frames: List[DialogueStackFrame], previous_stack: DialogueStack
|
|
182
|
+
) -> List[DialogueStackFrame]:
|
|
183
|
+
"""Terminate frames that are part in the previous stack but not in the new stack.
|
|
184
|
+
|
|
185
|
+
The frames are terminated by setting them to the END_STEP. This allows
|
|
186
|
+
them to be properly wrapped up.
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
reused_frame_ids = {frame.frame_id for frame in new_stack_frames}
|
|
190
|
+
|
|
191
|
+
frames_to_terminate: List[DialogueStackFrame] = []
|
|
192
|
+
for frame in reversed(previous_stack.frames):
|
|
193
|
+
if frame.frame_id in reused_frame_ids:
|
|
194
|
+
# this frame already exists in the replacement stack, skip it
|
|
195
|
+
# shouldn't be terminated
|
|
196
|
+
continue
|
|
197
|
+
if (
|
|
198
|
+
isinstance(frame, UserFlowStackFrame)
|
|
199
|
+
and frame.frame_type == FlowStackFrameType.CALL
|
|
200
|
+
):
|
|
201
|
+
frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
|
|
202
|
+
if isinstance(frame, CollectInformationPatternFlowStackFrame):
|
|
203
|
+
frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
|
|
204
|
+
frames_to_terminate.insert(0, frame)
|
|
205
|
+
return frames_to_terminate
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def reset_stack_on_tracker_to_prior_state(
|
|
209
|
+
reset_flow_id: str, reset_step_id: str, tracker: DialogueStateTracker
|
|
210
|
+
) -> DialogueStack:
|
|
211
|
+
"""Reset the stack on the tracker to the prior state."""
|
|
212
|
+
# assumption is that we have already been at the reset step id in the reset flow
|
|
213
|
+
# at some point before in the tracker. we'll search for that point in time and
|
|
214
|
+
# update the current stack to be as close to that time as possible,
|
|
215
|
+
# jumping back in time.
|
|
216
|
+
stack_to_reset_to: Optional[DialogueStack] = find_previous_state_to_reset_to(
|
|
217
|
+
reset_flow_id, reset_step_id, tracker
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
if not stack_to_reset_to:
|
|
221
|
+
structlogger.warning(
|
|
222
|
+
"action.correct_flow_slot.no_frame_found",
|
|
223
|
+
reset_step_id=reset_step_id,
|
|
224
|
+
reset_flow_id=reset_flow_id,
|
|
225
|
+
)
|
|
226
|
+
return tracker.stack
|
|
227
|
+
|
|
228
|
+
target_frame = top_user_flow_frame(stack_to_reset_to)
|
|
229
|
+
|
|
230
|
+
if not target_frame:
|
|
231
|
+
structlogger.warning(
|
|
232
|
+
"action.correct_flow_slot.no_target_frame_found",
|
|
233
|
+
reset_step_id=reset_step_id,
|
|
234
|
+
reset_flow_id=reset_flow_id,
|
|
235
|
+
stack_to_reset_to=stack_to_reset_to,
|
|
236
|
+
)
|
|
237
|
+
return tracker.stack
|
|
238
|
+
|
|
239
|
+
current_stack = tracker.stack
|
|
240
|
+
|
|
241
|
+
# Approach we use to reset the stack:
|
|
242
|
+
# 1. Search through all past stack states and identify the most recent
|
|
243
|
+
# state where the stack had the given flow and step id on top. This
|
|
244
|
+
# stack is the reference stack.
|
|
245
|
+
# 2. On the reference stack, identify the top most user flow frame that
|
|
246
|
+
# was not started through a flow call. This frame is the reference frame.
|
|
247
|
+
# 3. Create a new stack by stacking the following frames: A) all frames
|
|
248
|
+
# from the current stack that are strictly below the reference
|
|
249
|
+
# frame. B) all frames including the reference frame and frames above
|
|
250
|
+
# it from the reference stack. C) all frames from the current stack
|
|
251
|
+
# that are strictly above the reference frame and set them to their
|
|
252
|
+
# end step.
|
|
253
|
+
# 4. This will ensure A) we keep anything from the current stack that is
|
|
254
|
+
# below the current active user flow. B) We reset the current user
|
|
255
|
+
# flow to the desired position. C) we wrap up all unfinished frames
|
|
256
|
+
# above the current user flow from the current state.
|
|
257
|
+
|
|
258
|
+
replacement_stack: List[DialogueStackFrame] = []
|
|
259
|
+
|
|
260
|
+
# get all the frames from the current stack up until the target frame
|
|
261
|
+
# and put them into the replacement stack. the target frame is not included
|
|
262
|
+
replacement_stack.extend(slice_of_stack_below_target(target_frame, current_stack))
|
|
263
|
+
|
|
264
|
+
replacement_stack.extend(
|
|
265
|
+
slice_of_stack_with_target_and_above(target_frame, stack_to_reset_to)
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
# ensure that we continue the topmost frames step
|
|
269
|
+
set_topmost_flow_frame_to_continue(replacement_stack)
|
|
270
|
+
|
|
271
|
+
# terminate all the frames from the original stack that are not part of the
|
|
272
|
+
# replacement stack. this will add these frames to the replacement stack,
|
|
273
|
+
# but with their step set to END_STEP. this allows them to be properly
|
|
274
|
+
# wrapped up before we head into the correction.
|
|
275
|
+
replacement_stack.extend(
|
|
276
|
+
create_termination_frames_for_missing_frames(replacement_stack, current_stack)
|
|
277
|
+
)
|
|
278
|
+
return DialogueStack(frames=replacement_stack)
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
version: "3.1"
|
|
2
|
+
responses:
|
|
3
|
+
|
|
4
|
+
utter_ask_rephrase:
|
|
5
|
+
- text: I’m sorry I am unable to understand you, could you please rephrase?
|
|
6
|
+
|
|
7
|
+
utter_boolean_slot_rejection:
|
|
8
|
+
- text: "Sorry, the value you provided, `{{value}}`, is not valid. Please respond with a valid value."
|
|
9
|
+
metadata:
|
|
10
|
+
rephrase: True
|
|
11
|
+
template: jinja
|
|
12
|
+
|
|
13
|
+
utter_can_do_something_else:
|
|
14
|
+
- text: "What else can I help you with?"
|
|
15
|
+
metadata:
|
|
16
|
+
rephrase: True
|
|
17
|
+
|
|
18
|
+
utter_cannot_handle:
|
|
19
|
+
- text: I'm sorry, I'm not trained to help with that.
|
|
20
|
+
|
|
21
|
+
utter_categorical_slot_rejection:
|
|
22
|
+
- text: "Sorry, you responded with an invalid value - `{{value}}`. Please select one of the available options."
|
|
23
|
+
metadata:
|
|
24
|
+
rephrase: True
|
|
25
|
+
template: jinja
|
|
26
|
+
|
|
27
|
+
utter_clarification_options_rasa:
|
|
28
|
+
- text: "I can help, but I need more information. Which of these would you like to do: {{context.clarification_options}}?"
|
|
29
|
+
metadata:
|
|
30
|
+
rephrase: True
|
|
31
|
+
template: jinja
|
|
32
|
+
|
|
33
|
+
utter_corrected_previous_input:
|
|
34
|
+
- text: "Ok, I am updating {{ context.corrected_slots.keys()|join(', ') }} to {{ context.corrected_slots.values()|join(', ') }} respectively."
|
|
35
|
+
metadata:
|
|
36
|
+
rephrase: True
|
|
37
|
+
template: jinja
|
|
38
|
+
|
|
39
|
+
utter_float_slot_rejection:
|
|
40
|
+
- text: "Sorry, it seems the value you provided `{{value}}` is not a valid number. Please provide a valid number in your response."
|
|
41
|
+
metadata:
|
|
42
|
+
rephrase: True
|
|
43
|
+
template: jinja
|
|
44
|
+
|
|
45
|
+
utter_flow_cancelled_rasa:
|
|
46
|
+
- text: "Okay, stopping {{ context.canceled_name }}."
|
|
47
|
+
metadata:
|
|
48
|
+
rephrase: True
|
|
49
|
+
template: jinja
|
|
50
|
+
|
|
51
|
+
utter_flow_continue_interrupted:
|
|
52
|
+
- text: "Let's continue with {{ context.previous_flow_name }}."
|
|
53
|
+
metadata:
|
|
54
|
+
rephrase: True
|
|
55
|
+
template: jinja
|
|
56
|
+
|
|
57
|
+
utter_free_chitchat_response:
|
|
58
|
+
- text: "Sorry, I'm not able to answer that right now."
|
|
59
|
+
metadata:
|
|
60
|
+
rephrase: True
|
|
61
|
+
rephrase_prompt: |
|
|
62
|
+
You are an incredibly friendly assistant. Generate a short
|
|
63
|
+
response to the user's comment in simple english.
|
|
64
|
+
|
|
65
|
+
User: {{current_input}}
|
|
66
|
+
Response:
|
|
67
|
+
|
|
68
|
+
utter_human_handoff_not_available:
|
|
69
|
+
- text: I understand you want to be connected to a human agent, but that's something I cannot help you with at the moment. Is there something else I can help you with?
|
|
70
|
+
metadata:
|
|
71
|
+
rephrase: True
|
|
72
|
+
|
|
73
|
+
utter_inform_code_change:
|
|
74
|
+
- text: There has been an update to my code. I need to wrap up our running dialogue and start from scratch.
|
|
75
|
+
metadata:
|
|
76
|
+
rephrase: True
|
|
77
|
+
|
|
78
|
+
utter_internal_error_rasa:
|
|
79
|
+
- text: Sorry, I am having trouble with that. Please try again in a few minutes.
|
|
80
|
+
|
|
81
|
+
utter_no_knowledge_base:
|
|
82
|
+
- text: I am afraid, I don't know the answer. At this point, I don't have access to a knowledge base.
|
|
83
|
+
metadata:
|
|
84
|
+
rephrase: True
|
|
85
|
+
|
|
86
|
+
utter_skip_question_answer:
|
|
87
|
+
- text: I'm here to provide you with the best assistance, and in order to do so, I kindly request that we complete this step together. Your input is essential for a seamless experience!
|
|
88
|
+
metadata:
|
|
89
|
+
rephrase: True
|
|
90
|
+
|
|
91
|
+
utter_user_input_empty_error_rasa:
|
|
92
|
+
- text: I see an empty message. What can I assist you with?
|
|
93
|
+
|
|
94
|
+
utter_user_input_too_long_error_rasa:
|
|
95
|
+
- text: I'm sorry, but your message is too long for me to process. Please keep your message concise and within {% if context.info.max_characters %}{{context.info.max_characters}} characters.{% else %}a reasonable length.{% endif %}
|
|
96
|
+
metadata:
|
|
97
|
+
template: jinja
|
|
98
|
+
|
|
99
|
+
slots:
|
|
100
|
+
confirm_correction:
|
|
101
|
+
type: bool
|
|
102
|
+
mappings:
|
|
103
|
+
- type: from_llm
|
|
104
|
+
|
|
105
|
+
flows:
|
|
106
|
+
pattern_cancel_flow:
|
|
107
|
+
description: Conversation repair flow that starts when a flow is cancelled
|
|
108
|
+
name: pattern_cancel_flow
|
|
109
|
+
steps:
|
|
110
|
+
- action: action_cancel_flow
|
|
111
|
+
- action: utter_flow_cancelled_rasa
|
|
112
|
+
|
|
113
|
+
pattern_cannot_handle:
|
|
114
|
+
description: |
|
|
115
|
+
Conversation repair flow for addressing failed command generation scenarios
|
|
116
|
+
name: pattern cannot handle
|
|
117
|
+
steps:
|
|
118
|
+
- noop: true
|
|
119
|
+
next:
|
|
120
|
+
# chitchat fallback
|
|
121
|
+
- if: "'{{context.reason}}' = 'cannot_handle_chitchat'"
|
|
122
|
+
then:
|
|
123
|
+
- action: utter_cannot_handle
|
|
124
|
+
next: "END"
|
|
125
|
+
# fallback for things that are not supported
|
|
126
|
+
- if: "'{{context.reason}}' = 'cannot_handle_not_supported'"
|
|
127
|
+
then:
|
|
128
|
+
- action: utter_cannot_handle
|
|
129
|
+
next: END
|
|
130
|
+
# default
|
|
131
|
+
- else:
|
|
132
|
+
- action: utter_ask_rephrase
|
|
133
|
+
next: END
|
|
134
|
+
|
|
135
|
+
pattern_chitchat:
|
|
136
|
+
description: Conversation repair flow for off-topic interactions that won't disrupt the main conversation
|
|
137
|
+
name: pattern chitchat
|
|
138
|
+
steps:
|
|
139
|
+
- action: action_trigger_chitchat
|
|
140
|
+
|
|
141
|
+
pattern_clarification:
|
|
142
|
+
description: Conversation repair flow for handling ambiguous requests that could match multiple flows
|
|
143
|
+
name: pattern clarification
|
|
144
|
+
steps:
|
|
145
|
+
- action: action_clarify_flows
|
|
146
|
+
- action: utter_clarification_options_rasa
|
|
147
|
+
|
|
148
|
+
pattern_code_change:
|
|
149
|
+
description: Conversation repair flow for cleaning the stack after an assistant update
|
|
150
|
+
name: pattern code change
|
|
151
|
+
steps:
|
|
152
|
+
- action: utter_inform_code_change
|
|
153
|
+
- action: action_clean_stack
|
|
154
|
+
|
|
155
|
+
pattern_collect_information:
|
|
156
|
+
description: Flow for collecting information from users
|
|
157
|
+
name: pattern collect information
|
|
158
|
+
steps:
|
|
159
|
+
- id: start
|
|
160
|
+
action: action_run_slot_rejections
|
|
161
|
+
- action: validate_{{context.collect}}
|
|
162
|
+
next:
|
|
163
|
+
- if: "slots.{{context.collect}} is not null"
|
|
164
|
+
then: END
|
|
165
|
+
- else: ask_collect
|
|
166
|
+
- id: ask_collect
|
|
167
|
+
action: "{{context.utter}}"
|
|
168
|
+
- action: "{{context.collect_action}}"
|
|
169
|
+
- action: action_listen
|
|
170
|
+
next: start
|
|
171
|
+
|
|
172
|
+
pattern_completed:
|
|
173
|
+
description: Flow that asks if the user needs more help after completing their initiated use cases
|
|
174
|
+
name: pattern completed
|
|
175
|
+
steps:
|
|
176
|
+
- action: utter_can_do_something_else
|
|
177
|
+
|
|
178
|
+
pattern_continue_interrupted:
|
|
179
|
+
description: Conversation repair flow for managing when users switch between different flows
|
|
180
|
+
name: pattern continue interrupted
|
|
181
|
+
steps:
|
|
182
|
+
- action: utter_flow_continue_interrupted
|
|
183
|
+
|
|
184
|
+
pattern_correction:
|
|
185
|
+
description: Conversation repair flow for managing user input changes or error corrections
|
|
186
|
+
name: pattern correction
|
|
187
|
+
steps:
|
|
188
|
+
- action: action_correct_flow_slot
|
|
189
|
+
next:
|
|
190
|
+
- if: not context.is_reset_only
|
|
191
|
+
then:
|
|
192
|
+
- action: utter_corrected_previous_input
|
|
193
|
+
next: END
|
|
194
|
+
- else: END
|
|
195
|
+
|
|
196
|
+
pattern_human_handoff:
|
|
197
|
+
description: Conversation repair flow for switching users to a human agent if their request can't be handled
|
|
198
|
+
name: pattern human handoff
|
|
199
|
+
steps:
|
|
200
|
+
- action: utter_human_handoff_not_available
|
|
201
|
+
|
|
202
|
+
pattern_internal_error:
|
|
203
|
+
description: Conversation repair flow for informing users about internal errors
|
|
204
|
+
name: pattern internal error
|
|
205
|
+
steps:
|
|
206
|
+
- noop: true
|
|
207
|
+
next:
|
|
208
|
+
- if: "'{{context.error_type}}' = 'rasa_internal_error_user_input_too_long'"
|
|
209
|
+
then:
|
|
210
|
+
- action: utter_user_input_too_long_error_rasa
|
|
211
|
+
next: END
|
|
212
|
+
- if: "'{{context.error_type}}' = 'rasa_internal_error_user_input_empty'"
|
|
213
|
+
then:
|
|
214
|
+
- action: utter_user_input_empty_error_rasa
|
|
215
|
+
next: END
|
|
216
|
+
- else:
|
|
217
|
+
- action: utter_internal_error_rasa
|
|
218
|
+
next: END
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
pattern_restart:
|
|
222
|
+
description: Flow for restarting the conversation
|
|
223
|
+
name: pattern restart
|
|
224
|
+
nlu_trigger:
|
|
225
|
+
- intent: restart
|
|
226
|
+
steps:
|
|
227
|
+
- action: action_restart
|
|
228
|
+
|
|
229
|
+
pattern_search:
|
|
230
|
+
description: Flow for handling knowledge-based questions
|
|
231
|
+
name: pattern search
|
|
232
|
+
steps:
|
|
233
|
+
- action: utter_no_knowledge_base
|
|
234
|
+
# - action: action_trigger_search to use doc search policy if present
|
|
235
|
+
|
|
236
|
+
pattern_session_start:
|
|
237
|
+
description: Flow for starting the conversation
|
|
238
|
+
name: pattern session start
|
|
239
|
+
nlu_trigger:
|
|
240
|
+
- intent: session_start
|
|
241
|
+
steps:
|
|
242
|
+
- action: action_session_start
|
|
243
|
+
|
|
244
|
+
pattern_skip_question:
|
|
245
|
+
description: Conversation repair flow for managing user intents to skip questions (steps)
|
|
246
|
+
name: pattern skip question
|
|
247
|
+
steps:
|
|
248
|
+
- action: utter_skip_question_answer
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
6
|
+
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
FLOW_PATTERN_HUMAN_HANDOFF = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "human_handoff"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class HumanHandoffPatternFlowStackFrame(PatternFlowStackFrame):
|
|
14
|
+
"""A pattern flow stack frame which hands off to a human."""
|
|
15
|
+
|
|
16
|
+
flow_id: str = FLOW_PATTERN_HUMAN_HANDOFF
|
|
17
|
+
"""The ID of the flow."""
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def type(cls) -> str:
|
|
21
|
+
"""Returns the type of the frame."""
|
|
22
|
+
return FLOW_PATTERN_HUMAN_HANDOFF
|
|
23
|
+
|
|
24
|
+
@staticmethod
|
|
25
|
+
def from_dict(data: Dict[str, Any]) -> HumanHandoffPatternFlowStackFrame:
|
|
26
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
The created `DialogueStackFrame`.
|
|
33
|
+
"""
|
|
34
|
+
return HumanHandoffPatternFlowStackFrame(
|
|
35
|
+
frame_id=data["frame_id"],
|
|
36
|
+
step_id=data["step_id"],
|
|
37
|
+
)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
from typing import Any, Dict, Optional, Text
|
|
4
|
+
|
|
5
|
+
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
6
|
+
from rasa.shared.constants import (
|
|
7
|
+
RASA_DEFAULT_FLOW_PATTERN_PREFIX,
|
|
8
|
+
RASA_PATTERN_INTERNAL_ERROR_DEFAULT,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
FLOW_PATTERN_INTERNAL_ERROR_ID = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "internal_error"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class InternalErrorPatternFlowStackFrame(PatternFlowStackFrame):
|
|
16
|
+
"""A pattern flow stack frame that gets added if an internal error occurs."""
|
|
17
|
+
|
|
18
|
+
flow_id: str = FLOW_PATTERN_INTERNAL_ERROR_ID
|
|
19
|
+
"""The ID of the flow."""
|
|
20
|
+
|
|
21
|
+
error_type: Optional[Text] = RASA_PATTERN_INTERNAL_ERROR_DEFAULT
|
|
22
|
+
"""Error type used in switch-case of the error pattern flow."""
|
|
23
|
+
|
|
24
|
+
info: Dict[Text, Any] = field(default_factory=dict)
|
|
25
|
+
"""Additional info to be provided to the user"""
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def type(cls) -> str:
|
|
29
|
+
"""Returns the type of the frame."""
|
|
30
|
+
return FLOW_PATTERN_INTERNAL_ERROR_ID
|
|
31
|
+
|
|
32
|
+
@staticmethod
|
|
33
|
+
def from_dict(data: Dict[str, Any]) -> InternalErrorPatternFlowStackFrame:
|
|
34
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
The created `DialogueStackFrame`.
|
|
41
|
+
"""
|
|
42
|
+
return InternalErrorPatternFlowStackFrame(
|
|
43
|
+
frame_id=data["frame_id"],
|
|
44
|
+
step_id=data["step_id"],
|
|
45
|
+
error_type=data.get("error_type", RASA_PATTERN_INTERNAL_ERROR_DEFAULT),
|
|
46
|
+
info=data.get("info", {}),
|
|
47
|
+
)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
6
|
+
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
FLOW_PATTERN_SEARCH = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "search"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class SearchPatternFlowStackFrame(PatternFlowStackFrame):
|
|
14
|
+
"""A stack frame that gets added to respond to knowledge-oriented questions."""
|
|
15
|
+
|
|
16
|
+
flow_id: str = FLOW_PATTERN_SEARCH
|
|
17
|
+
"""The ID of the flow."""
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def type(cls) -> str:
|
|
21
|
+
"""Returns the type of the frame."""
|
|
22
|
+
return FLOW_PATTERN_SEARCH
|
|
23
|
+
|
|
24
|
+
@staticmethod
|
|
25
|
+
def from_dict(data: Dict[str, Any]) -> SearchPatternFlowStackFrame:
|
|
26
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
The created `DialogueStackFrame`.
|
|
33
|
+
"""
|
|
34
|
+
return SearchPatternFlowStackFrame(
|
|
35
|
+
frame_id=data["frame_id"],
|
|
36
|
+
step_id=data["step_id"],
|
|
37
|
+
)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
6
|
+
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
7
|
+
|
|
8
|
+
FLOW_PATTERN_SKIP_QUESTION = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "skip_question"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class SkipQuestionPatternFlowStackFrame(PatternFlowStackFrame):
|
|
13
|
+
"""A pattern flow stack frame that gets added if user interrupts the current flow by
|
|
14
|
+
trying to bypass the collect information step.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
flow_id: str = FLOW_PATTERN_SKIP_QUESTION
|
|
18
|
+
"""The ID of the flow."""
|
|
19
|
+
|
|
20
|
+
@classmethod
|
|
21
|
+
def type(cls) -> str:
|
|
22
|
+
"""Returns the type of the frame."""
|
|
23
|
+
return FLOW_PATTERN_SKIP_QUESTION
|
|
24
|
+
|
|
25
|
+
@staticmethod
|
|
26
|
+
def from_dict(data: Dict[str, Any]) -> SkipQuestionPatternFlowStackFrame:
|
|
27
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
The created `DialogueStackFrame`.
|
|
34
|
+
"""
|
|
35
|
+
return SkipQuestionPatternFlowStackFrame(
|
|
36
|
+
frame_id=data["frame_id"],
|
|
37
|
+
step_id=data["step_id"],
|
|
38
|
+
)
|
|
File without changes
|