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,59 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, List, Optional
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
6
|
+
|
|
7
|
+
from rasa.core.actions.action import Action
|
|
8
|
+
from rasa.core.channels import OutputChannel
|
|
9
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
10
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
11
|
+
from rasa.dialogue_understanding.stack.frames import (
|
|
12
|
+
BaseFlowStackFrame,
|
|
13
|
+
UserFlowStackFrame,
|
|
14
|
+
)
|
|
15
|
+
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import FlowStackFrameType
|
|
16
|
+
from rasa.shared.core.constants import ACTION_CLEAN_STACK
|
|
17
|
+
from rasa.shared.core.domain import Domain
|
|
18
|
+
from rasa.shared.core.events import Event
|
|
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.trackers import DialogueStateTracker
|
|
22
|
+
|
|
23
|
+
structlogger = structlog.get_logger()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ActionCleanStack(Action):
|
|
27
|
+
"""Action which cancels a flow from the stack."""
|
|
28
|
+
|
|
29
|
+
def name(self) -> str:
|
|
30
|
+
"""Return the flow name."""
|
|
31
|
+
return ACTION_CLEAN_STACK
|
|
32
|
+
|
|
33
|
+
async def run(
|
|
34
|
+
self,
|
|
35
|
+
output_channel: OutputChannel,
|
|
36
|
+
nlg: NaturalLanguageGenerator,
|
|
37
|
+
tracker: DialogueStateTracker,
|
|
38
|
+
domain: Domain,
|
|
39
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
40
|
+
) -> List[Event]:
|
|
41
|
+
"""Clean the stack."""
|
|
42
|
+
structlogger.debug("action_clean_stack.run")
|
|
43
|
+
new_frames = []
|
|
44
|
+
# Set all frames to their end step, filter out any non-BaseFlowStackFrames
|
|
45
|
+
for frame in tracker.stack.frames:
|
|
46
|
+
if isinstance(frame, BaseFlowStackFrame):
|
|
47
|
+
structlogger.debug(
|
|
48
|
+
"action_clean_stack.terminating_frame",
|
|
49
|
+
frame_id=frame.frame_id,
|
|
50
|
+
flow_id=frame.flow_id,
|
|
51
|
+
)
|
|
52
|
+
frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
|
|
53
|
+
if isinstance(frame, UserFlowStackFrame):
|
|
54
|
+
# Making sure there are no "continue interrupts" triggered
|
|
55
|
+
frame.frame_type = FlowStackFrameType.REGULAR
|
|
56
|
+
new_frames.append(frame)
|
|
57
|
+
new_stack = DialogueStack.from_dict([frame.as_dict() for frame in new_frames])
|
|
58
|
+
|
|
59
|
+
return tracker.create_stack_updated_events(new_stack)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from rasa.shared.exceptions import RasaException
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ActionExecutionRejection(RasaException):
|
|
7
|
+
"""Raising this exception allows other policies to predict a different action."""
|
|
8
|
+
|
|
9
|
+
def __init__(self, action_name: str, message: Optional[str] = None) -> None:
|
|
10
|
+
"""Create a new ActionExecutionRejection exception."""
|
|
11
|
+
self.action_name = action_name
|
|
12
|
+
self.message = message or "Custom action '{}' rejected to run".format(
|
|
13
|
+
action_name
|
|
14
|
+
)
|
|
15
|
+
super(ActionExecutionRejection, self).__init__()
|
|
16
|
+
|
|
17
|
+
def __str__(self) -> str:
|
|
18
|
+
return self.message
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class DomainNotFound(Exception):
|
|
22
|
+
"""Exception raised when domain is not found."""
|
|
23
|
+
|
|
24
|
+
pass
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from typing import Optional, Dict, Any, List
|
|
2
|
+
|
|
3
|
+
from rasa.core.actions.action import Action
|
|
4
|
+
from rasa.core.channels import OutputChannel
|
|
5
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
6
|
+
from rasa.shared.core.constants import ACTION_HANGUP
|
|
7
|
+
from rasa.shared.core.domain import Domain
|
|
8
|
+
from rasa.shared.core.events import Event, SessionEnded
|
|
9
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ActionHangup(Action):
|
|
13
|
+
"""Action which hangs up the call."""
|
|
14
|
+
|
|
15
|
+
def name(self) -> str:
|
|
16
|
+
"""Return the name of the action."""
|
|
17
|
+
return ACTION_HANGUP
|
|
18
|
+
|
|
19
|
+
async def run(
|
|
20
|
+
self,
|
|
21
|
+
output_channel: OutputChannel,
|
|
22
|
+
nlg: NaturalLanguageGenerator,
|
|
23
|
+
tracker: DialogueStateTracker,
|
|
24
|
+
domain: Domain,
|
|
25
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
26
|
+
) -> List[Event]:
|
|
27
|
+
"""Ask the output channel to hang up the call."""
|
|
28
|
+
await output_channel.hangup(tracker.sender_id)
|
|
29
|
+
return [SessionEnded(metadata={"_reason": "hangup"})]
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
from typing import Optional, Dict, Any, List
|
|
2
|
+
|
|
3
|
+
from rasa.core.actions.action import Action
|
|
4
|
+
from rasa.core.channels import OutputChannel
|
|
5
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
6
|
+
from rasa.dialogue_understanding.patterns.collect_information import (
|
|
7
|
+
CollectInformationPatternFlowStackFrame,
|
|
8
|
+
)
|
|
9
|
+
from rasa.dialogue_understanding.patterns.repeat import (
|
|
10
|
+
RepeatBotMessagesPatternFlowStackFrame,
|
|
11
|
+
)
|
|
12
|
+
from rasa.dialogue_understanding.patterns.user_silence import (
|
|
13
|
+
UserSilencePatternFlowStackFrame,
|
|
14
|
+
)
|
|
15
|
+
from rasa.shared.core.constants import ACTION_REPEAT_BOT_MESSAGES
|
|
16
|
+
from rasa.shared.core.domain import Domain
|
|
17
|
+
from rasa.shared.core.events import Event, BotUttered, UserUttered
|
|
18
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ActionRepeatBotMessages(Action):
|
|
22
|
+
"""Action to repeat bot messages"""
|
|
23
|
+
|
|
24
|
+
def name(self) -> str:
|
|
25
|
+
"""Return the name of the action."""
|
|
26
|
+
return ACTION_REPEAT_BOT_MESSAGES
|
|
27
|
+
|
|
28
|
+
def _get_last_bot_events(self, tracker: DialogueStateTracker) -> List[Event]:
|
|
29
|
+
"""Get the last consecutive bot events before the most recent user message.
|
|
30
|
+
|
|
31
|
+
This function scans the dialogue history in reverse to find the last sequence of
|
|
32
|
+
bot responses that occurred without any user interruption. It filters out all
|
|
33
|
+
non-utterance events and stops when it encounters a user message after finding
|
|
34
|
+
bot messages.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
tracker: DialogueStateTracker containing the conversation events.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
List[Event]: A list of consecutive BotUttered events that occurred
|
|
41
|
+
most recently, in chronological order. Returns an empty list
|
|
42
|
+
if no bot messages are found or if the last message was from
|
|
43
|
+
the user.
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
For events: [User1, Bot1, Bot2, User2, Bot4, Bot5, User3]
|
|
47
|
+
Returns: [Bot4, Bot5] (the last two bot events)
|
|
48
|
+
The elif condition doesn't break when it sees User3 event.
|
|
49
|
+
But it does at User2 event.
|
|
50
|
+
"""
|
|
51
|
+
# Skip action if we are in a collect information step whose
|
|
52
|
+
# default behavior is to repeat anyways
|
|
53
|
+
top_frame = tracker.stack.top(
|
|
54
|
+
lambda frame: isinstance(frame, RepeatBotMessagesPatternFlowStackFrame)
|
|
55
|
+
or isinstance(frame, UserSilencePatternFlowStackFrame)
|
|
56
|
+
)
|
|
57
|
+
if isinstance(top_frame, CollectInformationPatternFlowStackFrame):
|
|
58
|
+
return []
|
|
59
|
+
# filter user and bot events
|
|
60
|
+
filtered = [
|
|
61
|
+
e for e in tracker.events if isinstance(e, (BotUttered, UserUttered))
|
|
62
|
+
]
|
|
63
|
+
bot_events: List[Event] = []
|
|
64
|
+
|
|
65
|
+
# find the last BotUttered events
|
|
66
|
+
for e in reversed(filtered):
|
|
67
|
+
if isinstance(e, BotUttered):
|
|
68
|
+
# insert instead of append because the list is reversed
|
|
69
|
+
bot_events.insert(0, e)
|
|
70
|
+
|
|
71
|
+
# stop if a UserUttered event is found
|
|
72
|
+
# only if we have collected some bot events already
|
|
73
|
+
# this condition skips the first N UserUttered events
|
|
74
|
+
elif bot_events:
|
|
75
|
+
break
|
|
76
|
+
|
|
77
|
+
return bot_events
|
|
78
|
+
|
|
79
|
+
async def run(
|
|
80
|
+
self,
|
|
81
|
+
output_channel: OutputChannel,
|
|
82
|
+
nlg: NaturalLanguageGenerator,
|
|
83
|
+
tracker: DialogueStateTracker,
|
|
84
|
+
domain: Domain,
|
|
85
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
86
|
+
) -> List[Event]:
|
|
87
|
+
"""Send the last bot messages to the channel again"""
|
|
88
|
+
bot_events = self._get_last_bot_events(tracker)
|
|
89
|
+
return bot_events
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Optional, TYPE_CHECKING, Text, Union
|
|
2
|
+
|
|
3
|
+
import structlog
|
|
4
|
+
from jinja2 import Template
|
|
5
|
+
from pypred import Predicate
|
|
6
|
+
|
|
7
|
+
from rasa.core.actions.action import Action, create_bot_utterance
|
|
8
|
+
from rasa.core.utils import add_bot_utterance_metadata
|
|
9
|
+
from rasa.dialogue_understanding.patterns.collect_information import (
|
|
10
|
+
CollectInformationPatternFlowStackFrame,
|
|
11
|
+
)
|
|
12
|
+
from rasa.shared.core.constants import ACTION_RUN_SLOT_REJECTIONS_NAME
|
|
13
|
+
from rasa.shared.core.events import Event, SlotSet
|
|
14
|
+
from rasa.shared.core.flows.steps.collect import SlotRejection
|
|
15
|
+
from rasa.shared.core.slots import (
|
|
16
|
+
BooleanSlot,
|
|
17
|
+
CategoricalSlot,
|
|
18
|
+
FloatSlot,
|
|
19
|
+
Slot,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
24
|
+
from rasa.core.channels.channel import OutputChannel
|
|
25
|
+
from rasa.shared.core.domain import Domain
|
|
26
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
27
|
+
|
|
28
|
+
structlogger = structlog.get_logger()
|
|
29
|
+
|
|
30
|
+
UTTERANCE_NOT_DEFINED_BY_USER = "TO.UPDATE.VALUE.BUT.MISSING.UTTERANCE"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def utterance_for_slot_type(slot: Slot) -> Optional[str]:
|
|
34
|
+
"""Return the utterance to use for the slot type."""
|
|
35
|
+
if isinstance(slot, BooleanSlot):
|
|
36
|
+
return "utter_boolean_slot_rejection"
|
|
37
|
+
elif isinstance(slot, FloatSlot):
|
|
38
|
+
return "utter_float_slot_rejection"
|
|
39
|
+
elif isinstance(slot, CategoricalSlot):
|
|
40
|
+
return "utter_categorical_slot_rejection"
|
|
41
|
+
return None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def coerce_slot_value(
|
|
45
|
+
slot_value: str, slot_name: str, tracker: "DialogueStateTracker"
|
|
46
|
+
) -> Union[str, bool, float, None]:
|
|
47
|
+
"""Coerce the slot value to the correct type.
|
|
48
|
+
|
|
49
|
+
Tries to coerce the slot value to the correct type. If the
|
|
50
|
+
conversion fails, `None` is returned.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
slot_value: The value to coerce.
|
|
54
|
+
slot_name: The name of the slot.
|
|
55
|
+
tracker: The tracker containing the current state of the conversation.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
The coerced value or `None` if the conversion failed.
|
|
59
|
+
"""
|
|
60
|
+
if slot_name not in tracker.slots:
|
|
61
|
+
return slot_value
|
|
62
|
+
|
|
63
|
+
slot = tracker.slots[slot_name]
|
|
64
|
+
|
|
65
|
+
if not slot.is_valid_value(slot_value):
|
|
66
|
+
structlogger.debug(
|
|
67
|
+
"run.rejection.slot_value_not_valid",
|
|
68
|
+
rejection=slot_value,
|
|
69
|
+
)
|
|
70
|
+
return None
|
|
71
|
+
|
|
72
|
+
return slot.coerce_value(slot_value)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def run_rejections(
|
|
76
|
+
slot_value: Union[str, bool, float, None],
|
|
77
|
+
slot_name: str,
|
|
78
|
+
rejections: List[SlotRejection],
|
|
79
|
+
) -> Optional[str]:
|
|
80
|
+
"""Run the predicate checks under rejections."""
|
|
81
|
+
violation = False
|
|
82
|
+
internal_error = False
|
|
83
|
+
current_context = {"slots": {slot_name: slot_value}}
|
|
84
|
+
|
|
85
|
+
structlogger.debug("run.predicate.context", context=current_context)
|
|
86
|
+
document = current_context.copy()
|
|
87
|
+
|
|
88
|
+
for rejection in rejections:
|
|
89
|
+
condition = rejection.if_
|
|
90
|
+
utterance = rejection.utter
|
|
91
|
+
|
|
92
|
+
try:
|
|
93
|
+
rendered_template = Template(condition).render(current_context)
|
|
94
|
+
predicate = Predicate(rendered_template)
|
|
95
|
+
violation = predicate.evaluate(document)
|
|
96
|
+
structlogger.debug(
|
|
97
|
+
"run.predicate.result",
|
|
98
|
+
predicate=predicate.description(),
|
|
99
|
+
violation=violation,
|
|
100
|
+
)
|
|
101
|
+
except (TypeError, Exception) as e:
|
|
102
|
+
structlogger.error(
|
|
103
|
+
"run.predicate.error",
|
|
104
|
+
predicate=condition,
|
|
105
|
+
document=document,
|
|
106
|
+
error=str(e),
|
|
107
|
+
)
|
|
108
|
+
violation = True
|
|
109
|
+
internal_error = True
|
|
110
|
+
|
|
111
|
+
if violation:
|
|
112
|
+
break
|
|
113
|
+
|
|
114
|
+
if not violation:
|
|
115
|
+
return None
|
|
116
|
+
if internal_error:
|
|
117
|
+
utterance = "utter_internal_error_rasa"
|
|
118
|
+
if not isinstance(utterance, str):
|
|
119
|
+
utterance = UTTERANCE_NOT_DEFINED_BY_USER
|
|
120
|
+
return utterance
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class ActionRunSlotRejections(Action):
|
|
124
|
+
"""Action which evaluates the predicate checks under rejections."""
|
|
125
|
+
|
|
126
|
+
def name(self) -> Text:
|
|
127
|
+
"""Return the name of the action."""
|
|
128
|
+
return ACTION_RUN_SLOT_REJECTIONS_NAME
|
|
129
|
+
|
|
130
|
+
async def run(
|
|
131
|
+
self,
|
|
132
|
+
output_channel: "OutputChannel",
|
|
133
|
+
nlg: "NaturalLanguageGenerator",
|
|
134
|
+
tracker: "DialogueStateTracker",
|
|
135
|
+
domain: "Domain",
|
|
136
|
+
metadata: Optional[Dict[Text, Any]] = None,
|
|
137
|
+
) -> List[Event]:
|
|
138
|
+
"""Run the predicate checks."""
|
|
139
|
+
utterance = None
|
|
140
|
+
top_frame = tracker.stack.top()
|
|
141
|
+
if not isinstance(top_frame, CollectInformationPatternFlowStackFrame):
|
|
142
|
+
return []
|
|
143
|
+
|
|
144
|
+
slot_name = top_frame.collect
|
|
145
|
+
slot_instance = tracker.slots.get(slot_name)
|
|
146
|
+
if slot_instance and not slot_instance.has_been_set:
|
|
147
|
+
# this is the first time the assistant asks for the slot value,
|
|
148
|
+
# therefore we skip the predicate validation because the slot
|
|
149
|
+
# value has not been provided
|
|
150
|
+
structlogger.debug(
|
|
151
|
+
"first.collect.slot.not.set",
|
|
152
|
+
slot_name=slot_name,
|
|
153
|
+
slot_value=slot_instance.value,
|
|
154
|
+
)
|
|
155
|
+
return []
|
|
156
|
+
|
|
157
|
+
slot_value = tracker.get_slot(slot_name)
|
|
158
|
+
|
|
159
|
+
if slot_instance and slot_instance.has_been_set and slot_value is None:
|
|
160
|
+
return []
|
|
161
|
+
|
|
162
|
+
typed_slot_value = coerce_slot_value(slot_value, slot_name, tracker)
|
|
163
|
+
if typed_slot_value is None:
|
|
164
|
+
# the slot value could not be coerced to the correct type
|
|
165
|
+
utterance = utterance_for_slot_type(slot_instance)
|
|
166
|
+
elif top_frame.rejections:
|
|
167
|
+
# run the predicate checks under rejections
|
|
168
|
+
utterance = run_rejections(
|
|
169
|
+
typed_slot_value, slot_name, top_frame.rejections
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
events: List[Event] = []
|
|
173
|
+
if utterance:
|
|
174
|
+
# the slot value has been rejected
|
|
175
|
+
events.append(SlotSet(slot_name, None))
|
|
176
|
+
elif slot_value != typed_slot_value or type(slot_value) != type(
|
|
177
|
+
typed_slot_value
|
|
178
|
+
):
|
|
179
|
+
# the slot value has been coerced to the correct type
|
|
180
|
+
return [SlotSet(slot_name, typed_slot_value)]
|
|
181
|
+
elif slot_value == typed_slot_value:
|
|
182
|
+
# the slot value has not changed and no utterance present
|
|
183
|
+
return []
|
|
184
|
+
|
|
185
|
+
if utterance == UTTERANCE_NOT_DEFINED_BY_USER:
|
|
186
|
+
structlogger.error(
|
|
187
|
+
"run.rejection.missing.utter",
|
|
188
|
+
utterance=None,
|
|
189
|
+
)
|
|
190
|
+
return events
|
|
191
|
+
|
|
192
|
+
message = await nlg.generate(
|
|
193
|
+
utterance,
|
|
194
|
+
tracker,
|
|
195
|
+
output_channel.name(),
|
|
196
|
+
value=slot_value,
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
if message is None:
|
|
200
|
+
structlogger.error(
|
|
201
|
+
"run.rejection.failed.finding.utter",
|
|
202
|
+
utterance=utterance,
|
|
203
|
+
)
|
|
204
|
+
else:
|
|
205
|
+
message = add_bot_utterance_metadata(
|
|
206
|
+
message, utterance, nlg, domain, tracker
|
|
207
|
+
)
|
|
208
|
+
events.append(create_bot_utterance(message))
|
|
209
|
+
|
|
210
|
+
return events
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Optional, Dict, Any, List
|
|
2
|
+
|
|
3
|
+
from rasa.core.actions.action import Action
|
|
4
|
+
from rasa.core.channels import OutputChannel
|
|
5
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
6
|
+
from rasa.dialogue_understanding.stack.frames import ChitChatStackFrame
|
|
7
|
+
from rasa.shared.core.constants import ACTION_TRIGGER_CHITCHAT
|
|
8
|
+
from rasa.shared.core.domain import Domain
|
|
9
|
+
from rasa.shared.core.events import Event
|
|
10
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ActionTriggerChitchat(Action):
|
|
14
|
+
"""Action which triggers a chitchat answer."""
|
|
15
|
+
|
|
16
|
+
def name(self) -> str:
|
|
17
|
+
"""Return the name of the action."""
|
|
18
|
+
return ACTION_TRIGGER_CHITCHAT
|
|
19
|
+
|
|
20
|
+
async def run(
|
|
21
|
+
self,
|
|
22
|
+
output_channel: OutputChannel,
|
|
23
|
+
nlg: NaturalLanguageGenerator,
|
|
24
|
+
tracker: DialogueStateTracker,
|
|
25
|
+
domain: Domain,
|
|
26
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
27
|
+
) -> List[Event]:
|
|
28
|
+
"""Run the predicate checks."""
|
|
29
|
+
stack = tracker.stack
|
|
30
|
+
stack.push(ChitChatStackFrame())
|
|
31
|
+
return tracker.create_stack_updated_events(stack)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
from typing import Any, Dict, Optional, Text, List
|
|
2
|
+
|
|
3
|
+
import structlog
|
|
4
|
+
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
5
|
+
FlowStackFrameType,
|
|
6
|
+
UserFlowStackFrame,
|
|
7
|
+
)
|
|
8
|
+
from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
|
|
9
|
+
from rasa.core.actions import action
|
|
10
|
+
from rasa.core.channels import OutputChannel
|
|
11
|
+
from rasa.shared.constants import FLOW_PREFIX
|
|
12
|
+
|
|
13
|
+
from rasa.shared.core.domain import Domain
|
|
14
|
+
from rasa.shared.core.events import (
|
|
15
|
+
ActiveLoop,
|
|
16
|
+
Event,
|
|
17
|
+
FlowInterrupted,
|
|
18
|
+
SlotSet,
|
|
19
|
+
)
|
|
20
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
21
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
22
|
+
|
|
23
|
+
structlogger = structlog.get_logger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ActionTriggerFlow(action.Action):
|
|
27
|
+
"""Action which triggers a flow by putting it on the dialogue stack."""
|
|
28
|
+
|
|
29
|
+
def __init__(self, flow_action_name: Text) -> None:
|
|
30
|
+
"""Creates a `ActionTriggerFlow`.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
flow_action_name: Name of the flow.
|
|
34
|
+
"""
|
|
35
|
+
super().__init__()
|
|
36
|
+
|
|
37
|
+
if not flow_action_name.startswith(FLOW_PREFIX):
|
|
38
|
+
raise ValueError(
|
|
39
|
+
f"Flow action name '{flow_action_name}' needs to start with "
|
|
40
|
+
f"'{FLOW_PREFIX}'."
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
self._flow_name = flow_action_name[len(FLOW_PREFIX) :]
|
|
44
|
+
self._flow_action_name = flow_action_name
|
|
45
|
+
|
|
46
|
+
def name(self) -> Text:
|
|
47
|
+
"""Return the flow name."""
|
|
48
|
+
return self._flow_action_name
|
|
49
|
+
|
|
50
|
+
def create_events_to_start_flow(self, tracker: DialogueStateTracker) -> List[Event]:
|
|
51
|
+
"""Create events to start the flow.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
tracker: The tracker to start the flow on.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
The event to start the flow."""
|
|
58
|
+
stack = tracker.stack
|
|
59
|
+
events: List[Event] = []
|
|
60
|
+
|
|
61
|
+
frame_type = FlowStackFrameType.REGULAR
|
|
62
|
+
|
|
63
|
+
if not stack.is_empty():
|
|
64
|
+
frame_type = FlowStackFrameType.INTERRUPT
|
|
65
|
+
top_user_frame = top_user_flow_frame(stack)
|
|
66
|
+
if top_user_frame is not None:
|
|
67
|
+
events.append(
|
|
68
|
+
FlowInterrupted(top_user_frame.flow_id, top_user_frame.step_id)
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
stack.push(
|
|
72
|
+
UserFlowStackFrame(
|
|
73
|
+
flow_id=self._flow_name,
|
|
74
|
+
frame_type=frame_type,
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
return events + tracker.create_stack_updated_events(stack)
|
|
78
|
+
|
|
79
|
+
def create_events_to_set_flow_slots(self, metadata: Dict[str, Any]) -> List[Event]:
|
|
80
|
+
"""Create events to set the flow slots.
|
|
81
|
+
|
|
82
|
+
Set additional slots to prefill information for the flow.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
metadata: The metadata to set the slots from.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
The events to set the flow slots.
|
|
89
|
+
"""
|
|
90
|
+
slots_to_be_set = metadata.get("slots", {}) if metadata else {}
|
|
91
|
+
return [SlotSet(key, value) for key, value in slots_to_be_set.items()]
|
|
92
|
+
|
|
93
|
+
async def run(
|
|
94
|
+
self,
|
|
95
|
+
output_channel: "OutputChannel",
|
|
96
|
+
nlg: "NaturalLanguageGenerator",
|
|
97
|
+
tracker: "DialogueStateTracker",
|
|
98
|
+
domain: "Domain",
|
|
99
|
+
metadata: Optional[Dict[Text, Any]] = None,
|
|
100
|
+
) -> List[Event]:
|
|
101
|
+
"""Trigger the flow."""
|
|
102
|
+
events: List[Event] = self.create_events_to_start_flow(tracker)
|
|
103
|
+
events.extend(self.create_events_to_set_flow_slots(metadata))
|
|
104
|
+
|
|
105
|
+
if tracker.active_loop_name:
|
|
106
|
+
# end any active loop to ensure we are progressing the started flow
|
|
107
|
+
events.append(ActiveLoop(None))
|
|
108
|
+
|
|
109
|
+
return events
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Optional, Dict, Any, List
|
|
2
|
+
|
|
3
|
+
from rasa.core.actions.action import Action
|
|
4
|
+
from rasa.core.channels import OutputChannel
|
|
5
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
6
|
+
from rasa.dialogue_understanding.stack.frames import SearchStackFrame
|
|
7
|
+
from rasa.shared.core.constants import ACTION_TRIGGER_SEARCH
|
|
8
|
+
from rasa.shared.core.domain import Domain
|
|
9
|
+
from rasa.shared.core.events import Event
|
|
10
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ActionTriggerSearch(Action):
|
|
14
|
+
"""Action which triggers a search"""
|
|
15
|
+
|
|
16
|
+
def name(self) -> str:
|
|
17
|
+
"""Return the name of the action."""
|
|
18
|
+
return ACTION_TRIGGER_SEARCH
|
|
19
|
+
|
|
20
|
+
async def run(
|
|
21
|
+
self,
|
|
22
|
+
output_channel: OutputChannel,
|
|
23
|
+
nlg: NaturalLanguageGenerator,
|
|
24
|
+
tracker: DialogueStateTracker,
|
|
25
|
+
domain: Domain,
|
|
26
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
27
|
+
) -> List[Event]:
|
|
28
|
+
"""Run the predicate checks."""
|
|
29
|
+
stack = tracker.stack
|
|
30
|
+
stack.push(SearchStackFrame())
|
|
31
|
+
return tracker.create_stack_updated_events(stack)
|