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
rasa/model_training.py
ADDED
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import time
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Text, NamedTuple, Optional, List, Union, Dict, Any
|
|
5
|
+
|
|
6
|
+
import randomname
|
|
7
|
+
import structlog
|
|
8
|
+
|
|
9
|
+
import rasa.engine.validation
|
|
10
|
+
from rasa.engine.caching import LocalTrainingCache
|
|
11
|
+
from rasa.engine.recipes.recipe import Recipe
|
|
12
|
+
from rasa.engine.runner.dask import DaskGraphRunner
|
|
13
|
+
from rasa.engine.storage.local_model_storage import LocalModelStorage
|
|
14
|
+
from rasa.engine.storage.storage import ModelStorage
|
|
15
|
+
from rasa.engine.training.components import FingerprintStatus
|
|
16
|
+
from rasa.engine.training.graph_trainer import GraphTrainer
|
|
17
|
+
from rasa.shared.core.events import SlotSet
|
|
18
|
+
from rasa.shared.core.training_data.structures import StoryGraph
|
|
19
|
+
from rasa.shared.data import TrainingType
|
|
20
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
21
|
+
from rasa import telemetry
|
|
22
|
+
from rasa.shared.core.domain import Domain
|
|
23
|
+
import rasa.utils.common
|
|
24
|
+
import rasa.shared.utils.common
|
|
25
|
+
import rasa.shared.utils.cli
|
|
26
|
+
import rasa.shared.exceptions
|
|
27
|
+
import rasa.shared.utils.io
|
|
28
|
+
import rasa.shared.constants
|
|
29
|
+
import rasa.model
|
|
30
|
+
|
|
31
|
+
CODE_NEEDS_TO_BE_RETRAINED = 0b0001
|
|
32
|
+
CODE_FORCED_TRAINING = 0b1000
|
|
33
|
+
CODE_NO_NEED_TO_TRAIN = 0b0000
|
|
34
|
+
|
|
35
|
+
structlogger = structlog.get_logger()
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class TrainingResult(NamedTuple):
|
|
39
|
+
"""Holds information about the results of training."""
|
|
40
|
+
|
|
41
|
+
model: Optional[Text] = None
|
|
42
|
+
code: int = 0
|
|
43
|
+
dry_run_results: Optional[Dict[Text, Union[FingerprintStatus, Any]]] = None
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _dry_run_result(
|
|
47
|
+
fingerprint_results: Dict[Text, Union[FingerprintStatus, Any]],
|
|
48
|
+
force_full_training: bool,
|
|
49
|
+
) -> TrainingResult:
|
|
50
|
+
"""Returns a dry run result.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
fingerprint_results: A result of fingerprint run..
|
|
54
|
+
force_full_training: Whether the user used the `--force` flag to enforce a
|
|
55
|
+
full retraining of the model.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
Result containing the return code and the fingerprint results.
|
|
59
|
+
"""
|
|
60
|
+
if force_full_training:
|
|
61
|
+
structlogger.warn(
|
|
62
|
+
"model_training.force_full_training", event_info="The training was forced."
|
|
63
|
+
)
|
|
64
|
+
return TrainingResult(
|
|
65
|
+
code=CODE_FORCED_TRAINING, dry_run_results=fingerprint_results
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
training_required = any(
|
|
69
|
+
isinstance(result, FingerprintStatus) and not result.is_hit
|
|
70
|
+
for result in fingerprint_results.values()
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
if training_required:
|
|
74
|
+
structlogger.warn(
|
|
75
|
+
"model_training.training_required",
|
|
76
|
+
event_info="The model needs to be retrained.",
|
|
77
|
+
)
|
|
78
|
+
return TrainingResult(
|
|
79
|
+
code=CODE_NEEDS_TO_BE_RETRAINED, dry_run_results=fingerprint_results
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
structlogger.info(
|
|
83
|
+
"model_training.no_training_required",
|
|
84
|
+
event_info=(
|
|
85
|
+
"No training of components required "
|
|
86
|
+
"(the responses might still need updating!)."
|
|
87
|
+
),
|
|
88
|
+
)
|
|
89
|
+
return TrainingResult(
|
|
90
|
+
code=CODE_NO_NEED_TO_TRAIN, dry_run_results=fingerprint_results
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def get_unresolved_slots(domain: Domain, stories: StoryGraph) -> List[Text]:
|
|
95
|
+
"""Returns a list of unresolved slots.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
domain: The domain.
|
|
99
|
+
stories: The story graph.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
A list of unresolved slots.
|
|
103
|
+
"""
|
|
104
|
+
return list(
|
|
105
|
+
set(
|
|
106
|
+
evnt.key
|
|
107
|
+
for step in stories.story_steps
|
|
108
|
+
for evnt in step.events
|
|
109
|
+
if isinstance(evnt, SlotSet)
|
|
110
|
+
)
|
|
111
|
+
- set(slot.name for slot in domain.slots)
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def _check_unresolved_slots(domain: Domain, stories: StoryGraph) -> None:
|
|
116
|
+
"""Checks if there are any unresolved slots.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
domain: The domain.
|
|
120
|
+
stories: The story graph.
|
|
121
|
+
|
|
122
|
+
Raises:
|
|
123
|
+
`Sys exit` if there are any unresolved slots.
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
`None` if there are no unresolved slots.
|
|
127
|
+
"""
|
|
128
|
+
unresolved_slots = get_unresolved_slots(domain, stories)
|
|
129
|
+
if unresolved_slots:
|
|
130
|
+
structlogger.error(
|
|
131
|
+
"model.training.check_unresolved_slots.not_in_domain",
|
|
132
|
+
slots=unresolved_slots,
|
|
133
|
+
event_info=(
|
|
134
|
+
f"Unresolved slots found in stories/rules🚨 \n"
|
|
135
|
+
f'Tried to set slots "{unresolved_slots}" that are not present in'
|
|
136
|
+
f"your domain.\n Check whether they need to be added to the domain or "
|
|
137
|
+
f"whether there is a spelling error."
|
|
138
|
+
),
|
|
139
|
+
)
|
|
140
|
+
sys.exit(1)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
async def train(
|
|
144
|
+
domain: Text,
|
|
145
|
+
config: Text,
|
|
146
|
+
training_files: Optional[Union[Text, List[Text]]],
|
|
147
|
+
output: Text = rasa.shared.constants.DEFAULT_MODELS_PATH,
|
|
148
|
+
dry_run: bool = False,
|
|
149
|
+
force_training: bool = False,
|
|
150
|
+
fixed_model_name: Optional[Text] = None,
|
|
151
|
+
persist_nlu_training_data: bool = False,
|
|
152
|
+
core_additional_arguments: Optional[Dict] = None,
|
|
153
|
+
nlu_additional_arguments: Optional[Dict] = None,
|
|
154
|
+
model_to_finetune: Optional[Text] = None,
|
|
155
|
+
finetuning_epoch_fraction: float = 1.0,
|
|
156
|
+
) -> TrainingResult:
|
|
157
|
+
"""Trains a Rasa model (Core and NLU).
|
|
158
|
+
|
|
159
|
+
Args:
|
|
160
|
+
domain: Path to the domain file.
|
|
161
|
+
config: Path to the config file.
|
|
162
|
+
training_files: List of paths to training data files.
|
|
163
|
+
output: Output directory for the trained model.
|
|
164
|
+
dry_run: If `True` then no training will be done, and the information about
|
|
165
|
+
whether the training needs to be done will be printed.
|
|
166
|
+
force_training: If `True` retrain model even if data has not changed.
|
|
167
|
+
fixed_model_name: Name of model to be stored.
|
|
168
|
+
persist_nlu_training_data: `True` if the NLU training data should be persisted
|
|
169
|
+
with the model.
|
|
170
|
+
core_additional_arguments: Additional training parameters for core training.
|
|
171
|
+
nlu_additional_arguments: Additional training parameters forwarded to training
|
|
172
|
+
method of each NLU component.
|
|
173
|
+
model_to_finetune: Optional path to a model which should be finetuned or
|
|
174
|
+
a directory in case the latest trained model should be used.
|
|
175
|
+
finetuning_epoch_fraction: The fraction currently specified training epochs
|
|
176
|
+
in the model configuration which should be used for finetuning.
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
An instance of `TrainingResult`.
|
|
180
|
+
"""
|
|
181
|
+
file_importer = TrainingDataImporter.load_from_config(
|
|
182
|
+
config, domain, training_files, core_additional_arguments
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
stories = file_importer.get_stories()
|
|
186
|
+
flows = file_importer.get_flows()
|
|
187
|
+
nlu_data = file_importer.get_nlu_data()
|
|
188
|
+
|
|
189
|
+
training_type = TrainingType.BOTH
|
|
190
|
+
|
|
191
|
+
if nlu_data.has_e2e_examples():
|
|
192
|
+
rasa.shared.utils.common.mark_as_experimental_feature("end-to-end training")
|
|
193
|
+
training_type = TrainingType.END_TO_END
|
|
194
|
+
|
|
195
|
+
if stories.is_empty() and nlu_data.contains_no_pure_nlu_data() and flows.is_empty():
|
|
196
|
+
structlogger.error(
|
|
197
|
+
"model_training.train.no_training_data_found",
|
|
198
|
+
event_info=(
|
|
199
|
+
"No training data given. Please provide "
|
|
200
|
+
"stories, flows or NLU data in "
|
|
201
|
+
"order to train a Rasa model using the "
|
|
202
|
+
"'--data' argument."
|
|
203
|
+
),
|
|
204
|
+
)
|
|
205
|
+
return TrainingResult(code=1)
|
|
206
|
+
|
|
207
|
+
domain_object = file_importer.get_domain()
|
|
208
|
+
if domain_object.is_empty():
|
|
209
|
+
structlogger.warn(
|
|
210
|
+
"model_training.train.domain_not_found",
|
|
211
|
+
event_info=(
|
|
212
|
+
"Core training was skipped because no "
|
|
213
|
+
"valid domain file was found. Only an "
|
|
214
|
+
"NLU-model was created. Please specify "
|
|
215
|
+
"a valid domain using the '--domain' "
|
|
216
|
+
"argument or check if the provided domain "
|
|
217
|
+
"file exists."
|
|
218
|
+
),
|
|
219
|
+
)
|
|
220
|
+
training_type = TrainingType.NLU
|
|
221
|
+
|
|
222
|
+
elif stories.is_empty() and flows.is_empty():
|
|
223
|
+
structlogger.warn(
|
|
224
|
+
"model_training.train.flows_and_stories_not_found",
|
|
225
|
+
event_info=(
|
|
226
|
+
"No stories or flows present. Just a " "Rasa NLU model will be trained."
|
|
227
|
+
),
|
|
228
|
+
)
|
|
229
|
+
training_type = TrainingType.NLU
|
|
230
|
+
|
|
231
|
+
# We will train nlu if there are any nlu example, including from e2e stories.
|
|
232
|
+
elif (
|
|
233
|
+
nlu_data.contains_no_pure_nlu_data()
|
|
234
|
+
and not nlu_data.has_e2e_examples()
|
|
235
|
+
and flows.is_empty()
|
|
236
|
+
):
|
|
237
|
+
structlogger.warn(
|
|
238
|
+
"model_training.train.nlu_data_not_found",
|
|
239
|
+
event_info="No NLU data present. No NLU model will be trained.",
|
|
240
|
+
)
|
|
241
|
+
training_type = TrainingType.CORE
|
|
242
|
+
|
|
243
|
+
_check_unresolved_slots(domain_object, stories)
|
|
244
|
+
|
|
245
|
+
with telemetry.track_model_training(file_importer, model_type="rasa"):
|
|
246
|
+
return await _train_graph(
|
|
247
|
+
file_importer,
|
|
248
|
+
training_type=training_type,
|
|
249
|
+
output_path=output,
|
|
250
|
+
fixed_model_name=fixed_model_name,
|
|
251
|
+
model_to_finetune=model_to_finetune,
|
|
252
|
+
force_full_training=force_training,
|
|
253
|
+
persist_nlu_training_data=persist_nlu_training_data,
|
|
254
|
+
finetuning_epoch_fraction=finetuning_epoch_fraction,
|
|
255
|
+
dry_run=dry_run,
|
|
256
|
+
**(core_additional_arguments or {}),
|
|
257
|
+
**(nlu_additional_arguments or {}),
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
async def _train_graph(
|
|
262
|
+
file_importer: TrainingDataImporter,
|
|
263
|
+
training_type: TrainingType,
|
|
264
|
+
output_path: Text,
|
|
265
|
+
fixed_model_name: Text,
|
|
266
|
+
model_to_finetune: Optional[Union[Text, Path]] = None,
|
|
267
|
+
force_full_training: bool = False,
|
|
268
|
+
dry_run: bool = False,
|
|
269
|
+
**kwargs: Any,
|
|
270
|
+
) -> TrainingResult:
|
|
271
|
+
if model_to_finetune:
|
|
272
|
+
model_to_finetune = rasa.model.get_model_for_finetuning(model_to_finetune)
|
|
273
|
+
if not model_to_finetune:
|
|
274
|
+
structlogger.error(
|
|
275
|
+
"model_training.train.finetuning_model_not_found",
|
|
276
|
+
event_info=(
|
|
277
|
+
f"No model for finetuning found. Please make sure to either "
|
|
278
|
+
f"specify a path to a previous model or to have a finetunable "
|
|
279
|
+
f"model within the directory '{output_path}'."
|
|
280
|
+
),
|
|
281
|
+
)
|
|
282
|
+
sys.exit(1)
|
|
283
|
+
|
|
284
|
+
rasa.shared.utils.common.mark_as_experimental_feature(
|
|
285
|
+
"Incremental Training feature"
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
is_finetuning = model_to_finetune is not None
|
|
289
|
+
|
|
290
|
+
config = file_importer.get_config()
|
|
291
|
+
recipe = Recipe.recipe_for_name(config.get("recipe"))
|
|
292
|
+
config, _missing_keys, _configured_keys = recipe.auto_configure(
|
|
293
|
+
file_importer.get_config_file_for_auto_config(),
|
|
294
|
+
config,
|
|
295
|
+
training_type,
|
|
296
|
+
)
|
|
297
|
+
flows = file_importer.get_flows()
|
|
298
|
+
domain = file_importer.get_domain()
|
|
299
|
+
model_configuration = recipe.graph_config_for_recipe(
|
|
300
|
+
config,
|
|
301
|
+
kwargs,
|
|
302
|
+
training_type=training_type,
|
|
303
|
+
is_finetuning=is_finetuning,
|
|
304
|
+
)
|
|
305
|
+
rasa.engine.validation.validate(model_configuration)
|
|
306
|
+
rasa.engine.validation.validate_coexistance_routing_setup(
|
|
307
|
+
domain, model_configuration, flows
|
|
308
|
+
)
|
|
309
|
+
rasa.engine.validation.validate_flow_component_dependencies(
|
|
310
|
+
flows, model_configuration
|
|
311
|
+
)
|
|
312
|
+
rasa.engine.validation.validate_command_generator_setup(model_configuration)
|
|
313
|
+
|
|
314
|
+
tempdir_name = rasa.utils.common.get_temp_dir_name()
|
|
315
|
+
# Use `TempDirectoryPath` instead of `tempfile.TemporaryDirectory` as this
|
|
316
|
+
# leads to errors on Windows when the context manager tries to delete an
|
|
317
|
+
# already deleted temporary directory (e.g. https://bugs.python.org/issue29982)
|
|
318
|
+
with rasa.utils.common.TempDirectoryPath(tempdir_name) as temp_model_dir:
|
|
319
|
+
model_storage = _create_model_storage(
|
|
320
|
+
is_finetuning, model_to_finetune, Path(temp_model_dir)
|
|
321
|
+
)
|
|
322
|
+
cache = LocalTrainingCache()
|
|
323
|
+
trainer = GraphTrainer(model_storage, cache, DaskGraphRunner)
|
|
324
|
+
|
|
325
|
+
if dry_run:
|
|
326
|
+
fingerprint_status = await trainer.fingerprint(
|
|
327
|
+
model_configuration.train_schema, file_importer
|
|
328
|
+
)
|
|
329
|
+
return _dry_run_result(fingerprint_status, force_full_training)
|
|
330
|
+
|
|
331
|
+
model_name = _determine_model_name(fixed_model_name, training_type)
|
|
332
|
+
full_model_path = Path(output_path, model_name)
|
|
333
|
+
|
|
334
|
+
with telemetry.track_model_training(
|
|
335
|
+
file_importer, model_type=training_type.model_type
|
|
336
|
+
):
|
|
337
|
+
await trainer.train(
|
|
338
|
+
model_configuration,
|
|
339
|
+
file_importer,
|
|
340
|
+
full_model_path,
|
|
341
|
+
force_retraining=force_full_training,
|
|
342
|
+
is_finetuning=is_finetuning,
|
|
343
|
+
)
|
|
344
|
+
structlogger.info(
|
|
345
|
+
"model_training.train.finished_training",
|
|
346
|
+
event_info=(
|
|
347
|
+
f"Your Rasa model is trained " f"and saved at '{full_model_path}'."
|
|
348
|
+
),
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
return TrainingResult(str(full_model_path), 0)
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
def _create_model_storage(
|
|
355
|
+
is_finetuning: bool, model_to_finetune: Optional[Path], temp_model_dir: Path
|
|
356
|
+
) -> ModelStorage:
|
|
357
|
+
if is_finetuning:
|
|
358
|
+
model_storage, _ = LocalModelStorage.from_model_archive(
|
|
359
|
+
temp_model_dir, model_to_finetune
|
|
360
|
+
)
|
|
361
|
+
else:
|
|
362
|
+
model_storage = LocalModelStorage(temp_model_dir)
|
|
363
|
+
|
|
364
|
+
return model_storage
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
def _determine_model_name(
|
|
368
|
+
fixed_model_name: Optional[Text], training_type: TrainingType
|
|
369
|
+
) -> Text:
|
|
370
|
+
if fixed_model_name:
|
|
371
|
+
if not fixed_model_name.endswith(".tar.gz"):
|
|
372
|
+
return f"{fixed_model_name}.tar.gz"
|
|
373
|
+
return fixed_model_name
|
|
374
|
+
|
|
375
|
+
prefix = ""
|
|
376
|
+
if training_type in [TrainingType.CORE, TrainingType.NLU]:
|
|
377
|
+
prefix = f"{training_type.model_type}-"
|
|
378
|
+
|
|
379
|
+
time_format = "%Y%m%d-%H%M%S"
|
|
380
|
+
return f"{prefix}{time.strftime(time_format)}-{randomname.get_name()}.tar.gz"
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
async def train_core(
|
|
384
|
+
domain: Union[Domain, Text],
|
|
385
|
+
config: Text,
|
|
386
|
+
stories: Text,
|
|
387
|
+
output: Text,
|
|
388
|
+
fixed_model_name: Optional[Text] = None,
|
|
389
|
+
additional_arguments: Optional[Dict] = None,
|
|
390
|
+
model_to_finetune: Optional[Text] = None,
|
|
391
|
+
finetuning_epoch_fraction: float = 1.0,
|
|
392
|
+
) -> Optional[Text]:
|
|
393
|
+
"""Trains a Core model.
|
|
394
|
+
|
|
395
|
+
Args:
|
|
396
|
+
domain: Path to the domain file.
|
|
397
|
+
config: Path to the config file for Core.
|
|
398
|
+
stories: Path to the Core training data.
|
|
399
|
+
output: Output path.
|
|
400
|
+
fixed_model_name: Name of model to be stored.
|
|
401
|
+
additional_arguments: Additional training parameters.
|
|
402
|
+
model_to_finetune: Optional path to a model which should be finetuned or
|
|
403
|
+
a directory in case the latest trained model should be used.
|
|
404
|
+
finetuning_epoch_fraction: The fraction currently specified training epochs
|
|
405
|
+
in the model configuration which should be used for finetuning.
|
|
406
|
+
|
|
407
|
+
Returns:
|
|
408
|
+
Path to the model archive.
|
|
409
|
+
|
|
410
|
+
"""
|
|
411
|
+
file_importer = TrainingDataImporter.load_core_importer_from_config(
|
|
412
|
+
config, domain, [stories], additional_arguments
|
|
413
|
+
)
|
|
414
|
+
stories_data = file_importer.get_stories()
|
|
415
|
+
nlu_data = file_importer.get_nlu_data()
|
|
416
|
+
domain = file_importer.get_domain()
|
|
417
|
+
|
|
418
|
+
if nlu_data.has_e2e_examples():
|
|
419
|
+
structlogger.error(
|
|
420
|
+
"model_training.train_core.e2e_stories_found",
|
|
421
|
+
event_info=(
|
|
422
|
+
"Stories file contains e2e stories. "
|
|
423
|
+
"Please train using `rasa train` so that "
|
|
424
|
+
"the NLU model is also trained."
|
|
425
|
+
),
|
|
426
|
+
)
|
|
427
|
+
return None
|
|
428
|
+
|
|
429
|
+
if domain.is_empty():
|
|
430
|
+
structlogger.error(
|
|
431
|
+
"model_training.train_core.domain_not_found",
|
|
432
|
+
event_info=(
|
|
433
|
+
"Core training was skipped because no valid "
|
|
434
|
+
"domain file was found. Please specify a valid "
|
|
435
|
+
"domain using '--domain' argument or check "
|
|
436
|
+
"if the provided domain file exists."
|
|
437
|
+
),
|
|
438
|
+
)
|
|
439
|
+
return None
|
|
440
|
+
|
|
441
|
+
if not stories_data:
|
|
442
|
+
structlogger.error(
|
|
443
|
+
"model_training.train_core.stories_not_found",
|
|
444
|
+
event_info=(
|
|
445
|
+
"No stories given. Please provide stories in order to "
|
|
446
|
+
"train a Rasa Core model using the '--stories' argument."
|
|
447
|
+
),
|
|
448
|
+
)
|
|
449
|
+
return None
|
|
450
|
+
|
|
451
|
+
_check_unresolved_slots(domain, stories_data)
|
|
452
|
+
|
|
453
|
+
return (
|
|
454
|
+
await _train_graph(
|
|
455
|
+
file_importer,
|
|
456
|
+
training_type=TrainingType.CORE,
|
|
457
|
+
output_path=output,
|
|
458
|
+
model_to_finetune=model_to_finetune,
|
|
459
|
+
fixed_model_name=fixed_model_name,
|
|
460
|
+
finetuning_epoch_fraction=finetuning_epoch_fraction,
|
|
461
|
+
**(additional_arguments or {}),
|
|
462
|
+
)
|
|
463
|
+
).model
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
async def train_nlu(
|
|
467
|
+
config: Text,
|
|
468
|
+
nlu_data: Optional[Text],
|
|
469
|
+
output: Text,
|
|
470
|
+
fixed_model_name: Optional[Text] = None,
|
|
471
|
+
persist_nlu_training_data: bool = False,
|
|
472
|
+
additional_arguments: Optional[Dict] = None,
|
|
473
|
+
domain: Optional[Union[Domain, Text]] = None,
|
|
474
|
+
model_to_finetune: Optional[Text] = None,
|
|
475
|
+
finetuning_epoch_fraction: float = 1.0,
|
|
476
|
+
) -> Optional[Text]:
|
|
477
|
+
"""Trains an NLU model.
|
|
478
|
+
|
|
479
|
+
Args:
|
|
480
|
+
config: Path to the config file for NLU.
|
|
481
|
+
nlu_data: Path to the NLU training data.
|
|
482
|
+
output: Output path.
|
|
483
|
+
fixed_model_name: Name of the model to be stored.
|
|
484
|
+
persist_nlu_training_data: `True` if the NLU training data should be persisted
|
|
485
|
+
with the model.
|
|
486
|
+
additional_arguments: Additional training parameters which will be passed to
|
|
487
|
+
the `train` method of each component.
|
|
488
|
+
domain: Path to the optional domain file/Domain object.
|
|
489
|
+
model_to_finetune: Optional path to a model which should be finetuned or
|
|
490
|
+
a directory in case the latest trained model should be used.
|
|
491
|
+
finetuning_epoch_fraction: The fraction currently specified training epochs
|
|
492
|
+
in the model configuration which should be used for finetuning.
|
|
493
|
+
|
|
494
|
+
Returns:
|
|
495
|
+
Path to the model archive.
|
|
496
|
+
"""
|
|
497
|
+
if not nlu_data:
|
|
498
|
+
structlogger.error(
|
|
499
|
+
"model_training.train_nlu.nlu_data_not_found",
|
|
500
|
+
event_info=(
|
|
501
|
+
"No NLU data given. Please provide NLU data in order to train "
|
|
502
|
+
"a Rasa NLU model using the '--nlu' argument."
|
|
503
|
+
),
|
|
504
|
+
)
|
|
505
|
+
return None
|
|
506
|
+
|
|
507
|
+
# training NLU only hence the training files still have to be selected
|
|
508
|
+
file_importer = TrainingDataImporter.load_nlu_importer_from_config(
|
|
509
|
+
config, domain, training_data_paths=[nlu_data], args=additional_arguments
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
training_data = file_importer.get_nlu_data()
|
|
513
|
+
if training_data.contains_no_pure_nlu_data():
|
|
514
|
+
structlogger.error(
|
|
515
|
+
"model_training.train_nlu.nlu_data_invalid",
|
|
516
|
+
path=nlu_data,
|
|
517
|
+
event_info=(
|
|
518
|
+
f"Path '{nlu_data}' doesn't contain valid NLU data in it. "
|
|
519
|
+
f"Please verify the data format. "
|
|
520
|
+
f"The NLU model training will be skipped now."
|
|
521
|
+
),
|
|
522
|
+
)
|
|
523
|
+
return None
|
|
524
|
+
|
|
525
|
+
return (
|
|
526
|
+
await _train_graph(
|
|
527
|
+
file_importer,
|
|
528
|
+
training_type=TrainingType.NLU,
|
|
529
|
+
output_path=output,
|
|
530
|
+
model_to_finetune=model_to_finetune,
|
|
531
|
+
fixed_model_name=fixed_model_name,
|
|
532
|
+
finetuning_epoch_fraction=finetuning_epoch_fraction,
|
|
533
|
+
persist_nlu_training_data=persist_nlu_training_data,
|
|
534
|
+
**(additional_arguments or {}),
|
|
535
|
+
)
|
|
536
|
+
).model
|
rasa/nlu/__init__.py
ADDED