rasa-pro 3.12.0.dev1__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 +41 -0
- rasa/__init__.py +9 -0
- rasa/__main__.py +177 -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 +160 -0
- rasa/cli/__init__.py +5 -0
- rasa/cli/arguments/__init__.py +0 -0
- rasa/cli/arguments/data.py +106 -0
- rasa/cli/arguments/default_arguments.py +207 -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 +219 -0
- rasa/cli/arguments/shell.py +17 -0
- rasa/cli/arguments/test.py +211 -0
- rasa/cli/arguments/train.py +279 -0
- rasa/cli/arguments/visualize.py +34 -0
- rasa/cli/arguments/x.py +30 -0
- rasa/cli/data.py +354 -0
- rasa/cli/dialogue_understanding_test.py +251 -0
- rasa/cli/e2e_test.py +259 -0
- rasa/cli/evaluate.py +222 -0
- rasa/cli/export.py +250 -0
- rasa/cli/inspect.py +75 -0
- rasa/cli/interactive.py +166 -0
- rasa/cli/license.py +65 -0
- rasa/cli/llm_fine_tuning.py +403 -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 +10 -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 +58 -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/__init__.py +0 -0
- rasa/cli/project_templates/tutorial/actions/actions.py +22 -0
- rasa/cli/project_templates/tutorial/config.yml +12 -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 +11 -0
- rasa/cli/project_templates/tutorial/domain.yml +35 -0
- rasa/cli/project_templates/tutorial/endpoints.yml +55 -0
- rasa/cli/run.py +143 -0
- rasa/cli/scaffold.py +273 -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 +296 -0
- rasa/cli/studio/train.py +59 -0
- rasa/cli/studio/upload.py +62 -0
- rasa/cli/telemetry.py +102 -0
- rasa/cli/test.py +280 -0
- rasa/cli/train.py +278 -0
- rasa/cli/utils.py +484 -0
- rasa/cli/visualize.py +40 -0
- rasa/cli/x.py +206 -0
- rasa/constants.py +45 -0
- rasa/core/__init__.py +17 -0
- rasa/core/actions/__init__.py +0 -0
- rasa/core/actions/action.py +1318 -0
- rasa/core/actions/action_clean_stack.py +59 -0
- rasa/core/actions/action_exceptions.py +24 -0
- rasa/core/actions/action_hangup.py +29 -0
- rasa/core/actions/action_repeat_bot_messages.py +89 -0
- rasa/core/actions/action_run_slot_rejections.py +210 -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 +191 -0
- rasa/core/actions/direct_custom_actions_executor.py +109 -0
- rasa/core/actions/e2e_stub_custom_action_executor.py +72 -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 +145 -0
- rasa/core/actions/loops.py +114 -0
- rasa/core/actions/two_stage_fallback.py +186 -0
- rasa/core/agent.py +559 -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 +324 -0
- rasa/core/brokers/pika.py +388 -0
- rasa/core/brokers/sql.py +86 -0
- rasa/core/channels/__init__.py +61 -0
- rasa/core/channels/botframework.py +338 -0
- rasa/core/channels/callback.py +84 -0
- rasa/core/channels/channel.py +456 -0
- rasa/core/channels/console.py +241 -0
- rasa/core/channels/development_inspector.py +197 -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-861ddd57.js +1 -0
- rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-921f02db.js +10 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-b436c4f8.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-511a23cb.js +2 -0
- rasa/core/channels/inspector/dist/assets/createText-62fc7601-ef476ecd.js +7 -0
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-f1878e0a.js +4 -0
- rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-fac75185.js +51 -0
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-201c5bbc.js +6 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-f904ae41.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-1813da66.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-872af172.js +266 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-34a0af5a.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-42ba3e3d.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-37817b51.js +1317 -0
- rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
- rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-6b731386.js +7 -0
- rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
- rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-e8579ac6.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-89e6403a.js +1 -0
- rasa/core/channels/inspector/dist/assets/line-dc73d3fc.js +1 -0
- rasa/core/channels/inspector/dist/assets/linear-f5b1d2bc.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-82cb74fa.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-bdf5f29b.js +35 -0
- rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-c7a0cbe4.js +7 -0
- rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-7ec5410f.js +52 -0
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-caee5554.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-2935f8db.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-8f5d9693.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-d565d1de.js +1 -0
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-75ad421d.js +110 -0
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-7e764226.js +159 -0
- rasa/core/channels/inspector/dist/assets/styles-9c745c82-7a4e0e61.js +207 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-4019d1bf.js +1 -0
- rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-01ea12df.js +61 -0
- rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-89407137.js +7 -0
- rasa/core/channels/inspector/dist/index.html +42 -0
- rasa/core/channels/inspector/index.html +40 -0
- rasa/core/channels/inspector/jest.config.ts +13 -0
- rasa/core/channels/inspector/package.json +52 -0
- rasa/core/channels/inspector/setupTests.ts +2 -0
- rasa/core/channels/inspector/src/App.tsx +220 -0
- rasa/core/channels/inspector/src/components/Chat.tsx +95 -0
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +108 -0
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +136 -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 +22 -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/audiostream.ts +191 -0
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +392 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +306 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +127 -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 +84 -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 +6249 -0
- rasa/core/channels/mattermost.py +229 -0
- rasa/core/channels/rasa_chat.py +126 -0
- rasa/core/channels/rest.py +230 -0
- rasa/core/channels/rocketchat.py +174 -0
- rasa/core/channels/slack.py +620 -0
- rasa/core/channels/socketio.py +302 -0
- rasa/core/channels/telegram.py +298 -0
- rasa/core/channels/twilio.py +169 -0
- rasa/core/channels/vier_cvg.py +374 -0
- rasa/core/channels/voice_ready/__init__.py +0 -0
- rasa/core/channels/voice_ready/audiocodes.py +501 -0
- rasa/core/channels/voice_ready/jambonz.py +121 -0
- rasa/core/channels/voice_ready/jambonz_protocol.py +396 -0
- rasa/core/channels/voice_ready/twilio_voice.py +403 -0
- rasa/core/channels/voice_ready/utils.py +37 -0
- rasa/core/channels/voice_stream/__init__.py +0 -0
- rasa/core/channels/voice_stream/asr/__init__.py +0 -0
- rasa/core/channels/voice_stream/asr/asr_engine.py +89 -0
- rasa/core/channels/voice_stream/asr/asr_event.py +18 -0
- rasa/core/channels/voice_stream/asr/azure.py +130 -0
- rasa/core/channels/voice_stream/asr/deepgram.py +90 -0
- rasa/core/channels/voice_stream/audio_bytes.py +8 -0
- rasa/core/channels/voice_stream/browser_audio.py +107 -0
- rasa/core/channels/voice_stream/call_state.py +23 -0
- rasa/core/channels/voice_stream/tts/__init__.py +0 -0
- rasa/core/channels/voice_stream/tts/azure.py +106 -0
- rasa/core/channels/voice_stream/tts/cartesia.py +118 -0
- rasa/core/channels/voice_stream/tts/tts_cache.py +27 -0
- rasa/core/channels/voice_stream/tts/tts_engine.py +58 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +173 -0
- rasa/core/channels/voice_stream/util.py +57 -0
- rasa/core/channels/voice_stream/voice_channel.py +427 -0
- rasa/core/channels/webexteams.py +134 -0
- rasa/core/concurrent_lock_store.py +210 -0
- rasa/core/constants.py +112 -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 +124 -0
- rasa/core/information_retrieval/information_retrieval.py +137 -0
- rasa/core/information_retrieval/milvus.py +59 -0
- rasa/core/information_retrieval/qdrant.py +96 -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 +320 -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 +70 -0
- rasa/core/persistor.py +538 -0
- rasa/core/policies/__init__.py +0 -0
- rasa/core/policies/ensemble.py +329 -0
- rasa/core/policies/enterprise_search_policy.py +905 -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 +754 -0
- rasa/core/policies/flows/flow_step_result.py +43 -0
- rasa/core/policies/intentless_policy.py +1031 -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 +1465 -0
- rasa/core/run.py +342 -0
- rasa/core/secrets_manager/__init__.py +0 -0
- rasa/core/secrets_manager/constants.py +36 -0
- rasa/core/secrets_manager/endpoints.py +391 -0
- rasa/core/secrets_manager/factory.py +241 -0
- rasa/core/secrets_manager/secret_manager.py +262 -0
- rasa/core/secrets_manager/vault.py +584 -0
- rasa/core/test.py +1335 -0
- rasa/core/tracker_store.py +1703 -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 +1744 -0
- rasa/core/training/story_conflict.py +381 -0
- rasa/core/training/training.py +93 -0
- rasa/core/utils.py +366 -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 +327 -0
- rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
- rasa/dialogue_understanding/commands/__init__.py +61 -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/repeat_bot_messages_command.py +60 -0
- rasa/dialogue_understanding/commands/restart_command.py +58 -0
- rasa/dialogue_understanding/commands/session_end_command.py +61 -0
- rasa/dialogue_understanding/commands/session_start_command.py +59 -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/commands/user_silence_command.py +59 -0
- rasa/dialogue_understanding/commands/utils.py +45 -0
- rasa/dialogue_understanding/generator/__init__.py +21 -0
- rasa/dialogue_understanding/generator/command_generator.py +464 -0
- rasa/dialogue_understanding/generator/constants.py +27 -0
- rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +466 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +500 -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 +920 -0
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +261 -0
- rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
- rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +60 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +486 -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 +301 -0
- rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
- rasa/dialogue_understanding/patterns/internal_error.py +47 -0
- rasa/dialogue_understanding/patterns/repeat.py +37 -0
- rasa/dialogue_understanding/patterns/restart.py +37 -0
- rasa/dialogue_understanding/patterns/search.py +37 -0
- rasa/dialogue_understanding/patterns/session_start.py +37 -0
- rasa/dialogue_understanding/patterns/skip_question.py +38 -0
- rasa/dialogue_understanding/patterns/user_silence.py +37 -0
- rasa/dialogue_understanding/processor/__init__.py +0 -0
- rasa/dialogue_understanding/processor/command_processor.py +720 -0
- rasa/dialogue_understanding/processor/command_processor_component.py +43 -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/dialogue_understanding/utils.py +14 -0
- rasa/dialogue_understanding_test/__init__.py +0 -0
- rasa/dialogue_understanding_test/command_metric_calculation.py +12 -0
- rasa/dialogue_understanding_test/constants.py +17 -0
- rasa/dialogue_understanding_test/du_test_case.py +118 -0
- rasa/dialogue_understanding_test/du_test_result.py +11 -0
- rasa/dialogue_understanding_test/du_test_runner.py +93 -0
- rasa/dialogue_understanding_test/io.py +54 -0
- rasa/dialogue_understanding_test/validation.py +22 -0
- rasa/e2e_test/__init__.py +0 -0
- rasa/e2e_test/aggregate_test_stats_calculator.py +134 -0
- rasa/e2e_test/assertions.py +1345 -0
- rasa/e2e_test/assertions_schema.yml +129 -0
- rasa/e2e_test/constants.py +31 -0
- rasa/e2e_test/e2e_config.py +220 -0
- rasa/e2e_test/e2e_config_schema.yml +26 -0
- rasa/e2e_test/e2e_test_case.py +569 -0
- rasa/e2e_test/e2e_test_converter.py +363 -0
- rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
- rasa/e2e_test/e2e_test_coverage_report.py +364 -0
- rasa/e2e_test/e2e_test_result.py +54 -0
- rasa/e2e_test/e2e_test_runner.py +1192 -0
- rasa/e2e_test/e2e_test_schema.yml +181 -0
- rasa/e2e_test/pykwalify_extensions.py +39 -0
- rasa/e2e_test/stub_custom_action.py +70 -0
- rasa/e2e_test/utils/__init__.py +0 -0
- rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
- rasa/e2e_test/utils/io.py +598 -0
- rasa/e2e_test/utils/validation.py +178 -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 +642 -0
- rasa/engine/loader.py +48 -0
- rasa/engine/recipes/__init__.py +0 -0
- rasa/engine/recipes/config_files/default_config.yml +41 -0
- rasa/engine/recipes/default_components.py +97 -0
- rasa/engine/recipes/default_recipe.py +1272 -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 +244 -0
- rasa/engine/storage/resource.py +110 -0
- rasa/engine/storage/storage.py +199 -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 +1451 -0
- rasa/env.py +14 -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 +96 -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 +111 -0
- rasa/jupyter.py +63 -0
- rasa/llm_fine_tuning/__init__.py +0 -0
- rasa/llm_fine_tuning/annotation_module.py +241 -0
- rasa/llm_fine_tuning/conversations.py +144 -0
- rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
- rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
- rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
- rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
- rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
- rasa/llm_fine_tuning/storage.py +174 -0
- rasa/llm_fine_tuning/train_test_split_module.py +441 -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_manager/__init__.py +0 -0
- rasa/model_manager/config.py +40 -0
- rasa/model_manager/model_api.py +559 -0
- rasa/model_manager/runner_service.py +286 -0
- rasa/model_manager/socket_bridge.py +146 -0
- rasa/model_manager/studio_jwt_auth.py +86 -0
- rasa/model_manager/trainer_service.py +325 -0
- rasa/model_manager/utils.py +87 -0
- rasa/model_manager/warm_rasa_process.py +187 -0
- rasa/model_service.py +112 -0
- rasa/model_testing.py +457 -0
- rasa/model_training.py +596 -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/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/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 +95 -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 +1588 -0
- rasa/shared/__init__.py +0 -0
- rasa/shared/constants.py +311 -0
- rasa/shared/core/__init__.py +0 -0
- rasa/shared/core/command_payload_reader.py +109 -0
- rasa/shared/core/constants.py +180 -0
- rasa/shared/core/conversation.py +46 -0
- rasa/shared/core/domain.py +2172 -0
- rasa/shared/core/events.py +2559 -0
- rasa/shared/core/flows/__init__.py +7 -0
- rasa/shared/core/flows/flow.py +562 -0
- rasa/shared/core/flows/flow_path.py +84 -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 +258 -0
- rasa/shared/core/flows/flows_yaml_schema.json +303 -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/utils.py +39 -0
- rasa/shared/core/flows/validation.py +735 -0
- rasa/shared/core/flows/yaml_flows_io.py +405 -0
- rasa/shared/core/generator.py +908 -0
- rasa/shared/core/slot_mappings.py +526 -0
- rasa/shared/core/slots.py +654 -0
- rasa/shared/core/trackers.py +1183 -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 +858 -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 +167 -0
- rasa/shared/importers/__init__.py +0 -0
- rasa/shared/importers/importer.py +770 -0
- rasa/shared/importers/multi_project.py +215 -0
- rasa/shared/importers/rasa.py +108 -0
- rasa/shared/importers/remote_importer.py +196 -0
- rasa/shared/importers/utils.py +36 -0
- rasa/shared/nlu/__init__.py +0 -0
- rasa/shared/nlu/constants.py +53 -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 +618 -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 +729 -0
- rasa/shared/nlu/training_data/util.py +223 -0
- rasa/shared/providers/__init__.py +0 -0
- rasa/shared/providers/_configs/__init__.py +0 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +677 -0
- rasa/shared/providers/_configs/client_config.py +59 -0
- rasa/shared/providers/_configs/default_litellm_client_config.py +132 -0
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +236 -0
- rasa/shared/providers/_configs/litellm_router_client_config.py +222 -0
- rasa/shared/providers/_configs/model_group_config.py +173 -0
- rasa/shared/providers/_configs/openai_client_config.py +177 -0
- rasa/shared/providers/_configs/rasa_llm_client_config.py +75 -0
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +178 -0
- rasa/shared/providers/_configs/utils.py +117 -0
- rasa/shared/providers/_ssl_verification_utils.py +124 -0
- rasa/shared/providers/_utils.py +79 -0
- rasa/shared/providers/constants.py +7 -0
- rasa/shared/providers/embedding/__init__.py +0 -0
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +243 -0
- rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +335 -0
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +126 -0
- rasa/shared/providers/embedding/embedding_client.py +90 -0
- rasa/shared/providers/embedding/embedding_response.py +41 -0
- rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
- rasa/shared/providers/embedding/litellm_router_embedding_client.py +138 -0
- rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
- rasa/shared/providers/llm/__init__.py +0 -0
- rasa/shared/providers/llm/_base_litellm_client.py +265 -0
- rasa/shared/providers/llm/azure_openai_llm_client.py +415 -0
- rasa/shared/providers/llm/default_litellm_llm_client.py +110 -0
- rasa/shared/providers/llm/litellm_router_llm_client.py +202 -0
- rasa/shared/providers/llm/llm_client.py +78 -0
- rasa/shared/providers/llm/llm_response.py +50 -0
- rasa/shared/providers/llm/openai_llm_client.py +161 -0
- rasa/shared/providers/llm/rasa_llm_client.py +120 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +276 -0
- rasa/shared/providers/mappings.py +94 -0
- rasa/shared/providers/router/__init__.py +0 -0
- rasa/shared/providers/router/_base_litellm_router_client.py +185 -0
- rasa/shared/providers/router/router_client.py +75 -0
- rasa/shared/utils/__init__.py +0 -0
- rasa/shared/utils/cli.py +102 -0
- rasa/shared/utils/common.py +324 -0
- rasa/shared/utils/constants.py +4 -0
- rasa/shared/utils/health_check/__init__.py +0 -0
- rasa/shared/utils/health_check/embeddings_health_check_mixin.py +31 -0
- rasa/shared/utils/health_check/health_check.py +258 -0
- rasa/shared/utils/health_check/llm_health_check_mixin.py +31 -0
- rasa/shared/utils/io.py +499 -0
- rasa/shared/utils/llm.py +764 -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 +214 -0
- rasa/shared/utils/schemas/model_config.yml +36 -0
- rasa/shared/utils/schemas/stories.yml +173 -0
- rasa/shared/utils/yaml.py +1068 -0
- rasa/studio/__init__.py +0 -0
- rasa/studio/auth.py +270 -0
- rasa/studio/config.py +136 -0
- rasa/studio/constants.py +19 -0
- rasa/studio/data_handler.py +368 -0
- rasa/studio/download.py +489 -0
- rasa/studio/results_logger.py +137 -0
- rasa/studio/train.py +134 -0
- rasa/studio/upload.py +563 -0
- rasa/telemetry.py +1876 -0
- rasa/tracing/__init__.py +0 -0
- rasa/tracing/config.py +355 -0
- rasa/tracing/constants.py +62 -0
- rasa/tracing/instrumentation/__init__.py +0 -0
- rasa/tracing/instrumentation/attribute_extractors.py +765 -0
- rasa/tracing/instrumentation/instrumentation.py +1306 -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 +639 -0
- rasa/utils/converter.py +53 -0
- rasa/utils/endpoints.py +331 -0
- rasa/utils/io.py +252 -0
- rasa/utils/json_utils.py +60 -0
- rasa/utils/licensing.py +542 -0
- rasa/utils/log_utils.py +181 -0
- rasa/utils/mapper.py +210 -0
- rasa/utils/ml_utils.py +147 -0
- rasa/utils/plotting.py +362 -0
- rasa/utils/sanic_error_handler.py +32 -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 +1644 -0
- rasa/version.py +3 -0
- rasa_pro-3.12.0.dev1.dist-info/METADATA +199 -0
- rasa_pro-3.12.0.dev1.dist-info/NOTICE +5 -0
- rasa_pro-3.12.0.dev1.dist-info/RECORD +790 -0
- rasa_pro-3.12.0.dev1.dist-info/WHEEL +4 -0
- rasa_pro-3.12.0.dev1.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
6
|
+
|
|
7
|
+
import rasa.shared.utils.io
|
|
8
|
+
from rasa.e2e_test.constants import SCHEMA_FILE_PATH
|
|
9
|
+
from rasa.e2e_test.e2e_test_case import Fixture, Metadata
|
|
10
|
+
from rasa.shared.utils.yaml import read_schema_file
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from rasa.e2e_test.e2e_test_case import TestCase
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
structlogger = structlog.get_logger()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def validate_path_to_test_cases(path: str) -> None:
|
|
20
|
+
"""Validate that path to test cases exists."""
|
|
21
|
+
if not Path(path).exists():
|
|
22
|
+
rasa.shared.utils.io.raise_warning(
|
|
23
|
+
f"Path to test cases does not exist: {path}. "
|
|
24
|
+
f"Please provide a valid path to test cases. "
|
|
25
|
+
f"Exiting...",
|
|
26
|
+
UserWarning,
|
|
27
|
+
)
|
|
28
|
+
sys.exit(1)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def validate_test_case(
|
|
32
|
+
test_case_name: str,
|
|
33
|
+
input_test_cases: List["TestCase"],
|
|
34
|
+
fixtures: Dict[str, Fixture],
|
|
35
|
+
metadata: Dict[str, Metadata],
|
|
36
|
+
) -> None:
|
|
37
|
+
"""
|
|
38
|
+
Validate the test case, its fixtures, and metadata.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
test_case_name (str): The name of the test case to validate.
|
|
42
|
+
input_test_cases (List["TestCase"]): A list of test cases to validate.
|
|
43
|
+
fixtures (Dict[str, Fixture]): A dictionary of defined fixtures.
|
|
44
|
+
metadata (Dict[str, Metadata]): A dictionary of defined metadata.
|
|
45
|
+
|
|
46
|
+
Raises:
|
|
47
|
+
SystemExit: If the test case, fixtures, or metadata are not defined.
|
|
48
|
+
"""
|
|
49
|
+
if test_case_name and not input_test_cases:
|
|
50
|
+
rasa.shared.utils.io.raise_warning(
|
|
51
|
+
f"Test case does not exist: {test_case_name}. "
|
|
52
|
+
f"Please check for typos and provide a valid test case name. "
|
|
53
|
+
f"Exiting...",
|
|
54
|
+
UserWarning,
|
|
55
|
+
)
|
|
56
|
+
sys.exit(1)
|
|
57
|
+
|
|
58
|
+
all_good = True
|
|
59
|
+
for test_case in input_test_cases:
|
|
60
|
+
all_good_fixtures = validate_test_case_fixtures(test_case, fixtures)
|
|
61
|
+
all_good_metadata = validate_test_case_metadata(test_case, metadata)
|
|
62
|
+
all_good = all_good and all_good_fixtures and all_good_metadata
|
|
63
|
+
|
|
64
|
+
if not all_good:
|
|
65
|
+
sys.exit(1)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def validate_test_case_fixtures(
|
|
69
|
+
test_case: "TestCase", fixtures: Dict[str, Fixture]
|
|
70
|
+
) -> bool:
|
|
71
|
+
"""Validates that the fixtures used in the test case are defined.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
test_case (TestCase): The test case to validate.
|
|
75
|
+
fixtures (Dict[str, Fixture]): A dictionary of defined fixtures.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
True if all fixtures used in the test case are defined, False otherwise.
|
|
79
|
+
|
|
80
|
+
Raises:
|
|
81
|
+
Logs an error if a fixture used in the test case is not defined.
|
|
82
|
+
"""
|
|
83
|
+
all_good = True
|
|
84
|
+
if not test_case.fixture_names:
|
|
85
|
+
return all_good
|
|
86
|
+
|
|
87
|
+
for fixture_name in test_case.fixture_names:
|
|
88
|
+
if fixture_name not in fixtures:
|
|
89
|
+
structlogger.error(
|
|
90
|
+
"validation.validate_test_case_fixtures",
|
|
91
|
+
event_info=(
|
|
92
|
+
f"Fixture '{fixture_name}' referenced in the "
|
|
93
|
+
f"test case '{test_case.name}' is not defined."
|
|
94
|
+
),
|
|
95
|
+
)
|
|
96
|
+
all_good = False
|
|
97
|
+
return all_good
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def validate_test_case_metadata(
|
|
101
|
+
test_case: "TestCase", metadata: Dict[str, Metadata]
|
|
102
|
+
) -> bool:
|
|
103
|
+
"""
|
|
104
|
+
Validates that the metadata used in the test case and its steps are defined.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
test_case (TestCase): The test case to validate.
|
|
108
|
+
metadata (Dict[str, Metadata]): A dictionary of defined metadata.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
True if all fixtures used in the test case are defined, False otherwise.
|
|
112
|
+
|
|
113
|
+
Raises:
|
|
114
|
+
Logs an error if metadata used in the test case or its steps is not defined.
|
|
115
|
+
"""
|
|
116
|
+
all_good = True
|
|
117
|
+
if test_case.metadata_name and test_case.metadata_name not in metadata:
|
|
118
|
+
structlogger.error(
|
|
119
|
+
"validation.validate_test_case_metadata.test_case_metadata",
|
|
120
|
+
event_info=(
|
|
121
|
+
f"Metadata '{test_case.metadata_name}' referenced in "
|
|
122
|
+
f"the test case '{test_case.name}' is not defined."
|
|
123
|
+
),
|
|
124
|
+
)
|
|
125
|
+
all_good = False
|
|
126
|
+
|
|
127
|
+
for step in test_case.steps:
|
|
128
|
+
if step.metadata_name and step.metadata_name not in metadata:
|
|
129
|
+
structlogger.error(
|
|
130
|
+
"validation.validate_test_case_metadata.step_metadata",
|
|
131
|
+
event_info=(
|
|
132
|
+
f"Metadata '{step.metadata_name}' referenced in the "
|
|
133
|
+
f"step of the test case '{test_case.name}' is not defined."
|
|
134
|
+
),
|
|
135
|
+
)
|
|
136
|
+
all_good = False
|
|
137
|
+
return all_good
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def validate_model_path(model_path: Optional[str], parameter: str, default: str) -> str:
|
|
141
|
+
"""Validate the model path.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
model_path: Path to the model.
|
|
145
|
+
parameter: Name of the parameter.
|
|
146
|
+
default: Default path to the model.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
Path to the model.
|
|
150
|
+
"""
|
|
151
|
+
if model_path and Path(model_path).exists():
|
|
152
|
+
return model_path
|
|
153
|
+
|
|
154
|
+
if model_path and not Path(model_path).exists():
|
|
155
|
+
rasa.shared.utils.io.raise_warning(
|
|
156
|
+
f"The provided model path '{model_path}' could not be found. "
|
|
157
|
+
f"Using default location '{default}' instead.",
|
|
158
|
+
UserWarning,
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
elif model_path is None:
|
|
162
|
+
structlogger.info(
|
|
163
|
+
"rasa.e2e_test.validate_model_path",
|
|
164
|
+
message=f"Parameter '{parameter}' is not set. "
|
|
165
|
+
f"Using default location '{default}' instead.",
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
Path(default).mkdir(exist_ok=True)
|
|
169
|
+
return default
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def read_e2e_test_schema() -> Union[List[Any], Dict[str, Any]]:
|
|
173
|
+
"""Read the schema for the e2e test files.
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
The content of the schema.
|
|
177
|
+
"""
|
|
178
|
+
return read_schema_file(SCHEMA_FILE_PATH)
|
rasa/engine/__init__.py
ADDED
|
File without changes
|
rasa/engine/caching.py
ADDED
|
@@ -0,0 +1,463 @@
|
|
|
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
|
+
output.to_cache(tmp_path, model_storage)
|
|
309
|
+
|
|
310
|
+
logger.debug(
|
|
311
|
+
f"Caching output of type '{type(output).__name__}' succeeded."
|
|
312
|
+
)
|
|
313
|
+
except Exception as e:
|
|
314
|
+
logger.error(
|
|
315
|
+
f"Caching output of type '{type(output).__name__}' failed with the "
|
|
316
|
+
f"following error:\n{e}"
|
|
317
|
+
)
|
|
318
|
+
return None, None
|
|
319
|
+
|
|
320
|
+
output_size = rasa.utils.common.directory_size_in_mb(tmp_path)
|
|
321
|
+
if output_size > self._max_cache_size:
|
|
322
|
+
logger.debug(
|
|
323
|
+
f"Caching result of type '{type(output).__name__}' was skipped "
|
|
324
|
+
f"because it exceeds the maximum cache size of "
|
|
325
|
+
f"{self._max_cache_size} MiB."
|
|
326
|
+
)
|
|
327
|
+
return None, None
|
|
328
|
+
|
|
329
|
+
while (
|
|
330
|
+
rasa.utils.common.directory_size_in_mb(
|
|
331
|
+
self._cache_location,
|
|
332
|
+
filenames_to_exclude=[self._cache_database_name],
|
|
333
|
+
)
|
|
334
|
+
+ output_size
|
|
335
|
+
> self._max_cache_size
|
|
336
|
+
):
|
|
337
|
+
self._drop_least_recently_used_item()
|
|
338
|
+
|
|
339
|
+
output_type = rasa.shared.utils.common.module_path_from_instance(output)
|
|
340
|
+
cache_path = shutil.move(temp_dir, self._cache_location)
|
|
341
|
+
|
|
342
|
+
return cache_path, output_type
|
|
343
|
+
|
|
344
|
+
def _drop_least_recently_used_item(self) -> None:
|
|
345
|
+
with self._sessionmaker.begin() as session:
|
|
346
|
+
query_for_least_recently_used_entry = sa.select(self.CacheEntry).order_by(
|
|
347
|
+
self.CacheEntry.last_used.asc()
|
|
348
|
+
)
|
|
349
|
+
oldest_cache_item = (
|
|
350
|
+
session.execute(query_for_least_recently_used_entry).scalars().first()
|
|
351
|
+
)
|
|
352
|
+
|
|
353
|
+
if not oldest_cache_item:
|
|
354
|
+
self._purge_cache_dir_content()
|
|
355
|
+
return
|
|
356
|
+
|
|
357
|
+
self._delete_cached_result(oldest_cache_item)
|
|
358
|
+
delete_query = sa.delete(self.CacheEntry).where(
|
|
359
|
+
self.CacheEntry.fingerprint_key == oldest_cache_item.fingerprint_key
|
|
360
|
+
)
|
|
361
|
+
session.execute(delete_query)
|
|
362
|
+
|
|
363
|
+
logger.debug(
|
|
364
|
+
f"Deleted item with fingerprint "
|
|
365
|
+
f"'{oldest_cache_item.fingerprint_key}' to free space."
|
|
366
|
+
)
|
|
367
|
+
|
|
368
|
+
def _purge_cache_dir_content(self) -> None:
|
|
369
|
+
for item in self._cache_location.glob("*"):
|
|
370
|
+
if item.name == self._cache_database_name:
|
|
371
|
+
continue
|
|
372
|
+
|
|
373
|
+
if item.is_dir():
|
|
374
|
+
shutil.rmtree(item)
|
|
375
|
+
else:
|
|
376
|
+
item.unlink()
|
|
377
|
+
|
|
378
|
+
def get_cached_output_fingerprint(self, fingerprint_key: Text) -> Optional[Text]:
|
|
379
|
+
"""Returns cached output fingerprint (see parent class for full docstring)."""
|
|
380
|
+
with self._sessionmaker.begin() as session:
|
|
381
|
+
query = sa.select(self.CacheEntry).filter_by(
|
|
382
|
+
fingerprint_key=fingerprint_key
|
|
383
|
+
)
|
|
384
|
+
match = session.execute(query).scalars().first()
|
|
385
|
+
|
|
386
|
+
if match:
|
|
387
|
+
# This result was used during a fingerprint run.
|
|
388
|
+
match.last_used = datetime.utcnow()
|
|
389
|
+
return match.output_fingerprint_key
|
|
390
|
+
|
|
391
|
+
return None
|
|
392
|
+
|
|
393
|
+
def get_cached_result(
|
|
394
|
+
self, output_fingerprint_key: Text, node_name: Text, model_storage: ModelStorage
|
|
395
|
+
) -> Optional[Cacheable]:
|
|
396
|
+
"""Returns a potentially cached output (see parent class for full docstring)."""
|
|
397
|
+
result_location, result_type = self._get_cached_result(output_fingerprint_key)
|
|
398
|
+
|
|
399
|
+
if not result_location:
|
|
400
|
+
logger.debug(f"No cached output found for '{output_fingerprint_key}'")
|
|
401
|
+
return None
|
|
402
|
+
|
|
403
|
+
path_to_cached = Path(result_location)
|
|
404
|
+
if not path_to_cached.is_dir():
|
|
405
|
+
logger.debug(
|
|
406
|
+
f"Cached output for '{output_fingerprint_key}' can't be found on disk."
|
|
407
|
+
)
|
|
408
|
+
return None
|
|
409
|
+
|
|
410
|
+
return self._load_from_cache(
|
|
411
|
+
result_location,
|
|
412
|
+
result_type,
|
|
413
|
+
node_name,
|
|
414
|
+
model_storage,
|
|
415
|
+
output_fingerprint_key,
|
|
416
|
+
)
|
|
417
|
+
|
|
418
|
+
def _get_cached_result(
|
|
419
|
+
self, output_fingerprint_key: Text
|
|
420
|
+
) -> Tuple[Optional[Path], Optional[Text]]:
|
|
421
|
+
with self._sessionmaker.begin() as session:
|
|
422
|
+
query = sa.select(
|
|
423
|
+
self.CacheEntry.result_location, self.CacheEntry.result_type
|
|
424
|
+
).where(
|
|
425
|
+
self.CacheEntry.output_fingerprint_key == output_fingerprint_key,
|
|
426
|
+
self.CacheEntry.result_location != sa.null(),
|
|
427
|
+
)
|
|
428
|
+
|
|
429
|
+
match = session.execute(query).first()
|
|
430
|
+
|
|
431
|
+
if match:
|
|
432
|
+
return Path(match.result_location), match.result_type
|
|
433
|
+
|
|
434
|
+
return None, None
|
|
435
|
+
|
|
436
|
+
@staticmethod
|
|
437
|
+
def _load_from_cache(
|
|
438
|
+
path_to_cached: Path,
|
|
439
|
+
result_type: Text,
|
|
440
|
+
node_name: Text,
|
|
441
|
+
model_storage: ModelStorage,
|
|
442
|
+
output_fingerprint_key: Text,
|
|
443
|
+
) -> Optional[Cacheable]:
|
|
444
|
+
try:
|
|
445
|
+
module = rasa.shared.utils.common.class_from_module_path(result_type)
|
|
446
|
+
|
|
447
|
+
if not isinstance(module, Cacheable):
|
|
448
|
+
logger.warning(
|
|
449
|
+
"Failed to restore a non cacheable module from cache. "
|
|
450
|
+
"Please implement the 'Cacheable' interface for module "
|
|
451
|
+
f"'{result_type}'."
|
|
452
|
+
)
|
|
453
|
+
return None
|
|
454
|
+
|
|
455
|
+
return module.from_cache(
|
|
456
|
+
node_name, path_to_cached, model_storage, output_fingerprint_key
|
|
457
|
+
)
|
|
458
|
+
except Exception as e:
|
|
459
|
+
logger.warning(
|
|
460
|
+
f"Failed to restore cached output of type '{result_type}' from "
|
|
461
|
+
f"cache. Error:\n{e}"
|
|
462
|
+
)
|
|
463
|
+
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."""
|