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 dataclasses import dataclass
|
|
4
|
+
from typing import Any, Dict, List
|
|
5
|
+
from rasa.dialogue_understanding.commands import Command
|
|
6
|
+
from rasa.dialogue_understanding.patterns.user_silence import (
|
|
7
|
+
UserSilencePatternFlowStackFrame,
|
|
8
|
+
)
|
|
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
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class UserSilenceCommand(Command):
|
|
16
|
+
"""A command to indicate user silence."""
|
|
17
|
+
|
|
18
|
+
@classmethod
|
|
19
|
+
def command(cls) -> str:
|
|
20
|
+
"""Returns the command type."""
|
|
21
|
+
return "user silence"
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def from_dict(cls, data: Dict[str, Any]) -> UserSilenceCommand:
|
|
25
|
+
"""Converts the dictionary to a command.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
The converted dictionary.
|
|
29
|
+
"""
|
|
30
|
+
return UserSilenceCommand()
|
|
31
|
+
|
|
32
|
+
def run_command_on_tracker(
|
|
33
|
+
self,
|
|
34
|
+
tracker: DialogueStateTracker,
|
|
35
|
+
all_flows: FlowsList,
|
|
36
|
+
original_tracker: DialogueStateTracker,
|
|
37
|
+
) -> List[Event]:
|
|
38
|
+
"""Runs the command on the tracker.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
tracker: The tracker to run the command on.
|
|
42
|
+
all_flows: All flows in the assistant.
|
|
43
|
+
original_tracker: The tracker before any command was executed.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
The events to apply to the tracker.
|
|
47
|
+
"""
|
|
48
|
+
stack = tracker.stack
|
|
49
|
+
stack.push(UserSilencePatternFlowStackFrame())
|
|
50
|
+
return tracker.create_stack_updated_events(stack)
|
|
51
|
+
|
|
52
|
+
def __hash__(self) -> int:
|
|
53
|
+
return hash(self.command())
|
|
54
|
+
|
|
55
|
+
def __eq__(self, other: object) -> bool:
|
|
56
|
+
if not isinstance(other, UserSilenceCommand):
|
|
57
|
+
return False
|
|
58
|
+
|
|
59
|
+
return True
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from typing import Dict, Type
|
|
2
|
+
|
|
3
|
+
from rasa.dialogue_understanding.commands import (
|
|
4
|
+
CancelFlowCommand,
|
|
5
|
+
CannotHandleCommand,
|
|
6
|
+
ChitChatAnswerCommand,
|
|
7
|
+
Command,
|
|
8
|
+
HumanHandoffCommand,
|
|
9
|
+
KnowledgeAnswerCommand,
|
|
10
|
+
SessionStartCommand,
|
|
11
|
+
SkipQuestionCommand,
|
|
12
|
+
RestartCommand,
|
|
13
|
+
)
|
|
14
|
+
from rasa.dialogue_understanding.commands.user_silence_command import UserSilenceCommand
|
|
15
|
+
from rasa.dialogue_understanding.patterns.cancel import CancelPatternFlowStackFrame
|
|
16
|
+
from rasa.dialogue_understanding.patterns.cannot_handle import (
|
|
17
|
+
CannotHandlePatternFlowStackFrame,
|
|
18
|
+
)
|
|
19
|
+
from rasa.dialogue_understanding.patterns.chitchat import ChitchatPatternFlowStackFrame
|
|
20
|
+
from rasa.dialogue_understanding.patterns.human_handoff import (
|
|
21
|
+
HumanHandoffPatternFlowStackFrame,
|
|
22
|
+
)
|
|
23
|
+
from rasa.dialogue_understanding.patterns.restart import RestartPatternFlowStackFrame
|
|
24
|
+
from rasa.dialogue_understanding.patterns.search import SearchPatternFlowStackFrame
|
|
25
|
+
from rasa.dialogue_understanding.patterns.session_start import (
|
|
26
|
+
SessionStartPatternFlowStackFrame,
|
|
27
|
+
)
|
|
28
|
+
from rasa.dialogue_understanding.patterns.skip_question import (
|
|
29
|
+
SkipQuestionPatternFlowStackFrame,
|
|
30
|
+
)
|
|
31
|
+
from rasa.dialogue_understanding.patterns.user_silence import (
|
|
32
|
+
UserSilencePatternFlowStackFrame,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
triggerable_pattern_to_command_class: Dict[str, Type[Command]] = {
|
|
36
|
+
SessionStartPatternFlowStackFrame.flow_id: SessionStartCommand,
|
|
37
|
+
UserSilencePatternFlowStackFrame.flow_id: UserSilenceCommand,
|
|
38
|
+
CancelPatternFlowStackFrame.flow_id: CancelFlowCommand,
|
|
39
|
+
ChitchatPatternFlowStackFrame.flow_id: ChitChatAnswerCommand,
|
|
40
|
+
HumanHandoffPatternFlowStackFrame.flow_id: HumanHandoffCommand,
|
|
41
|
+
SearchPatternFlowStackFrame.flow_id: KnowledgeAnswerCommand,
|
|
42
|
+
SkipQuestionPatternFlowStackFrame.flow_id: SkipQuestionCommand,
|
|
43
|
+
CannotHandlePatternFlowStackFrame.flow_id: CannotHandleCommand,
|
|
44
|
+
RestartPatternFlowStackFrame.flow_id: RestartCommand,
|
|
45
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from rasa.dialogue_understanding.generator.command_generator import CommandGenerator
|
|
2
|
+
from rasa.dialogue_understanding.generator.llm_based_command_generator import (
|
|
3
|
+
LLMBasedCommandGenerator,
|
|
4
|
+
)
|
|
5
|
+
from rasa.dialogue_understanding.generator.llm_command_generator import (
|
|
6
|
+
LLMCommandGenerator,
|
|
7
|
+
)
|
|
8
|
+
from rasa.dialogue_understanding.generator.multi_step.multi_step_llm_command_generator import ( # noqa: E501
|
|
9
|
+
MultiStepLLMCommandGenerator,
|
|
10
|
+
)
|
|
11
|
+
from rasa.dialogue_understanding.generator.single_step.single_step_llm_command_generator import ( # noqa: E501
|
|
12
|
+
SingleStepLLMCommandGenerator,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"CommandGenerator",
|
|
17
|
+
"LLMBasedCommandGenerator",
|
|
18
|
+
"LLMCommandGenerator",
|
|
19
|
+
"MultiStepLLMCommandGenerator",
|
|
20
|
+
"SingleStepLLMCommandGenerator",
|
|
21
|
+
]
|
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any, Dict, List, Optional, Text
|
|
3
|
+
|
|
4
|
+
import structlog
|
|
5
|
+
|
|
6
|
+
from rasa.dialogue_understanding.commands import (
|
|
7
|
+
Command,
|
|
8
|
+
SetSlotCommand,
|
|
9
|
+
StartFlowCommand,
|
|
10
|
+
ErrorCommand,
|
|
11
|
+
)
|
|
12
|
+
from rasa.dialogue_understanding.commands.set_slot_command import SetSlotExtractor
|
|
13
|
+
from rasa.shared.constants import (
|
|
14
|
+
RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG,
|
|
15
|
+
RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_EMPTY,
|
|
16
|
+
)
|
|
17
|
+
from rasa.shared.core.constants import SlotMappingType
|
|
18
|
+
from rasa.shared.core.domain import Domain
|
|
19
|
+
from rasa.shared.core.flows import FlowsList
|
|
20
|
+
from rasa.shared.core.slot_mappings import SlotFillingManager
|
|
21
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
22
|
+
from rasa.shared.nlu.constants import (
|
|
23
|
+
COMMANDS,
|
|
24
|
+
TEXT,
|
|
25
|
+
PREDICTED_COMMANDS,
|
|
26
|
+
PROMPTS,
|
|
27
|
+
KEY_USER_PROMPT,
|
|
28
|
+
KEY_SYSTEM_PROMPT,
|
|
29
|
+
)
|
|
30
|
+
from rasa.shared.nlu.training_data.message import Message
|
|
31
|
+
from rasa.shared.utils.llm import DEFAULT_MAX_USER_INPUT_CHARACTERS
|
|
32
|
+
|
|
33
|
+
structlogger = structlog.get_logger()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@dataclass
|
|
37
|
+
class UserInputConfig:
|
|
38
|
+
"""Configuration class for user input settings."""
|
|
39
|
+
|
|
40
|
+
max_characters: int = DEFAULT_MAX_USER_INPUT_CHARACTERS
|
|
41
|
+
"""The maximum number of characters allowed in the user input."""
|
|
42
|
+
|
|
43
|
+
def __post_init__(self) -> None:
|
|
44
|
+
if self.max_characters is None:
|
|
45
|
+
self.max_characters = DEFAULT_MAX_USER_INPUT_CHARACTERS
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def from_dict(cls, data: Dict[str, Any]) -> "UserInputConfig":
|
|
49
|
+
return cls(
|
|
50
|
+
max_characters=data.get("max_characters", DEFAULT_MAX_USER_INPUT_CHARACTERS)
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class CommandGenerator:
|
|
55
|
+
"""A command generator.
|
|
56
|
+
|
|
57
|
+
Parses a message and returns a list of commands. The commands are then
|
|
58
|
+
executed and will lead to tracker state modifications and action
|
|
59
|
+
predictions.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
def __init__(self, config: Dict[Text, Any]):
|
|
63
|
+
self.user_input_config = UserInputConfig.from_dict(
|
|
64
|
+
config.get("user_input") or {}
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
async def process(
|
|
68
|
+
self,
|
|
69
|
+
messages: List[Message],
|
|
70
|
+
flows: FlowsList,
|
|
71
|
+
tracker: Optional[DialogueStateTracker] = None,
|
|
72
|
+
domain: Optional[Domain] = None,
|
|
73
|
+
) -> List[Message]:
|
|
74
|
+
"""Process a list of messages. For each message predict commands.
|
|
75
|
+
|
|
76
|
+
The result of the generation is added to the message as a list of
|
|
77
|
+
commands.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
messages: The messages to process.
|
|
81
|
+
tracker: The tracker containing the conversation history up to now.
|
|
82
|
+
flows: The flows to use for command prediction.
|
|
83
|
+
domain: The domain.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
The processed messages (usually this is just one during prediction).
|
|
87
|
+
"""
|
|
88
|
+
# Determines a set of startable flows by evaluating flow guard conditions.
|
|
89
|
+
startable_flows = self.get_startable_flows(flows, tracker)
|
|
90
|
+
# Get the currently active and called flow (if present).
|
|
91
|
+
# If they would be guarded, e.g. if: false, they would not be in the list
|
|
92
|
+
# of startable flows and not available inside the prompt.
|
|
93
|
+
active_flows = self.get_active_flows(flows, tracker)
|
|
94
|
+
available_flows = FlowsList.from_multiple_flows_lists(
|
|
95
|
+
startable_flows, active_flows
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
for message in messages:
|
|
99
|
+
if message.get(COMMANDS):
|
|
100
|
+
# do not overwrite commands if they are already present
|
|
101
|
+
# i.e. another command generator already predicted commands
|
|
102
|
+
continue
|
|
103
|
+
|
|
104
|
+
commands = await self._evaluate_and_predict(
|
|
105
|
+
message, available_flows, tracker, domain
|
|
106
|
+
)
|
|
107
|
+
# Double check commands for guarded flows. Unlikely but the llm could
|
|
108
|
+
# have predicted a command for a flow that is not in the startable
|
|
109
|
+
# flow list supplied in the prompt.
|
|
110
|
+
commands = self._check_commands_against_startable_flows(
|
|
111
|
+
commands, startable_flows
|
|
112
|
+
)
|
|
113
|
+
commands = self._check_commands_against_slot_mappings(
|
|
114
|
+
commands, tracker, domain
|
|
115
|
+
)
|
|
116
|
+
commands_dicts = [command.as_dict() for command in commands]
|
|
117
|
+
message.set(COMMANDS, commands_dicts, add_to_output=True)
|
|
118
|
+
|
|
119
|
+
return messages
|
|
120
|
+
|
|
121
|
+
def get_startable_flows(
|
|
122
|
+
self, flows: FlowsList, tracker: Optional[DialogueStateTracker] = None
|
|
123
|
+
) -> FlowsList:
|
|
124
|
+
"""Determines a set of startable flows by evaluating flow guard conditions.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
flows: Underlying flows.
|
|
128
|
+
tracker: The tracker containing the conversation history up to now.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
FlowsList: All flows for which the starting conditions are met.
|
|
132
|
+
"""
|
|
133
|
+
if tracker is not None:
|
|
134
|
+
# if tracker is not None, evaluate the flow guard conditions with
|
|
135
|
+
# the current state of the tracker
|
|
136
|
+
return tracker.get_startable_flows(flows)
|
|
137
|
+
|
|
138
|
+
# else evaluate it without the tracker context
|
|
139
|
+
return flows.get_startable_flows({})
|
|
140
|
+
|
|
141
|
+
def get_active_flows(
|
|
142
|
+
self, flows: FlowsList, tracker: Optional[DialogueStateTracker]
|
|
143
|
+
) -> FlowsList:
|
|
144
|
+
"""Retrieve a list of currently active flows.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
flows: Underlying flows.
|
|
148
|
+
tracker: The tracker.
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
FlowsList: All currently active flows.
|
|
152
|
+
"""
|
|
153
|
+
if not tracker:
|
|
154
|
+
return FlowsList([])
|
|
155
|
+
return tracker.get_active_flows(flows)
|
|
156
|
+
|
|
157
|
+
async def _evaluate_and_predict(
|
|
158
|
+
self,
|
|
159
|
+
message: Message,
|
|
160
|
+
startable_flows: FlowsList,
|
|
161
|
+
tracker: Optional[DialogueStateTracker] = None,
|
|
162
|
+
domain: Optional[Domain] = None,
|
|
163
|
+
) -> List[Command]:
|
|
164
|
+
"""Evaluates message for errors and predicts commands if no errors are found.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
message: The message to process.
|
|
168
|
+
tracker: The tracker containing the conversation history up to now.
|
|
169
|
+
startable_flows: The startable flows to use for command prediction.
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
Errors or predicted commands
|
|
173
|
+
"""
|
|
174
|
+
# evaluate message for errors
|
|
175
|
+
if error_commands := self.evaluate_message(message):
|
|
176
|
+
return error_commands
|
|
177
|
+
|
|
178
|
+
# if no errors, try predicting commands
|
|
179
|
+
try:
|
|
180
|
+
return await self.predict_commands(
|
|
181
|
+
message, startable_flows, tracker, domain=domain
|
|
182
|
+
)
|
|
183
|
+
except NotImplementedError:
|
|
184
|
+
raise
|
|
185
|
+
except Exception as e:
|
|
186
|
+
structlogger.error("command_generator.predict.error", error=str(e))
|
|
187
|
+
return []
|
|
188
|
+
|
|
189
|
+
async def predict_commands(
|
|
190
|
+
self,
|
|
191
|
+
message: Message,
|
|
192
|
+
flows: FlowsList,
|
|
193
|
+
tracker: Optional[DialogueStateTracker] = None,
|
|
194
|
+
**kwargs: Any,
|
|
195
|
+
) -> List[Command]:
|
|
196
|
+
"""Predict commands for a single message.
|
|
197
|
+
|
|
198
|
+
Args:
|
|
199
|
+
message: The message to predict commands for.
|
|
200
|
+
flows: The flows to use for command prediction.
|
|
201
|
+
tracker: The tracker containing the conversation history up to now.
|
|
202
|
+
**kwargs: Keyword arguments for forward compatibility.
|
|
203
|
+
|
|
204
|
+
Returns:
|
|
205
|
+
The predicted commands.
|
|
206
|
+
"""
|
|
207
|
+
raise NotImplementedError()
|
|
208
|
+
|
|
209
|
+
def _check_commands_against_startable_flows(
|
|
210
|
+
self, commands: List[Command], startable_flows: FlowsList
|
|
211
|
+
) -> List[Command]:
|
|
212
|
+
"""Check if the start flow commands are only for startable flows.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
commands: The commands to check.
|
|
216
|
+
startable_flows: The flows which have their starting conditions satisfied.
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
The commands that are startable.
|
|
220
|
+
"""
|
|
221
|
+
checked_commands = [
|
|
222
|
+
command
|
|
223
|
+
for command in commands
|
|
224
|
+
if not (
|
|
225
|
+
isinstance(command, StartFlowCommand)
|
|
226
|
+
and command.flow not in startable_flows.flow_ids
|
|
227
|
+
)
|
|
228
|
+
]
|
|
229
|
+
|
|
230
|
+
if commands and len(checked_commands) != len(commands):
|
|
231
|
+
structlogger.info(
|
|
232
|
+
"command_generator.check_commands_against_startable_flows.startable_commands",
|
|
233
|
+
commands=checked_commands,
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
return checked_commands
|
|
237
|
+
|
|
238
|
+
def evaluate_message(self, message: Message) -> List[Command]:
|
|
239
|
+
"""Evaluates the given message.
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
message: The message to evaluate.
|
|
243
|
+
|
|
244
|
+
Returns:
|
|
245
|
+
A list of error commands indicating the type of error.
|
|
246
|
+
"""
|
|
247
|
+
errors: List[Command]
|
|
248
|
+
|
|
249
|
+
if self.check_if_message_is_empty(message):
|
|
250
|
+
# notify the user that the message is empty
|
|
251
|
+
errors = [
|
|
252
|
+
ErrorCommand(error_type=RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_EMPTY)
|
|
253
|
+
]
|
|
254
|
+
elif self.check_if_message_exceeds_limit(message):
|
|
255
|
+
# notify the user about message length
|
|
256
|
+
errors = [
|
|
257
|
+
ErrorCommand(
|
|
258
|
+
error_type=RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG,
|
|
259
|
+
info={"max_characters": self.user_input_config.max_characters},
|
|
260
|
+
)
|
|
261
|
+
]
|
|
262
|
+
else:
|
|
263
|
+
return []
|
|
264
|
+
|
|
265
|
+
structlogger.info(
|
|
266
|
+
"command_generator.evaluate_message.error",
|
|
267
|
+
event_info="Invalid message",
|
|
268
|
+
errors=[e.as_dict() for e in errors],
|
|
269
|
+
message=message.get(TEXT),
|
|
270
|
+
)
|
|
271
|
+
return errors
|
|
272
|
+
|
|
273
|
+
def check_if_message_exceeds_limit(self, message: Message) -> bool:
|
|
274
|
+
"""Checks if the given message exceeds the predefined number of characters."""
|
|
275
|
+
# if limit was a negative number, omit it
|
|
276
|
+
if self.user_input_config.max_characters < 0:
|
|
277
|
+
return False
|
|
278
|
+
return len(message.get(TEXT, "")) > self.user_input_config.max_characters
|
|
279
|
+
|
|
280
|
+
def check_if_message_is_empty(self, message: Message) -> bool:
|
|
281
|
+
"""Checks if the given message is empty or whitespace-only."""
|
|
282
|
+
return len(message.get(TEXT, "").strip()) == 0
|
|
283
|
+
|
|
284
|
+
@staticmethod
|
|
285
|
+
def _check_commands_against_slot_mappings(
|
|
286
|
+
commands: List[Command],
|
|
287
|
+
tracker: DialogueStateTracker,
|
|
288
|
+
domain: Optional[Domain] = None,
|
|
289
|
+
) -> List[Command]:
|
|
290
|
+
"""Check if the LLM-issued slot commands are fillable.
|
|
291
|
+
|
|
292
|
+
The LLM-issued slot commands are fillable if the slot
|
|
293
|
+
mappings are satisfied.
|
|
294
|
+
"""
|
|
295
|
+
if not domain:
|
|
296
|
+
return commands
|
|
297
|
+
|
|
298
|
+
llm_fillable_slot_names = [
|
|
299
|
+
command.name
|
|
300
|
+
for command in commands
|
|
301
|
+
if isinstance(command, SetSlotCommand)
|
|
302
|
+
and command.extractor == SetSlotExtractor.LLM.value
|
|
303
|
+
]
|
|
304
|
+
|
|
305
|
+
if not llm_fillable_slot_names:
|
|
306
|
+
return commands
|
|
307
|
+
|
|
308
|
+
llm_fillable_slots = [
|
|
309
|
+
slot for slot in domain.slots if slot.name in llm_fillable_slot_names
|
|
310
|
+
]
|
|
311
|
+
|
|
312
|
+
slot_filling_manager = SlotFillingManager(domain, tracker)
|
|
313
|
+
slots_to_be_removed = []
|
|
314
|
+
|
|
315
|
+
structlogger.debug(
|
|
316
|
+
"command_processor.check_commands_against_slot_mappings.active_flow",
|
|
317
|
+
active_flow=tracker.active_flow,
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
for slot in llm_fillable_slots:
|
|
321
|
+
should_fill_slot = False
|
|
322
|
+
for mapping in slot.mappings:
|
|
323
|
+
mapping_type = SlotMappingType(mapping.get("type"))
|
|
324
|
+
|
|
325
|
+
should_fill_slot = slot_filling_manager.should_fill_slot(
|
|
326
|
+
slot.name, mapping_type, mapping
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
if should_fill_slot:
|
|
330
|
+
break
|
|
331
|
+
|
|
332
|
+
if not should_fill_slot:
|
|
333
|
+
structlogger.debug(
|
|
334
|
+
"command_processor.check_commands_against_slot_mappings.slot_not_fillable",
|
|
335
|
+
slot_name=slot.name,
|
|
336
|
+
)
|
|
337
|
+
slots_to_be_removed.append(slot.name)
|
|
338
|
+
|
|
339
|
+
if not slots_to_be_removed:
|
|
340
|
+
return commands
|
|
341
|
+
|
|
342
|
+
filtered_commands = [
|
|
343
|
+
command
|
|
344
|
+
for command in commands
|
|
345
|
+
if not (
|
|
346
|
+
isinstance(command, SetSlotCommand)
|
|
347
|
+
and command.name in slots_to_be_removed
|
|
348
|
+
)
|
|
349
|
+
]
|
|
350
|
+
|
|
351
|
+
return filtered_commands
|
|
352
|
+
|
|
353
|
+
@staticmethod
|
|
354
|
+
def _add_commands_to_message_parse_data(
|
|
355
|
+
message: Message, component_name: str, commands: List[Command]
|
|
356
|
+
) -> None:
|
|
357
|
+
"""Add commands to the message parse data.
|
|
358
|
+
|
|
359
|
+
Commands are only added in case the flag 'record_commands_and_prompts' is set.
|
|
360
|
+
Example of predicted commands in the message parse data:
|
|
361
|
+
Message(data={
|
|
362
|
+
PREDICTED_COMMANDS: {
|
|
363
|
+
"MultiStepLLMCommandGenerator": [
|
|
364
|
+
{"command": "set_slot", "name": "slot_name", "value": "slot_value"},
|
|
365
|
+
],
|
|
366
|
+
"NLUCommandAdapter": [
|
|
367
|
+
{"command": "start_flow", "name": "test_flow"},
|
|
368
|
+
]
|
|
369
|
+
}
|
|
370
|
+
})
|
|
371
|
+
"""
|
|
372
|
+
from rasa.dialogue_understanding.utils import record_commands_and_prompts
|
|
373
|
+
|
|
374
|
+
# only set commands if the flag "record_commands_and_prompts" is set to True
|
|
375
|
+
if not record_commands_and_prompts:
|
|
376
|
+
return
|
|
377
|
+
|
|
378
|
+
commands_as_dict = [command.as_dict() for command in commands]
|
|
379
|
+
|
|
380
|
+
if message.get(PREDICTED_COMMANDS) is not None:
|
|
381
|
+
predicted_commands = message.get(PREDICTED_COMMANDS)
|
|
382
|
+
if component_name in predicted_commands:
|
|
383
|
+
predicted_commands[component_name].extend(commands_as_dict)
|
|
384
|
+
else:
|
|
385
|
+
predicted_commands[component_name] = commands_as_dict
|
|
386
|
+
else:
|
|
387
|
+
predicted_commands = {component_name: commands_as_dict}
|
|
388
|
+
|
|
389
|
+
message.set(
|
|
390
|
+
PREDICTED_COMMANDS,
|
|
391
|
+
predicted_commands,
|
|
392
|
+
add_to_output=True,
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
@staticmethod
|
|
396
|
+
def _add_prompt_to_message_parse_data(
|
|
397
|
+
message: Message,
|
|
398
|
+
component_name: str,
|
|
399
|
+
prompt_name: str,
|
|
400
|
+
user_prompt: str,
|
|
401
|
+
system_prompt: Optional[str] = None,
|
|
402
|
+
) -> None:
|
|
403
|
+
"""Add prompt to the message parse data.
|
|
404
|
+
|
|
405
|
+
Prompt is only added in case the flag 'record_commands_and_prompts' is set.
|
|
406
|
+
Example of prompts in the message parse data:
|
|
407
|
+
Message(data={
|
|
408
|
+
PROMPTS: {
|
|
409
|
+
"MultiStepLLMCommandGenerator": [
|
|
410
|
+
(
|
|
411
|
+
"fill_slots_prompt",
|
|
412
|
+
{
|
|
413
|
+
"user_prompt": <prompt content>",
|
|
414
|
+
"system_prompt": <prompt content>"
|
|
415
|
+
}
|
|
416
|
+
),
|
|
417
|
+
(
|
|
418
|
+
"handle_flows_prompt",
|
|
419
|
+
{
|
|
420
|
+
"user_prompt": <prompt content>",
|
|
421
|
+
"system_prompt": <prompt content>"
|
|
422
|
+
}
|
|
423
|
+
),
|
|
424
|
+
],
|
|
425
|
+
"SingleStepLLMCommandGenerator": [
|
|
426
|
+
(
|
|
427
|
+
"prompt_template",
|
|
428
|
+
{
|
|
429
|
+
"user_prompt": <prompt content>",
|
|
430
|
+
"system_prompt": <prompt content>"
|
|
431
|
+
}
|
|
432
|
+
),
|
|
433
|
+
]
|
|
434
|
+
}
|
|
435
|
+
})
|
|
436
|
+
"""
|
|
437
|
+
from rasa.dialogue_understanding.utils import record_commands_and_prompts
|
|
438
|
+
|
|
439
|
+
# only set prompt if the flag "record_commands_and_prompts" is set to True
|
|
440
|
+
if not record_commands_and_prompts:
|
|
441
|
+
return
|
|
442
|
+
|
|
443
|
+
prompt_tuple = (
|
|
444
|
+
prompt_name,
|
|
445
|
+
{
|
|
446
|
+
KEY_USER_PROMPT: user_prompt,
|
|
447
|
+
**({KEY_SYSTEM_PROMPT: system_prompt} if system_prompt else {}),
|
|
448
|
+
},
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
if message.get(PROMPTS) is not None:
|
|
452
|
+
prompts = message.get(PROMPTS)
|
|
453
|
+
if component_name in prompts:
|
|
454
|
+
prompts[component_name].append(prompt_tuple)
|
|
455
|
+
else:
|
|
456
|
+
prompts[component_name] = [prompt_tuple]
|
|
457
|
+
else:
|
|
458
|
+
prompts = {component_name: [prompt_tuple]}
|
|
459
|
+
|
|
460
|
+
message.set(
|
|
461
|
+
PROMPTS,
|
|
462
|
+
prompts,
|
|
463
|
+
add_to_output=True,
|
|
464
|
+
)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from rasa.shared.constants import (
|
|
2
|
+
PROVIDER_CONFIG_KEY,
|
|
3
|
+
OPENAI_PROVIDER,
|
|
4
|
+
MODEL_CONFIG_KEY,
|
|
5
|
+
TIMEOUT_CONFIG_KEY,
|
|
6
|
+
)
|
|
7
|
+
from rasa.shared.utils.llm import (
|
|
8
|
+
DEFAULT_OPENAI_CHAT_MODEL_NAME_ADVANCED,
|
|
9
|
+
DEFAULT_OPENAI_MAX_GENERATED_TOKENS,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
DEFAULT_LLM_CONFIG = {
|
|
13
|
+
PROVIDER_CONFIG_KEY: OPENAI_PROVIDER,
|
|
14
|
+
MODEL_CONFIG_KEY: DEFAULT_OPENAI_CHAT_MODEL_NAME_ADVANCED,
|
|
15
|
+
"temperature": 0.0,
|
|
16
|
+
"max_tokens": DEFAULT_OPENAI_MAX_GENERATED_TOKENS,
|
|
17
|
+
TIMEOUT_CONFIG_KEY: 7,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
LLM_CONFIG_KEY = "llm"
|
|
21
|
+
USER_INPUT_CONFIG_KEY = "user_input"
|
|
22
|
+
|
|
23
|
+
FLOW_RETRIEVAL_KEY = "flow_retrieval"
|
|
24
|
+
FLOW_RETRIEVAL_ACTIVE_KEY = "active"
|
|
25
|
+
FLOW_RETRIEVAL_EMBEDDINGS_CONFIG_KEY = "embeddings"
|
|
26
|
+
|
|
27
|
+
FLOW_RETRIEVAL_FLOW_THRESHOLD = 20
|