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
|
File without changes
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import List, Text, Union
|
|
4
|
+
|
|
5
|
+
from ruamel import yaml
|
|
6
|
+
|
|
7
|
+
if typing.TYPE_CHECKING:
|
|
8
|
+
from rasa.shared.core.events import Event
|
|
9
|
+
from rasa.shared.core.training_data.structures import StoryStep
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class StoryWriter:
|
|
13
|
+
"""Writes story training data to file."""
|
|
14
|
+
|
|
15
|
+
def dumps(
|
|
16
|
+
self,
|
|
17
|
+
story_steps: List["StoryStep"],
|
|
18
|
+
is_appendable: bool = False,
|
|
19
|
+
is_test_story: bool = False,
|
|
20
|
+
) -> Text:
|
|
21
|
+
"""Turns Story steps into an string.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
story_steps: Original story steps to be converted to the YAML.
|
|
25
|
+
is_appendable: Specify if result should not contain
|
|
26
|
+
high level keys/definitions and can be appended to
|
|
27
|
+
the existing story file.
|
|
28
|
+
is_test_story: Identifies if the stories should be exported in test stories
|
|
29
|
+
format.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
String with story steps in the desired format.
|
|
33
|
+
"""
|
|
34
|
+
raise NotImplementedError
|
|
35
|
+
|
|
36
|
+
def dump(
|
|
37
|
+
self,
|
|
38
|
+
target: Union[Text, Path, yaml.StringIO],
|
|
39
|
+
story_steps: List["StoryStep"],
|
|
40
|
+
is_appendable: bool = False,
|
|
41
|
+
is_test_story: bool = False,
|
|
42
|
+
) -> None:
|
|
43
|
+
"""Writes Story steps into a target file/stream.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
target: name of the target file/stream to write the string to.
|
|
47
|
+
story_steps: Original story steps to be converted to the string.
|
|
48
|
+
is_appendable: Specify if result should not contain
|
|
49
|
+
high level keys/definitions and can be appended to
|
|
50
|
+
the existing story file.
|
|
51
|
+
is_test_story: Identifies if the stories should be exported in test stories
|
|
52
|
+
format.
|
|
53
|
+
"""
|
|
54
|
+
raise NotImplementedError
|
|
55
|
+
|
|
56
|
+
@staticmethod
|
|
57
|
+
def _filter_event(event: Union["Event", List["Event"]]) -> bool:
|
|
58
|
+
"""Identifies if the event should be converted/written.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
event: target event to check.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
`True` if the event should be converted/written, `False` otherwise.
|
|
65
|
+
"""
|
|
66
|
+
from rasa.shared.core.training_data.structures import StoryStep
|
|
67
|
+
|
|
68
|
+
# This is an "OR" statement, so we accept it
|
|
69
|
+
if isinstance(event, list):
|
|
70
|
+
return True
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
not StoryStep.is_action_listen(event)
|
|
74
|
+
and not StoryStep.is_action_unlikely_intent(event)
|
|
75
|
+
and not StoryStep.is_action_session_start(event)
|
|
76
|
+
)
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
from collections import OrderedDict
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Any, Dict, List, Text, Union, Optional
|
|
4
|
+
|
|
5
|
+
from ruamel import yaml
|
|
6
|
+
import json
|
|
7
|
+
from ruamel.yaml.comments import CommentedMap
|
|
8
|
+
from ruamel.yaml.scalarstring import DoubleQuotedScalarString, LiteralScalarString
|
|
9
|
+
|
|
10
|
+
import rasa.shared.utils.io
|
|
11
|
+
import rasa.shared.core.constants
|
|
12
|
+
from rasa.shared.constants import LATEST_TRAINING_DATA_FORMAT_VERSION
|
|
13
|
+
import rasa.shared.core.events
|
|
14
|
+
from rasa.shared.core.constants import FLOW_HASHES_SLOT
|
|
15
|
+
from rasa.shared.core.events import (
|
|
16
|
+
UserUttered,
|
|
17
|
+
ActionExecuted,
|
|
18
|
+
SlotSet,
|
|
19
|
+
ActiveLoop,
|
|
20
|
+
Event,
|
|
21
|
+
DialogueStackUpdated,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
from rasa.shared.core.training_data.story_reader.yaml_story_reader import (
|
|
25
|
+
KEY_STORIES,
|
|
26
|
+
KEY_STORY_NAME,
|
|
27
|
+
KEY_USER_INTENT,
|
|
28
|
+
KEY_ENTITIES,
|
|
29
|
+
KEY_ACTION,
|
|
30
|
+
KEY_STEPS,
|
|
31
|
+
KEY_CHECKPOINT,
|
|
32
|
+
KEY_SLOT_NAME,
|
|
33
|
+
KEY_CHECKPOINT_SLOTS,
|
|
34
|
+
KEY_OR,
|
|
35
|
+
KEY_USER_MESSAGE,
|
|
36
|
+
KEY_ACTIVE_LOOP,
|
|
37
|
+
KEY_BOT_END_TO_END_MESSAGE,
|
|
38
|
+
KEY_RULES,
|
|
39
|
+
KEY_RULE_FOR_CONVERSATION_START,
|
|
40
|
+
KEY_WAIT_FOR_USER_INPUT_AFTER_RULE,
|
|
41
|
+
KEY_RULE_CONDITION,
|
|
42
|
+
KEY_RULE_NAME,
|
|
43
|
+
KEY_STACK_UPDATE,
|
|
44
|
+
KEY_COMMANDS,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
from rasa.shared.core.training_data.story_writer.story_writer import StoryWriter
|
|
48
|
+
from rasa.shared.core.training_data.structures import (
|
|
49
|
+
StoryStep,
|
|
50
|
+
Checkpoint,
|
|
51
|
+
STORY_START,
|
|
52
|
+
RuleStep,
|
|
53
|
+
)
|
|
54
|
+
from rasa.shared.utils.yaml import write_yaml
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class YAMLStoryWriter(StoryWriter):
|
|
58
|
+
"""Writes Core training data into a file in a YAML format."""
|
|
59
|
+
|
|
60
|
+
def dumps(
|
|
61
|
+
self,
|
|
62
|
+
story_steps: List[StoryStep],
|
|
63
|
+
is_appendable: bool = False,
|
|
64
|
+
is_test_story: bool = False,
|
|
65
|
+
) -> Text:
|
|
66
|
+
"""Turns Story steps into an YAML string.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
story_steps: Original story steps to be converted to the YAML.
|
|
70
|
+
is_appendable: Specify if result should not contain
|
|
71
|
+
high level keys/definitions and can be appended to
|
|
72
|
+
the existing story file.
|
|
73
|
+
is_test_story: Identifies if the stories should be exported in test stories
|
|
74
|
+
format.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
String with story steps in the YAML format.
|
|
78
|
+
"""
|
|
79
|
+
stream = yaml.StringIO()
|
|
80
|
+
self.dump(stream, story_steps, is_appendable, is_test_story)
|
|
81
|
+
return stream.getvalue()
|
|
82
|
+
|
|
83
|
+
def dump(
|
|
84
|
+
self,
|
|
85
|
+
target: Union[Text, Path, yaml.StringIO],
|
|
86
|
+
story_steps: List[StoryStep],
|
|
87
|
+
is_appendable: bool = False,
|
|
88
|
+
is_test_story: bool = False,
|
|
89
|
+
) -> None:
|
|
90
|
+
"""Writes Story steps into a target file/stream.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
target: name of the target file/stream to write the YAML to.
|
|
94
|
+
story_steps: Original story steps to be converted to the YAML.
|
|
95
|
+
is_appendable: Specify if result should not contain
|
|
96
|
+
high level keys/definitions and can be appended to
|
|
97
|
+
the existing story file.
|
|
98
|
+
is_test_story: Identifies if the stories should be exported in test stories
|
|
99
|
+
format.
|
|
100
|
+
"""
|
|
101
|
+
result = self.stories_to_yaml(story_steps, is_test_story)
|
|
102
|
+
if is_appendable and KEY_STORIES in result:
|
|
103
|
+
result = result[KEY_STORIES]
|
|
104
|
+
write_yaml(result, target, True)
|
|
105
|
+
|
|
106
|
+
def stories_to_yaml(
|
|
107
|
+
self, story_steps: List[StoryStep], is_test_story: bool = False
|
|
108
|
+
) -> Dict[Text, Any]:
|
|
109
|
+
"""Converts a sequence of story steps into yaml format.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
story_steps: Original story steps to be converted to the YAML.
|
|
113
|
+
is_test_story: `True` if the story is an end-to-end conversation test story.
|
|
114
|
+
"""
|
|
115
|
+
from rasa.shared.utils.yaml import KEY_TRAINING_DATA_FORMAT_VERSION
|
|
116
|
+
|
|
117
|
+
self._is_test_story = is_test_story
|
|
118
|
+
|
|
119
|
+
stories = []
|
|
120
|
+
rules = []
|
|
121
|
+
for story_step in story_steps:
|
|
122
|
+
if isinstance(story_step, RuleStep):
|
|
123
|
+
rules.append(self.process_rule_step(story_step))
|
|
124
|
+
else:
|
|
125
|
+
stories.append(self.process_story_step(story_step))
|
|
126
|
+
|
|
127
|
+
result: OrderedDict[Text, Any] = OrderedDict()
|
|
128
|
+
result[KEY_TRAINING_DATA_FORMAT_VERSION] = DoubleQuotedScalarString(
|
|
129
|
+
LATEST_TRAINING_DATA_FORMAT_VERSION
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
if stories:
|
|
133
|
+
result[KEY_STORIES] = stories
|
|
134
|
+
if rules:
|
|
135
|
+
result[KEY_RULES] = rules
|
|
136
|
+
|
|
137
|
+
return result
|
|
138
|
+
|
|
139
|
+
def process_story_step(self, story_step: StoryStep) -> OrderedDict:
|
|
140
|
+
"""Converts a single story step into an ordered dict.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
story_step: A single story step to be converted to the dict.
|
|
144
|
+
|
|
145
|
+
Returns:
|
|
146
|
+
Dict with a story step.
|
|
147
|
+
"""
|
|
148
|
+
result: OrderedDict[Text, Any] = OrderedDict()
|
|
149
|
+
result[KEY_STORY_NAME] = story_step.block_name
|
|
150
|
+
steps = self.process_checkpoints(story_step.start_checkpoints)
|
|
151
|
+
for event in story_step.events:
|
|
152
|
+
if not self._filter_event(event):
|
|
153
|
+
continue
|
|
154
|
+
processed = self.process_event(event)
|
|
155
|
+
if processed:
|
|
156
|
+
steps.append(processed)
|
|
157
|
+
|
|
158
|
+
steps.extend(self.process_checkpoints(story_step.end_checkpoints))
|
|
159
|
+
|
|
160
|
+
result[KEY_STEPS] = steps
|
|
161
|
+
|
|
162
|
+
return result
|
|
163
|
+
|
|
164
|
+
def process_event(self, event: Union[Event, List[Event]]) -> Optional[OrderedDict]:
|
|
165
|
+
"""Process an event or list of events."""
|
|
166
|
+
if isinstance(event, list):
|
|
167
|
+
return self.process_or_utterances(event)
|
|
168
|
+
if isinstance(event, UserUttered):
|
|
169
|
+
return self.process_user_utterance(event, self._is_test_story)
|
|
170
|
+
if isinstance(event, ActionExecuted):
|
|
171
|
+
return self.process_action(event)
|
|
172
|
+
if isinstance(event, SlotSet):
|
|
173
|
+
return self.process_slot(event)
|
|
174
|
+
if isinstance(event, ActiveLoop):
|
|
175
|
+
return self.process_active_loop(event)
|
|
176
|
+
if isinstance(event, DialogueStackUpdated):
|
|
177
|
+
return self.process_stack(event)
|
|
178
|
+
return None
|
|
179
|
+
|
|
180
|
+
@staticmethod
|
|
181
|
+
def stories_contain_loops(stories: List[StoryStep]) -> bool:
|
|
182
|
+
"""Checks if the stories contain at least one active loop.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
stories: Stories steps.
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
`True` if the `stories` contain at least one active loop.
|
|
189
|
+
`False` otherwise.
|
|
190
|
+
"""
|
|
191
|
+
return any(
|
|
192
|
+
[
|
|
193
|
+
[event for event in story_step.events if isinstance(event, ActiveLoop)]
|
|
194
|
+
for story_step in stories
|
|
195
|
+
]
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
@staticmethod
|
|
199
|
+
def process_user_utterance(
|
|
200
|
+
user_utterance: UserUttered, is_test_story: bool = False
|
|
201
|
+
) -> OrderedDict:
|
|
202
|
+
"""Converts a single user utterance into an ordered dict.
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
user_utterance: Original user utterance object.
|
|
206
|
+
is_test_story: Identifies if the user utterance should be added
|
|
207
|
+
to the final YAML or not.
|
|
208
|
+
|
|
209
|
+
Returns:
|
|
210
|
+
Dict with a user utterance.
|
|
211
|
+
"""
|
|
212
|
+
result = CommentedMap()
|
|
213
|
+
if user_utterance.intent_name and not user_utterance.use_text_for_featurization:
|
|
214
|
+
result[KEY_USER_INTENT] = (
|
|
215
|
+
user_utterance.full_retrieval_intent_name
|
|
216
|
+
if user_utterance.full_retrieval_intent_name
|
|
217
|
+
else user_utterance.intent_name
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
entities = []
|
|
221
|
+
if len(user_utterance.entities) and not is_test_story:
|
|
222
|
+
for entity in user_utterance.entities:
|
|
223
|
+
if "value" in entity:
|
|
224
|
+
if hasattr(user_utterance, "inline_comment_for_entity"):
|
|
225
|
+
# FIXME: to fix this type issue, WronglyClassifiedUserUtterance
|
|
226
|
+
# needs to be imported but it's currently outside
|
|
227
|
+
# of `rasa.shared`
|
|
228
|
+
for predicted in user_utterance.predicted_entities: # type: ignore[attr-defined]
|
|
229
|
+
if predicted["start"] == entity["start"]:
|
|
230
|
+
commented_entity = (
|
|
231
|
+
user_utterance.inline_comment_for_entity(
|
|
232
|
+
predicted, entity
|
|
233
|
+
)
|
|
234
|
+
)
|
|
235
|
+
if commented_entity:
|
|
236
|
+
entity_map = CommentedMap(
|
|
237
|
+
[(entity["entity"], entity["value"])]
|
|
238
|
+
)
|
|
239
|
+
entity_map.yaml_add_eol_comment(
|
|
240
|
+
commented_entity, entity["entity"]
|
|
241
|
+
)
|
|
242
|
+
entities.append(entity_map)
|
|
243
|
+
else:
|
|
244
|
+
entities.append(
|
|
245
|
+
OrderedDict(
|
|
246
|
+
[(entity["entity"], entity["value"])]
|
|
247
|
+
)
|
|
248
|
+
)
|
|
249
|
+
else:
|
|
250
|
+
entities.append(
|
|
251
|
+
OrderedDict([(entity["entity"], entity["value"])])
|
|
252
|
+
)
|
|
253
|
+
else:
|
|
254
|
+
entities.append(entity["entity"])
|
|
255
|
+
result[KEY_ENTITIES] = entities
|
|
256
|
+
|
|
257
|
+
if hasattr(user_utterance, "inline_comment"):
|
|
258
|
+
# FIXME: to fix this type issue, WronglyClassifiedUserUtterance needs to
|
|
259
|
+
# be imported but it's currently outside of `rasa.shared`
|
|
260
|
+
comment = user_utterance.inline_comment(
|
|
261
|
+
force_comment_generation=not entities
|
|
262
|
+
)
|
|
263
|
+
if comment:
|
|
264
|
+
result.yaml_add_eol_comment(comment, KEY_USER_INTENT)
|
|
265
|
+
|
|
266
|
+
if user_utterance.text and (
|
|
267
|
+
# We only print the utterance text if it was an end-to-end prediction
|
|
268
|
+
user_utterance.use_text_for_featurization
|
|
269
|
+
# or if we want to print a conversation test story.
|
|
270
|
+
or is_test_story
|
|
271
|
+
):
|
|
272
|
+
result[KEY_USER_MESSAGE] = LiteralScalarString(
|
|
273
|
+
rasa.shared.core.events.format_message(
|
|
274
|
+
user_utterance.text,
|
|
275
|
+
user_utterance.intent_name,
|
|
276
|
+
user_utterance.entities,
|
|
277
|
+
)
|
|
278
|
+
)
|
|
279
|
+
|
|
280
|
+
if user_utterance.commands:
|
|
281
|
+
result[KEY_COMMANDS] = user_utterance.commands
|
|
282
|
+
return result
|
|
283
|
+
|
|
284
|
+
@staticmethod
|
|
285
|
+
def process_action(action: ActionExecuted) -> Optional[OrderedDict]:
|
|
286
|
+
"""Converts a single action into an ordered dict.
|
|
287
|
+
|
|
288
|
+
Args:
|
|
289
|
+
action: Original action object.
|
|
290
|
+
|
|
291
|
+
Returns:
|
|
292
|
+
Dict with an action.
|
|
293
|
+
"""
|
|
294
|
+
if action.action_name == rasa.shared.core.constants.RULE_SNIPPET_ACTION_NAME:
|
|
295
|
+
return None
|
|
296
|
+
|
|
297
|
+
result = CommentedMap()
|
|
298
|
+
if action.action_name:
|
|
299
|
+
result[KEY_ACTION] = action.action_name
|
|
300
|
+
elif action.action_text:
|
|
301
|
+
result[KEY_BOT_END_TO_END_MESSAGE] = action.action_text
|
|
302
|
+
|
|
303
|
+
if hasattr(action, "inline_comment"):
|
|
304
|
+
# FIXME: to fix this type issue, WarningPredictedAction needs to
|
|
305
|
+
# be imported but it's currently outside of `rasa.shared`
|
|
306
|
+
comment = action.inline_comment()
|
|
307
|
+
if KEY_ACTION in result and comment:
|
|
308
|
+
result.yaml_add_eol_comment(comment, KEY_ACTION)
|
|
309
|
+
elif KEY_BOT_END_TO_END_MESSAGE in result and comment:
|
|
310
|
+
result.yaml_add_eol_comment(comment, KEY_BOT_END_TO_END_MESSAGE)
|
|
311
|
+
|
|
312
|
+
return result
|
|
313
|
+
|
|
314
|
+
@staticmethod
|
|
315
|
+
def process_slot(event: SlotSet) -> Optional[OrderedDict]:
|
|
316
|
+
"""Converts a single `SlotSet` event into an ordered dict.
|
|
317
|
+
|
|
318
|
+
Args:
|
|
319
|
+
event: Original `SlotSet` event.
|
|
320
|
+
|
|
321
|
+
Returns:
|
|
322
|
+
OrderedDict with an `SlotSet` event.
|
|
323
|
+
"""
|
|
324
|
+
if event.key == FLOW_HASHES_SLOT:
|
|
325
|
+
# this is a build in slot which should not be persisted
|
|
326
|
+
return None
|
|
327
|
+
return OrderedDict([(KEY_SLOT_NAME, [{event.key: event.value}])])
|
|
328
|
+
|
|
329
|
+
@staticmethod
|
|
330
|
+
def process_stack(event: DialogueStackUpdated) -> OrderedDict:
|
|
331
|
+
"""Converts a stack event into an ordered dict.
|
|
332
|
+
|
|
333
|
+
Args:
|
|
334
|
+
event: Original stack event.
|
|
335
|
+
|
|
336
|
+
Returns:
|
|
337
|
+
OrderedDict with a stack event.
|
|
338
|
+
"""
|
|
339
|
+
return OrderedDict([(KEY_STACK_UPDATE, json.loads(event.update))])
|
|
340
|
+
|
|
341
|
+
@staticmethod
|
|
342
|
+
def process_checkpoints(checkpoints: List[Checkpoint]) -> List[OrderedDict]:
|
|
343
|
+
"""Converts checkpoints event into an ordered dict.
|
|
344
|
+
|
|
345
|
+
Args:
|
|
346
|
+
checkpoints: List of original checkpoint.
|
|
347
|
+
|
|
348
|
+
Returns:
|
|
349
|
+
List of converted checkpoints.
|
|
350
|
+
"""
|
|
351
|
+
result = []
|
|
352
|
+
for checkpoint in checkpoints:
|
|
353
|
+
if checkpoint.name == STORY_START:
|
|
354
|
+
continue
|
|
355
|
+
next_checkpoint: OrderedDict[Text, Any] = OrderedDict(
|
|
356
|
+
[(KEY_CHECKPOINT, checkpoint.name)]
|
|
357
|
+
)
|
|
358
|
+
if checkpoint.conditions:
|
|
359
|
+
next_checkpoint[KEY_CHECKPOINT_SLOTS] = [
|
|
360
|
+
{key: value} for key, value in checkpoint.conditions.items()
|
|
361
|
+
]
|
|
362
|
+
result.append(next_checkpoint)
|
|
363
|
+
return result
|
|
364
|
+
|
|
365
|
+
def process_or_utterances(self, utterances: List[UserUttered]) -> OrderedDict:
|
|
366
|
+
"""Converts user utterance containing the `OR` statement.
|
|
367
|
+
|
|
368
|
+
Args:
|
|
369
|
+
utterances: User utterances belonging to the same `OR` statement.
|
|
370
|
+
|
|
371
|
+
Returns:
|
|
372
|
+
Dict with converted user utterances.
|
|
373
|
+
"""
|
|
374
|
+
return OrderedDict(
|
|
375
|
+
[
|
|
376
|
+
(
|
|
377
|
+
KEY_OR,
|
|
378
|
+
[
|
|
379
|
+
self.process_user_utterance(utterance, self._is_test_story)
|
|
380
|
+
for utterance in utterances
|
|
381
|
+
],
|
|
382
|
+
)
|
|
383
|
+
]
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
@staticmethod
|
|
387
|
+
def process_active_loop(event: ActiveLoop) -> OrderedDict:
|
|
388
|
+
"""Converts ActiveLoop event into an ordered dict.
|
|
389
|
+
|
|
390
|
+
Args:
|
|
391
|
+
event: ActiveLoop event.
|
|
392
|
+
|
|
393
|
+
Returns:
|
|
394
|
+
Converted event.
|
|
395
|
+
"""
|
|
396
|
+
return OrderedDict([(KEY_ACTIVE_LOOP, event.name)])
|
|
397
|
+
|
|
398
|
+
def process_rule_step(self, rule_step: RuleStep) -> OrderedDict:
|
|
399
|
+
"""Converts a RuleStep into an ordered dict.
|
|
400
|
+
|
|
401
|
+
Args:
|
|
402
|
+
rule_step: RuleStep object.
|
|
403
|
+
|
|
404
|
+
Returns:
|
|
405
|
+
Converted rule step.
|
|
406
|
+
"""
|
|
407
|
+
result: OrderedDict[Text, Any] = OrderedDict()
|
|
408
|
+
result[KEY_RULE_NAME] = rule_step.block_name
|
|
409
|
+
|
|
410
|
+
condition_steps = []
|
|
411
|
+
condition_events = rule_step.get_rules_condition()
|
|
412
|
+
for event in condition_events:
|
|
413
|
+
processed = self.process_event(event)
|
|
414
|
+
if processed:
|
|
415
|
+
condition_steps.append(processed)
|
|
416
|
+
if condition_steps:
|
|
417
|
+
result[KEY_RULE_CONDITION] = condition_steps
|
|
418
|
+
|
|
419
|
+
normal_events = rule_step.get_rules_events()
|
|
420
|
+
if normal_events and not (
|
|
421
|
+
isinstance(normal_events[0], ActionExecuted)
|
|
422
|
+
and normal_events[0].action_name
|
|
423
|
+
== rasa.shared.core.constants.RULE_SNIPPET_ACTION_NAME
|
|
424
|
+
):
|
|
425
|
+
result[KEY_RULE_FOR_CONVERSATION_START] = True
|
|
426
|
+
|
|
427
|
+
normal_steps = []
|
|
428
|
+
for event in normal_events:
|
|
429
|
+
processed = self.process_event(event)
|
|
430
|
+
if processed:
|
|
431
|
+
normal_steps.append(processed)
|
|
432
|
+
if normal_steps:
|
|
433
|
+
result[KEY_STEPS] = normal_steps
|
|
434
|
+
|
|
435
|
+
if len(normal_events) > 1:
|
|
436
|
+
last_event = normal_events[len(normal_events) - 1]
|
|
437
|
+
if (
|
|
438
|
+
isinstance(last_event, ActionExecuted)
|
|
439
|
+
and last_event.action_name
|
|
440
|
+
== rasa.shared.core.constants.RULE_SNIPPET_ACTION_NAME
|
|
441
|
+
):
|
|
442
|
+
result[KEY_WAIT_FOR_USER_INPUT_AFTER_RULE] = False
|
|
443
|
+
|
|
444
|
+
return result
|