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,86 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any, Dict, List
|
|
5
|
+
|
|
6
|
+
import structlog
|
|
7
|
+
from rasa.dialogue_understanding.commands import Command
|
|
8
|
+
from rasa.dialogue_understanding.patterns.clarify import ClarifyPatternFlowStackFrame
|
|
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
|
+
|
|
13
|
+
structlogger = structlog.get_logger()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class ClarifyCommand(Command):
|
|
18
|
+
"""A command to indicate that the bot should ask for clarification."""
|
|
19
|
+
|
|
20
|
+
options: List[str]
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def command(cls) -> str:
|
|
24
|
+
"""Returns the command type."""
|
|
25
|
+
return "clarify"
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def from_dict(cls, data: Dict[str, Any]) -> ClarifyCommand:
|
|
29
|
+
"""Converts the dictionary to a command.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
The converted dictionary.
|
|
33
|
+
"""
|
|
34
|
+
try:
|
|
35
|
+
return ClarifyCommand(options=data["options"])
|
|
36
|
+
except KeyError as e:
|
|
37
|
+
raise ValueError(
|
|
38
|
+
f"Missing parameter '{e}' while parsing ClarifyCommand."
|
|
39
|
+
) from e
|
|
40
|
+
|
|
41
|
+
def run_command_on_tracker(
|
|
42
|
+
self,
|
|
43
|
+
tracker: DialogueStateTracker,
|
|
44
|
+
all_flows: FlowsList,
|
|
45
|
+
original_tracker: DialogueStateTracker,
|
|
46
|
+
) -> List[Event]:
|
|
47
|
+
"""Runs the command on the tracker.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
tracker: The tracker to run the command on.
|
|
51
|
+
all_flows: All flows in the assistant.
|
|
52
|
+
original_tracker: The tracker before any command was executed.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
The events to apply to the tracker.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
flows = [all_flows.flow_by_id(opt) for opt in self.options]
|
|
59
|
+
clean_options = [flow.id for flow in flows if flow is not None]
|
|
60
|
+
if len(clean_options) != len(self.options):
|
|
61
|
+
structlogger.debug(
|
|
62
|
+
"command_executor.altered_command.dropped_clarification_options",
|
|
63
|
+
command=self,
|
|
64
|
+
original_options=self.options,
|
|
65
|
+
cleaned_options=clean_options,
|
|
66
|
+
)
|
|
67
|
+
if len(clean_options) == 0:
|
|
68
|
+
structlogger.debug(
|
|
69
|
+
"command_executor.skip_command.empty_clarification", command=self
|
|
70
|
+
)
|
|
71
|
+
return []
|
|
72
|
+
|
|
73
|
+
stack = tracker.stack
|
|
74
|
+
relevant_flows = [all_flows.flow_by_id(opt) for opt in clean_options]
|
|
75
|
+
names = [flow.readable_name() for flow in relevant_flows if flow is not None]
|
|
76
|
+
stack.push(ClarifyPatternFlowStackFrame(names=names))
|
|
77
|
+
return tracker.create_stack_updated_events(stack)
|
|
78
|
+
|
|
79
|
+
def __hash__(self) -> int:
|
|
80
|
+
return hash(tuple(self.options))
|
|
81
|
+
|
|
82
|
+
def __eq__(self, other: object) -> bool:
|
|
83
|
+
if not isinstance(other, ClarifyCommand):
|
|
84
|
+
return False
|
|
85
|
+
|
|
86
|
+
return other.options == self.options
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
import dataclasses
|
|
5
|
+
from typing import Any, Dict, List
|
|
6
|
+
from rasa.shared.core.events import Event
|
|
7
|
+
from rasa.shared.core.flows import FlowsList
|
|
8
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
9
|
+
import rasa.shared.utils.common
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class Command:
|
|
14
|
+
"""A command that can be executed on a tracker."""
|
|
15
|
+
|
|
16
|
+
@classmethod
|
|
17
|
+
def type(cls) -> str:
|
|
18
|
+
"""Returns the type of the command."""
|
|
19
|
+
raise NotImplementedError()
|
|
20
|
+
|
|
21
|
+
@classmethod
|
|
22
|
+
def command(cls) -> str:
|
|
23
|
+
"""Returns the command type."""
|
|
24
|
+
raise NotImplementedError()
|
|
25
|
+
|
|
26
|
+
@classmethod
|
|
27
|
+
def from_dict(cls, data: Dict[str, Any]) -> Command:
|
|
28
|
+
"""Converts the dictionary to a command.
|
|
29
|
+
|
|
30
|
+
Returns:
|
|
31
|
+
The converted dictionary.
|
|
32
|
+
"""
|
|
33
|
+
raise NotImplementedError()
|
|
34
|
+
|
|
35
|
+
@staticmethod
|
|
36
|
+
def command_from_json(data: Dict[str, Any]) -> "Command":
|
|
37
|
+
"""Converts a dictionary to a command object.
|
|
38
|
+
|
|
39
|
+
First, resolves the command type and then converts the dictionary to
|
|
40
|
+
the corresponding command object.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
data: The dictionary to convert.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
The converted command object.
|
|
47
|
+
"""
|
|
48
|
+
for cls in rasa.shared.utils.common.all_subclasses(Command):
|
|
49
|
+
try:
|
|
50
|
+
if data.get("command") == cls.command():
|
|
51
|
+
return cls.from_dict(data)
|
|
52
|
+
except NotImplementedError:
|
|
53
|
+
# we don't want to raise an error if the frame type is not
|
|
54
|
+
# implemented, as this is ok to be raised by an abstract class
|
|
55
|
+
pass
|
|
56
|
+
else:
|
|
57
|
+
raise ValueError(f"Unknown command type: {data}")
|
|
58
|
+
|
|
59
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
60
|
+
"""Converts the command to a dictionary.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
The converted dictionary.
|
|
64
|
+
"""
|
|
65
|
+
data = dataclasses.asdict(self)
|
|
66
|
+
data["command"] = self.command()
|
|
67
|
+
return data
|
|
68
|
+
|
|
69
|
+
def run_command_on_tracker(
|
|
70
|
+
self,
|
|
71
|
+
tracker: DialogueStateTracker,
|
|
72
|
+
all_flows: FlowsList,
|
|
73
|
+
original_tracker: DialogueStateTracker,
|
|
74
|
+
) -> List[Event]:
|
|
75
|
+
"""Runs the command on the tracker.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
tracker: The tracker to run the command on.
|
|
79
|
+
all_flows: All flows in the assistant.
|
|
80
|
+
original_tracker: The tracker before any command was executed.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
The events to apply to the tracker.
|
|
84
|
+
"""
|
|
85
|
+
raise NotImplementedError()
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any, Dict, List, Optional
|
|
5
|
+
|
|
6
|
+
import structlog
|
|
7
|
+
|
|
8
|
+
from rasa.dialogue_understanding.commands import Command
|
|
9
|
+
from rasa.dialogue_understanding.patterns.correction import (
|
|
10
|
+
FLOW_PATTERN_CORRECTION_ID,
|
|
11
|
+
CorrectionPatternFlowStackFrame,
|
|
12
|
+
)
|
|
13
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
14
|
+
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
15
|
+
BaseFlowStackFrame,
|
|
16
|
+
)
|
|
17
|
+
from rasa.shared.core.events import Event
|
|
18
|
+
from rasa.shared.core.flows.flow_step import FlowStepWithFlowReference
|
|
19
|
+
from rasa.shared.core.flows.steps.constants import END_STEP
|
|
20
|
+
from rasa.shared.core.flows.steps.continuation import ContinueFlowStep
|
|
21
|
+
from rasa.shared.core.flows import FlowsList
|
|
22
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
23
|
+
import rasa.dialogue_understanding.stack.utils as utils
|
|
24
|
+
|
|
25
|
+
structlogger = structlog.get_logger()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass
|
|
29
|
+
class CorrectedSlot:
|
|
30
|
+
"""A slot that was corrected."""
|
|
31
|
+
|
|
32
|
+
name: str
|
|
33
|
+
value: Any
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@dataclass
|
|
37
|
+
class CorrectSlotsCommand(Command):
|
|
38
|
+
"""A command to correct the value of a slot."""
|
|
39
|
+
|
|
40
|
+
corrected_slots: List[CorrectedSlot]
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def command(cls) -> str:
|
|
44
|
+
"""Returns the command type."""
|
|
45
|
+
return "correct slot"
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def from_dict(cls, data: Dict[str, Any]) -> CorrectSlotsCommand:
|
|
49
|
+
"""Converts the dictionary to a command.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
The converted dictionary.
|
|
53
|
+
"""
|
|
54
|
+
try:
|
|
55
|
+
return CorrectSlotsCommand(
|
|
56
|
+
corrected_slots=[
|
|
57
|
+
CorrectedSlot(s["name"], value=s["value"])
|
|
58
|
+
for s in data["corrected_slots"]
|
|
59
|
+
]
|
|
60
|
+
)
|
|
61
|
+
except KeyError as e:
|
|
62
|
+
raise ValueError(
|
|
63
|
+
f"Missing key when parsing CorrectSlotsCommand: {e}"
|
|
64
|
+
) from e
|
|
65
|
+
|
|
66
|
+
@staticmethod
|
|
67
|
+
def are_all_slots_reset_only(
|
|
68
|
+
proposed_slots: Dict[str, Any], all_flows: FlowsList
|
|
69
|
+
) -> bool:
|
|
70
|
+
"""Checks if all slots are reset only.
|
|
71
|
+
|
|
72
|
+
A slot is reset only if the `collect` step it gets filled by
|
|
73
|
+
has the `ask_before_filling` flag set to `True`. This means, the slot
|
|
74
|
+
shouldn't be filled if the question isn't asked.
|
|
75
|
+
|
|
76
|
+
If such a slot gets corrected, we don't want to correct the slot but
|
|
77
|
+
instead reset the flow to the question where the slot was asked.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
proposed_slots: The proposed slots.
|
|
81
|
+
all_flows: All flows in the assistant.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
`True` if all slots are reset only, `False` otherwise.
|
|
85
|
+
"""
|
|
86
|
+
return all(
|
|
87
|
+
collect_step.collect not in proposed_slots
|
|
88
|
+
or collect_step.ask_before_filling
|
|
89
|
+
for flow in all_flows.underlying_flows
|
|
90
|
+
for collect_step in flow.get_collect_steps()
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
@staticmethod
|
|
94
|
+
def find_earliest_updated_collect_info(
|
|
95
|
+
updated_slots: Dict[str, Any],
|
|
96
|
+
all_flows: FlowsList,
|
|
97
|
+
tracker: DialogueStateTracker,
|
|
98
|
+
) -> Optional[FlowStepWithFlowReference]:
|
|
99
|
+
"""Find the earliest collect information step that fills one of the slots.
|
|
100
|
+
|
|
101
|
+
When we update slots, we need to reset a flow to the question when the slot
|
|
102
|
+
was asked. This function finds the earliest collect information step that
|
|
103
|
+
fills one of the slots - with the idea being that we afterwards go through
|
|
104
|
+
the other updated slots.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
updated_slots: The slots that were updated.
|
|
108
|
+
all_flows: All flows.
|
|
109
|
+
tracker: The dialogue state tracker.
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
The earliest collect information step that fills one of the slots and
|
|
113
|
+
the flow id of that step.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
collect_steps = utils.previous_collect_steps_for_active_flow(tracker, all_flows)
|
|
117
|
+
|
|
118
|
+
for collect_step, flow_id in collect_steps:
|
|
119
|
+
if collect_step.collect in updated_slots:
|
|
120
|
+
return FlowStepWithFlowReference(collect_step, flow_id)
|
|
121
|
+
|
|
122
|
+
return None
|
|
123
|
+
|
|
124
|
+
def corrected_slots_dict(self, tracker: DialogueStateTracker) -> Dict[str, Any]:
|
|
125
|
+
"""Returns the slots that should be corrected.
|
|
126
|
+
|
|
127
|
+
Filters out slots, that are already set to the correct value.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
tracker: The tracker.
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
A dict with the slots and their values that should be corrected.
|
|
134
|
+
"""
|
|
135
|
+
proposed_slots = {}
|
|
136
|
+
for corrected_slot in self.corrected_slots:
|
|
137
|
+
if tracker.get_slot(corrected_slot.name) != corrected_slot.value:
|
|
138
|
+
proposed_slots[corrected_slot.name] = corrected_slot.value
|
|
139
|
+
else:
|
|
140
|
+
structlogger.debug(
|
|
141
|
+
"command_executor.skip_correction.slot_already_set", command=self
|
|
142
|
+
)
|
|
143
|
+
return proposed_slots
|
|
144
|
+
|
|
145
|
+
@staticmethod
|
|
146
|
+
def determine_index_for_new_correction_frame(
|
|
147
|
+
top_flow_frame: BaseFlowStackFrame, stack: DialogueStack
|
|
148
|
+
) -> int:
|
|
149
|
+
"""Returns the index for the correction frame.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
top_flow_frame: The top flow frame.
|
|
153
|
+
stack: The stack.
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
The index for the correction frame.
|
|
157
|
+
"""
|
|
158
|
+
if top_flow_frame.flow_id != FLOW_PATTERN_CORRECTION_ID:
|
|
159
|
+
# we are not in a correction flow, so we can just push the correction
|
|
160
|
+
# frame on top of the stack
|
|
161
|
+
return len(stack.frames)
|
|
162
|
+
else:
|
|
163
|
+
# we allow the previous correction to finish first before
|
|
164
|
+
# starting the new one. that's why we insert the new correction below
|
|
165
|
+
# the previous one.
|
|
166
|
+
for i, frame in enumerate(stack.frames):
|
|
167
|
+
if frame.frame_id == top_flow_frame.frame_id:
|
|
168
|
+
return i
|
|
169
|
+
else:
|
|
170
|
+
# we should never get here as we should always find the previous
|
|
171
|
+
# correction frame
|
|
172
|
+
raise ValueError(
|
|
173
|
+
f"Could not find the previous correction frame "
|
|
174
|
+
f"{top_flow_frame.frame_id} on the stack {stack}."
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
@staticmethod
|
|
178
|
+
def end_previous_correction(
|
|
179
|
+
top_flow_frame: BaseFlowStackFrame, stack: DialogueStack
|
|
180
|
+
) -> None:
|
|
181
|
+
"""Ends the previous correction.
|
|
182
|
+
|
|
183
|
+
If the top flow frame is already a correction, we wrap up the previous
|
|
184
|
+
correction before starting the new one. All frames that were added
|
|
185
|
+
after that correction and the correction itself will be set to continue
|
|
186
|
+
at the END step.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
top_flow_frame: The top flow frame.
|
|
190
|
+
stack: The stack.
|
|
191
|
+
"""
|
|
192
|
+
if top_flow_frame.flow_id != FLOW_PATTERN_CORRECTION_ID:
|
|
193
|
+
# only need to end something if we are already in a correction
|
|
194
|
+
return
|
|
195
|
+
|
|
196
|
+
for frame in reversed(stack.frames):
|
|
197
|
+
if isinstance(frame, BaseFlowStackFrame):
|
|
198
|
+
frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
|
|
199
|
+
if frame.frame_id == top_flow_frame.frame_id:
|
|
200
|
+
break
|
|
201
|
+
|
|
202
|
+
@classmethod
|
|
203
|
+
def create_correction_frame(
|
|
204
|
+
cls,
|
|
205
|
+
proposed_slots: Dict[str, Any],
|
|
206
|
+
all_flows: FlowsList,
|
|
207
|
+
tracker: DialogueStateTracker,
|
|
208
|
+
) -> Optional[CorrectionPatternFlowStackFrame]:
|
|
209
|
+
"""Creates a correction frame.
|
|
210
|
+
|
|
211
|
+
Args:
|
|
212
|
+
proposed_slots: The proposed slots.
|
|
213
|
+
all_flows: All flows in the assistant.
|
|
214
|
+
tracker: The dialogue state tracker.
|
|
215
|
+
|
|
216
|
+
Returns:
|
|
217
|
+
The correction frame.
|
|
218
|
+
"""
|
|
219
|
+
# check if all corrected slots have ask_before_filling=True
|
|
220
|
+
# if this is a case, we are not correcting a value but we
|
|
221
|
+
# are resetting the slots and jumping back to the first question
|
|
222
|
+
is_reset_only = cls.are_all_slots_reset_only(proposed_slots, all_flows)
|
|
223
|
+
|
|
224
|
+
earliest_collect = cls.find_earliest_updated_collect_info(
|
|
225
|
+
proposed_slots, all_flows, tracker
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
if not earliest_collect and not is_reset_only:
|
|
229
|
+
# if we could not find any step in the flow, where the slots were
|
|
230
|
+
# previously set, and we also don't want to reset the slots, do
|
|
231
|
+
# not correct the slots.
|
|
232
|
+
structlogger.debug(
|
|
233
|
+
"command_executor.skip_correction",
|
|
234
|
+
is_reset_only=is_reset_only,
|
|
235
|
+
)
|
|
236
|
+
return None
|
|
237
|
+
|
|
238
|
+
return CorrectionPatternFlowStackFrame(
|
|
239
|
+
is_reset_only=is_reset_only,
|
|
240
|
+
corrected_slots=proposed_slots,
|
|
241
|
+
reset_flow_id=earliest_collect.flow_id if earliest_collect else None,
|
|
242
|
+
reset_step_id=earliest_collect.step.id if earliest_collect else None,
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
def run_command_on_tracker(
|
|
246
|
+
self,
|
|
247
|
+
tracker: DialogueStateTracker,
|
|
248
|
+
all_flows: FlowsList,
|
|
249
|
+
original_tracker: DialogueStateTracker,
|
|
250
|
+
) -> List[Event]:
|
|
251
|
+
"""Runs the command on the tracker.
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
tracker: The tracker to run the command on.
|
|
255
|
+
all_flows: All flows in the assistant.
|
|
256
|
+
original_tracker: The tracker before any command was executed.
|
|
257
|
+
|
|
258
|
+
Returns:
|
|
259
|
+
The events to apply to the tracker.
|
|
260
|
+
"""
|
|
261
|
+
stack = tracker.stack
|
|
262
|
+
|
|
263
|
+
top_flow_frame = utils.top_flow_frame(stack)
|
|
264
|
+
if not top_flow_frame:
|
|
265
|
+
# we shouldn't end up here as a correction shouldn't be triggered
|
|
266
|
+
# if we are not in any flow. but just in case we do, we
|
|
267
|
+
# just skip the command.
|
|
268
|
+
structlogger.warning(
|
|
269
|
+
"command_executor.correct_slots.no_active_flow", command=self
|
|
270
|
+
)
|
|
271
|
+
return []
|
|
272
|
+
|
|
273
|
+
structlogger.debug("command_executor.correct_slots", command=self)
|
|
274
|
+
proposed_slots = self.corrected_slots_dict(tracker)
|
|
275
|
+
|
|
276
|
+
correction_frame = self.create_correction_frame(
|
|
277
|
+
proposed_slots, all_flows, tracker
|
|
278
|
+
)
|
|
279
|
+
if not correction_frame:
|
|
280
|
+
return []
|
|
281
|
+
|
|
282
|
+
insertion_index = self.determine_index_for_new_correction_frame(
|
|
283
|
+
top_flow_frame, stack
|
|
284
|
+
)
|
|
285
|
+
self.end_previous_correction(top_flow_frame, stack)
|
|
286
|
+
|
|
287
|
+
stack.push(correction_frame, index=insertion_index)
|
|
288
|
+
return tracker.create_stack_updated_events(stack)
|
|
289
|
+
|
|
290
|
+
def __hash__(self) -> int:
|
|
291
|
+
return hash(self.command())
|
|
292
|
+
|
|
293
|
+
def __eq__(self, other: object) -> bool:
|
|
294
|
+
if not isinstance(other, CorrectSlotsCommand):
|
|
295
|
+
return False
|
|
296
|
+
|
|
297
|
+
return True
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from typing import Any, Dict, List, Text
|
|
5
|
+
|
|
6
|
+
import structlog
|
|
7
|
+
|
|
8
|
+
from rasa.dialogue_understanding.commands import Command
|
|
9
|
+
from rasa.dialogue_understanding.patterns.internal_error import (
|
|
10
|
+
InternalErrorPatternFlowStackFrame,
|
|
11
|
+
)
|
|
12
|
+
from rasa.shared.constants import RASA_PATTERN_INTERNAL_ERROR_DEFAULT
|
|
13
|
+
from rasa.shared.core.events import Event
|
|
14
|
+
from rasa.shared.core.flows import FlowsList
|
|
15
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
16
|
+
|
|
17
|
+
structlogger = structlog.get_logger()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class ErrorCommand(Command):
|
|
22
|
+
"""A command to indicate that the bot failed to handle the dialogue."""
|
|
23
|
+
|
|
24
|
+
error_type: Text = RASA_PATTERN_INTERNAL_ERROR_DEFAULT
|
|
25
|
+
info: Dict[Text, Any] = field(default_factory=dict)
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def command(cls) -> str:
|
|
29
|
+
"""Returns the command type."""
|
|
30
|
+
return "error"
|
|
31
|
+
|
|
32
|
+
@classmethod
|
|
33
|
+
def from_dict(cls, data: Dict[str, Any]) -> ErrorCommand:
|
|
34
|
+
"""Converts the dictionary to a command.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
The converted dictionary.
|
|
38
|
+
"""
|
|
39
|
+
return ErrorCommand(
|
|
40
|
+
error_type=data.get("error_type", RASA_PATTERN_INTERNAL_ERROR_DEFAULT),
|
|
41
|
+
info=data.get("info", {}),
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
def run_command_on_tracker(
|
|
45
|
+
self,
|
|
46
|
+
tracker: DialogueStateTracker,
|
|
47
|
+
all_flows: FlowsList,
|
|
48
|
+
original_tracker: DialogueStateTracker,
|
|
49
|
+
) -> List[Event]:
|
|
50
|
+
"""Runs the command on the tracker.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
tracker: The tracker to run the command on.
|
|
54
|
+
all_flows: All flows in the assistant.
|
|
55
|
+
original_tracker: The tracker before any command was executed.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
The events to apply to the tracker.
|
|
59
|
+
"""
|
|
60
|
+
stack = tracker.stack
|
|
61
|
+
structlogger.debug("command_executor.error", command=self)
|
|
62
|
+
stack.push(
|
|
63
|
+
InternalErrorPatternFlowStackFrame(
|
|
64
|
+
error_type=self.error_type, info=self.info
|
|
65
|
+
)
|
|
66
|
+
)
|
|
67
|
+
return tracker.create_stack_updated_events(stack)
|
|
68
|
+
|
|
69
|
+
def __hash__(self) -> int:
|
|
70
|
+
hashed = hash(self.error_type)
|
|
71
|
+
if self.info:
|
|
72
|
+
hashed += hash(str(self.info))
|
|
73
|
+
return hashed
|
|
74
|
+
|
|
75
|
+
def __eq__(self, other: object) -> bool:
|
|
76
|
+
if not isinstance(other, ErrorCommand):
|
|
77
|
+
return False
|
|
78
|
+
|
|
79
|
+
return other.error_type == self.error_type and other.info == self.info
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any, Dict, List
|
|
5
|
+
|
|
6
|
+
import structlog
|
|
7
|
+
|
|
8
|
+
from rasa.dialogue_understanding.commands import Command
|
|
9
|
+
from rasa.dialogue_understanding.patterns.code_change import CodeChangeFlowStackFrame
|
|
10
|
+
from rasa.shared.core.events import Event
|
|
11
|
+
from rasa.shared.core.flows import FlowsList
|
|
12
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
13
|
+
from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
|
|
14
|
+
|
|
15
|
+
structlogger = structlog.get_logger()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class HandleCodeChangeCommand(Command):
|
|
20
|
+
"""A that is executed when the flows have changed."""
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def command(cls) -> str:
|
|
24
|
+
"""Returns the command type."""
|
|
25
|
+
return "handle code change"
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def from_dict(cls, data: Dict[str, Any]) -> HandleCodeChangeCommand:
|
|
29
|
+
"""Converts the dictionary to a command.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
The converted dictionary.
|
|
33
|
+
"""
|
|
34
|
+
return HandleCodeChangeCommand()
|
|
35
|
+
|
|
36
|
+
def run_command_on_tracker(
|
|
37
|
+
self,
|
|
38
|
+
tracker: DialogueStateTracker,
|
|
39
|
+
all_flows: FlowsList,
|
|
40
|
+
original_tracker: DialogueStateTracker,
|
|
41
|
+
) -> List[Event]:
|
|
42
|
+
"""Runs the command on the tracker.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
tracker: The tracker to run the command on.
|
|
46
|
+
all_flows: All flows in the assistant.
|
|
47
|
+
original_tracker: The tracker before any command was executed.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
The events to apply to the tracker.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
stack = tracker.stack
|
|
54
|
+
user_frame = top_user_flow_frame(original_tracker.stack)
|
|
55
|
+
current_flow = user_frame.flow(all_flows) if user_frame else None
|
|
56
|
+
|
|
57
|
+
if not current_flow:
|
|
58
|
+
structlogger.debug(
|
|
59
|
+
"handle_code_change_command.skip.no_active_flow", command=self
|
|
60
|
+
)
|
|
61
|
+
return []
|
|
62
|
+
|
|
63
|
+
stack.push(CodeChangeFlowStackFrame())
|
|
64
|
+
return tracker.create_stack_updated_events(stack)
|
|
65
|
+
|
|
66
|
+
def __hash__(self) -> int:
|
|
67
|
+
return hash(self.command())
|
|
68
|
+
|
|
69
|
+
def __eq__(self, other: object) -> bool:
|
|
70
|
+
if not isinstance(other, HandleCodeChangeCommand):
|
|
71
|
+
return False
|
|
72
|
+
|
|
73
|
+
return True
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any, Dict, List
|
|
5
|
+
|
|
6
|
+
import structlog
|
|
7
|
+
from rasa.dialogue_understanding.commands import Command
|
|
8
|
+
from rasa.dialogue_understanding.patterns.human_handoff import (
|
|
9
|
+
HumanHandoffPatternFlowStackFrame,
|
|
10
|
+
)
|
|
11
|
+
from rasa.shared.core.events import Event
|
|
12
|
+
from rasa.shared.core.flows import FlowsList
|
|
13
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
14
|
+
|
|
15
|
+
structlogger = structlog.get_logger()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class HumanHandoffCommand(Command):
|
|
20
|
+
"""A command to indicate that the bot should handoff to a human."""
|
|
21
|
+
|
|
22
|
+
@classmethod
|
|
23
|
+
def command(cls) -> str:
|
|
24
|
+
"""Returns the command type."""
|
|
25
|
+
return "human handoff"
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def from_dict(cls, data: Dict[str, Any]) -> HumanHandoffCommand:
|
|
29
|
+
"""Converts the dictionary to a command.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
The converted dictionary.
|
|
33
|
+
"""
|
|
34
|
+
return HumanHandoffCommand()
|
|
35
|
+
|
|
36
|
+
def run_command_on_tracker(
|
|
37
|
+
self,
|
|
38
|
+
tracker: DialogueStateTracker,
|
|
39
|
+
all_flows: FlowsList,
|
|
40
|
+
original_tracker: DialogueStateTracker,
|
|
41
|
+
) -> List[Event]:
|
|
42
|
+
"""Runs the command on the tracker.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
tracker: The tracker to run the command on.
|
|
46
|
+
all_flows: All flows in the assistant.
|
|
47
|
+
original_tracker: The tracker before any command was executed.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
The events to apply to the tracker.
|
|
51
|
+
"""
|
|
52
|
+
stack = tracker.stack
|
|
53
|
+
stack.push(HumanHandoffPatternFlowStackFrame())
|
|
54
|
+
structlogger.debug(
|
|
55
|
+
"command_executor.human_handoff.pushed_to_stack", command=self
|
|
56
|
+
)
|
|
57
|
+
return tracker.create_stack_updated_events(stack)
|
|
58
|
+
|
|
59
|
+
def __hash__(self) -> int:
|
|
60
|
+
return hash(self.command())
|
|
61
|
+
|
|
62
|
+
def __eq__(self, other: object) -> bool:
|
|
63
|
+
if not isinstance(other, HumanHandoffCommand):
|
|
64
|
+
return False
|
|
65
|
+
|
|
66
|
+
return True
|