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,244 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import shutil
|
|
5
|
+
import sys
|
|
6
|
+
import tempfile
|
|
7
|
+
import uuid
|
|
8
|
+
from contextlib import contextmanager
|
|
9
|
+
from datetime import datetime
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from tarsafe import TarSafe
|
|
12
|
+
from typing import Generator, Optional, Text, Tuple, Union
|
|
13
|
+
|
|
14
|
+
import rasa.utils.common
|
|
15
|
+
import rasa.shared.utils.io
|
|
16
|
+
from rasa.engine.storage.storage import ModelMetadata, ModelStorage
|
|
17
|
+
from rasa.engine.graph import GraphModelConfiguration
|
|
18
|
+
from rasa.engine.storage.resource import Resource
|
|
19
|
+
from rasa.exceptions import UnsupportedModelVersionError
|
|
20
|
+
from rasa.shared.core.domain import Domain
|
|
21
|
+
import rasa.model
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
# Paths within model archive
|
|
26
|
+
MODEL_ARCHIVE_COMPONENTS_DIR = "components"
|
|
27
|
+
MODEL_ARCHIVE_METADATA_FILE = "metadata.json"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@contextmanager
|
|
31
|
+
def windows_safe_temporary_directory(
|
|
32
|
+
suffix: Optional[Text] = None,
|
|
33
|
+
prefix: Optional[Text] = None,
|
|
34
|
+
dir: Optional[Text] = None,
|
|
35
|
+
) -> Generator[Text, None, None]:
|
|
36
|
+
"""Like `tempfile.TemporaryDirectory`, but works with Windows and long file names.
|
|
37
|
+
|
|
38
|
+
On Windows by default there is a restriction on long path names.
|
|
39
|
+
Using the prefix below allows to bypass this restriction in environments
|
|
40
|
+
where it's not possible to override this behavior, mostly for internal
|
|
41
|
+
policy reasons.
|
|
42
|
+
|
|
43
|
+
Reference: https://stackoverflow.com/a/49102229
|
|
44
|
+
"""
|
|
45
|
+
if sys.platform == "win32":
|
|
46
|
+
directory = tempfile.mkdtemp(suffix, prefix, dir)
|
|
47
|
+
directory = rasa.utils.common.decode_bytes(directory)
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
yield directory
|
|
51
|
+
finally:
|
|
52
|
+
shutil.rmtree(f"\\\\?\\{directory}")
|
|
53
|
+
else:
|
|
54
|
+
with tempfile.TemporaryDirectory() as temporary_directory:
|
|
55
|
+
temporary_directory = rasa.utils.common.decode_bytes(temporary_directory)
|
|
56
|
+
yield temporary_directory
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class LocalModelStorage(ModelStorage):
|
|
60
|
+
"""Stores and provides output of `GraphComponents` on local disk."""
|
|
61
|
+
|
|
62
|
+
def __init__(self, storage_path: Path) -> None:
|
|
63
|
+
"""Creates storage (see parent class for full docstring)."""
|
|
64
|
+
self._storage_path = storage_path
|
|
65
|
+
|
|
66
|
+
@classmethod
|
|
67
|
+
def create(cls, storage_path: Path) -> ModelStorage:
|
|
68
|
+
"""Creates a new instance (see parent class for full docstring)."""
|
|
69
|
+
return cls(storage_path)
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def from_model_archive(
|
|
73
|
+
cls, storage_path: Path, model_archive_path: Union[Text, Path]
|
|
74
|
+
) -> Tuple[LocalModelStorage, ModelMetadata]:
|
|
75
|
+
"""Initializes storage from archive (see parent class for full docstring)."""
|
|
76
|
+
if next(storage_path.glob("*"), None):
|
|
77
|
+
raise ValueError(
|
|
78
|
+
f"The model storage with path '{storage_path}' is "
|
|
79
|
+
f"not empty. You can only unpack model archives into an "
|
|
80
|
+
f"empty model storage."
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
with windows_safe_temporary_directory() as temporary_directory:
|
|
84
|
+
temporary_directory_path = Path(temporary_directory)
|
|
85
|
+
|
|
86
|
+
cls._extract_archive_to_directory(
|
|
87
|
+
model_archive_path, temporary_directory_path
|
|
88
|
+
)
|
|
89
|
+
logger.debug(f"Extracted model to '{temporary_directory_path}'.")
|
|
90
|
+
cls._initialize_model_storage_from_model_archive(
|
|
91
|
+
temporary_directory_path, storage_path
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
metadata = cls._load_metadata(temporary_directory_path)
|
|
95
|
+
|
|
96
|
+
return (cls(storage_path), metadata)
|
|
97
|
+
|
|
98
|
+
@classmethod
|
|
99
|
+
def metadata_from_archive(
|
|
100
|
+
cls, model_archive_path: Union[Text, Path]
|
|
101
|
+
) -> ModelMetadata:
|
|
102
|
+
"""Retrieves metadata from archive (see parent class for full docstring)."""
|
|
103
|
+
with windows_safe_temporary_directory() as temporary_directory:
|
|
104
|
+
temporary_directory_path = Path(temporary_directory)
|
|
105
|
+
|
|
106
|
+
cls._extract_archive_to_directory(
|
|
107
|
+
model_archive_path, temporary_directory_path
|
|
108
|
+
)
|
|
109
|
+
metadata = cls._load_metadata(temporary_directory_path)
|
|
110
|
+
|
|
111
|
+
return metadata
|
|
112
|
+
|
|
113
|
+
@staticmethod
|
|
114
|
+
def _extract_archive_to_directory(
|
|
115
|
+
model_archive_path: Union[Text, Path], temporary_directory: Path
|
|
116
|
+
) -> None:
|
|
117
|
+
with TarSafe.open(model_archive_path, mode="r:gz") as tar:
|
|
118
|
+
if sys.platform == "win32":
|
|
119
|
+
# on Windows by default there is a restriction on long
|
|
120
|
+
# path names; using the prefix below allows to bypass
|
|
121
|
+
# this restriction in environments where it's not possible
|
|
122
|
+
# to override this behavior, mostly for internal policy reasons
|
|
123
|
+
# reference: https://stackoverflow.com/a/49102229
|
|
124
|
+
tar.extractall(f"\\\\?\\{temporary_directory}")
|
|
125
|
+
else:
|
|
126
|
+
tar.extractall(temporary_directory)
|
|
127
|
+
LocalModelStorage._assert_not_rasa2_archive(temporary_directory)
|
|
128
|
+
|
|
129
|
+
@staticmethod
|
|
130
|
+
def _assert_not_rasa2_archive(temporary_directory: Union[Text, Path]) -> None:
|
|
131
|
+
fingerprint_file = Path(temporary_directory) / "fingerprint.json"
|
|
132
|
+
if fingerprint_file.is_file():
|
|
133
|
+
serialized_fingerprint = rasa.shared.utils.io.read_json_file(
|
|
134
|
+
fingerprint_file
|
|
135
|
+
)
|
|
136
|
+
raise UnsupportedModelVersionError(
|
|
137
|
+
model_version=serialized_fingerprint["version"]
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
@staticmethod
|
|
141
|
+
def _initialize_model_storage_from_model_archive(
|
|
142
|
+
temporary_directory: Path, storage_path: Path
|
|
143
|
+
) -> None:
|
|
144
|
+
for path in (temporary_directory / MODEL_ARCHIVE_COMPONENTS_DIR).glob("*"):
|
|
145
|
+
shutil.move(str(path), str(storage_path))
|
|
146
|
+
|
|
147
|
+
@staticmethod
|
|
148
|
+
def _load_metadata(directory: Path) -> ModelMetadata:
|
|
149
|
+
serialized_metadata = rasa.shared.utils.io.read_json_file(
|
|
150
|
+
directory / MODEL_ARCHIVE_METADATA_FILE
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
return ModelMetadata.from_dict(serialized_metadata)
|
|
154
|
+
|
|
155
|
+
@contextmanager
|
|
156
|
+
def write_to(self, resource: Resource) -> Generator[Path, None, None]:
|
|
157
|
+
"""Persists data for a resource (see parent class for full docstring)."""
|
|
158
|
+
logger.debug(f"Resource '{resource.name}' was requested for writing.")
|
|
159
|
+
directory = self._directory_for_resource(resource)
|
|
160
|
+
|
|
161
|
+
if not directory.exists():
|
|
162
|
+
directory.mkdir()
|
|
163
|
+
|
|
164
|
+
yield directory
|
|
165
|
+
|
|
166
|
+
logger.debug(f"Resource '{resource.name}' was persisted.")
|
|
167
|
+
|
|
168
|
+
def _directory_for_resource(self, resource: Resource) -> Path:
|
|
169
|
+
return self._storage_path / resource.name
|
|
170
|
+
|
|
171
|
+
@contextmanager
|
|
172
|
+
def read_from(self, resource: Resource) -> Generator[Path, None, None]:
|
|
173
|
+
"""Provides the data of a `Resource` (see parent class for full docstring)."""
|
|
174
|
+
logger.debug(f"Resource '{resource.name}' was requested for reading.")
|
|
175
|
+
directory = self._directory_for_resource(resource)
|
|
176
|
+
|
|
177
|
+
if not directory.exists():
|
|
178
|
+
raise ValueError(
|
|
179
|
+
f"Resource '{resource.name}' does not exist. Please make "
|
|
180
|
+
f"sure that the graph component providing the resource "
|
|
181
|
+
f"is a parent node of the current graph node "
|
|
182
|
+
f"(in case this happens during training) or that the "
|
|
183
|
+
f"resource was actually persisted during training "
|
|
184
|
+
f"(in case this happens during inference)."
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
yield directory
|
|
188
|
+
|
|
189
|
+
def create_model_package(
|
|
190
|
+
self,
|
|
191
|
+
model_archive_path: Union[Text, Path],
|
|
192
|
+
model_configuration: GraphModelConfiguration,
|
|
193
|
+
domain: Domain,
|
|
194
|
+
) -> ModelMetadata:
|
|
195
|
+
"""Creates model package (see parent class for full docstring)."""
|
|
196
|
+
logger.debug(f"Start to created model package for path '{model_archive_path}'.")
|
|
197
|
+
|
|
198
|
+
with windows_safe_temporary_directory() as temp_dir:
|
|
199
|
+
temporary_directory = Path(temp_dir)
|
|
200
|
+
|
|
201
|
+
shutil.copytree(
|
|
202
|
+
self._storage_path, temporary_directory / MODEL_ARCHIVE_COMPONENTS_DIR
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
model_metadata = self._create_model_metadata(domain, model_configuration)
|
|
206
|
+
self._persist_metadata(model_metadata, temporary_directory)
|
|
207
|
+
|
|
208
|
+
if isinstance(model_archive_path, str):
|
|
209
|
+
model_archive_path = Path(model_archive_path)
|
|
210
|
+
|
|
211
|
+
if not model_archive_path.parent.exists():
|
|
212
|
+
model_archive_path.parent.mkdir(parents=True)
|
|
213
|
+
|
|
214
|
+
with TarSafe.open(model_archive_path, "w:gz") as tar:
|
|
215
|
+
tar.add(temporary_directory, arcname="")
|
|
216
|
+
|
|
217
|
+
logger.debug(f"Model package created in path '{model_archive_path}'.")
|
|
218
|
+
|
|
219
|
+
return model_metadata
|
|
220
|
+
|
|
221
|
+
@staticmethod
|
|
222
|
+
def _persist_metadata(metadata: ModelMetadata, temporary_directory: Path) -> None:
|
|
223
|
+
rasa.shared.utils.io.dump_obj_as_json_to_file(
|
|
224
|
+
temporary_directory / MODEL_ARCHIVE_METADATA_FILE, metadata.as_dict()
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
@staticmethod
|
|
228
|
+
def _create_model_metadata(
|
|
229
|
+
domain: Domain, model_configuration: GraphModelConfiguration
|
|
230
|
+
) -> ModelMetadata:
|
|
231
|
+
return ModelMetadata(
|
|
232
|
+
trained_at=datetime.utcnow(),
|
|
233
|
+
rasa_open_source_version=rasa.__version__,
|
|
234
|
+
model_id=uuid.uuid4().hex,
|
|
235
|
+
assistant_id=model_configuration.assistant_id,
|
|
236
|
+
domain=domain,
|
|
237
|
+
train_schema=model_configuration.train_schema,
|
|
238
|
+
predict_schema=model_configuration.predict_schema,
|
|
239
|
+
training_type=model_configuration.training_type,
|
|
240
|
+
project_fingerprint=rasa.model.project_fingerprint(),
|
|
241
|
+
language=model_configuration.language,
|
|
242
|
+
core_target=model_configuration.core_target,
|
|
243
|
+
nlu_target=model_configuration.nlu_target,
|
|
244
|
+
)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import logging
|
|
3
|
+
import typing
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Text
|
|
7
|
+
import uuid
|
|
8
|
+
|
|
9
|
+
import rasa.utils.common
|
|
10
|
+
import rasa.utils.io
|
|
11
|
+
|
|
12
|
+
if typing.TYPE_CHECKING:
|
|
13
|
+
from rasa.engine.storage.storage import ModelStorage
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class Resource:
|
|
20
|
+
"""Represents a persisted graph component in the graph.
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
name: The unique identifier for the `Resource`. Used to locate the associated
|
|
24
|
+
data from a `ModelStorage`. Normally matches the name of the node which
|
|
25
|
+
created it.
|
|
26
|
+
output_fingerprint: An unique identifier for a specific instantiation of a
|
|
27
|
+
`Resource`. Used to distinguish a specific persistence for the same
|
|
28
|
+
`Resource` when saving to the cache.
|
|
29
|
+
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
name: Text
|
|
33
|
+
output_fingerprint: Text = field(
|
|
34
|
+
default_factory=lambda: uuid.uuid4().hex,
|
|
35
|
+
# We do not use this for comparison as it is not consistent after serialization.
|
|
36
|
+
compare=False,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def from_cache(
|
|
41
|
+
cls,
|
|
42
|
+
node_name: Text,
|
|
43
|
+
directory: Path,
|
|
44
|
+
model_storage: ModelStorage,
|
|
45
|
+
output_fingerprint: Text,
|
|
46
|
+
) -> Resource:
|
|
47
|
+
"""Loads a `Resource` from the cache.
|
|
48
|
+
|
|
49
|
+
This automatically loads the persisted resource into the given `ModelStorage`.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
node_name: The node name of the `Resource`.
|
|
53
|
+
directory: The directory with the cached `Resource`.
|
|
54
|
+
model_storage: The `ModelStorage` which the cached `Resource` will be added
|
|
55
|
+
to so that the `Resource` is accessible for other graph nodes.
|
|
56
|
+
output_fingerprint: The fingerprint of the cached `Resource`.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
The ready-to-use and accessible `Resource`.
|
|
60
|
+
"""
|
|
61
|
+
logger.debug(f"Loading resource '{node_name}' from cache.")
|
|
62
|
+
|
|
63
|
+
resource = Resource(node_name, output_fingerprint=output_fingerprint)
|
|
64
|
+
if not any(directory.glob("*")):
|
|
65
|
+
logger.debug(f"Cached resource for '{node_name}' was empty.")
|
|
66
|
+
return resource
|
|
67
|
+
|
|
68
|
+
try:
|
|
69
|
+
with model_storage.write_to(resource) as resource_directory:
|
|
70
|
+
rasa.utils.common.copy_directory(directory, resource_directory)
|
|
71
|
+
except ValueError:
|
|
72
|
+
# This might happen during finetuning as in this case the model storage
|
|
73
|
+
# is already filled
|
|
74
|
+
if not rasa.utils.io.are_directories_equal(directory, resource_directory):
|
|
75
|
+
# We skip caching in case we see the cached output and output
|
|
76
|
+
# from the model which we want to finetune are not the same
|
|
77
|
+
raise
|
|
78
|
+
|
|
79
|
+
logger.debug(f"Successfully initialized resource '{node_name}' from cache.")
|
|
80
|
+
|
|
81
|
+
return resource
|
|
82
|
+
|
|
83
|
+
def to_cache(self, directory: Path, model_storage: ModelStorage) -> None:
|
|
84
|
+
"""Persists the `Resource` to the cache.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
directory: The directory which receives the persisted `Resource`.
|
|
88
|
+
model_storage: The model storage which currently contains the persisted
|
|
89
|
+
`Resource`.
|
|
90
|
+
"""
|
|
91
|
+
try:
|
|
92
|
+
with model_storage.read_from(self) as resource_directory:
|
|
93
|
+
rasa.utils.common.copy_directory(resource_directory, directory)
|
|
94
|
+
except ValueError:
|
|
95
|
+
logger.debug(
|
|
96
|
+
f"Skipped caching resource '{self.name}' as no persisted "
|
|
97
|
+
f"data was found."
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
def fingerprint(self) -> Text:
|
|
101
|
+
"""Provides fingerprint for `Resource`.
|
|
102
|
+
|
|
103
|
+
A unique fingerprint is created on initialization of a `Resource` however we
|
|
104
|
+
also allow a value to be provided for when we retrieve a `Resource` from the
|
|
105
|
+
cache (see `Resource.from_cache`).
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
Fingerprint for `Resource`.
|
|
109
|
+
"""
|
|
110
|
+
return self.output_fingerprint
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import abc
|
|
3
|
+
import logging
|
|
4
|
+
import typing
|
|
5
|
+
from contextlib import contextmanager
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Tuple, Union, Text, Generator, Dict, Any, Optional
|
|
10
|
+
from packaging import version
|
|
11
|
+
|
|
12
|
+
from rasa.constants import MINIMUM_COMPATIBLE_VERSION
|
|
13
|
+
from rasa.exceptions import UnsupportedModelVersionError
|
|
14
|
+
from rasa.engine.storage.resource import Resource
|
|
15
|
+
from rasa.shared.core.domain import Domain
|
|
16
|
+
from rasa.shared.data import TrainingType
|
|
17
|
+
|
|
18
|
+
if typing.TYPE_CHECKING:
|
|
19
|
+
from rasa.engine.graph import GraphSchema, GraphModelConfiguration
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ModelStorage(abc.ABC):
|
|
25
|
+
"""Serves as storage backend for `GraphComponents` which need persistence."""
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
@abc.abstractmethod
|
|
29
|
+
def create(cls, storage_path: Path) -> ModelStorage:
|
|
30
|
+
"""Creates the storage.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
storage_path: Directory which will contain the persisted graph components.
|
|
34
|
+
"""
|
|
35
|
+
...
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
@abc.abstractmethod
|
|
39
|
+
def from_model_archive(
|
|
40
|
+
cls, storage_path: Path, model_archive_path: Union[Text, Path]
|
|
41
|
+
) -> Tuple[ModelStorage, ModelMetadata]:
|
|
42
|
+
"""Unpacks a model archive and initializes a `ModelStorage`.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
storage_path: Directory which will contain the persisted graph components.
|
|
46
|
+
model_archive_path: The path to the model archive.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Initialized model storage, and metadata about the model.
|
|
50
|
+
|
|
51
|
+
Raises:
|
|
52
|
+
`UnsupportedModelError` if the loaded meta data indicates that the model
|
|
53
|
+
has been created with an outdated Rasa version.
|
|
54
|
+
"""
|
|
55
|
+
...
|
|
56
|
+
|
|
57
|
+
@classmethod
|
|
58
|
+
@abc.abstractmethod
|
|
59
|
+
def metadata_from_archive(
|
|
60
|
+
cls, model_archive_path: Union[Text, Path]
|
|
61
|
+
) -> ModelMetadata:
|
|
62
|
+
"""Retrieves metadata from archive.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
model_archive_path: The path to the model archive.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Metadata about the model.
|
|
69
|
+
|
|
70
|
+
Raises:
|
|
71
|
+
`UnsupportedModelError` if the loaded meta data indicates that the model
|
|
72
|
+
has been created with an outdated Rasa version.
|
|
73
|
+
"""
|
|
74
|
+
...
|
|
75
|
+
|
|
76
|
+
@contextmanager
|
|
77
|
+
@abc.abstractmethod
|
|
78
|
+
def write_to(self, resource: Resource) -> Generator[Path, None, None]:
|
|
79
|
+
"""Persists data for a given resource.
|
|
80
|
+
|
|
81
|
+
This `Resource` can then be accessed in dependent graph nodes via
|
|
82
|
+
`model_storage.read_from`.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
resource: The resource which should be persisted.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
A directory which can be used to persist data for the given `Resource`.
|
|
89
|
+
"""
|
|
90
|
+
...
|
|
91
|
+
|
|
92
|
+
@contextmanager
|
|
93
|
+
@abc.abstractmethod
|
|
94
|
+
def read_from(self, resource: Resource) -> Generator[Path, None, None]:
|
|
95
|
+
"""Provides the data of a persisted `Resource`.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
resource: The `Resource` whose persisted should be accessed.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
A directory containing the data of the persisted `Resource`.
|
|
102
|
+
|
|
103
|
+
Raises:
|
|
104
|
+
ValueError: In case no persisted data for the given `Resource` exists.
|
|
105
|
+
"""
|
|
106
|
+
...
|
|
107
|
+
|
|
108
|
+
@abc.abstractmethod
|
|
109
|
+
def create_model_package(
|
|
110
|
+
self,
|
|
111
|
+
model_archive_path: Union[Text, Path],
|
|
112
|
+
model_configuration: GraphModelConfiguration,
|
|
113
|
+
domain: Domain,
|
|
114
|
+
) -> ModelMetadata:
|
|
115
|
+
"""Creates a model archive containing all data to load and run the model.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
model_archive_path: The path to the archive which should be created.
|
|
119
|
+
model_configuration: The model configuration (schemas, language, etc.)
|
|
120
|
+
domain: The `Domain` which was used to train the model.
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
The model metadata.
|
|
124
|
+
"""
|
|
125
|
+
...
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
@dataclass()
|
|
129
|
+
class ModelMetadata:
|
|
130
|
+
"""Describes a trained model."""
|
|
131
|
+
|
|
132
|
+
trained_at: datetime
|
|
133
|
+
rasa_open_source_version: Text
|
|
134
|
+
model_id: Text
|
|
135
|
+
assistant_id: Optional[Text]
|
|
136
|
+
domain: Domain
|
|
137
|
+
train_schema: GraphSchema
|
|
138
|
+
predict_schema: GraphSchema
|
|
139
|
+
project_fingerprint: Text
|
|
140
|
+
core_target: Optional[Text]
|
|
141
|
+
nlu_target: Text
|
|
142
|
+
language: Optional[Text]
|
|
143
|
+
training_type: TrainingType = TrainingType.BOTH
|
|
144
|
+
|
|
145
|
+
def __post_init__(self) -> None:
|
|
146
|
+
"""Raises an exception when the metadata indicates an unsupported version.
|
|
147
|
+
|
|
148
|
+
Raises:
|
|
149
|
+
`UnsupportedModelException` if the `rasa_open_source_version` is lower
|
|
150
|
+
than the minimum compatible version
|
|
151
|
+
"""
|
|
152
|
+
minimum_version = version.parse(MINIMUM_COMPATIBLE_VERSION)
|
|
153
|
+
model_version = version.parse(self.rasa_open_source_version)
|
|
154
|
+
if model_version < minimum_version:
|
|
155
|
+
raise UnsupportedModelVersionError(model_version=model_version)
|
|
156
|
+
|
|
157
|
+
def as_dict(self) -> Dict[Text, Any]:
|
|
158
|
+
"""Returns serializable version of the `ModelMetadata`."""
|
|
159
|
+
return {
|
|
160
|
+
"domain": self.domain.as_dict(),
|
|
161
|
+
"trained_at": self.trained_at.isoformat(),
|
|
162
|
+
"model_id": self.model_id,
|
|
163
|
+
"assistant_id": self.assistant_id,
|
|
164
|
+
"rasa_open_source_version": self.rasa_open_source_version,
|
|
165
|
+
"train_schema": self.train_schema.as_dict(),
|
|
166
|
+
"predict_schema": self.predict_schema.as_dict(),
|
|
167
|
+
"training_type": self.training_type.value,
|
|
168
|
+
"project_fingerprint": self.project_fingerprint,
|
|
169
|
+
"core_target": self.core_target,
|
|
170
|
+
"nlu_target": self.nlu_target,
|
|
171
|
+
"language": self.language,
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@classmethod
|
|
175
|
+
def from_dict(cls, serialized: Dict[Text, Any]) -> ModelMetadata:
|
|
176
|
+
"""Loads `ModelMetadata` which has been serialized using `metadata.as_dict()`.
|
|
177
|
+
|
|
178
|
+
Args:
|
|
179
|
+
serialized: Serialized `ModelMetadata` (e.g. read from disk).
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
Instantiated `ModelMetadata`.
|
|
183
|
+
"""
|
|
184
|
+
from rasa.engine.graph import GraphSchema
|
|
185
|
+
|
|
186
|
+
return ModelMetadata(
|
|
187
|
+
trained_at=datetime.fromisoformat(serialized["trained_at"]),
|
|
188
|
+
rasa_open_source_version=serialized["rasa_open_source_version"],
|
|
189
|
+
model_id=serialized["model_id"],
|
|
190
|
+
assistant_id=serialized.get("assistant_id"),
|
|
191
|
+
domain=Domain.from_dict(serialized["domain"]),
|
|
192
|
+
train_schema=GraphSchema.from_dict(serialized["train_schema"]),
|
|
193
|
+
predict_schema=GraphSchema.from_dict(serialized["predict_schema"]),
|
|
194
|
+
training_type=TrainingType(serialized["training_type"]),
|
|
195
|
+
project_fingerprint=serialized["project_fingerprint"],
|
|
196
|
+
core_target=serialized["core_target"],
|
|
197
|
+
nlu_target=serialized["nlu_target"],
|
|
198
|
+
language=serialized["language"],
|
|
199
|
+
)
|
|
File without changes
|