rasa-pro 3.8.16__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 +380 -0
- rasa/__init__.py +10 -0
- rasa/__main__.py +151 -0
- rasa/anonymization/__init__.py +2 -0
- rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
- rasa/anonymization/anonymization_pipeline.py +287 -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 +117 -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 +566 -0
- rasa/cli/evaluate.py +222 -0
- rasa/cli/export.py +251 -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 +33 -0
- rasa/cli/project_templates/calm/domain/list_contacts.yml +14 -0
- rasa/cli/project_templates/calm/domain/remove_contact.yml +31 -0
- rasa/cli/project_templates/calm/domain/shared.yml +5 -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/domain.yml +17 -0
- rasa/cli/project_templates/tutorial/endpoints.yml +45 -0
- rasa/cli/run.py +136 -0
- rasa/cli/scaffold.py +268 -0
- rasa/cli/shell.py +141 -0
- rasa/cli/studio/__init__.py +0 -0
- rasa/cli/studio/download.py +51 -0
- rasa/cli/studio/studio.py +110 -0
- rasa/cli/studio/train.py +59 -0
- rasa/cli/studio/upload.py +85 -0
- rasa/cli/telemetry.py +90 -0
- rasa/cli/test.py +280 -0
- rasa/cli/train.py +260 -0
- rasa/cli/utils.py +453 -0
- rasa/cli/visualize.py +40 -0
- rasa/cli/x.py +205 -0
- rasa/constants.py +37 -0
- rasa/core/__init__.py +17 -0
- rasa/core/actions/__init__.py +0 -0
- rasa/core/actions/action.py +1450 -0
- rasa/core/actions/action_clean_stack.py +59 -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 +2 -0
- rasa/core/actions/forms.py +737 -0
- rasa/core/actions/loops.py +111 -0
- rasa/core/actions/two_stage_fallback.py +186 -0
- rasa/core/agent.py +557 -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 +387 -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 +339 -0
- rasa/core/channels/callback.py +85 -0
- rasa/core/channels/channel.py +419 -0
- rasa/core/channels/console.py +243 -0
- rasa/core/channels/development_inspector.py +93 -0
- rasa/core/channels/facebook.py +422 -0
- rasa/core/channels/hangouts.py +335 -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-5623b6dc.js +1 -0
- rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-685c106a.js +10 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-8cbed007.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-5889cf12.js +2 -0
- rasa/core/channels/inspector/dist/assets/createText-62fc7601-24c249d7.js +7 -0
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-7dd06a75.js +4 -0
- rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-62c1e54c.js +51 -0
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-ce49b86f.js +6 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-4067e48f.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-85583a23.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-59fe4051.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-47e3a43b.js +266 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-5a2ac0d9.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-268a75c0.js +1040 -0
- rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-dfb8efc4.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
- rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-b0c470f2.js +7 -0
- rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
- rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-2edb829a.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-b6873d69.js +1 -0
- rasa/core/channels/inspector/dist/assets/line-1efc5781.js +1 -0
- rasa/core/channels/inspector/dist/assets/linear-661e9b94.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-2d2e727f.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-9d3ea93d.js +35 -0
- rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-06a178a2.js +7 -0
- rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-0bfedffc.js +52 -0
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-d76d0a04.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-37bb4341.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-f52f7f57.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-4a986a20.js +1 -0
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-7dd9ae12.js +110 -0
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-46e1ca14.js +159 -0
- rasa/core/channels/inspector/dist/assets/styles-9c745c82-4a97439a.js +207 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-823917a3.js +1 -0
- rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-9ea72896.js +61 -0
- rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-b631a8b6.js +7 -0
- rasa/core/channels/inspector/dist/index.html +39 -0
- rasa/core/channels/inspector/index.html +37 -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 +97 -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 +385 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +239 -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 +210 -0
- rasa/core/channels/rocketchat.py +175 -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 +135 -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 +925 -0
- rasa/core/evaluation/marker_stats.py +294 -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 +402 -0
- rasa/core/featurizers/tracker_featurizers.py +1172 -0
- rasa/core/http_interpreter.py +89 -0
- rasa/core/information_retrieval/__init__.py +0 -0
- rasa/core/information_retrieval/faiss.py +116 -0
- rasa/core/information_retrieval/information_retrieval.py +72 -0
- rasa/core/information_retrieval/milvus.py +59 -0
- rasa/core/information_retrieval/qdrant.py +102 -0
- rasa/core/jobs.py +63 -0
- rasa/core/lock.py +139 -0
- rasa/core/lock_store.py +344 -0
- rasa/core/migrate.py +404 -0
- rasa/core/nlg/__init__.py +3 -0
- rasa/core/nlg/callback.py +147 -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 +717 -0
- rasa/core/policies/enterprise_search_prompt_template.jinja2 +62 -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 +582 -0
- rasa/core/policies/flows/flow_step_result.py +43 -0
- rasa/core/policies/intentless_policy.py +924 -0
- rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
- rasa/core/policies/memoization.py +538 -0
- rasa/core/policies/policy.py +716 -0
- rasa/core/policies/rule_policy.py +1276 -0
- rasa/core/policies/ted_policy.py +2146 -0
- rasa/core/policies/unexpected_intent_policy.py +1015 -0
- rasa/core/processor.py +1331 -0
- rasa/core/run.py +315 -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 +576 -0
- rasa/core/test.py +1337 -0
- rasa/core/tracker_store.py +1664 -0
- rasa/core/train.py +107 -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 +1742 -0
- rasa/core/training/story_conflict.py +381 -0
- rasa/core/training/training.py +93 -0
- rasa/core/utils.py +344 -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 +189 -0
- rasa/dialogue_understanding/coexistence/llm_based_router.py +261 -0
- rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
- rasa/dialogue_understanding/commands/__init__.py +45 -0
- rasa/dialogue_understanding/commands/can_not_handle_command.py +61 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +116 -0
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +48 -0
- rasa/dialogue_understanding/commands/clarify_command.py +77 -0
- rasa/dialogue_understanding/commands/command.py +85 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +288 -0
- rasa/dialogue_understanding/commands/error_command.py +67 -0
- rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
- rasa/dialogue_understanding/commands/handle_code_change_command.py +64 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +57 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +48 -0
- rasa/dialogue_understanding/commands/noop_command.py +45 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +125 -0
- rasa/dialogue_understanding/commands/skip_question_command.py +66 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +98 -0
- rasa/dialogue_understanding/generator/__init__.py +6 -0
- rasa/dialogue_understanding/generator/command_generator.py +257 -0
- rasa/dialogue_understanding/generator/command_prompt_template.jinja2 +57 -0
- rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +410 -0
- rasa/dialogue_understanding/generator/llm_command_generator.py +637 -0
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +157 -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 +243 -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 +578 -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 +10 -0
- rasa/e2e_test/e2e_test_case.py +322 -0
- rasa/e2e_test/e2e_test_result.py +34 -0
- rasa/e2e_test/e2e_test_runner.py +659 -0
- rasa/e2e_test/e2e_test_schema.yml +67 -0
- rasa/engine/__init__.py +0 -0
- rasa/engine/caching.py +464 -0
- rasa/engine/constants.py +17 -0
- rasa/engine/exceptions.py +14 -0
- rasa/engine/graph.py +625 -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 +1252 -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 +256 -0
- rasa/engine/runner/interface.py +49 -0
- rasa/engine/storage/__init__.py +0 -0
- rasa/engine/storage/local_model_storage.py +248 -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 +839 -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 +552 -0
- rasa/graph_components/validators/finetuning_validator.py +302 -0
- rasa/hooks.py +113 -0
- rasa/jupyter.py +63 -0
- rasa/keys +1 -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 +535 -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 +1874 -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 +240 -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 +309 -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 +672 -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 +449 -0
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +772 -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 +840 -0
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +539 -0
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +269 -0
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
- rasa/nlu/model.py +24 -0
- rasa/nlu/persistor.py +240 -0
- rasa/nlu/run.py +27 -0
- rasa/nlu/selectors/__init__.py +0 -0
- rasa/nlu/selectors/response_selector.py +990 -0
- rasa/nlu/test.py +1943 -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 +312 -0
- rasa/plugin.py +90 -0
- rasa/server.py +1536 -0
- rasa/shared/__init__.py +0 -0
- rasa/shared/constants.py +181 -0
- rasa/shared/core/__init__.py +0 -0
- rasa/shared/core/constants.py +168 -0
- rasa/shared/core/conversation.py +46 -0
- rasa/shared/core/domain.py +2106 -0
- rasa/shared/core/events.py +2507 -0
- rasa/shared/core/flows/__init__.py +7 -0
- rasa/shared/core/flows/flow.py +353 -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 +211 -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 +51 -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 +907 -0
- rasa/shared/core/slot_mappings.py +235 -0
- rasa/shared/core/slots.py +647 -0
- rasa/shared/core/trackers.py +1159 -0
- rasa/shared/core/training_data/__init__.py +0 -0
- rasa/shared/core/training_data/loading.py +90 -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 +442 -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 +192 -0
- rasa/shared/engine/__init__.py +0 -0
- rasa/shared/engine/caching.py +26 -0
- rasa/shared/exceptions.py +129 -0
- rasa/shared/importers/__init__.py +0 -0
- rasa/shared/importers/importer.py +705 -0
- rasa/shared/importers/multi_project.py +203 -0
- rasa/shared/importers/rasa.py +100 -0
- rasa/shared/importers/utils.py +34 -0
- rasa/shared/nlu/__init__.py +0 -0
- rasa/shared/nlu/constants.py +45 -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 +209 -0
- rasa/shared/nlu/training_data/features.py +374 -0
- rasa/shared/nlu/training_data/formats/__init__.py +10 -0
- rasa/shared/nlu/training_data/formats/dialogflow.py +162 -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 +605 -0
- rasa/shared/nlu/training_data/formats/readerwriter.py +245 -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 +477 -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 +732 -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 +1 -0
- rasa/shared/utils/io.py +403 -0
- rasa/shared/utils/llm.py +405 -0
- rasa/shared/utils/pykwalify_extensions.py +26 -0
- rasa/shared/utils/schemas/__init__.py +0 -0
- rasa/shared/utils/schemas/config.yml +2 -0
- rasa/shared/utils/schemas/domain.yml +142 -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 +777 -0
- rasa/studio/__init__.py +0 -0
- rasa/studio/auth.py +252 -0
- rasa/studio/config.py +127 -0
- rasa/studio/constants.py +16 -0
- rasa/studio/data_handler.py +352 -0
- rasa/studio/download.py +350 -0
- rasa/studio/train.py +136 -0
- rasa/studio/upload.py +408 -0
- rasa/telemetry.py +1583 -0
- rasa/tracing/__init__.py +0 -0
- rasa/tracing/config.py +338 -0
- rasa/tracing/constants.py +38 -0
- rasa/tracing/instrumentation/__init__.py +0 -0
- rasa/tracing/instrumentation/attribute_extractors.py +663 -0
- rasa/tracing/instrumentation/instrumentation.py +939 -0
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +142 -0
- rasa/tracing/instrumentation/metrics.py +206 -0
- rasa/tracing/metric_instrument_provider.py +125 -0
- rasa/utils/__init__.py +0 -0
- rasa/utils/beta.py +83 -0
- rasa/utils/cli.py +27 -0
- rasa/utils/common.py +635 -0
- rasa/utils/converter.py +53 -0
- rasa/utils/endpoints.py +303 -0
- rasa/utils/io.py +326 -0
- rasa/utils/licensing.py +319 -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/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 +991 -0
- rasa/utils/tensorflow/model_data_utils.py +500 -0
- rasa/utils/tensorflow/models.py +936 -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/yaml.py +54 -0
- rasa/validator.py +1035 -0
- rasa/version.py +3 -0
- rasa_pro-3.8.16.dist-info/METADATA +528 -0
- rasa_pro-3.8.16.dist-info/NOTICE +5 -0
- rasa_pro-3.8.16.dist-info/RECORD +644 -0
- rasa_pro-3.8.16.dist-info/WHEEL +4 -0
- rasa_pro-3.8.16.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
from typing import Dict, Text, Any, Optional, List
|
|
2
|
+
|
|
3
|
+
import structlog
|
|
4
|
+
|
|
5
|
+
from rasa.dialogue_understanding.commands import (
|
|
6
|
+
Command,
|
|
7
|
+
StartFlowCommand,
|
|
8
|
+
SetSlotCommand,
|
|
9
|
+
)
|
|
10
|
+
from rasa.dialogue_understanding.generator import CommandGenerator
|
|
11
|
+
from rasa.engine.graph import GraphComponent, ExecutionContext
|
|
12
|
+
from rasa.engine.recipes.default_recipe import DefaultV1Recipe
|
|
13
|
+
from rasa.engine.storage.resource import Resource
|
|
14
|
+
from rasa.engine.storage.storage import ModelStorage
|
|
15
|
+
from rasa.shared.constants import ROUTE_TO_CALM_SLOT
|
|
16
|
+
from rasa.shared.core.flows.flows_list import FlowsList
|
|
17
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
18
|
+
from rasa.shared.nlu.constants import INTENT
|
|
19
|
+
from rasa.shared.nlu.training_data.message import Message
|
|
20
|
+
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
21
|
+
|
|
22
|
+
structlogger = structlog.get_logger()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@DefaultV1Recipe.register(
|
|
26
|
+
[
|
|
27
|
+
DefaultV1Recipe.ComponentType.COMMAND_GENERATOR,
|
|
28
|
+
],
|
|
29
|
+
is_trainable=False,
|
|
30
|
+
)
|
|
31
|
+
class NLUCommandAdapter(GraphComponent, CommandGenerator):
|
|
32
|
+
"""An NLU-based command generator."""
|
|
33
|
+
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
config: Dict[str, Any],
|
|
37
|
+
model_storage: ModelStorage,
|
|
38
|
+
resource: Resource,
|
|
39
|
+
execution_context: ExecutionContext,
|
|
40
|
+
) -> None:
|
|
41
|
+
super().__init__(config)
|
|
42
|
+
self.config = {**self.get_default_config(), **config}
|
|
43
|
+
self._model_storage = model_storage
|
|
44
|
+
self._resource = resource
|
|
45
|
+
self._execution_context = execution_context
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def create(
|
|
49
|
+
cls,
|
|
50
|
+
config: Dict[Text, Any],
|
|
51
|
+
model_storage: ModelStorage,
|
|
52
|
+
resource: Resource,
|
|
53
|
+
execution_context: ExecutionContext,
|
|
54
|
+
) -> "NLUCommandAdapter":
|
|
55
|
+
"""Creates a new untrained component (see parent class for full docstring)."""
|
|
56
|
+
return cls(config, model_storage, resource, execution_context)
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def load(
|
|
60
|
+
cls,
|
|
61
|
+
config: Dict[str, Any],
|
|
62
|
+
model_storage: ModelStorage,
|
|
63
|
+
resource: Resource,
|
|
64
|
+
execution_context: ExecutionContext,
|
|
65
|
+
**kwargs: Any,
|
|
66
|
+
) -> "NLUCommandAdapter":
|
|
67
|
+
"""Loads trained component (see parent class for full docstring)."""
|
|
68
|
+
return cls(config, model_storage, resource, execution_context)
|
|
69
|
+
|
|
70
|
+
def train(self, training_data: TrainingData) -> Resource:
|
|
71
|
+
"""Trains the NLU command adapter."""
|
|
72
|
+
return self._resource
|
|
73
|
+
|
|
74
|
+
async def predict_commands(
|
|
75
|
+
self,
|
|
76
|
+
message: Message,
|
|
77
|
+
flows: FlowsList,
|
|
78
|
+
tracker: Optional[DialogueStateTracker] = None,
|
|
79
|
+
) -> List[Command]:
|
|
80
|
+
"""Creates commands using the predicted intents.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
message: The message from the user.
|
|
84
|
+
flows: The flows available to the user.
|
|
85
|
+
tracker: The tracker containing the current state of the conversation.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
The commands triggered by NLU.
|
|
89
|
+
"""
|
|
90
|
+
if tracker is None or flows.is_empty():
|
|
91
|
+
# cannot do anything if there are no flows or no tracker
|
|
92
|
+
return []
|
|
93
|
+
|
|
94
|
+
commands = self.convert_nlu_to_commands(message, tracker, flows)
|
|
95
|
+
|
|
96
|
+
if commands and len(commands) >= 1 and tracker.has_coexistence_routing_slot:
|
|
97
|
+
# if the nlu command adapter will start a flow and the coexistence feature
|
|
98
|
+
# is used, make sure to set the routing slot
|
|
99
|
+
commands += [SetSlotCommand(ROUTE_TO_CALM_SLOT, True)]
|
|
100
|
+
|
|
101
|
+
# TODO:
|
|
102
|
+
# (May 30th, 2024)
|
|
103
|
+
# This code within the can be removed once the cleaning process
|
|
104
|
+
# is applied by default for every instance of the command generator
|
|
105
|
+
# class.
|
|
106
|
+
# Ticket: https://rasahq.atlassian.net/browse/ENG-1076
|
|
107
|
+
from rasa.dialogue_understanding.processor.command_processor import (
|
|
108
|
+
clean_up_commands,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
structlogger.info("nlu_command_adapter.cleaning_commands", commands=commands)
|
|
112
|
+
if commands:
|
|
113
|
+
commands = clean_up_commands(
|
|
114
|
+
commands, tracker, flows, self._execution_context
|
|
115
|
+
)
|
|
116
|
+
structlogger.info(
|
|
117
|
+
"nlu_command_adapter.clean_commands", clean_commands=commands
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
return commands
|
|
121
|
+
|
|
122
|
+
@staticmethod
|
|
123
|
+
def convert_nlu_to_commands(
|
|
124
|
+
message: Message, tracker: DialogueStateTracker, flows: FlowsList
|
|
125
|
+
) -> List[Command]:
|
|
126
|
+
"""Converts the predicted intent to a command."""
|
|
127
|
+
if tracker is None or flows.is_empty():
|
|
128
|
+
# cannot do anything if there are no flows or no tracker
|
|
129
|
+
return []
|
|
130
|
+
|
|
131
|
+
if not message.get(INTENT) or not message.get(INTENT)["name"]:
|
|
132
|
+
# if the message does not have an intent set,
|
|
133
|
+
# no commands can be predicted
|
|
134
|
+
return []
|
|
135
|
+
|
|
136
|
+
commands: List[Command] = []
|
|
137
|
+
|
|
138
|
+
for flow in flows:
|
|
139
|
+
if flow.nlu_triggers and flow.nlu_triggers.is_triggered(message):
|
|
140
|
+
commands.append(StartFlowCommand(flow.id))
|
|
141
|
+
|
|
142
|
+
structlogger.info("nlu_command_adapter.predict_commands", commands=commands)
|
|
143
|
+
|
|
144
|
+
# there should be just one flow that can be triggered by the predicted intent
|
|
145
|
+
# this is checked when loading the flows
|
|
146
|
+
# however we just doublecheck here and return the first command if there are
|
|
147
|
+
# multiple flows triggered by the intent
|
|
148
|
+
if len(commands) > 1:
|
|
149
|
+
structlogger.warning(
|
|
150
|
+
"nlu_command_adapter.predict_commands",
|
|
151
|
+
messag=f"Two many flows found that are triggered by the "
|
|
152
|
+
f"intent '{message.get(INTENT)['name']}'. Take the first one.",
|
|
153
|
+
commands=commands,
|
|
154
|
+
)
|
|
155
|
+
commands = [commands[0]]
|
|
156
|
+
|
|
157
|
+
return commands
|
|
File without changes
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
from typing import Any, Dict, List, Optional
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
6
|
+
from rasa.core.actions import action
|
|
7
|
+
from rasa.core.channels.channel import OutputChannel
|
|
8
|
+
from rasa.core.nlg.generator import NaturalLanguageGenerator
|
|
9
|
+
from rasa.dialogue_understanding.stack.frames import (
|
|
10
|
+
BaseFlowStackFrame,
|
|
11
|
+
PatternFlowStackFrame,
|
|
12
|
+
)
|
|
13
|
+
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
14
|
+
from rasa.shared.core.constants import ACTION_CANCEL_FLOW
|
|
15
|
+
from rasa.shared.core.domain import Domain
|
|
16
|
+
from rasa.shared.core.events import Event
|
|
17
|
+
from rasa.shared.core.flows.steps.constants import END_STEP
|
|
18
|
+
from rasa.shared.core.flows.steps.continuation import ContinueFlowStep
|
|
19
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
structlogger = structlog.get_logger()
|
|
23
|
+
|
|
24
|
+
FLOW_PATTERN_CANCEL = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "cancel_flow"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@dataclass
|
|
28
|
+
class CancelPatternFlowStackFrame(PatternFlowStackFrame):
|
|
29
|
+
"""A pattern flow stack frame which cancels a flow.
|
|
30
|
+
|
|
31
|
+
The frame contains the information about the stack frames that should
|
|
32
|
+
be canceled."""
|
|
33
|
+
|
|
34
|
+
flow_id: str = FLOW_PATTERN_CANCEL
|
|
35
|
+
"""The ID of the flow."""
|
|
36
|
+
canceled_name: str = ""
|
|
37
|
+
"""The name of the flow that should be canceled."""
|
|
38
|
+
canceled_frames: List[str] = field(default_factory=list)
|
|
39
|
+
"""The stack frames that should be canceled. These can be multiple
|
|
40
|
+
frames since the user frame that is getting canceled might have
|
|
41
|
+
created patterns that should be canceled as well."""
|
|
42
|
+
|
|
43
|
+
@classmethod
|
|
44
|
+
def type(cls) -> str:
|
|
45
|
+
"""Returns the type of the frame."""
|
|
46
|
+
return FLOW_PATTERN_CANCEL
|
|
47
|
+
|
|
48
|
+
@staticmethod
|
|
49
|
+
def from_dict(data: Dict[str, Any]) -> CancelPatternFlowStackFrame:
|
|
50
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
The created `DialogueStackFrame`.
|
|
57
|
+
"""
|
|
58
|
+
return CancelPatternFlowStackFrame(
|
|
59
|
+
frame_id=data["frame_id"],
|
|
60
|
+
step_id=data["step_id"],
|
|
61
|
+
canceled_name=data["canceled_name"],
|
|
62
|
+
canceled_frames=data["canceled_frames"],
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class ActionCancelFlow(action.Action):
|
|
67
|
+
"""Action which cancels a flow from the stack."""
|
|
68
|
+
|
|
69
|
+
def __init__(self) -> None:
|
|
70
|
+
"""Creates a `ActionCancelFlow`."""
|
|
71
|
+
super().__init__()
|
|
72
|
+
|
|
73
|
+
def name(self) -> str:
|
|
74
|
+
"""Return the flow name."""
|
|
75
|
+
return ACTION_CANCEL_FLOW
|
|
76
|
+
|
|
77
|
+
async def run(
|
|
78
|
+
self,
|
|
79
|
+
output_channel: OutputChannel,
|
|
80
|
+
nlg: NaturalLanguageGenerator,
|
|
81
|
+
tracker: DialogueStateTracker,
|
|
82
|
+
domain: Domain,
|
|
83
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
84
|
+
) -> List[Event]:
|
|
85
|
+
"""Cancel the flow."""
|
|
86
|
+
stack = tracker.stack
|
|
87
|
+
if not (top := stack.top()):
|
|
88
|
+
structlogger.warning("action.cancel_flow.no_active_flow")
|
|
89
|
+
return []
|
|
90
|
+
|
|
91
|
+
if not isinstance(top, CancelPatternFlowStackFrame):
|
|
92
|
+
structlogger.warning("action.cancel_flow.no_cancel_frame", top=top)
|
|
93
|
+
return []
|
|
94
|
+
|
|
95
|
+
for canceled_frame_id in top.canceled_frames:
|
|
96
|
+
for frame in stack.frames:
|
|
97
|
+
if frame.frame_id == canceled_frame_id and isinstance(
|
|
98
|
+
frame, BaseFlowStackFrame
|
|
99
|
+
):
|
|
100
|
+
# Setting the stack frame to the end step so it is properly
|
|
101
|
+
# wrapped up by the flow policy
|
|
102
|
+
frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
|
|
103
|
+
break
|
|
104
|
+
else:
|
|
105
|
+
structlogger.warning(
|
|
106
|
+
"action.cancel_flow.frame_not_found",
|
|
107
|
+
dialogue_stack=stack,
|
|
108
|
+
frame_id=canceled_frame_id,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
return tracker.create_stack_updated_events(stack)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
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_CANNOT_HANDLE_DEFAULT,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
FLOW_PATTERN_CANNOT_HANDLE = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "cannot_handle"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class CannotHandlePatternFlowStackFrame(PatternFlowStackFrame):
|
|
16
|
+
"""A pattern flow stack frame that gets added when that the
|
|
17
|
+
bot can't handle the user's input."""
|
|
18
|
+
|
|
19
|
+
flow_id: str = FLOW_PATTERN_CANNOT_HANDLE
|
|
20
|
+
"""The ID of the flow."""
|
|
21
|
+
|
|
22
|
+
reason: Optional[Text] = RASA_PATTERN_CANNOT_HANDLE_DEFAULT
|
|
23
|
+
"""Reason for cannot handle used in switch-case of the
|
|
24
|
+
cannot handle pattern flow."""
|
|
25
|
+
|
|
26
|
+
@classmethod
|
|
27
|
+
def type(cls) -> str:
|
|
28
|
+
"""Returns the type of the frame."""
|
|
29
|
+
return FLOW_PATTERN_CANNOT_HANDLE
|
|
30
|
+
|
|
31
|
+
@staticmethod
|
|
32
|
+
def from_dict(data: Dict[str, Any]) -> CannotHandlePatternFlowStackFrame:
|
|
33
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
The created `DialogueStackFrame`.
|
|
40
|
+
"""
|
|
41
|
+
return CannotHandlePatternFlowStackFrame(
|
|
42
|
+
frame_id=data["frame_id"], step_id=data["step_id"], reason=data["reason"]
|
|
43
|
+
)
|
|
@@ -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_CHITCHAT = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "chitchat"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class ChitchatPatternFlowStackFrame(PatternFlowStackFrame):
|
|
14
|
+
"""A flow stack frame that gets added to respond to Chitchat."""
|
|
15
|
+
|
|
16
|
+
flow_id: str = FLOW_PATTERN_CHITCHAT
|
|
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_CHITCHAT
|
|
23
|
+
|
|
24
|
+
@staticmethod
|
|
25
|
+
def from_dict(data: Dict[str, Any]) -> ChitchatPatternFlowStackFrame:
|
|
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 ChitchatPatternFlowStackFrame(
|
|
35
|
+
frame_id=data["frame_id"],
|
|
36
|
+
step_id=data["step_id"],
|
|
37
|
+
)
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
from typing import Any, Dict, List, Optional
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
6
|
+
from rasa.core.actions import action
|
|
7
|
+
from rasa.core.channels.channel import OutputChannel
|
|
8
|
+
from rasa.core.nlg.generator import NaturalLanguageGenerator
|
|
9
|
+
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
10
|
+
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
11
|
+
from rasa.shared.core.constants import ACTION_CLARIFY_FLOWS
|
|
12
|
+
from rasa.shared.core.domain import Domain
|
|
13
|
+
from rasa.shared.core.events import Event
|
|
14
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
structlogger = structlog.get_logger()
|
|
18
|
+
|
|
19
|
+
FLOW_PATTERN_CLARIFICATION = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "clarification"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass
|
|
23
|
+
class ClarifyPatternFlowStackFrame(PatternFlowStackFrame):
|
|
24
|
+
"""A pattern flow stack frame which helps the user clarify their action."""
|
|
25
|
+
|
|
26
|
+
flow_id: str = FLOW_PATTERN_CLARIFICATION
|
|
27
|
+
"""The ID of the flow."""
|
|
28
|
+
names: List[str] = field(default_factory=list)
|
|
29
|
+
"""The names of the flows that the user can choose from."""
|
|
30
|
+
clarification_options: str = ""
|
|
31
|
+
"""The options that the user can choose from as a string."""
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def type(cls) -> str:
|
|
35
|
+
"""Returns the type of the frame."""
|
|
36
|
+
return FLOW_PATTERN_CLARIFICATION
|
|
37
|
+
|
|
38
|
+
@staticmethod
|
|
39
|
+
def from_dict(data: Dict[str, Any]) -> ClarifyPatternFlowStackFrame:
|
|
40
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
The created `DialogueStackFrame`.
|
|
47
|
+
"""
|
|
48
|
+
return ClarifyPatternFlowStackFrame(
|
|
49
|
+
frame_id=data["frame_id"],
|
|
50
|
+
step_id=data["step_id"],
|
|
51
|
+
names=data["names"],
|
|
52
|
+
clarification_options=data["clarification_options"],
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class ActionClarifyFlows(action.Action):
|
|
57
|
+
"""Action which clarifies which flow to start."""
|
|
58
|
+
|
|
59
|
+
def name(self) -> str:
|
|
60
|
+
"""Return the flow name."""
|
|
61
|
+
return ACTION_CLARIFY_FLOWS
|
|
62
|
+
|
|
63
|
+
@staticmethod
|
|
64
|
+
def assemble_options_string(names: List[str]) -> str:
|
|
65
|
+
"""Concatenate options to a human-readable string."""
|
|
66
|
+
clarification_message = ""
|
|
67
|
+
for i, name in enumerate(names):
|
|
68
|
+
if i == 0:
|
|
69
|
+
clarification_message += name
|
|
70
|
+
elif i == len(names) - 1:
|
|
71
|
+
clarification_message += f" or {name}"
|
|
72
|
+
else:
|
|
73
|
+
clarification_message += f", {name}"
|
|
74
|
+
return clarification_message
|
|
75
|
+
|
|
76
|
+
async def run(
|
|
77
|
+
self,
|
|
78
|
+
output_channel: "OutputChannel",
|
|
79
|
+
nlg: "NaturalLanguageGenerator",
|
|
80
|
+
tracker: "DialogueStateTracker",
|
|
81
|
+
domain: "Domain",
|
|
82
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
83
|
+
) -> List[Event]:
|
|
84
|
+
"""Correct the slots."""
|
|
85
|
+
stack = tracker.stack
|
|
86
|
+
if not (top := stack.top()):
|
|
87
|
+
structlogger.warning("action.clarify_flows.no_active_flow")
|
|
88
|
+
return []
|
|
89
|
+
|
|
90
|
+
if not isinstance(top, ClarifyPatternFlowStackFrame):
|
|
91
|
+
structlogger.warning("action.clarify_flows.no_clarification_frame", top=top)
|
|
92
|
+
return []
|
|
93
|
+
|
|
94
|
+
options_string = self.assemble_options_string(top.names)
|
|
95
|
+
top.clarification_options = options_string
|
|
96
|
+
# since we modified the stack frame, we need to update the stack
|
|
97
|
+
return tracker.create_stack_updated_events(stack)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
6
|
+
from rasa.dialogue_understanding.stack.frames import (
|
|
7
|
+
PatternFlowStackFrame,
|
|
8
|
+
)
|
|
9
|
+
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
10
|
+
|
|
11
|
+
structlogger = structlog.get_logger()
|
|
12
|
+
|
|
13
|
+
FLOW_PATTERN_CODE_CHANGE_ID = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "code_change"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class CodeChangeFlowStackFrame(PatternFlowStackFrame):
|
|
18
|
+
"""A pattern flow stack frame which cleans the stack after a bot update."""
|
|
19
|
+
|
|
20
|
+
flow_id: str = FLOW_PATTERN_CODE_CHANGE_ID
|
|
21
|
+
"""The ID of the flow."""
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def type(cls) -> str:
|
|
25
|
+
"""Returns the type of the frame."""
|
|
26
|
+
return FLOW_PATTERN_CODE_CHANGE_ID
|
|
27
|
+
|
|
28
|
+
@staticmethod
|
|
29
|
+
def from_dict(data: Dict[str, Any]) -> CodeChangeFlowStackFrame:
|
|
30
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
The created `DialogueStackFrame`.
|
|
37
|
+
"""
|
|
38
|
+
return CodeChangeFlowStackFrame(
|
|
39
|
+
frame_id=data["frame_id"],
|
|
40
|
+
step_id=data["step_id"],
|
|
41
|
+
)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Dict, List, Optional
|
|
4
|
+
from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
|
|
5
|
+
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
6
|
+
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
7
|
+
from rasa.shared.core.flows.steps.collect import SlotRejection
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
FLOW_PATTERN_COLLECT_INFORMATION = (
|
|
11
|
+
RASA_DEFAULT_FLOW_PATTERN_PREFIX + "collect_information"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class CollectInformationPatternFlowStackFrame(PatternFlowStackFrame):
|
|
17
|
+
"""A pattern flow stack frame which collects information from the user."""
|
|
18
|
+
|
|
19
|
+
flow_id: str = FLOW_PATTERN_COLLECT_INFORMATION
|
|
20
|
+
"""The ID of the flow."""
|
|
21
|
+
collect: str = ""
|
|
22
|
+
"""The information that should be collected from the user.
|
|
23
|
+
this corresponds to the slot that will be filled."""
|
|
24
|
+
utter: str = ""
|
|
25
|
+
"""The utter action that should be executed to ask the user for the
|
|
26
|
+
information."""
|
|
27
|
+
collect_action: str = ""
|
|
28
|
+
"""The action that should be executed to ask the user for the
|
|
29
|
+
information."""
|
|
30
|
+
rejections: Optional[List[SlotRejection]] = None
|
|
31
|
+
"""The predicate check that should be applied to the collected information.
|
|
32
|
+
If a predicate check fails, its `utter` action indicated under rejections
|
|
33
|
+
will be executed.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
@classmethod
|
|
37
|
+
def type(cls) -> str:
|
|
38
|
+
"""Returns the type of the frame."""
|
|
39
|
+
return "pattern_collect_information"
|
|
40
|
+
|
|
41
|
+
@staticmethod
|
|
42
|
+
def from_dict(data: Dict[str, Any]) -> CollectInformationPatternFlowStackFrame:
|
|
43
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
The created `DialogueStackFrame`.
|
|
50
|
+
"""
|
|
51
|
+
rejections = data.get("rejections")
|
|
52
|
+
if rejections is not None:
|
|
53
|
+
rejections = [
|
|
54
|
+
SlotRejection.from_dict(rejection) for rejection in rejections
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
return CollectInformationPatternFlowStackFrame(
|
|
58
|
+
frame_id=data["frame_id"],
|
|
59
|
+
step_id=data["step_id"],
|
|
60
|
+
collect=data["collect"],
|
|
61
|
+
collect_action=data["collect_action"],
|
|
62
|
+
utter=data["utter"],
|
|
63
|
+
rejections=rejections,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def context_as_dict(
|
|
67
|
+
self, underlying_frames: List[DialogueStackFrame]
|
|
68
|
+
) -> Dict[str, Any]:
|
|
69
|
+
"""Returns the context of the frame as a dictionary.
|
|
70
|
+
|
|
71
|
+
The collect information frame needs a special implementation as
|
|
72
|
+
it includes the context of the underlying frame in its context.
|
|
73
|
+
|
|
74
|
+
This corresponds to the user expectation when e.g. using templates
|
|
75
|
+
in a collect information node.
|
|
76
|
+
"""
|
|
77
|
+
context = super().context_as_dict(underlying_frames)
|
|
78
|
+
|
|
79
|
+
if underlying_frames:
|
|
80
|
+
underlying_context = underlying_frames[-1].context_as_dict(
|
|
81
|
+
underlying_frames[:-1]
|
|
82
|
+
)
|
|
83
|
+
else:
|
|
84
|
+
underlying_context = {}
|
|
85
|
+
|
|
86
|
+
# the collect information frame is a special case, as it is not
|
|
87
|
+
# a regular frame, but a frame that is used to collect information
|
|
88
|
+
|
|
89
|
+
context.update(underlying_context)
|
|
90
|
+
return context
|
|
@@ -0,0 +1,40 @@
|
|
|
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_COMPLETED = RASA_DEFAULT_FLOW_PATTERN_PREFIX + "completed"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class CompletedPatternFlowStackFrame(PatternFlowStackFrame):
|
|
14
|
+
"""A pattern flow stack frame which gets added if all prior flows are completed."""
|
|
15
|
+
|
|
16
|
+
flow_id: str = FLOW_PATTERN_COMPLETED
|
|
17
|
+
"""The ID of the flow."""
|
|
18
|
+
previous_flow_name: str = ""
|
|
19
|
+
"""The name of the last flow that was completed."""
|
|
20
|
+
|
|
21
|
+
@classmethod
|
|
22
|
+
def type(cls) -> str:
|
|
23
|
+
"""Returns the type of the frame."""
|
|
24
|
+
return FLOW_PATTERN_COMPLETED
|
|
25
|
+
|
|
26
|
+
@staticmethod
|
|
27
|
+
def from_dict(data: Dict[str, Any]) -> CompletedPatternFlowStackFrame:
|
|
28
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
The created `DialogueStackFrame`.
|
|
35
|
+
"""
|
|
36
|
+
return CompletedPatternFlowStackFrame(
|
|
37
|
+
frame_id=data["frame_id"],
|
|
38
|
+
step_id=data["step_id"],
|
|
39
|
+
previous_flow_name=data["previous_flow_name"],
|
|
40
|
+
)
|
|
@@ -0,0 +1,42 @@
|
|
|
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_CONTINUE_INTERRUPTED = (
|
|
10
|
+
RASA_DEFAULT_FLOW_PATTERN_PREFIX + "continue_interrupted"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class ContinueInterruptedPatternFlowStackFrame(PatternFlowStackFrame):
|
|
16
|
+
"""A pattern flow stack frame that gets added if an interruption is completed."""
|
|
17
|
+
|
|
18
|
+
flow_id: str = FLOW_PATTERN_CONTINUE_INTERRUPTED
|
|
19
|
+
"""The ID of the flow."""
|
|
20
|
+
previous_flow_name: str = ""
|
|
21
|
+
"""The name of the flow that was interrupted."""
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def type(cls) -> str:
|
|
25
|
+
"""Returns the type of the frame."""
|
|
26
|
+
return FLOW_PATTERN_CONTINUE_INTERRUPTED
|
|
27
|
+
|
|
28
|
+
@staticmethod
|
|
29
|
+
def from_dict(data: Dict[str, Any]) -> ContinueInterruptedPatternFlowStackFrame:
|
|
30
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
The created `DialogueStackFrame`.
|
|
37
|
+
"""
|
|
38
|
+
return ContinueInterruptedPatternFlowStackFrame(
|
|
39
|
+
frame_id=data["frame_id"],
|
|
40
|
+
step_id=data["step_id"],
|
|
41
|
+
previous_flow_name=data["previous_flow_name"],
|
|
42
|
+
)
|