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,43 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, List, Text
|
|
4
|
+
import rasa.dialogue_understanding.processor.command_processor
|
|
5
|
+
|
|
6
|
+
from rasa.engine.graph import ExecutionContext, GraphComponent
|
|
7
|
+
from rasa.engine.storage.resource import Resource
|
|
8
|
+
from rasa.engine.storage.storage import ModelStorage
|
|
9
|
+
from rasa.shared.core.events import Event
|
|
10
|
+
from rasa.shared.core.flows import FlowsList
|
|
11
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
12
|
+
from rasa.shared.core.training_data.structures import StoryGraph
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class CommandProcessorComponent(GraphComponent):
|
|
16
|
+
"""Processes commands by issuing events to modify a tracker.
|
|
17
|
+
|
|
18
|
+
Minimal component that applies commands to a tracker."""
|
|
19
|
+
|
|
20
|
+
def __init__(self, execution_context: ExecutionContext):
|
|
21
|
+
self._execution_context = execution_context
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def create(
|
|
25
|
+
cls,
|
|
26
|
+
config: Dict[Text, Any],
|
|
27
|
+
model_storage: ModelStorage,
|
|
28
|
+
resource: Resource,
|
|
29
|
+
execution_context: ExecutionContext,
|
|
30
|
+
) -> CommandProcessorComponent:
|
|
31
|
+
"""Creates component (see parent class for full docstring)."""
|
|
32
|
+
return cls(execution_context)
|
|
33
|
+
|
|
34
|
+
def execute_commands(
|
|
35
|
+
self,
|
|
36
|
+
tracker: DialogueStateTracker,
|
|
37
|
+
flows: FlowsList,
|
|
38
|
+
story_graph: StoryGraph,
|
|
39
|
+
) -> List[Event]:
|
|
40
|
+
"""Execute commands to update tracker state."""
|
|
41
|
+
return rasa.dialogue_understanding.processor.command_processor.execute_commands(
|
|
42
|
+
tracker, flows, self._execution_context, story_graph
|
|
43
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import copy
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import Any, Callable, Dict, List, Optional
|
|
6
|
+
import structlog
|
|
7
|
+
import typing
|
|
8
|
+
import jsonpatch
|
|
9
|
+
|
|
10
|
+
if typing.TYPE_CHECKING:
|
|
11
|
+
from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
|
|
12
|
+
|
|
13
|
+
structlogger = structlog.get_logger()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class DialogueStack:
|
|
18
|
+
"""Represents the current dialogue stack."""
|
|
19
|
+
|
|
20
|
+
frames: List["DialogueStackFrame"]
|
|
21
|
+
|
|
22
|
+
@staticmethod
|
|
23
|
+
def from_dict(data: List[Dict[str, Any]]) -> DialogueStack:
|
|
24
|
+
"""Creates a `DialogueStack` from a dictionary.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
data: The dictionary to create the `DialogueStack` from.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
The created `DialogueStack`.
|
|
31
|
+
"""
|
|
32
|
+
from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
|
|
33
|
+
|
|
34
|
+
return DialogueStack(
|
|
35
|
+
frames=[DialogueStackFrame.create_typed_frame(frame) for frame in data]
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
@staticmethod
|
|
39
|
+
def empty() -> DialogueStack:
|
|
40
|
+
"""Creates an empty `DialogueStack`.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
The created empty `DialogueStack`.
|
|
44
|
+
"""
|
|
45
|
+
return DialogueStack(frames=[])
|
|
46
|
+
|
|
47
|
+
def as_dict(self) -> List[Dict[str, Any]]:
|
|
48
|
+
"""Returns the `DialogueStack` as a dictionary.
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
The `DialogueStack` as a dictionary.
|
|
52
|
+
"""
|
|
53
|
+
return [frame.as_dict() for frame in self.frames]
|
|
54
|
+
|
|
55
|
+
def copy(self) -> DialogueStack:
|
|
56
|
+
return copy.deepcopy(self)
|
|
57
|
+
|
|
58
|
+
def push(self, frame: "DialogueStackFrame", index: Optional[int] = None) -> None:
|
|
59
|
+
"""Pushes a new frame onto the stack.
|
|
60
|
+
|
|
61
|
+
If the frame shouldn't be put on top of the stack, the index can be
|
|
62
|
+
specified. Not specifying an index equals `push(frame, index=len(frames))`.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
frame: The frame to push onto the stack.
|
|
66
|
+
index: The index to insert the frame at. If `None`, the frame
|
|
67
|
+
is put on top of the stack.
|
|
68
|
+
"""
|
|
69
|
+
if index is None:
|
|
70
|
+
self.frames.append(frame)
|
|
71
|
+
else:
|
|
72
|
+
self.frames.insert(index, frame)
|
|
73
|
+
|
|
74
|
+
def update(self, frame: "DialogueStackFrame") -> None:
|
|
75
|
+
"""Updates the topmost frame.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
frame: The frame to update.
|
|
79
|
+
"""
|
|
80
|
+
if not self.is_empty():
|
|
81
|
+
self.pop()
|
|
82
|
+
|
|
83
|
+
self.push(frame)
|
|
84
|
+
|
|
85
|
+
def pop(self) -> "DialogueStackFrame":
|
|
86
|
+
"""Pops the topmost frame from the stack.
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
The popped frame.
|
|
90
|
+
"""
|
|
91
|
+
return self.frames.pop()
|
|
92
|
+
|
|
93
|
+
def current_context(self) -> Dict[str, Any]:
|
|
94
|
+
"""Returns the context of the topmost frame.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
The context of the topmost frame.
|
|
98
|
+
"""
|
|
99
|
+
if self.is_empty():
|
|
100
|
+
return {}
|
|
101
|
+
|
|
102
|
+
return self.frames[-1].context_as_dict(self.frames[:-1])
|
|
103
|
+
|
|
104
|
+
def top(
|
|
105
|
+
self,
|
|
106
|
+
ignore: Optional[Callable[["DialogueStackFrame"], bool]] = None,
|
|
107
|
+
) -> Optional["DialogueStackFrame"]:
|
|
108
|
+
"""Returns the topmost frame from the stack.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
ignore_frame: The ID of the flow to ignore. Picks the top most
|
|
112
|
+
frame that has a different flow ID.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
The topmost frame.
|
|
116
|
+
"""
|
|
117
|
+
for frame in reversed(self.frames):
|
|
118
|
+
if ignore and ignore(frame):
|
|
119
|
+
continue
|
|
120
|
+
return frame
|
|
121
|
+
return None
|
|
122
|
+
|
|
123
|
+
def is_empty(self) -> bool:
|
|
124
|
+
"""Checks if the stack is empty.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
`True` if the stack is empty, `False` otherwise.
|
|
128
|
+
"""
|
|
129
|
+
return len(self.frames) == 0
|
|
130
|
+
|
|
131
|
+
def update_from_patch(self, patch_dump: str) -> DialogueStack:
|
|
132
|
+
"""Updates the stack from a patch.
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
patch_dump: The patch to apply to the stack.
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
The updated stack."""
|
|
139
|
+
patch = jsonpatch.JsonPatch.from_string(patch_dump)
|
|
140
|
+
dialogue_stack_dump = patch.apply(self.as_dict())
|
|
141
|
+
return DialogueStack.from_dict(dialogue_stack_dump)
|
|
142
|
+
|
|
143
|
+
def create_stack_patch(self, updated_stack: DialogueStack) -> Optional[str]:
|
|
144
|
+
"""Creates a patch to update the stack to the updated stack state.
|
|
145
|
+
|
|
146
|
+
Example:
|
|
147
|
+
> stack = DialogueStack.from_dict([
|
|
148
|
+
> {
|
|
149
|
+
> "type": "flow",
|
|
150
|
+
> "frame_type": "regular",
|
|
151
|
+
> "flow_id": "foo",
|
|
152
|
+
> "step_id": "START",
|
|
153
|
+
> "frame_id": "test",
|
|
154
|
+
> }
|
|
155
|
+
> ])
|
|
156
|
+
> updated_stack = DialogueStack.from_dict([
|
|
157
|
+
> {
|
|
158
|
+
> "type": "flow",
|
|
159
|
+
> "frame_type": "regular",
|
|
160
|
+
> "flow_id": "foo",
|
|
161
|
+
> "step_id": "1",
|
|
162
|
+
> "frame_id": "test",
|
|
163
|
+
> }
|
|
164
|
+
> ])
|
|
165
|
+
> stack.create_stack_patch(updated_stack)
|
|
166
|
+
'[{"op": "replace", "path": "/0/step_id", "value": "1"}]'
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
updated_stack: The updated stack.
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
The patch to update the stack to the updated stack state.
|
|
173
|
+
"""
|
|
174
|
+
patch = jsonpatch.JsonPatch.from_diff(self.as_dict(), updated_stack.as_dict())
|
|
175
|
+
|
|
176
|
+
if patch:
|
|
177
|
+
return patch.to_string()
|
|
178
|
+
return None
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from rasa.dialogue_understanding.stack.frames.dialogue_stack_frame import (
|
|
2
|
+
DialogueStackFrame,
|
|
3
|
+
)
|
|
4
|
+
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
5
|
+
UserFlowStackFrame,
|
|
6
|
+
BaseFlowStackFrame,
|
|
7
|
+
)
|
|
8
|
+
from rasa.dialogue_understanding.stack.frames.pattern_frame import PatternFlowStackFrame
|
|
9
|
+
from rasa.dialogue_understanding.stack.frames.search_frame import SearchStackFrame
|
|
10
|
+
from rasa.dialogue_understanding.stack.frames.chit_chat_frame import ChitChatStackFrame
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"DialogueStackFrame",
|
|
14
|
+
"BaseFlowStackFrame",
|
|
15
|
+
"PatternFlowStackFrame",
|
|
16
|
+
"UserFlowStackFrame",
|
|
17
|
+
"SearchStackFrame",
|
|
18
|
+
"ChitChatStackFrame",
|
|
19
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any, Dict
|
|
5
|
+
from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class ChitChatStackFrame(DialogueStackFrame):
|
|
10
|
+
@classmethod
|
|
11
|
+
def type(cls) -> str:
|
|
12
|
+
"""Returns the type of the frame."""
|
|
13
|
+
return "chitchat"
|
|
14
|
+
|
|
15
|
+
@staticmethod
|
|
16
|
+
def from_dict(data: Dict[str, Any]) -> ChitChatStackFrame:
|
|
17
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
The created `DialogueStackFrame`.
|
|
24
|
+
"""
|
|
25
|
+
return ChitChatStackFrame(
|
|
26
|
+
frame_id=data["frame_id"],
|
|
27
|
+
)
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import inspect
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
import dataclasses
|
|
6
|
+
from enum import Enum
|
|
7
|
+
from functools import lru_cache
|
|
8
|
+
from typing import Any, Dict, List, Tuple, Type
|
|
9
|
+
|
|
10
|
+
import structlog
|
|
11
|
+
from rasa.shared.exceptions import RasaException
|
|
12
|
+
|
|
13
|
+
import rasa.shared.utils.common
|
|
14
|
+
from rasa.shared.utils.io import random_string
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
structlogger = structlog.get_logger()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def generate_stack_frame_id() -> str:
|
|
21
|
+
"""Generates a stack frame ID.
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
The generated stack frame ID.
|
|
25
|
+
"""
|
|
26
|
+
return random_string(8)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@lru_cache
|
|
30
|
+
def _get_all_subclasses() -> List[Type[DialogueStackFrame]]:
|
|
31
|
+
stack_frame_subclasses = rasa.shared.utils.common.all_subclasses(DialogueStackFrame)
|
|
32
|
+
|
|
33
|
+
# Get all the subclasses of DialogueStackFrame from the patterns package
|
|
34
|
+
# in case these are not all imported at runtime
|
|
35
|
+
modules = rasa.shared.utils.common.import_package_modules(
|
|
36
|
+
"rasa.dialogue_understanding.patterns"
|
|
37
|
+
)
|
|
38
|
+
extra_subclasses = [
|
|
39
|
+
clazz
|
|
40
|
+
for module in modules
|
|
41
|
+
for _, clazz in inspect.getmembers(module, inspect.isclass)
|
|
42
|
+
if issubclass(clazz, DialogueStackFrame) and clazz not in stack_frame_subclasses
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
stack_frame_subclasses.extend(extra_subclasses)
|
|
46
|
+
return stack_frame_subclasses
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class InvalidStackFrameType(RasaException):
|
|
50
|
+
"""Raised if a stack frame type is invalid."""
|
|
51
|
+
|
|
52
|
+
def __init__(self, frame_type: str) -> None:
|
|
53
|
+
"""Creates a `InvalidStackFrameType`.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
frame_type: The invalid frame type.
|
|
57
|
+
"""
|
|
58
|
+
super().__init__(f"Invalid stack frame type '{frame_type}'.")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@dataclass
|
|
62
|
+
class DialogueStackFrame:
|
|
63
|
+
"""Represents the current flow step."""
|
|
64
|
+
|
|
65
|
+
frame_id: str = field(default_factory=generate_stack_frame_id)
|
|
66
|
+
"""The ID of the current frame."""
|
|
67
|
+
|
|
68
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
69
|
+
"""Returns the `DialogueStackFrame` as a dictionary.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
The `DialogueStackFrame` as a dictionary.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
def custom_asdict_factory(fields: List[Tuple[str, Any]]) -> Dict[str, Any]:
|
|
76
|
+
"""Converts enum values to their value."""
|
|
77
|
+
|
|
78
|
+
def rename_internal(field_name: str) -> str:
|
|
79
|
+
return field_name[:-1] if field_name.endswith("_") else field_name
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
rename_internal(field): value.value
|
|
83
|
+
if isinstance(value, Enum)
|
|
84
|
+
else value
|
|
85
|
+
for field, value in fields
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
data = dataclasses.asdict(self, dict_factory=custom_asdict_factory)
|
|
89
|
+
data["type"] = self.type()
|
|
90
|
+
return data
|
|
91
|
+
|
|
92
|
+
@classmethod
|
|
93
|
+
def type(cls) -> str:
|
|
94
|
+
"""Returns the type of the frame."""
|
|
95
|
+
raise NotImplementedError
|
|
96
|
+
|
|
97
|
+
@staticmethod
|
|
98
|
+
def from_dict(data: Dict[str, Any]) -> DialogueStackFrame:
|
|
99
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
The created `DialogueStackFrame`.
|
|
106
|
+
"""
|
|
107
|
+
raise NotImplementedError
|
|
108
|
+
|
|
109
|
+
def context_as_dict(
|
|
110
|
+
self, underlying_frames: List[DialogueStackFrame]
|
|
111
|
+
) -> Dict[str, Any]:
|
|
112
|
+
"""Returns the context of the frame."""
|
|
113
|
+
return self.as_dict()
|
|
114
|
+
|
|
115
|
+
@staticmethod
|
|
116
|
+
def create_typed_frame(data: Dict[str, Any]) -> DialogueStackFrame:
|
|
117
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
The created `DialogueStackFrame`.
|
|
124
|
+
"""
|
|
125
|
+
typ = data.get("type")
|
|
126
|
+
|
|
127
|
+
for clazz in _get_all_subclasses():
|
|
128
|
+
try:
|
|
129
|
+
if typ == clazz.type():
|
|
130
|
+
return clazz.from_dict(data)
|
|
131
|
+
except NotImplementedError:
|
|
132
|
+
# we don't want to raise an error if the frame type is not
|
|
133
|
+
# implemented, as this is ok to be raised by an abstract class
|
|
134
|
+
pass
|
|
135
|
+
else:
|
|
136
|
+
structlogger.warning("dialogue_stack.frame.unknown_type", data=data)
|
|
137
|
+
raise InvalidStackFrameType(typ)
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from typing import Any, Dict, Optional
|
|
5
|
+
|
|
6
|
+
from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
|
|
7
|
+
from rasa.shared.core.flows.steps.constants import START_STEP
|
|
8
|
+
from rasa.shared.core.flows import Flow, FlowsList, FlowStep
|
|
9
|
+
from rasa.shared.exceptions import RasaException
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class InvalidFlowStackFrameType(RasaException):
|
|
13
|
+
"""Raised if the stack frame type is invalid."""
|
|
14
|
+
|
|
15
|
+
def __init__(self, frame_type: Optional[str]) -> None:
|
|
16
|
+
"""Creates a `InvalidFlowStackFrameType`.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
frame_type: The invalid stack frame type.
|
|
20
|
+
"""
|
|
21
|
+
super().__init__(f"Invalid stack frame type '{frame_type}'.")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class FlowStackFrameType(str, Enum):
|
|
25
|
+
INTERRUPT = "interrupt"
|
|
26
|
+
"""The frame is an interrupt frame.
|
|
27
|
+
|
|
28
|
+
This means that the previous flow was interrupted by this flow. An
|
|
29
|
+
interrupt should be used for frames that span multiple turns and
|
|
30
|
+
where we expect the user needing help to get back to the previous
|
|
31
|
+
flow."""
|
|
32
|
+
LINK = "link"
|
|
33
|
+
"""The frame is a link frame.
|
|
34
|
+
|
|
35
|
+
This means that the previous flow linked to this flow."""
|
|
36
|
+
|
|
37
|
+
CALL = "call"
|
|
38
|
+
"""The frame is a flow that is called from another flow."""
|
|
39
|
+
|
|
40
|
+
REGULAR = "regular"
|
|
41
|
+
"""The frame is a regular frame.
|
|
42
|
+
|
|
43
|
+
In all other cases, this is the case."""
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
def from_str(typ: Optional[str]) -> "FlowStackFrameType":
|
|
47
|
+
"""Creates a `FlowStackFrameType` from a string.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
typ: The string to create the `FlowStackFrameType` from.
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
The created `FlowStackFrameType`."""
|
|
54
|
+
if typ is None:
|
|
55
|
+
return FlowStackFrameType.REGULAR
|
|
56
|
+
elif typ == FlowStackFrameType.INTERRUPT.value:
|
|
57
|
+
return FlowStackFrameType.INTERRUPT
|
|
58
|
+
elif typ == FlowStackFrameType.CALL.value:
|
|
59
|
+
return FlowStackFrameType.CALL
|
|
60
|
+
elif typ == FlowStackFrameType.LINK.value:
|
|
61
|
+
return FlowStackFrameType.LINK
|
|
62
|
+
elif typ == FlowStackFrameType.REGULAR.value:
|
|
63
|
+
return FlowStackFrameType.REGULAR
|
|
64
|
+
else:
|
|
65
|
+
raise InvalidFlowStackFrameType(typ)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class InvalidFlowIdException(Exception):
|
|
69
|
+
"""Raised if the flow ID is invalid."""
|
|
70
|
+
|
|
71
|
+
def __init__(self, flow_id: str) -> None:
|
|
72
|
+
"""Creates a `InvalidFlowIdException`.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
flow_id: The invalid flow ID.
|
|
76
|
+
"""
|
|
77
|
+
super().__init__(f"Invalid flow ID '{flow_id}'.")
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class InvalidFlowStepIdException(Exception):
|
|
81
|
+
"""Raised if the flow step ID is invalid."""
|
|
82
|
+
|
|
83
|
+
def __init__(self, flow_id: str, step_id: str) -> None:
|
|
84
|
+
"""Creates a `InvalidFlowStepIdException`.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
flow_id: The invalid flow ID.
|
|
88
|
+
step_id: The invalid flow step ID.
|
|
89
|
+
"""
|
|
90
|
+
super().__init__(f"Invalid flow step ID '{step_id}' for flow '{flow_id}'.")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@dataclass
|
|
94
|
+
class BaseFlowStackFrame(DialogueStackFrame):
|
|
95
|
+
flow_id: str = "" # needed to avoid "default arg before non-default" error
|
|
96
|
+
"""The ID of the current flow."""
|
|
97
|
+
step_id: str = START_STEP
|
|
98
|
+
"""The ID of the current step."""
|
|
99
|
+
|
|
100
|
+
def flow(self, all_flows: FlowsList) -> Flow:
|
|
101
|
+
"""Returns the current flow.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
all_flows: All flows in the assistant.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
The current flow."""
|
|
108
|
+
flow = all_flows.flow_by_id(self.flow_id)
|
|
109
|
+
if not flow:
|
|
110
|
+
# we shouldn't ever end up with a frame that belongs to a non
|
|
111
|
+
# existing flow, but if we do, we should raise an error
|
|
112
|
+
raise InvalidFlowIdException(self.flow_id)
|
|
113
|
+
return flow
|
|
114
|
+
|
|
115
|
+
def step(self, all_flows: FlowsList) -> FlowStep:
|
|
116
|
+
"""Returns the current flow step.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
all_flows: All flows in the assistant.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
The current flow step."""
|
|
123
|
+
flow = self.flow(all_flows)
|
|
124
|
+
step = flow.step_by_id(self.step_id)
|
|
125
|
+
if not step:
|
|
126
|
+
# we shouldn't ever end up with a frame that belongs to a non
|
|
127
|
+
# existing step, but if we do, we should raise an error
|
|
128
|
+
raise InvalidFlowStepIdException(self.flow_id, self.step_id)
|
|
129
|
+
return step
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
@dataclass
|
|
133
|
+
class UserFlowStackFrame(BaseFlowStackFrame):
|
|
134
|
+
frame_type: FlowStackFrameType = FlowStackFrameType.REGULAR
|
|
135
|
+
"""The type of the frame. Defaults to `StackFrameType.REGULAR`."""
|
|
136
|
+
|
|
137
|
+
@classmethod
|
|
138
|
+
def type(cls) -> str:
|
|
139
|
+
"""Returns the type of the frame."""
|
|
140
|
+
return "flow"
|
|
141
|
+
|
|
142
|
+
@staticmethod
|
|
143
|
+
def from_dict(data: Dict[str, Any]) -> UserFlowStackFrame:
|
|
144
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
The created `DialogueStackFrame`.
|
|
151
|
+
"""
|
|
152
|
+
return UserFlowStackFrame(
|
|
153
|
+
frame_id=data["frame_id"],
|
|
154
|
+
flow_id=data["flow_id"],
|
|
155
|
+
step_id=data["step_id"],
|
|
156
|
+
frame_type=FlowStackFrameType.from_str(data.get("frame_type")),
|
|
157
|
+
)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class SearchStackFrame(DialogueStackFrame):
|
|
10
|
+
@classmethod
|
|
11
|
+
def type(cls) -> str:
|
|
12
|
+
"""Returns the type of the frame."""
|
|
13
|
+
return "search"
|
|
14
|
+
|
|
15
|
+
@staticmethod
|
|
16
|
+
def from_dict(data: Dict[str, Any]) -> SearchStackFrame:
|
|
17
|
+
"""Creates a `DialogueStackFrame` from a dictionary.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
data: The dictionary to create the `DialogueStackFrame` from.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
The created `DialogueStackFrame`.
|
|
24
|
+
"""
|
|
25
|
+
return SearchStackFrame(
|
|
26
|
+
frame_id=data["frame_id"],
|
|
27
|
+
)
|