rasa-pro 3.8.16__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- README.md +380 -0
- rasa/__init__.py +10 -0
- rasa/__main__.py +151 -0
- rasa/anonymization/__init__.py +2 -0
- rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
- rasa/anonymization/anonymization_pipeline.py +287 -0
- rasa/anonymization/anonymization_rule_executor.py +260 -0
- rasa/anonymization/anonymization_rule_orchestrator.py +120 -0
- rasa/anonymization/schemas/config.yml +47 -0
- rasa/anonymization/utils.py +117 -0
- rasa/api.py +146 -0
- rasa/cli/__init__.py +5 -0
- rasa/cli/arguments/__init__.py +0 -0
- rasa/cli/arguments/data.py +81 -0
- rasa/cli/arguments/default_arguments.py +165 -0
- rasa/cli/arguments/evaluate.py +65 -0
- rasa/cli/arguments/export.py +51 -0
- rasa/cli/arguments/interactive.py +74 -0
- rasa/cli/arguments/run.py +204 -0
- rasa/cli/arguments/shell.py +13 -0
- rasa/cli/arguments/test.py +211 -0
- rasa/cli/arguments/train.py +263 -0
- rasa/cli/arguments/visualize.py +34 -0
- rasa/cli/arguments/x.py +30 -0
- rasa/cli/data.py +292 -0
- rasa/cli/e2e_test.py +566 -0
- rasa/cli/evaluate.py +222 -0
- rasa/cli/export.py +251 -0
- rasa/cli/inspect.py +63 -0
- rasa/cli/interactive.py +164 -0
- rasa/cli/license.py +65 -0
- rasa/cli/markers.py +78 -0
- rasa/cli/project_templates/__init__.py +0 -0
- rasa/cli/project_templates/calm/actions/__init__.py +0 -0
- rasa/cli/project_templates/calm/actions/action_template.py +27 -0
- rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
- rasa/cli/project_templates/calm/actions/db.py +57 -0
- rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
- rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
- rasa/cli/project_templates/calm/config.yml +12 -0
- rasa/cli/project_templates/calm/credentials.yml +33 -0
- rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
- rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
- rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
- rasa/cli/project_templates/calm/db/contacts.json +10 -0
- rasa/cli/project_templates/calm/domain/add_contact.yml +33 -0
- rasa/cli/project_templates/calm/domain/list_contacts.yml +14 -0
- rasa/cli/project_templates/calm/domain/remove_contact.yml +31 -0
- rasa/cli/project_templates/calm/domain/shared.yml +5 -0
- rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
- rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
- rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
- rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
- rasa/cli/project_templates/calm/endpoints.yml +45 -0
- rasa/cli/project_templates/default/actions/__init__.py +0 -0
- rasa/cli/project_templates/default/actions/actions.py +27 -0
- rasa/cli/project_templates/default/config.yml +44 -0
- rasa/cli/project_templates/default/credentials.yml +33 -0
- rasa/cli/project_templates/default/data/nlu.yml +91 -0
- rasa/cli/project_templates/default/data/rules.yml +13 -0
- rasa/cli/project_templates/default/data/stories.yml +30 -0
- rasa/cli/project_templates/default/domain.yml +34 -0
- rasa/cli/project_templates/default/endpoints.yml +42 -0
- rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
- rasa/cli/project_templates/tutorial/actions.py +22 -0
- rasa/cli/project_templates/tutorial/config.yml +11 -0
- rasa/cli/project_templates/tutorial/credentials.yml +33 -0
- rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
- rasa/cli/project_templates/tutorial/domain.yml +17 -0
- rasa/cli/project_templates/tutorial/endpoints.yml +45 -0
- rasa/cli/run.py +136 -0
- rasa/cli/scaffold.py +268 -0
- rasa/cli/shell.py +141 -0
- rasa/cli/studio/__init__.py +0 -0
- rasa/cli/studio/download.py +51 -0
- rasa/cli/studio/studio.py +110 -0
- rasa/cli/studio/train.py +59 -0
- rasa/cli/studio/upload.py +85 -0
- rasa/cli/telemetry.py +90 -0
- rasa/cli/test.py +280 -0
- rasa/cli/train.py +260 -0
- rasa/cli/utils.py +453 -0
- rasa/cli/visualize.py +40 -0
- rasa/cli/x.py +205 -0
- rasa/constants.py +37 -0
- rasa/core/__init__.py +17 -0
- rasa/core/actions/__init__.py +0 -0
- rasa/core/actions/action.py +1450 -0
- rasa/core/actions/action_clean_stack.py +59 -0
- rasa/core/actions/action_run_slot_rejections.py +207 -0
- rasa/core/actions/action_trigger_chitchat.py +31 -0
- rasa/core/actions/action_trigger_flow.py +109 -0
- rasa/core/actions/action_trigger_search.py +31 -0
- rasa/core/actions/constants.py +2 -0
- rasa/core/actions/forms.py +737 -0
- rasa/core/actions/loops.py +111 -0
- rasa/core/actions/two_stage_fallback.py +186 -0
- rasa/core/agent.py +557 -0
- rasa/core/auth_retry_tracker_store.py +122 -0
- rasa/core/brokers/__init__.py +0 -0
- rasa/core/brokers/broker.py +126 -0
- rasa/core/brokers/file.py +58 -0
- rasa/core/brokers/kafka.py +322 -0
- rasa/core/brokers/pika.py +387 -0
- rasa/core/brokers/sql.py +86 -0
- rasa/core/channels/__init__.py +55 -0
- rasa/core/channels/audiocodes.py +463 -0
- rasa/core/channels/botframework.py +339 -0
- rasa/core/channels/callback.py +85 -0
- rasa/core/channels/channel.py +419 -0
- rasa/core/channels/console.py +243 -0
- rasa/core/channels/development_inspector.py +93 -0
- rasa/core/channels/facebook.py +422 -0
- rasa/core/channels/hangouts.py +335 -0
- rasa/core/channels/inspector/.eslintrc.cjs +25 -0
- rasa/core/channels/inspector/.gitignore +23 -0
- rasa/core/channels/inspector/README.md +54 -0
- rasa/core/channels/inspector/assets/favicon.ico +0 -0
- rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
- rasa/core/channels/inspector/custom.d.ts +3 -0
- rasa/core/channels/inspector/dist/assets/arc-5623b6dc.js +1 -0
- rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-685c106a.js +10 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-8cbed007.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-5889cf12.js +2 -0
- rasa/core/channels/inspector/dist/assets/createText-62fc7601-24c249d7.js +7 -0
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-7dd06a75.js +4 -0
- rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-62c1e54c.js +51 -0
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-ce49b86f.js +6 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-4067e48f.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-85583a23.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-59fe4051.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-47e3a43b.js +266 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-5a2ac0d9.js +70 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/index-268a75c0.js +1040 -0
- rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-dfb8efc4.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
- rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-b0c470f2.js +7 -0
- rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
- rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-2edb829a.js +139 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
- rasa/core/channels/inspector/dist/assets/layout-b6873d69.js +1 -0
- rasa/core/channels/inspector/dist/assets/line-1efc5781.js +1 -0
- rasa/core/channels/inspector/dist/assets/linear-661e9b94.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-2d2e727f.js +109 -0
- rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
- rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
- rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-9d3ea93d.js +35 -0
- rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-06a178a2.js +7 -0
- rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-0bfedffc.js +52 -0
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-d76d0a04.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-37bb4341.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-f52f7f57.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-4a986a20.js +1 -0
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-7dd9ae12.js +110 -0
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-46e1ca14.js +159 -0
- rasa/core/channels/inspector/dist/assets/styles-9c745c82-4a97439a.js +207 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-823917a3.js +1 -0
- rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-9ea72896.js +61 -0
- rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-b631a8b6.js +7 -0
- rasa/core/channels/inspector/dist/index.html +39 -0
- rasa/core/channels/inspector/index.html +37 -0
- rasa/core/channels/inspector/jest.config.ts +13 -0
- rasa/core/channels/inspector/package.json +48 -0
- rasa/core/channels/inspector/setupTests.ts +2 -0
- rasa/core/channels/inspector/src/App.tsx +170 -0
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +97 -0
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +151 -0
- rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
- rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +19 -0
- rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
- rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
- rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
- rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +385 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +239 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +42 -0
- rasa/core/channels/inspector/src/main.tsx +13 -0
- rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
- rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
- rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
- rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
- rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
- rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
- rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
- rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
- rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
- rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
- rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
- rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
- rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
- rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
- rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
- rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
- rasa/core/channels/inspector/src/theme/index.ts +101 -0
- rasa/core/channels/inspector/src/types.ts +64 -0
- rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
- rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
- rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
- rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
- rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
- rasa/core/channels/inspector/tsconfig.json +26 -0
- rasa/core/channels/inspector/tsconfig.node.json +10 -0
- rasa/core/channels/inspector/vite.config.ts +8 -0
- rasa/core/channels/inspector/yarn.lock +6156 -0
- rasa/core/channels/mattermost.py +229 -0
- rasa/core/channels/rasa_chat.py +126 -0
- rasa/core/channels/rest.py +210 -0
- rasa/core/channels/rocketchat.py +175 -0
- rasa/core/channels/slack.py +620 -0
- rasa/core/channels/socketio.py +274 -0
- rasa/core/channels/telegram.py +298 -0
- rasa/core/channels/twilio.py +169 -0
- rasa/core/channels/twilio_voice.py +367 -0
- rasa/core/channels/vier_cvg.py +374 -0
- rasa/core/channels/webexteams.py +135 -0
- rasa/core/concurrent_lock_store.py +210 -0
- rasa/core/constants.py +107 -0
- rasa/core/evaluation/__init__.py +0 -0
- rasa/core/evaluation/marker.py +267 -0
- rasa/core/evaluation/marker_base.py +925 -0
- rasa/core/evaluation/marker_stats.py +294 -0
- rasa/core/evaluation/marker_tracker_loader.py +103 -0
- rasa/core/exceptions.py +29 -0
- rasa/core/exporter.py +284 -0
- rasa/core/featurizers/__init__.py +0 -0
- rasa/core/featurizers/precomputation.py +410 -0
- rasa/core/featurizers/single_state_featurizer.py +402 -0
- rasa/core/featurizers/tracker_featurizers.py +1172 -0
- rasa/core/http_interpreter.py +89 -0
- rasa/core/information_retrieval/__init__.py +0 -0
- rasa/core/information_retrieval/faiss.py +116 -0
- rasa/core/information_retrieval/information_retrieval.py +72 -0
- rasa/core/information_retrieval/milvus.py +59 -0
- rasa/core/information_retrieval/qdrant.py +102 -0
- rasa/core/jobs.py +63 -0
- rasa/core/lock.py +139 -0
- rasa/core/lock_store.py +344 -0
- rasa/core/migrate.py +404 -0
- rasa/core/nlg/__init__.py +3 -0
- rasa/core/nlg/callback.py +147 -0
- rasa/core/nlg/contextual_response_rephraser.py +270 -0
- rasa/core/nlg/generator.py +230 -0
- rasa/core/nlg/interpolator.py +143 -0
- rasa/core/nlg/response.py +155 -0
- rasa/core/nlg/summarize.py +69 -0
- rasa/core/policies/__init__.py +0 -0
- rasa/core/policies/ensemble.py +329 -0
- rasa/core/policies/enterprise_search_policy.py +717 -0
- rasa/core/policies/enterprise_search_prompt_template.jinja2 +62 -0
- rasa/core/policies/flow_policy.py +205 -0
- rasa/core/policies/flows/__init__.py +0 -0
- rasa/core/policies/flows/flow_exceptions.py +44 -0
- rasa/core/policies/flows/flow_executor.py +582 -0
- rasa/core/policies/flows/flow_step_result.py +43 -0
- rasa/core/policies/intentless_policy.py +924 -0
- rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
- rasa/core/policies/memoization.py +538 -0
- rasa/core/policies/policy.py +716 -0
- rasa/core/policies/rule_policy.py +1276 -0
- rasa/core/policies/ted_policy.py +2146 -0
- rasa/core/policies/unexpected_intent_policy.py +1015 -0
- rasa/core/processor.py +1331 -0
- rasa/core/run.py +315 -0
- rasa/core/secrets_manager/__init__.py +0 -0
- rasa/core/secrets_manager/constants.py +32 -0
- rasa/core/secrets_manager/endpoints.py +391 -0
- rasa/core/secrets_manager/factory.py +233 -0
- rasa/core/secrets_manager/secret_manager.py +262 -0
- rasa/core/secrets_manager/vault.py +576 -0
- rasa/core/test.py +1337 -0
- rasa/core/tracker_store.py +1664 -0
- rasa/core/train.py +107 -0
- rasa/core/training/__init__.py +89 -0
- rasa/core/training/converters/__init__.py +0 -0
- rasa/core/training/converters/responses_prefix_converter.py +119 -0
- rasa/core/training/interactive.py +1742 -0
- rasa/core/training/story_conflict.py +381 -0
- rasa/core/training/training.py +93 -0
- rasa/core/utils.py +344 -0
- rasa/core/visualize.py +70 -0
- rasa/dialogue_understanding/__init__.py +0 -0
- rasa/dialogue_understanding/coexistence/__init__.py +0 -0
- rasa/dialogue_understanding/coexistence/constants.py +4 -0
- rasa/dialogue_understanding/coexistence/intent_based_router.py +189 -0
- rasa/dialogue_understanding/coexistence/llm_based_router.py +261 -0
- rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
- rasa/dialogue_understanding/commands/__init__.py +45 -0
- rasa/dialogue_understanding/commands/can_not_handle_command.py +61 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +116 -0
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +48 -0
- rasa/dialogue_understanding/commands/clarify_command.py +77 -0
- rasa/dialogue_understanding/commands/command.py +85 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +288 -0
- rasa/dialogue_understanding/commands/error_command.py +67 -0
- rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
- rasa/dialogue_understanding/commands/handle_code_change_command.py +64 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +57 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +48 -0
- rasa/dialogue_understanding/commands/noop_command.py +45 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +125 -0
- rasa/dialogue_understanding/commands/skip_question_command.py +66 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +98 -0
- rasa/dialogue_understanding/generator/__init__.py +6 -0
- rasa/dialogue_understanding/generator/command_generator.py +257 -0
- rasa/dialogue_understanding/generator/command_prompt_template.jinja2 +57 -0
- rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +410 -0
- rasa/dialogue_understanding/generator/llm_command_generator.py +637 -0
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +157 -0
- rasa/dialogue_understanding/patterns/__init__.py +0 -0
- rasa/dialogue_understanding/patterns/cancel.py +111 -0
- rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
- rasa/dialogue_understanding/patterns/chitchat.py +37 -0
- rasa/dialogue_understanding/patterns/clarify.py +97 -0
- rasa/dialogue_understanding/patterns/code_change.py +41 -0
- rasa/dialogue_understanding/patterns/collect_information.py +90 -0
- rasa/dialogue_understanding/patterns/completed.py +40 -0
- rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
- rasa/dialogue_understanding/patterns/correction.py +278 -0
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +243 -0
- rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
- rasa/dialogue_understanding/patterns/internal_error.py +47 -0
- rasa/dialogue_understanding/patterns/search.py +37 -0
- rasa/dialogue_understanding/patterns/skip_question.py +38 -0
- rasa/dialogue_understanding/processor/__init__.py +0 -0
- rasa/dialogue_understanding/processor/command_processor.py +578 -0
- rasa/dialogue_understanding/processor/command_processor_component.py +39 -0
- rasa/dialogue_understanding/stack/__init__.py +0 -0
- rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
- rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
- rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
- rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
- rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
- rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
- rasa/dialogue_understanding/stack/utils.py +211 -0
- rasa/e2e_test/__init__.py +0 -0
- rasa/e2e_test/constants.py +10 -0
- rasa/e2e_test/e2e_test_case.py +322 -0
- rasa/e2e_test/e2e_test_result.py +34 -0
- rasa/e2e_test/e2e_test_runner.py +659 -0
- rasa/e2e_test/e2e_test_schema.yml +67 -0
- rasa/engine/__init__.py +0 -0
- rasa/engine/caching.py +464 -0
- rasa/engine/constants.py +17 -0
- rasa/engine/exceptions.py +14 -0
- rasa/engine/graph.py +625 -0
- rasa/engine/loader.py +36 -0
- rasa/engine/recipes/__init__.py +0 -0
- rasa/engine/recipes/config_files/default_config.yml +44 -0
- rasa/engine/recipes/default_components.py +99 -0
- rasa/engine/recipes/default_recipe.py +1252 -0
- rasa/engine/recipes/graph_recipe.py +79 -0
- rasa/engine/recipes/recipe.py +93 -0
- rasa/engine/runner/__init__.py +0 -0
- rasa/engine/runner/dask.py +256 -0
- rasa/engine/runner/interface.py +49 -0
- rasa/engine/storage/__init__.py +0 -0
- rasa/engine/storage/local_model_storage.py +248 -0
- rasa/engine/storage/resource.py +110 -0
- rasa/engine/storage/storage.py +203 -0
- rasa/engine/training/__init__.py +0 -0
- rasa/engine/training/components.py +176 -0
- rasa/engine/training/fingerprinting.py +64 -0
- rasa/engine/training/graph_trainer.py +256 -0
- rasa/engine/training/hooks.py +164 -0
- rasa/engine/validation.py +839 -0
- rasa/env.py +5 -0
- rasa/exceptions.py +69 -0
- rasa/graph_components/__init__.py +0 -0
- rasa/graph_components/converters/__init__.py +0 -0
- rasa/graph_components/converters/nlu_message_converter.py +48 -0
- rasa/graph_components/providers/__init__.py +0 -0
- rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
- rasa/graph_components/providers/domain_provider.py +71 -0
- rasa/graph_components/providers/flows_provider.py +74 -0
- rasa/graph_components/providers/forms_provider.py +44 -0
- rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
- rasa/graph_components/providers/responses_provider.py +44 -0
- rasa/graph_components/providers/rule_only_provider.py +49 -0
- rasa/graph_components/providers/story_graph_provider.py +43 -0
- rasa/graph_components/providers/training_tracker_provider.py +55 -0
- rasa/graph_components/validators/__init__.py +0 -0
- rasa/graph_components/validators/default_recipe_validator.py +552 -0
- rasa/graph_components/validators/finetuning_validator.py +302 -0
- rasa/hooks.py +113 -0
- rasa/jupyter.py +63 -0
- rasa/keys +1 -0
- rasa/markers/__init__.py +0 -0
- rasa/markers/marker.py +269 -0
- rasa/markers/marker_base.py +828 -0
- rasa/markers/upload.py +74 -0
- rasa/markers/validate.py +21 -0
- rasa/model.py +118 -0
- rasa/model_testing.py +457 -0
- rasa/model_training.py +535 -0
- rasa/nlu/__init__.py +7 -0
- rasa/nlu/classifiers/__init__.py +3 -0
- rasa/nlu/classifiers/classifier.py +5 -0
- rasa/nlu/classifiers/diet_classifier.py +1874 -0
- rasa/nlu/classifiers/fallback_classifier.py +192 -0
- rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
- rasa/nlu/classifiers/llm_intent_classifier.py +519 -0
- rasa/nlu/classifiers/logistic_regression_classifier.py +240 -0
- rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
- rasa/nlu/classifiers/regex_message_handler.py +56 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +309 -0
- rasa/nlu/constants.py +77 -0
- rasa/nlu/convert.py +40 -0
- rasa/nlu/emulators/__init__.py +0 -0
- rasa/nlu/emulators/dialogflow.py +55 -0
- rasa/nlu/emulators/emulator.py +49 -0
- rasa/nlu/emulators/luis.py +86 -0
- rasa/nlu/emulators/no_emulator.py +10 -0
- rasa/nlu/emulators/wit.py +56 -0
- rasa/nlu/extractors/__init__.py +0 -0
- rasa/nlu/extractors/crf_entity_extractor.py +672 -0
- rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
- rasa/nlu/extractors/entity_synonyms.py +178 -0
- rasa/nlu/extractors/extractor.py +470 -0
- rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
- rasa/nlu/extractors/regex_entity_extractor.py +220 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
- rasa/nlu/featurizers/__init__.py +0 -0
- rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +449 -0
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +772 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
- rasa/nlu/featurizers/featurizer.py +89 -0
- rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +840 -0
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +539 -0
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +269 -0
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
- rasa/nlu/model.py +24 -0
- rasa/nlu/persistor.py +240 -0
- rasa/nlu/run.py +27 -0
- rasa/nlu/selectors/__init__.py +0 -0
- rasa/nlu/selectors/response_selector.py +990 -0
- rasa/nlu/test.py +1943 -0
- rasa/nlu/tokenizers/__init__.py +0 -0
- rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
- rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
- rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
- rasa/nlu/tokenizers/tokenizer.py +239 -0
- rasa/nlu/tokenizers/whitespace_tokenizer.py +106 -0
- rasa/nlu/utils/__init__.py +35 -0
- rasa/nlu/utils/bilou_utils.py +462 -0
- rasa/nlu/utils/hugging_face/__init__.py +0 -0
- rasa/nlu/utils/hugging_face/registry.py +108 -0
- rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
- rasa/nlu/utils/mitie_utils.py +113 -0
- rasa/nlu/utils/pattern_utils.py +168 -0
- rasa/nlu/utils/spacy_utils.py +312 -0
- rasa/plugin.py +90 -0
- rasa/server.py +1536 -0
- rasa/shared/__init__.py +0 -0
- rasa/shared/constants.py +181 -0
- rasa/shared/core/__init__.py +0 -0
- rasa/shared/core/constants.py +168 -0
- rasa/shared/core/conversation.py +46 -0
- rasa/shared/core/domain.py +2106 -0
- rasa/shared/core/events.py +2507 -0
- rasa/shared/core/flows/__init__.py +7 -0
- rasa/shared/core/flows/flow.py +353 -0
- rasa/shared/core/flows/flow_step.py +146 -0
- rasa/shared/core/flows/flow_step_links.py +319 -0
- rasa/shared/core/flows/flow_step_sequence.py +70 -0
- rasa/shared/core/flows/flows_list.py +211 -0
- rasa/shared/core/flows/flows_yaml_schema.json +217 -0
- rasa/shared/core/flows/nlu_trigger.py +117 -0
- rasa/shared/core/flows/steps/__init__.py +24 -0
- rasa/shared/core/flows/steps/action.py +51 -0
- rasa/shared/core/flows/steps/call.py +64 -0
- rasa/shared/core/flows/steps/collect.py +112 -0
- rasa/shared/core/flows/steps/constants.py +5 -0
- rasa/shared/core/flows/steps/continuation.py +36 -0
- rasa/shared/core/flows/steps/end.py +22 -0
- rasa/shared/core/flows/steps/internal.py +44 -0
- rasa/shared/core/flows/steps/link.py +51 -0
- rasa/shared/core/flows/steps/no_operation.py +48 -0
- rasa/shared/core/flows/steps/set_slots.py +50 -0
- rasa/shared/core/flows/steps/start.py +30 -0
- rasa/shared/core/flows/validation.py +527 -0
- rasa/shared/core/flows/yaml_flows_io.py +278 -0
- rasa/shared/core/generator.py +907 -0
- rasa/shared/core/slot_mappings.py +235 -0
- rasa/shared/core/slots.py +647 -0
- rasa/shared/core/trackers.py +1159 -0
- rasa/shared/core/training_data/__init__.py +0 -0
- rasa/shared/core/training_data/loading.py +90 -0
- rasa/shared/core/training_data/story_reader/__init__.py +0 -0
- rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
- rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
- rasa/shared/core/training_data/story_writer/__init__.py +0 -0
- rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
- rasa/shared/core/training_data/story_writer/yaml_story_writer.py +442 -0
- rasa/shared/core/training_data/structures.py +838 -0
- rasa/shared/core/training_data/visualization.html +146 -0
- rasa/shared/core/training_data/visualization.py +603 -0
- rasa/shared/data.py +192 -0
- rasa/shared/engine/__init__.py +0 -0
- rasa/shared/engine/caching.py +26 -0
- rasa/shared/exceptions.py +129 -0
- rasa/shared/importers/__init__.py +0 -0
- rasa/shared/importers/importer.py +705 -0
- rasa/shared/importers/multi_project.py +203 -0
- rasa/shared/importers/rasa.py +100 -0
- rasa/shared/importers/utils.py +34 -0
- rasa/shared/nlu/__init__.py +0 -0
- rasa/shared/nlu/constants.py +45 -0
- rasa/shared/nlu/interpreter.py +10 -0
- rasa/shared/nlu/training_data/__init__.py +0 -0
- rasa/shared/nlu/training_data/entities_parser.py +209 -0
- rasa/shared/nlu/training_data/features.py +374 -0
- rasa/shared/nlu/training_data/formats/__init__.py +10 -0
- rasa/shared/nlu/training_data/formats/dialogflow.py +162 -0
- rasa/shared/nlu/training_data/formats/luis.py +87 -0
- rasa/shared/nlu/training_data/formats/rasa.py +135 -0
- rasa/shared/nlu/training_data/formats/rasa_yaml.py +605 -0
- rasa/shared/nlu/training_data/formats/readerwriter.py +245 -0
- rasa/shared/nlu/training_data/formats/wit.py +52 -0
- rasa/shared/nlu/training_data/loading.py +137 -0
- rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
- rasa/shared/nlu/training_data/message.py +477 -0
- rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
- rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
- rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
- rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
- rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
- rasa/shared/nlu/training_data/training_data.py +732 -0
- rasa/shared/nlu/training_data/util.py +223 -0
- rasa/shared/providers/__init__.py +0 -0
- rasa/shared/providers/openai/__init__.py +0 -0
- rasa/shared/providers/openai/clients.py +43 -0
- rasa/shared/providers/openai/session_handler.py +110 -0
- rasa/shared/utils/__init__.py +0 -0
- rasa/shared/utils/cli.py +72 -0
- rasa/shared/utils/common.py +308 -0
- rasa/shared/utils/constants.py +1 -0
- rasa/shared/utils/io.py +403 -0
- rasa/shared/utils/llm.py +405 -0
- rasa/shared/utils/pykwalify_extensions.py +26 -0
- rasa/shared/utils/schemas/__init__.py +0 -0
- rasa/shared/utils/schemas/config.yml +2 -0
- rasa/shared/utils/schemas/domain.yml +142 -0
- rasa/shared/utils/schemas/events.py +212 -0
- rasa/shared/utils/schemas/model_config.yml +46 -0
- rasa/shared/utils/schemas/stories.yml +173 -0
- rasa/shared/utils/yaml.py +777 -0
- rasa/studio/__init__.py +0 -0
- rasa/studio/auth.py +252 -0
- rasa/studio/config.py +127 -0
- rasa/studio/constants.py +16 -0
- rasa/studio/data_handler.py +352 -0
- rasa/studio/download.py +350 -0
- rasa/studio/train.py +136 -0
- rasa/studio/upload.py +408 -0
- rasa/telemetry.py +1583 -0
- rasa/tracing/__init__.py +0 -0
- rasa/tracing/config.py +338 -0
- rasa/tracing/constants.py +38 -0
- rasa/tracing/instrumentation/__init__.py +0 -0
- rasa/tracing/instrumentation/attribute_extractors.py +663 -0
- rasa/tracing/instrumentation/instrumentation.py +939 -0
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +142 -0
- rasa/tracing/instrumentation/metrics.py +206 -0
- rasa/tracing/metric_instrument_provider.py +125 -0
- rasa/utils/__init__.py +0 -0
- rasa/utils/beta.py +83 -0
- rasa/utils/cli.py +27 -0
- rasa/utils/common.py +635 -0
- rasa/utils/converter.py +53 -0
- rasa/utils/endpoints.py +303 -0
- rasa/utils/io.py +326 -0
- rasa/utils/licensing.py +319 -0
- rasa/utils/log_utils.py +174 -0
- rasa/utils/mapper.py +210 -0
- rasa/utils/ml_utils.py +145 -0
- rasa/utils/plotting.py +362 -0
- rasa/utils/singleton.py +23 -0
- rasa/utils/tensorflow/__init__.py +0 -0
- rasa/utils/tensorflow/callback.py +112 -0
- rasa/utils/tensorflow/constants.py +116 -0
- rasa/utils/tensorflow/crf.py +492 -0
- rasa/utils/tensorflow/data_generator.py +440 -0
- rasa/utils/tensorflow/environment.py +161 -0
- rasa/utils/tensorflow/exceptions.py +5 -0
- rasa/utils/tensorflow/layers.py +1565 -0
- rasa/utils/tensorflow/layers_utils.py +113 -0
- rasa/utils/tensorflow/metrics.py +281 -0
- rasa/utils/tensorflow/model_data.py +991 -0
- rasa/utils/tensorflow/model_data_utils.py +500 -0
- rasa/utils/tensorflow/models.py +936 -0
- rasa/utils/tensorflow/rasa_layers.py +1094 -0
- rasa/utils/tensorflow/transformer.py +640 -0
- rasa/utils/tensorflow/types.py +6 -0
- rasa/utils/train_utils.py +572 -0
- rasa/utils/yaml.py +54 -0
- rasa/validator.py +1035 -0
- rasa/version.py +3 -0
- rasa_pro-3.8.16.dist-info/METADATA +528 -0
- rasa_pro-3.8.16.dist-info/NOTICE +5 -0
- rasa_pro-3.8.16.dist-info/RECORD +644 -0
- rasa_pro-3.8.16.dist-info/WHEEL +4 -0
- rasa_pro-3.8.16.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
mapping:
|
|
2
|
+
fixtures:
|
|
3
|
+
allowempty: True
|
|
4
|
+
type: "seq"
|
|
5
|
+
sequence:
|
|
6
|
+
- type: map
|
|
7
|
+
mapping:
|
|
8
|
+
regex;(^[a-zA-Z_]+[a-zA-Z0-9_]*$):
|
|
9
|
+
type: "seq"
|
|
10
|
+
sequence:
|
|
11
|
+
- type: map
|
|
12
|
+
mapping:
|
|
13
|
+
regex;(^[a-zA-Z_]+[a-zA-Z0-9_]*$):
|
|
14
|
+
type: any
|
|
15
|
+
|
|
16
|
+
test_cases:
|
|
17
|
+
type: "seq"
|
|
18
|
+
sequence:
|
|
19
|
+
- type: map
|
|
20
|
+
mapping:
|
|
21
|
+
test_case:
|
|
22
|
+
type: "str"
|
|
23
|
+
required: True
|
|
24
|
+
fixtures:
|
|
25
|
+
allowempty: True
|
|
26
|
+
type: "seq"
|
|
27
|
+
sequence:
|
|
28
|
+
- type: "str"
|
|
29
|
+
pattern: ^[a-zA-Z_]+[a-zA-Z0-9_]*$
|
|
30
|
+
steps:
|
|
31
|
+
type: "seq"
|
|
32
|
+
matching: "any"
|
|
33
|
+
sequence:
|
|
34
|
+
- type: map
|
|
35
|
+
mapping:
|
|
36
|
+
user:
|
|
37
|
+
type: "str"
|
|
38
|
+
- type: map
|
|
39
|
+
mapping:
|
|
40
|
+
utter:
|
|
41
|
+
type: "str"
|
|
42
|
+
- type: map
|
|
43
|
+
mapping:
|
|
44
|
+
bot:
|
|
45
|
+
type: "str"
|
|
46
|
+
- type: map
|
|
47
|
+
mapping:
|
|
48
|
+
slot_was_set:
|
|
49
|
+
type: "seq"
|
|
50
|
+
matching: "any"
|
|
51
|
+
sequence:
|
|
52
|
+
- type: str
|
|
53
|
+
- type: map
|
|
54
|
+
mapping: # slots can start with [a-zA-Z_] but may contain [a-zA-Z0-9_-]
|
|
55
|
+
regex;(^[a-zA-Z_]+[a-zA-Z0-9_-]*$):
|
|
56
|
+
type: any
|
|
57
|
+
- type: map
|
|
58
|
+
mapping:
|
|
59
|
+
slot_was_not_set:
|
|
60
|
+
type: "seq"
|
|
61
|
+
matching: "any"
|
|
62
|
+
sequence:
|
|
63
|
+
- type: str
|
|
64
|
+
- type: map
|
|
65
|
+
mapping: # slots can start with [a-zA-Z_] but may contain [a-zA-Z0-9_-]
|
|
66
|
+
regex;(^[a-zA-Z_]+[a-zA-Z0-9_-]*$):
|
|
67
|
+
type: any
|
rasa/engine/__init__.py
ADDED
|
File without changes
|
rasa/engine/caching.py
ADDED
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import abc
|
|
4
|
+
import logging
|
|
5
|
+
import shutil
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Text, Any, Optional, Tuple, List
|
|
9
|
+
|
|
10
|
+
from packaging import version
|
|
11
|
+
from sqlalchemy.engine import URL
|
|
12
|
+
|
|
13
|
+
from sqlalchemy.exc import OperationalError
|
|
14
|
+
from typing_extensions import Protocol, runtime_checkable
|
|
15
|
+
|
|
16
|
+
import rasa
|
|
17
|
+
import rasa.model
|
|
18
|
+
import rasa.utils.common
|
|
19
|
+
import rasa.shared.utils.common
|
|
20
|
+
from rasa.constants import MINIMUM_COMPATIBLE_VERSION
|
|
21
|
+
import sqlalchemy as sa
|
|
22
|
+
import sqlalchemy.orm
|
|
23
|
+
|
|
24
|
+
from rasa.engine.storage.storage import ModelStorage
|
|
25
|
+
from rasa.shared.engine.caching import (
|
|
26
|
+
get_local_cache_location,
|
|
27
|
+
get_max_cache_size,
|
|
28
|
+
get_cache_database_name,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class TrainingCache(abc.ABC):
|
|
35
|
+
"""Stores training results in a persistent cache.
|
|
36
|
+
|
|
37
|
+
Used to minimize re-retraining when the data / config didn't change in between
|
|
38
|
+
training runs.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
@abc.abstractmethod
|
|
42
|
+
def cache_output(
|
|
43
|
+
self,
|
|
44
|
+
fingerprint_key: Text,
|
|
45
|
+
output: Any,
|
|
46
|
+
output_fingerprint: Text,
|
|
47
|
+
model_storage: ModelStorage,
|
|
48
|
+
) -> None:
|
|
49
|
+
"""Adds the output to the cache.
|
|
50
|
+
|
|
51
|
+
If the output is of type `Cacheable` the output is persisted to disk in addition
|
|
52
|
+
to its fingerprint.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
fingerprint_key: The fingerprint key serves as key for the cache. Graph
|
|
56
|
+
components can use their fingerprint key to lookup fingerprints of
|
|
57
|
+
previous training runs.
|
|
58
|
+
output: The output. The output is only cached to disk if it's of type
|
|
59
|
+
`Cacheable`.
|
|
60
|
+
output_fingerprint: The fingerprint of their output. This can be used
|
|
61
|
+
to lookup potentially persisted outputs on disk.
|
|
62
|
+
model_storage: Required for caching `Resource` instances. E.g. `Resource`s
|
|
63
|
+
use that to copy data from the model storage to the cache.
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
...
|
|
67
|
+
|
|
68
|
+
@abc.abstractmethod
|
|
69
|
+
def get_cached_output_fingerprint(self, fingerprint_key: Text) -> Optional[Text]:
|
|
70
|
+
"""Retrieves fingerprint of output based on fingerprint key.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
fingerprint_key: The fingerprint serves as key for the lookup of output
|
|
74
|
+
fingerprints.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
The fingerprint of a matching output or `None` in case no cache entry was
|
|
78
|
+
found for the given fingerprint key.
|
|
79
|
+
"""
|
|
80
|
+
...
|
|
81
|
+
|
|
82
|
+
@abc.abstractmethod
|
|
83
|
+
def get_cached_result(
|
|
84
|
+
self, output_fingerprint_key: Text, node_name: Text, model_storage: ModelStorage
|
|
85
|
+
) -> Optional[Cacheable]:
|
|
86
|
+
"""Returns a potentially cached output result.
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
output_fingerprint_key: The fingerprint key of the output serves as lookup
|
|
90
|
+
key for a potentially cached version of this output.
|
|
91
|
+
node_name: The name of the graph node which wants to use this cached result.
|
|
92
|
+
model_storage: The current model storage (e.g. used when restoring
|
|
93
|
+
`Resource` objects so that they can fill the model storage with data).
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
`None` if no matching result was found or restored `Cacheable`.
|
|
97
|
+
"""
|
|
98
|
+
...
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@runtime_checkable
|
|
102
|
+
class Cacheable(Protocol):
|
|
103
|
+
"""Protocol for cacheable graph component outputs.
|
|
104
|
+
|
|
105
|
+
We only cache graph component outputs which are `Cacheable`. We only store the
|
|
106
|
+
output fingerprint for everything else.
|
|
107
|
+
"""
|
|
108
|
+
|
|
109
|
+
def to_cache(self, directory: Path, model_storage: ModelStorage) -> None:
|
|
110
|
+
"""Persists `Cacheable` to disk.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
directory: The directory where the `Cacheable` can persist itself to.
|
|
114
|
+
model_storage: The current model storage (e.g. used when caching `Resource`
|
|
115
|
+
objects.
|
|
116
|
+
"""
|
|
117
|
+
...
|
|
118
|
+
|
|
119
|
+
@classmethod
|
|
120
|
+
def from_cache(
|
|
121
|
+
cls,
|
|
122
|
+
node_name: Text,
|
|
123
|
+
directory: Path,
|
|
124
|
+
model_storage: ModelStorage,
|
|
125
|
+
output_fingerprint: Text,
|
|
126
|
+
) -> Cacheable:
|
|
127
|
+
"""Loads `Cacheable` from cache.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
node_name: The name of the graph node which wants to use this cached result.
|
|
131
|
+
directory: Directory containing the persisted `Cacheable`.
|
|
132
|
+
model_storage: The current model storage (e.g. used when restoring
|
|
133
|
+
`Resource` objects so that they can fill the model storage with data).
|
|
134
|
+
output_fingerprint: The fingerprint of the cached result (e.g. used when
|
|
135
|
+
restoring `Resource` objects as the fingerprint can not be easily
|
|
136
|
+
calculated from the object itself).
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
Instantiated `Cacheable`.
|
|
140
|
+
"""
|
|
141
|
+
...
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class LocalTrainingCache(TrainingCache):
|
|
145
|
+
"""Caches training results on local disk (see parent class for full docstring)."""
|
|
146
|
+
|
|
147
|
+
from sqlalchemy.orm import DeclarativeBase
|
|
148
|
+
|
|
149
|
+
class Base(DeclarativeBase):
|
|
150
|
+
pass
|
|
151
|
+
|
|
152
|
+
class CacheEntry(Base):
|
|
153
|
+
"""Stores metadata about a single cache entry."""
|
|
154
|
+
|
|
155
|
+
__tablename__ = "cache_entry"
|
|
156
|
+
|
|
157
|
+
fingerprint_key = sa.Column(sa.String(), primary_key=True)
|
|
158
|
+
output_fingerprint_key = sa.Column(sa.String(), nullable=False, index=True)
|
|
159
|
+
last_used = sa.Column(sa.DateTime(timezone=True), nullable=False)
|
|
160
|
+
rasa_version = sa.Column(sa.String(255), nullable=False)
|
|
161
|
+
result_location = sa.Column(sa.String())
|
|
162
|
+
result_type = sa.Column(sa.String())
|
|
163
|
+
|
|
164
|
+
def __init__(self) -> None:
|
|
165
|
+
"""Creates cache.
|
|
166
|
+
|
|
167
|
+
The `Cache` setting can be configured via environment variables.
|
|
168
|
+
"""
|
|
169
|
+
self._cache_location = LocalTrainingCache._get_cache_location()
|
|
170
|
+
|
|
171
|
+
self._max_cache_size = get_max_cache_size()
|
|
172
|
+
|
|
173
|
+
self._cache_database_name = get_cache_database_name()
|
|
174
|
+
|
|
175
|
+
if not self._cache_location.exists() and not self._is_disabled():
|
|
176
|
+
logger.debug(
|
|
177
|
+
f"Creating caching directory '{self._cache_location}' because "
|
|
178
|
+
f"it doesn't exist yet."
|
|
179
|
+
)
|
|
180
|
+
self._cache_location.mkdir(parents=True)
|
|
181
|
+
|
|
182
|
+
self._sessionmaker = self._create_database()
|
|
183
|
+
|
|
184
|
+
self._drop_cache_entries_from_incompatible_versions()
|
|
185
|
+
|
|
186
|
+
@staticmethod
|
|
187
|
+
def _get_cache_location() -> Path:
|
|
188
|
+
return get_local_cache_location()
|
|
189
|
+
|
|
190
|
+
def _create_database(self) -> sqlalchemy.orm.sessionmaker:
|
|
191
|
+
if self._is_disabled():
|
|
192
|
+
# Use in-memory database as mock to avoid having to check `_is_disabled`
|
|
193
|
+
# everywhere
|
|
194
|
+
database = ""
|
|
195
|
+
else:
|
|
196
|
+
database = str(self._cache_location / self._cache_database_name)
|
|
197
|
+
|
|
198
|
+
# Use `future=True` as we are using the 2.x query style
|
|
199
|
+
engine = sa.create_engine(
|
|
200
|
+
URL.create(drivername="sqlite", database=database), future=True
|
|
201
|
+
)
|
|
202
|
+
self.Base.metadata.create_all(engine)
|
|
203
|
+
|
|
204
|
+
return sa.orm.sessionmaker(engine)
|
|
205
|
+
|
|
206
|
+
def _drop_cache_entries_from_incompatible_versions(self) -> None:
|
|
207
|
+
incompatible_entries = self._find_incompatible_cache_entries()
|
|
208
|
+
|
|
209
|
+
for entry in incompatible_entries:
|
|
210
|
+
self._delete_cached_result(entry)
|
|
211
|
+
|
|
212
|
+
self._delete_incompatible_entries_from_cache(incompatible_entries)
|
|
213
|
+
|
|
214
|
+
logger.debug(
|
|
215
|
+
f"Deleted {len(incompatible_entries)} from disk as their version "
|
|
216
|
+
f"is older than the minimum compatible version "
|
|
217
|
+
f"('{MINIMUM_COMPATIBLE_VERSION}')."
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
def _find_incompatible_cache_entries(self) -> List[LocalTrainingCache.CacheEntry]:
|
|
221
|
+
with self._sessionmaker() as session:
|
|
222
|
+
query_for_cache_entries = sa.select(self.CacheEntry)
|
|
223
|
+
all_entries: List[LocalTrainingCache.CacheEntry] = (
|
|
224
|
+
session.execute(query_for_cache_entries).scalars().all()
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
return [
|
|
228
|
+
entry
|
|
229
|
+
for entry in all_entries
|
|
230
|
+
if version.parse(MINIMUM_COMPATIBLE_VERSION)
|
|
231
|
+
> version.parse(entry.rasa_version)
|
|
232
|
+
]
|
|
233
|
+
|
|
234
|
+
def _delete_incompatible_entries_from_cache(
|
|
235
|
+
self, incompatible_entries: List[LocalTrainingCache.CacheEntry]
|
|
236
|
+
) -> None:
|
|
237
|
+
incompatible_fingerprints = [
|
|
238
|
+
entry.fingerprint_key for entry in incompatible_entries
|
|
239
|
+
]
|
|
240
|
+
with self._sessionmaker.begin() as session:
|
|
241
|
+
delete_query = sa.delete(self.CacheEntry).where(
|
|
242
|
+
self.CacheEntry.fingerprint_key.in_(incompatible_fingerprints)
|
|
243
|
+
)
|
|
244
|
+
session.execute(delete_query)
|
|
245
|
+
|
|
246
|
+
@staticmethod
|
|
247
|
+
def _delete_cached_result(entry: LocalTrainingCache.CacheEntry) -> None:
|
|
248
|
+
if entry.result_location and Path(entry.result_location).is_dir():
|
|
249
|
+
shutil.rmtree(entry.result_location)
|
|
250
|
+
|
|
251
|
+
def cache_output(
|
|
252
|
+
self,
|
|
253
|
+
fingerprint_key: Text,
|
|
254
|
+
output: Any,
|
|
255
|
+
output_fingerprint: Text,
|
|
256
|
+
model_storage: ModelStorage,
|
|
257
|
+
) -> None:
|
|
258
|
+
"""Adds the output to the cache (see parent class for full docstring)."""
|
|
259
|
+
if self._is_disabled():
|
|
260
|
+
return
|
|
261
|
+
|
|
262
|
+
cache_dir, output_type = None, None
|
|
263
|
+
if isinstance(output, Cacheable):
|
|
264
|
+
cache_dir, output_type = self._cache_output_to_disk(output, model_storage)
|
|
265
|
+
|
|
266
|
+
try:
|
|
267
|
+
self._add_cache_entry(
|
|
268
|
+
cache_dir, fingerprint_key, output_fingerprint, output_type
|
|
269
|
+
)
|
|
270
|
+
except OperationalError:
|
|
271
|
+
if cache_dir:
|
|
272
|
+
shutil.rmtree(cache_dir)
|
|
273
|
+
|
|
274
|
+
raise
|
|
275
|
+
|
|
276
|
+
def _add_cache_entry(
|
|
277
|
+
self,
|
|
278
|
+
cache_dir: Optional[Text],
|
|
279
|
+
fingerprint_key: Text,
|
|
280
|
+
output_fingerprint: Text,
|
|
281
|
+
output_type: Text,
|
|
282
|
+
) -> None:
|
|
283
|
+
with self._sessionmaker.begin() as session:
|
|
284
|
+
cache_entry = self.CacheEntry(
|
|
285
|
+
fingerprint_key=fingerprint_key,
|
|
286
|
+
output_fingerprint_key=output_fingerprint,
|
|
287
|
+
last_used=datetime.utcnow(),
|
|
288
|
+
rasa_version=rasa.__version__,
|
|
289
|
+
result_location=cache_dir,
|
|
290
|
+
result_type=output_type,
|
|
291
|
+
)
|
|
292
|
+
session.merge(cache_entry)
|
|
293
|
+
|
|
294
|
+
def _is_disabled(self) -> bool:
|
|
295
|
+
return self._max_cache_size == 0.0
|
|
296
|
+
|
|
297
|
+
def _cache_output_to_disk(
|
|
298
|
+
self, output: Cacheable, model_storage: ModelStorage
|
|
299
|
+
) -> Tuple[Optional[Text], Optional[Text]]:
|
|
300
|
+
tempdir_name = rasa.utils.common.get_temp_dir_name()
|
|
301
|
+
|
|
302
|
+
# Use `TempDirectoryPath` instead of `tempfile.TemporaryDirectory` as this
|
|
303
|
+
# leads to errors on Windows when the context manager tries to delete an
|
|
304
|
+
# already deleted temporary directory (e.g. https://bugs.python.org/issue29982)
|
|
305
|
+
with rasa.utils.common.TempDirectoryPath(tempdir_name) as temp_dir:
|
|
306
|
+
tmp_path = Path(temp_dir)
|
|
307
|
+
try:
|
|
308
|
+
|
|
309
|
+
output.to_cache(tmp_path, model_storage)
|
|
310
|
+
|
|
311
|
+
logger.debug(
|
|
312
|
+
f"Caching output of type '{type(output).__name__}' succeeded."
|
|
313
|
+
)
|
|
314
|
+
except Exception as e:
|
|
315
|
+
logger.error(
|
|
316
|
+
f"Caching output of type '{type(output).__name__}' failed with the "
|
|
317
|
+
f"following error:\n{e}"
|
|
318
|
+
)
|
|
319
|
+
return None, None
|
|
320
|
+
|
|
321
|
+
output_size = rasa.utils.common.directory_size_in_mb(tmp_path)
|
|
322
|
+
if output_size > self._max_cache_size:
|
|
323
|
+
logger.debug(
|
|
324
|
+
f"Caching result of type '{type(output).__name__}' was skipped "
|
|
325
|
+
f"because it exceeds the maximum cache size of "
|
|
326
|
+
f"{self._max_cache_size} MiB."
|
|
327
|
+
)
|
|
328
|
+
return None, None
|
|
329
|
+
|
|
330
|
+
while (
|
|
331
|
+
rasa.utils.common.directory_size_in_mb(
|
|
332
|
+
self._cache_location,
|
|
333
|
+
filenames_to_exclude=[self._cache_database_name],
|
|
334
|
+
)
|
|
335
|
+
+ output_size
|
|
336
|
+
> self._max_cache_size
|
|
337
|
+
):
|
|
338
|
+
self._drop_least_recently_used_item()
|
|
339
|
+
|
|
340
|
+
output_type = rasa.shared.utils.common.module_path_from_instance(output)
|
|
341
|
+
cache_path = shutil.move(temp_dir, self._cache_location)
|
|
342
|
+
|
|
343
|
+
return cache_path, output_type
|
|
344
|
+
|
|
345
|
+
def _drop_least_recently_used_item(self) -> None:
|
|
346
|
+
with self._sessionmaker.begin() as session:
|
|
347
|
+
query_for_least_recently_used_entry = sa.select(self.CacheEntry).order_by(
|
|
348
|
+
self.CacheEntry.last_used.asc()
|
|
349
|
+
)
|
|
350
|
+
oldest_cache_item = (
|
|
351
|
+
session.execute(query_for_least_recently_used_entry).scalars().first()
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
if not oldest_cache_item:
|
|
355
|
+
self._purge_cache_dir_content()
|
|
356
|
+
return
|
|
357
|
+
|
|
358
|
+
self._delete_cached_result(oldest_cache_item)
|
|
359
|
+
delete_query = sa.delete(self.CacheEntry).where(
|
|
360
|
+
self.CacheEntry.fingerprint_key == oldest_cache_item.fingerprint_key
|
|
361
|
+
)
|
|
362
|
+
session.execute(delete_query)
|
|
363
|
+
|
|
364
|
+
logger.debug(
|
|
365
|
+
f"Deleted item with fingerprint "
|
|
366
|
+
f"'{oldest_cache_item.fingerprint_key}' to free space."
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
def _purge_cache_dir_content(self) -> None:
|
|
370
|
+
for item in self._cache_location.glob("*"):
|
|
371
|
+
if item.name == self._cache_database_name:
|
|
372
|
+
continue
|
|
373
|
+
|
|
374
|
+
if item.is_dir():
|
|
375
|
+
shutil.rmtree(item)
|
|
376
|
+
else:
|
|
377
|
+
item.unlink()
|
|
378
|
+
|
|
379
|
+
def get_cached_output_fingerprint(self, fingerprint_key: Text) -> Optional[Text]:
|
|
380
|
+
"""Returns cached output fingerprint (see parent class for full docstring)."""
|
|
381
|
+
with self._sessionmaker.begin() as session:
|
|
382
|
+
query = sa.select(self.CacheEntry).filter_by(
|
|
383
|
+
fingerprint_key=fingerprint_key
|
|
384
|
+
)
|
|
385
|
+
match = session.execute(query).scalars().first()
|
|
386
|
+
|
|
387
|
+
if match:
|
|
388
|
+
# This result was used during a fingerprint run.
|
|
389
|
+
match.last_used = datetime.utcnow()
|
|
390
|
+
return match.output_fingerprint_key
|
|
391
|
+
|
|
392
|
+
return None
|
|
393
|
+
|
|
394
|
+
def get_cached_result(
|
|
395
|
+
self, output_fingerprint_key: Text, node_name: Text, model_storage: ModelStorage
|
|
396
|
+
) -> Optional[Cacheable]:
|
|
397
|
+
"""Returns a potentially cached output (see parent class for full docstring)."""
|
|
398
|
+
result_location, result_type = self._get_cached_result(output_fingerprint_key)
|
|
399
|
+
|
|
400
|
+
if not result_location:
|
|
401
|
+
logger.debug(f"No cached output found for '{output_fingerprint_key}'")
|
|
402
|
+
return None
|
|
403
|
+
|
|
404
|
+
path_to_cached = Path(result_location)
|
|
405
|
+
if not path_to_cached.is_dir():
|
|
406
|
+
logger.debug(
|
|
407
|
+
f"Cached output for '{output_fingerprint_key}' can't be found on disk."
|
|
408
|
+
)
|
|
409
|
+
return None
|
|
410
|
+
|
|
411
|
+
return self._load_from_cache(
|
|
412
|
+
result_location,
|
|
413
|
+
result_type,
|
|
414
|
+
node_name,
|
|
415
|
+
model_storage,
|
|
416
|
+
output_fingerprint_key,
|
|
417
|
+
)
|
|
418
|
+
|
|
419
|
+
def _get_cached_result(
|
|
420
|
+
self, output_fingerprint_key: Text
|
|
421
|
+
) -> Tuple[Optional[Path], Optional[Text]]:
|
|
422
|
+
with self._sessionmaker.begin() as session:
|
|
423
|
+
query = sa.select(
|
|
424
|
+
self.CacheEntry.result_location, self.CacheEntry.result_type
|
|
425
|
+
).where(
|
|
426
|
+
self.CacheEntry.output_fingerprint_key == output_fingerprint_key,
|
|
427
|
+
self.CacheEntry.result_location != sa.null(),
|
|
428
|
+
)
|
|
429
|
+
|
|
430
|
+
match = session.execute(query).first()
|
|
431
|
+
|
|
432
|
+
if match:
|
|
433
|
+
return Path(match.result_location), match.result_type
|
|
434
|
+
|
|
435
|
+
return None, None
|
|
436
|
+
|
|
437
|
+
@staticmethod
|
|
438
|
+
def _load_from_cache(
|
|
439
|
+
path_to_cached: Path,
|
|
440
|
+
result_type: Text,
|
|
441
|
+
node_name: Text,
|
|
442
|
+
model_storage: ModelStorage,
|
|
443
|
+
output_fingerprint_key: Text,
|
|
444
|
+
) -> Optional[Cacheable]:
|
|
445
|
+
try:
|
|
446
|
+
module = rasa.shared.utils.common.class_from_module_path(result_type)
|
|
447
|
+
|
|
448
|
+
if not isinstance(module, Cacheable):
|
|
449
|
+
logger.warning(
|
|
450
|
+
"Failed to restore a non cacheable module from cache. "
|
|
451
|
+
"Please implement the 'Cacheable' interface for module "
|
|
452
|
+
f"'{result_type}'."
|
|
453
|
+
)
|
|
454
|
+
return None
|
|
455
|
+
|
|
456
|
+
return module.from_cache(
|
|
457
|
+
node_name, path_to_cached, model_storage, output_fingerprint_key
|
|
458
|
+
)
|
|
459
|
+
except Exception as e:
|
|
460
|
+
logger.warning(
|
|
461
|
+
f"Failed to restore cached output of type '{result_type}' from "
|
|
462
|
+
f"cache. Error:\n{e}"
|
|
463
|
+
)
|
|
464
|
+
return None
|
rasa/engine/constants.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
from rasa.core.channels import UserMessage
|
|
4
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
5
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
6
|
+
from rasa.core.utils import AvailableEndpoints
|
|
7
|
+
|
|
8
|
+
PLACEHOLDER_IMPORTER = "__importer__"
|
|
9
|
+
PLACEHOLDER_MESSAGE = "__message__"
|
|
10
|
+
PLACEHOLDER_TRACKER = "__tracker__"
|
|
11
|
+
PLACEHOLDER_ENDPOINTS = "__endpoints__"
|
|
12
|
+
RESERVED_PLACEHOLDERS = {
|
|
13
|
+
PLACEHOLDER_IMPORTER: TrainingDataImporter,
|
|
14
|
+
PLACEHOLDER_MESSAGE: List[UserMessage],
|
|
15
|
+
PLACEHOLDER_TRACKER: DialogueStateTracker,
|
|
16
|
+
PLACEHOLDER_ENDPOINTS: Optional[AvailableEndpoints],
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class GraphRunError(Exception):
|
|
2
|
+
"""Exception class for errors originating when running a graph."""
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GraphComponentException(Exception):
|
|
6
|
+
"""Exception class for errors originating within a `GraphComponent`."""
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class GraphSchemaException(Exception):
|
|
10
|
+
"""Represents errors when dealing with `GraphSchema`s."""
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class GraphSchemaValidationException(Exception):
|
|
14
|
+
"""Indicates that the given graph schema is invalid."""
|