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,319 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import List, Union, Dict, Text, Any, Optional, Generator
|
|
6
|
+
|
|
7
|
+
from rasa.shared.core.flows.flow_step import FlowStep
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class FlowStepLinks:
|
|
15
|
+
"""A list of flow step links."""
|
|
16
|
+
|
|
17
|
+
links: List[FlowStepLink]
|
|
18
|
+
|
|
19
|
+
@staticmethod
|
|
20
|
+
def from_json(data: Union[str, List[Dict[Text, Any]]]) -> FlowStepLinks:
|
|
21
|
+
"""Create a FlowStepLinks object from a serialized data format.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
data: data for a FlowStepLinks object in a serialized format.
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
A FlowStepLinks object.
|
|
28
|
+
"""
|
|
29
|
+
if not data:
|
|
30
|
+
return FlowStepLinks(links=[])
|
|
31
|
+
|
|
32
|
+
if isinstance(data, str):
|
|
33
|
+
return FlowStepLinks(links=[StaticFlowStepLink.from_json(data)])
|
|
34
|
+
|
|
35
|
+
return FlowStepLinks(
|
|
36
|
+
links=[
|
|
37
|
+
BranchingFlowStepLink.from_json(link_config)
|
|
38
|
+
for link_config in data
|
|
39
|
+
if link_config
|
|
40
|
+
]
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
def as_json(self) -> Optional[Union[str, List[Dict[str, Any]]]]:
|
|
44
|
+
"""Serialize the FlowStepLinks object.
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
The FlowStepLinks object as serialized data.
|
|
48
|
+
"""
|
|
49
|
+
if not self.links:
|
|
50
|
+
return None
|
|
51
|
+
|
|
52
|
+
if len(self.links) == 1 and isinstance(self.links[0], StaticFlowStepLink):
|
|
53
|
+
return self.links[0].as_json()
|
|
54
|
+
|
|
55
|
+
return [link.as_json() for link in self.links]
|
|
56
|
+
|
|
57
|
+
def no_link_available(self) -> bool:
|
|
58
|
+
"""Returns whether no link is available."""
|
|
59
|
+
return len(self.links) == 0
|
|
60
|
+
|
|
61
|
+
def steps_in_tree(
|
|
62
|
+
self, should_resolve_calls: bool = True
|
|
63
|
+
) -> Generator[FlowStep, None, None]:
|
|
64
|
+
"""Returns the steps in the tree of the flow step links."""
|
|
65
|
+
for link in self.links:
|
|
66
|
+
yield from link.steps_in_tree(should_resolve_calls)
|
|
67
|
+
|
|
68
|
+
def depth_in_tree(self) -> int:
|
|
69
|
+
"""Returns the max depth in the tree of the flow step links."""
|
|
70
|
+
depth = 0
|
|
71
|
+
for link in self.links:
|
|
72
|
+
depth = max(depth, link.depth_in_tree())
|
|
73
|
+
return depth
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class FlowStepLink:
|
|
77
|
+
"""A flow step link that links two steps in a single flow."""
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def target(self) -> Text:
|
|
81
|
+
"""Returns the target flow step id.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
The target flow step id.
|
|
85
|
+
"""
|
|
86
|
+
raise NotImplementedError()
|
|
87
|
+
|
|
88
|
+
def as_json(self) -> Any:
|
|
89
|
+
"""Serialize the FlowStepLink object.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
The FlowStepLink as serialized data.
|
|
93
|
+
"""
|
|
94
|
+
raise NotImplementedError()
|
|
95
|
+
|
|
96
|
+
@staticmethod
|
|
97
|
+
def from_json(data: Any) -> FlowStepLink:
|
|
98
|
+
"""Create a FlowStepLink object from a serialized data format.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
data: data for a FlowStepLink object in a serialized format.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
The FlowStepLink object.
|
|
105
|
+
"""
|
|
106
|
+
raise NotImplementedError()
|
|
107
|
+
|
|
108
|
+
def steps_in_tree(
|
|
109
|
+
self, should_resolve_calls: bool = True
|
|
110
|
+
) -> Generator[FlowStep, None, None]:
|
|
111
|
+
"""Recursively generates the steps in the tree."""
|
|
112
|
+
raise NotImplementedError()
|
|
113
|
+
|
|
114
|
+
def child_steps(self) -> List[FlowStep]:
|
|
115
|
+
"""Returns the steps of the linked FlowStepSequence if any."""
|
|
116
|
+
raise NotImplementedError()
|
|
117
|
+
|
|
118
|
+
def depth_in_tree(self) -> int:
|
|
119
|
+
"""Returns the depth in the tree."""
|
|
120
|
+
raise NotImplementedError()
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
@dataclass
|
|
124
|
+
class BranchingFlowStepLink(FlowStepLink):
|
|
125
|
+
target_reference: Union[Text, FlowStepSequence]
|
|
126
|
+
"""The id of the linked step or a sequence of steps."""
|
|
127
|
+
|
|
128
|
+
def steps_in_tree(
|
|
129
|
+
self, should_resolve_calls: bool = True
|
|
130
|
+
) -> Generator[FlowStep, None, None]:
|
|
131
|
+
"""Recursively generates the steps in the tree."""
|
|
132
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
133
|
+
|
|
134
|
+
if isinstance(self.target_reference, FlowStepSequence):
|
|
135
|
+
if should_resolve_calls:
|
|
136
|
+
yield from self.target_reference.steps_with_calls_resolved
|
|
137
|
+
else:
|
|
138
|
+
yield from self.target_reference.steps
|
|
139
|
+
|
|
140
|
+
def child_steps(self) -> List[FlowStep]:
|
|
141
|
+
"""Returns the steps of the linked flow step sequence if any."""
|
|
142
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
143
|
+
|
|
144
|
+
if isinstance(self.target_reference, FlowStepSequence):
|
|
145
|
+
return self.target_reference.child_steps
|
|
146
|
+
else:
|
|
147
|
+
return []
|
|
148
|
+
|
|
149
|
+
@property
|
|
150
|
+
def target(self) -> Text:
|
|
151
|
+
"""Return the target flow step id."""
|
|
152
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
153
|
+
|
|
154
|
+
if isinstance(self.target_reference, FlowStepSequence):
|
|
155
|
+
if first := self.target_reference.first():
|
|
156
|
+
return first.id
|
|
157
|
+
else:
|
|
158
|
+
raise RuntimeError(
|
|
159
|
+
"Step sequence is empty despite previous validation of "
|
|
160
|
+
"this not happening"
|
|
161
|
+
)
|
|
162
|
+
else:
|
|
163
|
+
return self.target_reference
|
|
164
|
+
|
|
165
|
+
@staticmethod
|
|
166
|
+
def from_json(data: Dict[Text, Any]) -> BranchingFlowStepLink:
|
|
167
|
+
"""Create a BranchingFlowStepLink object from a serialized data format.
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
data: data for a BranchingFlowStepLink object in a serialized format.
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
a BranchingFlowStepLink object.
|
|
174
|
+
"""
|
|
175
|
+
if "if" in data:
|
|
176
|
+
return IfFlowStepLink.from_json(data)
|
|
177
|
+
else:
|
|
178
|
+
return ElseFlowStepLink.from_json(data)
|
|
179
|
+
|
|
180
|
+
def depth_in_tree(self) -> int:
|
|
181
|
+
"""Returns the depth in the tree."""
|
|
182
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
183
|
+
|
|
184
|
+
if isinstance(self.target_reference, FlowStepSequence):
|
|
185
|
+
depth = 0
|
|
186
|
+
for step in self.target_reference.steps_with_calls_resolved:
|
|
187
|
+
if isinstance(step.next, FlowStepLinks):
|
|
188
|
+
depth = max(depth, step.next.depth_in_tree())
|
|
189
|
+
return depth + 1
|
|
190
|
+
return 1
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@dataclass
|
|
194
|
+
class IfFlowStepLink(BranchingFlowStepLink):
|
|
195
|
+
"""A flow step link that links to another step or step sequence conditionally."""
|
|
196
|
+
|
|
197
|
+
condition: Text
|
|
198
|
+
"""The condition that needs to be satisfied to follow this flow step link."""
|
|
199
|
+
|
|
200
|
+
@staticmethod
|
|
201
|
+
def from_json(data: Dict[Text, Any]) -> IfFlowStepLink:
|
|
202
|
+
"""Create an IfFlowStepLink object from a serialized data format.
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
data: data for a IfFlowStepLink in a serialized format.
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
An IfFlowStepLink object.
|
|
209
|
+
"""
|
|
210
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
211
|
+
|
|
212
|
+
if isinstance(data["then"], str):
|
|
213
|
+
return IfFlowStepLink(target_reference=data["then"], condition=data["if"])
|
|
214
|
+
else:
|
|
215
|
+
return IfFlowStepLink(
|
|
216
|
+
target_reference=FlowStepSequence.from_json(data["then"]),
|
|
217
|
+
condition=data["if"],
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
def as_json(self) -> Dict[Text, Any]:
|
|
221
|
+
"""Serialize the IfFlowStepLink object.
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
the IfFlowStepLink object as serialized data.
|
|
225
|
+
"""
|
|
226
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
227
|
+
|
|
228
|
+
return {
|
|
229
|
+
"if": self.condition,
|
|
230
|
+
"then": self.target_reference.as_json()
|
|
231
|
+
if isinstance(self.target_reference, FlowStepSequence)
|
|
232
|
+
else self.target_reference,
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
@dataclass
|
|
237
|
+
class ElseFlowStepLink(BranchingFlowStepLink):
|
|
238
|
+
"""A flow step link that is taken when conditional flow step links weren't taken."""
|
|
239
|
+
|
|
240
|
+
@staticmethod
|
|
241
|
+
def from_json(data: Dict[Text, Any]) -> ElseFlowStepLink:
|
|
242
|
+
"""Create an ElseFlowStepLink object from serialized data.
|
|
243
|
+
|
|
244
|
+
Args:
|
|
245
|
+
data: data for an ElseFlowStepLink in a serialized format
|
|
246
|
+
|
|
247
|
+
Returns:
|
|
248
|
+
An ElseFlowStepLink
|
|
249
|
+
"""
|
|
250
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
251
|
+
|
|
252
|
+
if isinstance(data["else"], str):
|
|
253
|
+
return ElseFlowStepLink(target_reference=data["else"])
|
|
254
|
+
else:
|
|
255
|
+
return ElseFlowStepLink(
|
|
256
|
+
target_reference=FlowStepSequence.from_json(data["else"])
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
def as_json(self) -> Dict[Text, Any]:
|
|
260
|
+
"""Serialize the ElseFlowStepLink object
|
|
261
|
+
|
|
262
|
+
Returns:
|
|
263
|
+
The ElseFlowStepLink as serialized data.
|
|
264
|
+
"""
|
|
265
|
+
from rasa.shared.core.flows.flow_step_sequence import FlowStepSequence
|
|
266
|
+
|
|
267
|
+
return {
|
|
268
|
+
"else": self.target_reference.as_json()
|
|
269
|
+
if isinstance(self.target_reference, FlowStepSequence)
|
|
270
|
+
else self.target_reference
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
@dataclass
|
|
275
|
+
class StaticFlowStepLink(FlowStepLink):
|
|
276
|
+
"""A static flow step link, linking to a step in the same flow unconditionally."""
|
|
277
|
+
|
|
278
|
+
target_step_id: Text
|
|
279
|
+
"""The id of the linked step."""
|
|
280
|
+
|
|
281
|
+
@staticmethod
|
|
282
|
+
def from_json(data: Text) -> StaticFlowStepLink:
|
|
283
|
+
"""Create a StaticFlowStepLink from serialized data
|
|
284
|
+
|
|
285
|
+
Args:
|
|
286
|
+
data: data for a StaticFlowStepLink in a serialized format
|
|
287
|
+
|
|
288
|
+
Returns:
|
|
289
|
+
A StaticFlowStepLink object
|
|
290
|
+
"""
|
|
291
|
+
return StaticFlowStepLink(data)
|
|
292
|
+
|
|
293
|
+
def as_json(self) -> Text:
|
|
294
|
+
"""Serialize the StaticFlowStepLink object
|
|
295
|
+
|
|
296
|
+
Returns:
|
|
297
|
+
The StaticFlowStepLink object as serialized data.
|
|
298
|
+
"""
|
|
299
|
+
return self.target
|
|
300
|
+
|
|
301
|
+
def steps_in_tree(
|
|
302
|
+
self, should_resolve_calls: bool = True
|
|
303
|
+
) -> Generator[FlowStep, None, None]:
|
|
304
|
+
"""Recursively generates the steps in the tree."""
|
|
305
|
+
# static links do not have any child steps
|
|
306
|
+
yield from []
|
|
307
|
+
|
|
308
|
+
def child_steps(self) -> List[FlowStep]:
|
|
309
|
+
"""Returns the steps of the linked FlowStepSequence if any."""
|
|
310
|
+
return []
|
|
311
|
+
|
|
312
|
+
@property
|
|
313
|
+
def target(self) -> Text:
|
|
314
|
+
"""Returns the target step id."""
|
|
315
|
+
return self.target_step_id
|
|
316
|
+
|
|
317
|
+
def depth_in_tree(self) -> int:
|
|
318
|
+
"""Returns the depth in the tree."""
|
|
319
|
+
return 0
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import List, Dict, Text, Any, Optional
|
|
5
|
+
|
|
6
|
+
from rasa.shared.core.flows.flow_step import FlowStep, step_from_json
|
|
7
|
+
from rasa.shared.core.flows.steps.internal import InternalFlowStep
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass
|
|
11
|
+
class FlowStepSequence:
|
|
12
|
+
"""A Sequence of flow steps."""
|
|
13
|
+
|
|
14
|
+
child_steps: List[FlowStep]
|
|
15
|
+
|
|
16
|
+
@staticmethod
|
|
17
|
+
def from_json(data: List[Dict[Text, Any]]) -> FlowStepSequence:
|
|
18
|
+
"""Create a FlowStepSequence object from serialized data
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
data: data for a StepSequence in a serialized format
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
A StepSequence object including its flow step objects.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
flow_steps: List[FlowStep] = [step_from_json(config) for config in data]
|
|
28
|
+
|
|
29
|
+
return FlowStepSequence(child_steps=flow_steps)
|
|
30
|
+
|
|
31
|
+
def as_json(self) -> List[Dict[Text, Any]]:
|
|
32
|
+
"""Serialize the StepSequence object and contained FlowStep objects
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
the FlowStepSequence and its FlowSteps as serialized data
|
|
36
|
+
"""
|
|
37
|
+
return [
|
|
38
|
+
step.as_json()
|
|
39
|
+
for step in self.child_steps
|
|
40
|
+
if not isinstance(step, InternalFlowStep)
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
def _resolve_steps(self, should_resolve_calls: bool) -> List[FlowStep]:
|
|
44
|
+
"""Resolves the steps of the flow."""
|
|
45
|
+
return [
|
|
46
|
+
step
|
|
47
|
+
for child_step in self.child_steps
|
|
48
|
+
for step in child_step.steps_in_tree(
|
|
49
|
+
should_resolve_calls=should_resolve_calls
|
|
50
|
+
)
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def steps_with_calls_resolved(self) -> List[FlowStep]:
|
|
55
|
+
"""Return all steps in this step sequence and their sub steps."""
|
|
56
|
+
return self._resolve_steps(should_resolve_calls=True)
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def steps(self) -> List[FlowStep]:
|
|
60
|
+
"""Return the steps of the flow without steps of called flows"""
|
|
61
|
+
return self._resolve_steps(should_resolve_calls=False)
|
|
62
|
+
|
|
63
|
+
def first(self) -> Optional[FlowStep]:
|
|
64
|
+
"""Return the first step of the sequence."""
|
|
65
|
+
return self.child_steps[0] if self.child_steps else None
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def empty(cls) -> FlowStepSequence:
|
|
69
|
+
"""Create an empty FlowStepSequence object."""
|
|
70
|
+
return cls(child_steps=[])
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import List, Generator, Any, Optional, Dict, Text, Set
|
|
4
|
+
|
|
5
|
+
import rasa.shared.utils.io
|
|
6
|
+
from rasa.shared.core.flows import Flow
|
|
7
|
+
from rasa.shared.core.flows.validation import (
|
|
8
|
+
validate_flow,
|
|
9
|
+
validate_link_in_call_restriction,
|
|
10
|
+
validate_called_flows_exists,
|
|
11
|
+
validate_linked_flows_exists,
|
|
12
|
+
validate_nlu_trigger,
|
|
13
|
+
validate_patterns_are_not_called_or_linked,
|
|
14
|
+
validate_patterns_are_not_calling_or_linking_other_flows,
|
|
15
|
+
validate_step_ids_are_unique,
|
|
16
|
+
)
|
|
17
|
+
from rasa.shared.core.slots import Slot
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class FlowsList:
|
|
22
|
+
"""A collection of flows.
|
|
23
|
+
|
|
24
|
+
This class defines a number of methods that are executed across the available flows,
|
|
25
|
+
such as fingerprinting (for retraining caching), collecting flows with
|
|
26
|
+
specific attributes or collecting all utterances across all flows.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
underlying_flows: List[Flow]
|
|
30
|
+
"""The flows contained in this FlowsList."""
|
|
31
|
+
|
|
32
|
+
def __post_init__(self) -> None:
|
|
33
|
+
"""Initializes the FlowsList object."""
|
|
34
|
+
self._resolve_called_flows()
|
|
35
|
+
|
|
36
|
+
def __iter__(self) -> Generator[Flow, None, None]:
|
|
37
|
+
"""Iterates over the flows."""
|
|
38
|
+
yield from self.underlying_flows
|
|
39
|
+
|
|
40
|
+
def __len__(self) -> int:
|
|
41
|
+
"""Return the length of this FlowsList."""
|
|
42
|
+
return len(self.underlying_flows)
|
|
43
|
+
|
|
44
|
+
def is_empty(self) -> bool:
|
|
45
|
+
"""Returns whether the flows list is empty."""
|
|
46
|
+
return len(self.underlying_flows) == 0
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def from_multiple_flows_lists(cls, *other: FlowsList) -> FlowsList:
|
|
50
|
+
"""Merges multiple lists of flows into a single flow ensuring each flow is
|
|
51
|
+
unique, based on its ID.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
other: Variable number of flow lists instances to be merged.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
Merged flow list.
|
|
58
|
+
"""
|
|
59
|
+
merged_flows = dict()
|
|
60
|
+
for flow_list in other:
|
|
61
|
+
for flow in flow_list:
|
|
62
|
+
if flow.id not in merged_flows:
|
|
63
|
+
merged_flows[flow.id] = flow
|
|
64
|
+
return FlowsList(list(merged_flows.values()))
|
|
65
|
+
|
|
66
|
+
@classmethod
|
|
67
|
+
def from_json(cls, data: Optional[Dict[Text, Dict[Text, Any]]]) -> FlowsList:
|
|
68
|
+
"""Create a FlowsList object from serialized data
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
data: data for a FlowsList in a serialized format
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
A FlowsList object.
|
|
75
|
+
"""
|
|
76
|
+
if not data:
|
|
77
|
+
return cls(underlying_flows=[])
|
|
78
|
+
|
|
79
|
+
return cls(
|
|
80
|
+
underlying_flows=[
|
|
81
|
+
Flow.from_json(flow_id, flow_config)
|
|
82
|
+
for flow_id, flow_config in data.items()
|
|
83
|
+
]
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
def _resolve_called_flows(self) -> None:
|
|
87
|
+
"""Resolves the called flows."""
|
|
88
|
+
from rasa.shared.core.flows.steps import CallFlowStep
|
|
89
|
+
|
|
90
|
+
for flow in self.underlying_flows:
|
|
91
|
+
for step in flow.steps:
|
|
92
|
+
if isinstance(step, CallFlowStep) and not step.called_flow_reference:
|
|
93
|
+
# only resolve the reference, if it isn't already resolved
|
|
94
|
+
step.called_flow_reference = self.flow_by_id(step.call)
|
|
95
|
+
|
|
96
|
+
def as_json_list(self) -> List[Dict[Text, Any]]:
|
|
97
|
+
"""Serialize the FlowsList object to list format and not to the original dict.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
The FlowsList object as serialized data in a list
|
|
101
|
+
"""
|
|
102
|
+
return [flow.as_json() for flow in self.underlying_flows]
|
|
103
|
+
|
|
104
|
+
def fingerprint(self) -> str:
|
|
105
|
+
"""Creates a fingerprint of the existing flows.
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
The fingerprint of the flows.
|
|
109
|
+
"""
|
|
110
|
+
flow_dicts = [flow.as_json() for flow in self.underlying_flows]
|
|
111
|
+
return rasa.shared.utils.io.get_list_fingerprint(flow_dicts)
|
|
112
|
+
|
|
113
|
+
def merge(self, other: FlowsList) -> FlowsList:
|
|
114
|
+
"""Merges two lists of flows together."""
|
|
115
|
+
return FlowsList.from_multiple_flows_lists(self, other)
|
|
116
|
+
|
|
117
|
+
def flow_by_id(self, flow_id: Text) -> Optional[Flow]:
|
|
118
|
+
"""Return the flow with the given id."""
|
|
119
|
+
for flow in self.underlying_flows:
|
|
120
|
+
if flow.id == flow_id:
|
|
121
|
+
return flow
|
|
122
|
+
else:
|
|
123
|
+
return None
|
|
124
|
+
|
|
125
|
+
def validate(self) -> None:
|
|
126
|
+
"""Validate the flows."""
|
|
127
|
+
for flow in self.underlying_flows:
|
|
128
|
+
validate_flow(flow)
|
|
129
|
+
validate_nlu_trigger(self.underlying_flows)
|
|
130
|
+
validate_link_in_call_restriction(self)
|
|
131
|
+
validate_called_flows_exists(self)
|
|
132
|
+
validate_linked_flows_exists(self)
|
|
133
|
+
validate_patterns_are_not_called_or_linked(self)
|
|
134
|
+
validate_patterns_are_not_calling_or_linking_other_flows(self)
|
|
135
|
+
validate_step_ids_are_unique(self)
|
|
136
|
+
|
|
137
|
+
@property
|
|
138
|
+
def user_flow_ids(self) -> Set[str]:
|
|
139
|
+
"""Get all ids of flows that can be started by a user.
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
The ids of all flows that can be started by a user."""
|
|
143
|
+
return {f.id for f in self.user_flows}
|
|
144
|
+
|
|
145
|
+
@property
|
|
146
|
+
def flow_ids(self) -> Set[str]:
|
|
147
|
+
"""Get all ids of flows.
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
The ids of all flows."""
|
|
151
|
+
return {f.id for f in self.underlying_flows}
|
|
152
|
+
|
|
153
|
+
@property
|
|
154
|
+
def user_flows(self) -> FlowsList:
|
|
155
|
+
"""Get all flows that can be started by a user.
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
All flows that can be started by a user."""
|
|
159
|
+
return FlowsList(
|
|
160
|
+
[f for f in self.underlying_flows if not f.is_rasa_default_flow]
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
@property
|
|
164
|
+
def utterances(self) -> Set[str]:
|
|
165
|
+
"""Retrieve all utterances of all flows"""
|
|
166
|
+
return {
|
|
167
|
+
utterance for flow in self.underlying_flows for utterance in flow.utterances
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
def get_startable_flows(
|
|
171
|
+
self,
|
|
172
|
+
context: Optional[Dict[Text, Any]] = None,
|
|
173
|
+
slots: Optional[Dict[Text, Slot]] = None,
|
|
174
|
+
) -> FlowsList:
|
|
175
|
+
"""Get all flows for which the starting conditions are met.
|
|
176
|
+
|
|
177
|
+
Args:
|
|
178
|
+
context: The context data to evaluate the starting conditions against.
|
|
179
|
+
slots: The slots to evaluate the starting conditions against.
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
All flows for which the starting conditions are met."""
|
|
183
|
+
return FlowsList(
|
|
184
|
+
[f for f in self.underlying_flows if f.is_startable(context, slots)]
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
def get_flows_always_included_in_prompt(self) -> FlowsList:
|
|
188
|
+
"""
|
|
189
|
+
Gets all flows based on their inclusion status in prompts.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
always_included: Inclusion status.
|
|
193
|
+
|
|
194
|
+
Returns:
|
|
195
|
+
All flows with the given inclusion status.
|
|
196
|
+
"""
|
|
197
|
+
return FlowsList(
|
|
198
|
+
[f for f in self.underlying_flows if f.always_include_in_prompt]
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
def exclude_link_only_flows(self) -> FlowsList:
|
|
202
|
+
"""Filter the given flows and exclude the flows that can
|
|
203
|
+
be started only via link (flow guard evaluates to `False`).
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
List of flows that doesn't contain flows that are
|
|
207
|
+
only startable via link (another flow).
|
|
208
|
+
"""
|
|
209
|
+
return FlowsList(
|
|
210
|
+
[f for f in self.underlying_flows if not f.is_startable_only_via_link()]
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
def available_slot_names(self) -> Set[str]:
|
|
214
|
+
"""Get all slot names collected by flows."""
|
|
215
|
+
return {
|
|
216
|
+
step.collect
|
|
217
|
+
for flow in self.underlying_flows
|
|
218
|
+
for step in flow.get_collect_steps()
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
def available_custom_actions(self) -> Set[str]:
|
|
222
|
+
"""Get all custom actions collected by flows."""
|
|
223
|
+
return set().union(*[flow.custom_actions for flow in self.underlying_flows])
|