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,362 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from functools import cached_property
|
|
5
|
+
from typing import Text, Optional, Dict, Any, List, Set
|
|
6
|
+
from pypred import Predicate
|
|
7
|
+
import structlog
|
|
8
|
+
|
|
9
|
+
import rasa.shared.utils.io
|
|
10
|
+
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
11
|
+
from rasa.shared.core.flows.flow_step import FlowStep
|
|
12
|
+
|
|
13
|
+
from rasa.shared.core.flows.flow_step_links import StaticFlowStepLink
|
|
14
|
+
from rasa.shared.core.flows.nlu_trigger import NLUTriggers
|
|
15
|
+
from rasa.shared.core.flows.steps.continuation import ContinueFlowStep
|
|
16
|
+
from rasa.shared.core.flows.steps.constants import (
|
|
17
|
+
CONTINUE_STEP_PREFIX,
|
|
18
|
+
START_STEP,
|
|
19
|
+
END_STEP,
|
|
20
|
+
)
|
|
21
|
+
from rasa.shared.core.flows.steps import (
|
|
22
|
+
CollectInformationFlowStep,
|
|
23
|
+
EndFlowStep,
|
|
24
|
+
StartFlowStep,
|
|
25
|
+
ActionFlowStep,
|
|
26
|
+
)
|
|
27
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
28
|
+
from rasa.shared.core.slots import Slot
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
structlogger = structlog.get_logger()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclass
|
|
35
|
+
class Flow:
|
|
36
|
+
"""Represents the configuration of a flow."""
|
|
37
|
+
|
|
38
|
+
id: Text
|
|
39
|
+
"""The id of the flow."""
|
|
40
|
+
custom_name: Optional[Text] = None
|
|
41
|
+
"""The human-readable name of the flow."""
|
|
42
|
+
description: Optional[Text] = None
|
|
43
|
+
"""The description of the flow."""
|
|
44
|
+
guard_condition: Optional[Text] = None
|
|
45
|
+
"""The condition that needs to be fulfilled for the flow to be startable."""
|
|
46
|
+
step_sequence: FlowStepSequence = field(default_factory=FlowStepSequence.empty)
|
|
47
|
+
"""The steps of the flow."""
|
|
48
|
+
nlu_triggers: Optional[NLUTriggers] = None
|
|
49
|
+
"""The list of intents, e.g. nlu triggers, that start the flow."""
|
|
50
|
+
always_include_in_prompt: Optional[bool] = None
|
|
51
|
+
"""
|
|
52
|
+
A flag that checks whether the flow should always be included in the prompt or not.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
@staticmethod
|
|
56
|
+
def from_json(flow_id: Text, data: Dict[Text, Any]) -> Flow:
|
|
57
|
+
"""Create a Flow object from serialized data.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
flow_id: id of the flow
|
|
61
|
+
data: data for a Flow object in a serialized format.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
A Flow object.
|
|
65
|
+
"""
|
|
66
|
+
step_sequence = FlowStepSequence.from_json(data.get("steps"))
|
|
67
|
+
nlu_triggers = NLUTriggers.from_json(data.get("nlu_trigger"))
|
|
68
|
+
|
|
69
|
+
return Flow(
|
|
70
|
+
id=flow_id,
|
|
71
|
+
custom_name=data.get("name"),
|
|
72
|
+
description=data.get("description"),
|
|
73
|
+
always_include_in_prompt=data.get("always_include_in_prompt"),
|
|
74
|
+
# str or bool are permitted in the flow schema but internally we want a str
|
|
75
|
+
guard_condition=str(data["if"]) if "if" in data else None,
|
|
76
|
+
step_sequence=Flow.resolve_default_ids(step_sequence),
|
|
77
|
+
nlu_triggers=nlu_triggers,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
@staticmethod
|
|
81
|
+
def create_default_name(flow_id: str) -> str:
|
|
82
|
+
"""Create a default flow name for when it is missing."""
|
|
83
|
+
return flow_id.replace("_", " ").replace("-", " ")
|
|
84
|
+
|
|
85
|
+
@staticmethod
|
|
86
|
+
def resolve_default_ids(step_sequence: FlowStepSequence) -> FlowStepSequence:
|
|
87
|
+
"""Resolves the default ids of all steps in the sequence.
|
|
88
|
+
|
|
89
|
+
If a step does not have an id, a default id is assigned to it based
|
|
90
|
+
on the type of the step and its position in the flow.
|
|
91
|
+
|
|
92
|
+
Similarly, if a step doesn't have an explicit next assigned we resolve
|
|
93
|
+
the default next step id.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
step_sequence: The step sequence to resolve the default ids for.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
The step sequence with the default ids resolved.
|
|
100
|
+
"""
|
|
101
|
+
# assign an index to all steps
|
|
102
|
+
for idx, step in enumerate(step_sequence.steps):
|
|
103
|
+
step.idx = idx
|
|
104
|
+
|
|
105
|
+
def resolve_default_next(steps: List[FlowStep], is_root_sequence: bool) -> None:
|
|
106
|
+
for i, step in enumerate(steps):
|
|
107
|
+
if step.next.no_link_available() and step.does_allow_for_next_step():
|
|
108
|
+
if i == len(steps) - 1:
|
|
109
|
+
if is_root_sequence:
|
|
110
|
+
# if this is the root sequence, we need to add an end step
|
|
111
|
+
# to the end of the sequence. other sequences, e.g.
|
|
112
|
+
# in branches need to explicitly add a next step.
|
|
113
|
+
step.next.links.append(StaticFlowStepLink(END_STEP))
|
|
114
|
+
else:
|
|
115
|
+
step.next.links.append(StaticFlowStepLink(steps[i + 1].id))
|
|
116
|
+
for link in step.next.links:
|
|
117
|
+
if sub_steps := link.child_steps():
|
|
118
|
+
resolve_default_next(sub_steps, is_root_sequence=False)
|
|
119
|
+
|
|
120
|
+
resolve_default_next(step_sequence.child_steps, is_root_sequence=True)
|
|
121
|
+
return step_sequence
|
|
122
|
+
|
|
123
|
+
def as_json(self) -> Dict[Text, Any]:
|
|
124
|
+
"""Serialize the Flow object.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
The Flow object as serialized data.
|
|
128
|
+
"""
|
|
129
|
+
data: Dict[Text, Any] = {
|
|
130
|
+
"id": self.id,
|
|
131
|
+
"steps": self.step_sequence.as_json(),
|
|
132
|
+
}
|
|
133
|
+
if self.custom_name is not None:
|
|
134
|
+
data["name"] = self.custom_name
|
|
135
|
+
if self.description is not None:
|
|
136
|
+
data["description"] = self.description
|
|
137
|
+
if self.guard_condition is not None:
|
|
138
|
+
data["if"] = self.guard_condition
|
|
139
|
+
if self.always_include_in_prompt is not None:
|
|
140
|
+
data["always_include_in_prompt"] = self.always_include_in_prompt
|
|
141
|
+
if self.nlu_triggers:
|
|
142
|
+
data["nlu_trigger"] = self.nlu_triggers.as_json()
|
|
143
|
+
|
|
144
|
+
return data
|
|
145
|
+
|
|
146
|
+
def readable_name(self) -> str:
|
|
147
|
+
"""Returns the name of the flow or its id if no name is set."""
|
|
148
|
+
return self.name or self.id
|
|
149
|
+
|
|
150
|
+
def step_by_id(self, step_id: Optional[Text]) -> Optional[FlowStep]:
|
|
151
|
+
"""Returns the step with the given id."""
|
|
152
|
+
if not step_id:
|
|
153
|
+
return None
|
|
154
|
+
|
|
155
|
+
if step_id == START_STEP:
|
|
156
|
+
return StartFlowStep(self.first_step_in_flow().id)
|
|
157
|
+
|
|
158
|
+
if step_id == END_STEP:
|
|
159
|
+
return EndFlowStep()
|
|
160
|
+
|
|
161
|
+
if step_id.startswith(CONTINUE_STEP_PREFIX):
|
|
162
|
+
return ContinueFlowStep(step_id[len(CONTINUE_STEP_PREFIX) :])
|
|
163
|
+
|
|
164
|
+
for step in self.steps_with_calls_resolved:
|
|
165
|
+
if step.id == step_id:
|
|
166
|
+
return step
|
|
167
|
+
|
|
168
|
+
return None
|
|
169
|
+
|
|
170
|
+
def first_step_in_flow(self) -> FlowStep:
|
|
171
|
+
"""Returns the start step of this flow."""
|
|
172
|
+
if not (steps := self.steps):
|
|
173
|
+
raise RuntimeError(
|
|
174
|
+
f"Flow {self.id} is empty despite validation that this cannot happen."
|
|
175
|
+
)
|
|
176
|
+
return steps[0]
|
|
177
|
+
|
|
178
|
+
def get_trigger_intents(self) -> Set[str]:
|
|
179
|
+
"""Returns the trigger intents of the flow."""
|
|
180
|
+
results: Set[str] = set()
|
|
181
|
+
|
|
182
|
+
if not self.nlu_triggers:
|
|
183
|
+
return results
|
|
184
|
+
|
|
185
|
+
for condition in self.nlu_triggers.trigger_conditions:
|
|
186
|
+
results.add(condition.intent)
|
|
187
|
+
|
|
188
|
+
return results
|
|
189
|
+
|
|
190
|
+
@property
|
|
191
|
+
def is_rasa_default_flow(self) -> bool:
|
|
192
|
+
"""Test whether the flow is a rasa default flow."""
|
|
193
|
+
return self.id.startswith(RASA_DEFAULT_FLOW_PATTERN_PREFIX)
|
|
194
|
+
|
|
195
|
+
def get_collect_steps(self) -> List[CollectInformationFlowStep]:
|
|
196
|
+
"""Return all CollectInformationFlowSteps in the flow."""
|
|
197
|
+
collect_steps = []
|
|
198
|
+
for step in self.steps_with_calls_resolved:
|
|
199
|
+
if isinstance(step, CollectInformationFlowStep):
|
|
200
|
+
collect_steps.append(step)
|
|
201
|
+
return collect_steps
|
|
202
|
+
|
|
203
|
+
@property
|
|
204
|
+
def steps_with_calls_resolved(self) -> List[FlowStep]:
|
|
205
|
+
"""Return the steps of the flow including steps of called flows."""
|
|
206
|
+
return self.step_sequence.steps_with_calls_resolved
|
|
207
|
+
|
|
208
|
+
@property
|
|
209
|
+
def steps(self) -> List[FlowStep]:
|
|
210
|
+
"""Return the steps of the flow without steps of called flows."""
|
|
211
|
+
return self.step_sequence.steps
|
|
212
|
+
|
|
213
|
+
@cached_property
|
|
214
|
+
def fingerprint(self) -> str:
|
|
215
|
+
"""Create a fingerprint identifying this step sequence."""
|
|
216
|
+
return rasa.shared.utils.io.deep_container_fingerprint(self.as_json())
|
|
217
|
+
|
|
218
|
+
@property
|
|
219
|
+
def utterances(self) -> Set[str]:
|
|
220
|
+
"""Retrieve all utterances of this flow."""
|
|
221
|
+
return set().union(
|
|
222
|
+
*[step.utterances for step in self.step_sequence.steps_with_calls_resolved]
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
@property
|
|
226
|
+
def custom_actions(self) -> Set[str]:
|
|
227
|
+
"""Retrieve all custom actions of this flow."""
|
|
228
|
+
return {
|
|
229
|
+
step.custom_action
|
|
230
|
+
for step in self.step_sequence.steps_with_calls_resolved
|
|
231
|
+
if isinstance(step, ActionFlowStep) and step.custom_action is not None
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
@property
|
|
235
|
+
def name(self) -> str:
|
|
236
|
+
"""Create a default name if none is present."""
|
|
237
|
+
return self.custom_name or Flow.create_default_name(self.id)
|
|
238
|
+
|
|
239
|
+
def is_startable(
|
|
240
|
+
self,
|
|
241
|
+
context: Optional[Dict[Text, Any]] = None,
|
|
242
|
+
slots: Optional[Dict[Text, Slot]] = None,
|
|
243
|
+
) -> bool:
|
|
244
|
+
"""Return whether the start condition is satisfied.
|
|
245
|
+
|
|
246
|
+
Args:
|
|
247
|
+
context: The context data to evaluate the starting conditions against.
|
|
248
|
+
slots: The slots to evaluate the starting conditions against.
|
|
249
|
+
|
|
250
|
+
Returns:
|
|
251
|
+
Whether the start condition is satisfied.
|
|
252
|
+
"""
|
|
253
|
+
context = context or {}
|
|
254
|
+
slots = slots or {}
|
|
255
|
+
simplified_slots = {slot.name: slot.value for slot in slots.values()}
|
|
256
|
+
|
|
257
|
+
# If no starting condition exists, the flow is always startable.
|
|
258
|
+
if not self.guard_condition:
|
|
259
|
+
return True
|
|
260
|
+
|
|
261
|
+
# if a flow guard condition exists and the flow was started via a link,
|
|
262
|
+
# e.g. is currently active, the flow is startable
|
|
263
|
+
if context.get("flow_id") == self.id:
|
|
264
|
+
return True
|
|
265
|
+
|
|
266
|
+
try:
|
|
267
|
+
predicate = Predicate(self.guard_condition)
|
|
268
|
+
is_startable = predicate.evaluate(
|
|
269
|
+
{"context": context, "slots": simplified_slots}
|
|
270
|
+
)
|
|
271
|
+
structlogger.debug(
|
|
272
|
+
"command_generator.validate_flow_starting_conditions.result",
|
|
273
|
+
predicate=predicate.description(),
|
|
274
|
+
is_startable=is_startable,
|
|
275
|
+
flow_id=self.id,
|
|
276
|
+
)
|
|
277
|
+
return is_startable
|
|
278
|
+
# if there is any kind of exception when evaluating the predicate, the flow
|
|
279
|
+
# is not startable
|
|
280
|
+
except (TypeError, Exception) as e:
|
|
281
|
+
structlogger.error(
|
|
282
|
+
"command_generator.validate_flow_starting_conditions.error",
|
|
283
|
+
predicate=self.guard_condition,
|
|
284
|
+
context=context,
|
|
285
|
+
slots=slots,
|
|
286
|
+
error=str(e),
|
|
287
|
+
)
|
|
288
|
+
return False
|
|
289
|
+
|
|
290
|
+
def has_action_step(self, action: Text) -> bool:
|
|
291
|
+
"""Check whether the flow has an action step with the given action."""
|
|
292
|
+
for step in self.steps:
|
|
293
|
+
if isinstance(step, ActionFlowStep) and step.action == action:
|
|
294
|
+
return True
|
|
295
|
+
return False
|
|
296
|
+
|
|
297
|
+
def is_startable_only_via_link(self) -> bool:
|
|
298
|
+
"""Determines if the flow can be initiated exclusively through a link.
|
|
299
|
+
|
|
300
|
+
This condition is met when a guard condition exists and is
|
|
301
|
+
consistently evaluated to `False` (e.g. `if: False`).
|
|
302
|
+
|
|
303
|
+
Returns:
|
|
304
|
+
A boolean indicating if the flow initiation is link-based only.
|
|
305
|
+
"""
|
|
306
|
+
if (
|
|
307
|
+
self.guard_condition is None
|
|
308
|
+
or self._contains_variables_in_guard_condition()
|
|
309
|
+
):
|
|
310
|
+
return False
|
|
311
|
+
|
|
312
|
+
try:
|
|
313
|
+
predicate = Predicate(self.guard_condition)
|
|
314
|
+
is_startable_via_link = not predicate.evaluate({})
|
|
315
|
+
structlogger.debug(
|
|
316
|
+
"flow.is_startable_only_via_link.result",
|
|
317
|
+
predicate=self.guard_condition,
|
|
318
|
+
is_startable_via_link=is_startable_via_link,
|
|
319
|
+
flow_id=self.id,
|
|
320
|
+
)
|
|
321
|
+
return is_startable_via_link
|
|
322
|
+
# if there is any kind of exception when evaluating the predicate, the flow
|
|
323
|
+
# is not startable by link or by any other means.
|
|
324
|
+
except (TypeError, Exception) as e:
|
|
325
|
+
structlogger.error(
|
|
326
|
+
"flow.is_startable_only_via_link.error",
|
|
327
|
+
predicate=self.guard_condition,
|
|
328
|
+
error=str(e),
|
|
329
|
+
flow_id=self.id,
|
|
330
|
+
)
|
|
331
|
+
return False
|
|
332
|
+
|
|
333
|
+
def _contains_variables_in_guard_condition(self) -> bool:
|
|
334
|
+
"""Determines if the guard condition contains dynamic literals.
|
|
335
|
+
|
|
336
|
+
I.e. literals that cannot be statically resolved, indicating a variable.
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
True if dynamic literals are present, False otherwise.
|
|
340
|
+
"""
|
|
341
|
+
from pypred import ast
|
|
342
|
+
from pypred.tiler import tile, SimplePattern
|
|
343
|
+
|
|
344
|
+
if not self.guard_condition:
|
|
345
|
+
return False
|
|
346
|
+
|
|
347
|
+
predicate = Predicate(self.guard_condition)
|
|
348
|
+
|
|
349
|
+
# find all literals in the AST tree
|
|
350
|
+
literals = []
|
|
351
|
+
tile(
|
|
352
|
+
ast=predicate.ast,
|
|
353
|
+
patterns=[SimplePattern("types:Literal")],
|
|
354
|
+
func=lambda _, literal: literals.append(literal),
|
|
355
|
+
)
|
|
356
|
+
|
|
357
|
+
# check if there is a literal that cannot be statically resolved (variable)
|
|
358
|
+
for literal in literals:
|
|
359
|
+
if type(predicate.static_resolve(literal.value)) == ast.Undefined:
|
|
360
|
+
return True
|
|
361
|
+
|
|
362
|
+
return False
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import (
|
|
6
|
+
Any,
|
|
7
|
+
Dict,
|
|
8
|
+
Generator,
|
|
9
|
+
Optional,
|
|
10
|
+
Set,
|
|
11
|
+
Text,
|
|
12
|
+
)
|
|
13
|
+
import structlog
|
|
14
|
+
|
|
15
|
+
from rasa.shared.exceptions import RasaException
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from rasa.shared.core.flows.flow_step_links import FlowStepLinks
|
|
19
|
+
|
|
20
|
+
structlogger = structlog.get_logger()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def step_from_json(data: Dict[Text, Any]) -> FlowStep:
|
|
24
|
+
"""Create a specific FlowStep from serialized data.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
data: data for a specific FlowStep object in a serialized data format.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
An instance of a specific FlowStep class.
|
|
31
|
+
"""
|
|
32
|
+
from rasa.shared.core.flows.steps import (
|
|
33
|
+
ActionFlowStep,
|
|
34
|
+
CollectInformationFlowStep,
|
|
35
|
+
LinkFlowStep,
|
|
36
|
+
SetSlotsFlowStep,
|
|
37
|
+
NoOperationFlowStep,
|
|
38
|
+
CallFlowStep,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
if "action" in data:
|
|
42
|
+
return ActionFlowStep.from_json(data)
|
|
43
|
+
if "collect" in data:
|
|
44
|
+
return CollectInformationFlowStep.from_json(data)
|
|
45
|
+
if "link" in data:
|
|
46
|
+
return LinkFlowStep.from_json(data)
|
|
47
|
+
if "call" in data:
|
|
48
|
+
return CallFlowStep.from_json(data)
|
|
49
|
+
if "set_slots" in data:
|
|
50
|
+
return SetSlotsFlowStep.from_json(data)
|
|
51
|
+
if "noop" in data:
|
|
52
|
+
return NoOperationFlowStep.from_json(data)
|
|
53
|
+
raise RasaException(f"Failed to parse step from json. Unknown type for {data}.")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@dataclass
|
|
57
|
+
class FlowStep:
|
|
58
|
+
"""A single step in a flow."""
|
|
59
|
+
|
|
60
|
+
custom_id: Optional[Text]
|
|
61
|
+
"""The id of the flow step."""
|
|
62
|
+
idx: int
|
|
63
|
+
"""The index of the step in the flow."""
|
|
64
|
+
description: Optional[Text]
|
|
65
|
+
"""The description of the flow step."""
|
|
66
|
+
metadata: Dict[Text, Any]
|
|
67
|
+
"""Additional, unstructured information about this flow step."""
|
|
68
|
+
next: FlowStepLinks
|
|
69
|
+
"""The next steps of the flow step."""
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def from_json(cls, data: Dict[Text, Any]) -> FlowStep:
|
|
73
|
+
"""Create a FlowStep object from data in a serialized format.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
data: The data for a FlowStep object in a serialized format.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
The FlowStep object.
|
|
80
|
+
"""
|
|
81
|
+
from rasa.shared.core.flows.flow_step_links import FlowStepLinks
|
|
82
|
+
from rasa.shared.core.flows.steps.constants import UNSET_FLOW_STEP_ID
|
|
83
|
+
|
|
84
|
+
return FlowStep(
|
|
85
|
+
# the idx is set once the flow, which contains this step, is created
|
|
86
|
+
idx=UNSET_FLOW_STEP_ID,
|
|
87
|
+
custom_id=data.get("id"),
|
|
88
|
+
description=data.get("description"),
|
|
89
|
+
metadata=data.get("metadata", {}),
|
|
90
|
+
next=FlowStepLinks.from_json(data.get("next", [])),
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
def does_allow_for_next_step(self) -> bool:
|
|
94
|
+
"""Most steps allow linking to the next step. But some don't."""
|
|
95
|
+
return True
|
|
96
|
+
|
|
97
|
+
def as_json(self) -> Dict[Text, Any]:
|
|
98
|
+
"""Serialize the FlowStep object.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
The FlowStep as serialized data.
|
|
102
|
+
"""
|
|
103
|
+
data: Dict[Text, Any] = {"id": self.id}
|
|
104
|
+
|
|
105
|
+
if dumped_next := self.next.as_json():
|
|
106
|
+
data["next"] = dumped_next
|
|
107
|
+
if self.description:
|
|
108
|
+
data["description"] = self.description
|
|
109
|
+
if self.metadata:
|
|
110
|
+
data["metadata"] = self.metadata
|
|
111
|
+
return data
|
|
112
|
+
|
|
113
|
+
def steps_in_tree(
|
|
114
|
+
self, should_resolve_calls: bool = True
|
|
115
|
+
) -> Generator[FlowStep, None, None]:
|
|
116
|
+
"""Recursively generates the steps in the tree."""
|
|
117
|
+
yield self
|
|
118
|
+
yield from self.next.steps_in_tree(should_resolve_calls)
|
|
119
|
+
|
|
120
|
+
@property
|
|
121
|
+
def id(self) -> Text:
|
|
122
|
+
"""Returns the id of the flow step."""
|
|
123
|
+
return self.custom_id or self.default_id
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def default_id(self) -> str:
|
|
127
|
+
"""Returns the default id of the flow step."""
|
|
128
|
+
return f"{self.idx}_{self.default_id_postfix}"
|
|
129
|
+
|
|
130
|
+
@property
|
|
131
|
+
def default_id_postfix(self) -> str:
|
|
132
|
+
"""Returns the default id postfix of the flow step."""
|
|
133
|
+
return "step"
|
|
134
|
+
|
|
135
|
+
@property
|
|
136
|
+
def utterances(self) -> Set[str]:
|
|
137
|
+
"""Return all the utterances used in this step."""
|
|
138
|
+
return set()
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@dataclass
|
|
142
|
+
class FlowStepWithFlowReference:
|
|
143
|
+
step: FlowStep
|
|
144
|
+
"""The step."""
|
|
145
|
+
flow_id: str
|
|
146
|
+
"""The id of the flow that contains the step."""
|