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,211 @@
|
|
|
1
|
+
from typing import List, Optional, Set, Tuple
|
|
2
|
+
import typing
|
|
3
|
+
from rasa.dialogue_understanding.patterns.collect_information import (
|
|
4
|
+
CollectInformationPatternFlowStackFrame,
|
|
5
|
+
)
|
|
6
|
+
from rasa.dialogue_understanding.stack.frames import BaseFlowStackFrame
|
|
7
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
8
|
+
from rasa.dialogue_understanding.stack.frames import UserFlowStackFrame
|
|
9
|
+
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import FlowStackFrameType
|
|
10
|
+
from rasa.dialogue_understanding.stack.frames.pattern_frame import PatternFlowStackFrame
|
|
11
|
+
from rasa.shared.core.flows.steps.collect import CollectInformationFlowStep
|
|
12
|
+
from rasa.shared.core.flows.steps.constants import END_STEP
|
|
13
|
+
from rasa.shared.core.flows.steps.continuation import ContinueFlowStep
|
|
14
|
+
from rasa.shared.core.flows import FlowsList
|
|
15
|
+
|
|
16
|
+
if typing.TYPE_CHECKING:
|
|
17
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def top_flow_frame(
|
|
21
|
+
dialogue_stack: DialogueStack,
|
|
22
|
+
ignore_collect_information_pattern: bool = True,
|
|
23
|
+
ignore_call_frames: bool = True,
|
|
24
|
+
) -> Optional[BaseFlowStackFrame]:
|
|
25
|
+
"""Returns the topmost flow frame from the tracker.
|
|
26
|
+
|
|
27
|
+
By default, the topmost flow frame is ignored if it is the
|
|
28
|
+
`pattern_collect_information`. This is because the `pattern_collect_information`
|
|
29
|
+
is a special flow frame that is used to collect information from the user
|
|
30
|
+
and commonly, is not what you are looking for when you want the topmost frame.
|
|
31
|
+
|
|
32
|
+
Also excludes frames created by a call step. They are treated as if they are
|
|
33
|
+
directly part of the flow that called them.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
dialogue_stack: The dialogue stack to use.
|
|
37
|
+
ignore_collect_information_pattern: Whether to ignore the
|
|
38
|
+
`pattern_collect_information` frame.
|
|
39
|
+
ignore_call_frames: Whether to ignore user frames of type `call`
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
The topmost flow frame from the tracker. `None` if there
|
|
43
|
+
is no frame on the stack.
|
|
44
|
+
"""
|
|
45
|
+
for frame in reversed(dialogue_stack.frames):
|
|
46
|
+
if ignore_collect_information_pattern and isinstance(
|
|
47
|
+
frame, CollectInformationPatternFlowStackFrame
|
|
48
|
+
):
|
|
49
|
+
continue
|
|
50
|
+
if ignore_call_frames and (
|
|
51
|
+
isinstance(frame, UserFlowStackFrame)
|
|
52
|
+
and frame.frame_type == FlowStackFrameType.CALL
|
|
53
|
+
):
|
|
54
|
+
continue
|
|
55
|
+
if isinstance(frame, BaseFlowStackFrame):
|
|
56
|
+
return frame
|
|
57
|
+
return None
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def top_user_flow_frame(dialogue_stack: DialogueStack) -> Optional[UserFlowStackFrame]:
|
|
61
|
+
"""Returns the topmost user flow frame from the tracker.
|
|
62
|
+
|
|
63
|
+
User flows are flows that are created by developers of an assistant and
|
|
64
|
+
describe tasks the assistant can fulfil. The topmost user flow frame is
|
|
65
|
+
the topmost frame on the stack for one of these user flows. While looking
|
|
66
|
+
for this topmost user flow, other frame types such as PatternFrames,
|
|
67
|
+
SearchFrames, ChitchatFrames, and user flows started through call steps
|
|
68
|
+
are skipped. The latter are treated as part of the calling user flow.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
dialogue_stack: The dialogue stack to use.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
The topmost user flow frame from the tracker.
|
|
75
|
+
"""
|
|
76
|
+
for frame in reversed(dialogue_stack.frames):
|
|
77
|
+
if (
|
|
78
|
+
isinstance(frame, UserFlowStackFrame)
|
|
79
|
+
and frame.frame_type != FlowStackFrameType.CALL
|
|
80
|
+
):
|
|
81
|
+
return frame
|
|
82
|
+
return None
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def filled_slots_for_active_flow(
|
|
86
|
+
tracker: "DialogueStateTracker", all_flows: FlowsList
|
|
87
|
+
) -> Tuple[Set[str], Optional[str]]:
|
|
88
|
+
"""Get all slots that have been filled for the 'current user flow'.
|
|
89
|
+
|
|
90
|
+
All patterns that sit ontop of that user flow as well as
|
|
91
|
+
flows called by this flow, are also included.
|
|
92
|
+
|
|
93
|
+
Any collect information step that is part of a pattern on top of the current
|
|
94
|
+
user flow are also included.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
tracker: The tracker to get the filled slots from.
|
|
98
|
+
all_flows: All flows.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
All slots that have been filled for the current flow and the id of the currently
|
|
102
|
+
active flow.
|
|
103
|
+
"""
|
|
104
|
+
stack = tracker.stack
|
|
105
|
+
user_frame = top_user_flow_frame(stack)
|
|
106
|
+
active_flow = user_frame.flow_id if user_frame else None
|
|
107
|
+
|
|
108
|
+
filled_slots = set()
|
|
109
|
+
for collect_step, _ in previous_collect_steps_for_active_flow(tracker, all_flows):
|
|
110
|
+
filled_slots.add(collect_step.collect)
|
|
111
|
+
|
|
112
|
+
return filled_slots, active_flow
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def previous_collect_steps_for_active_flow(
|
|
116
|
+
tracker: "DialogueStateTracker", all_flows: FlowsList
|
|
117
|
+
) -> List[Tuple[CollectInformationFlowStep, str]]:
|
|
118
|
+
stack = tracker.stack
|
|
119
|
+
user_frame = top_user_flow_frame(stack)
|
|
120
|
+
|
|
121
|
+
if not user_frame:
|
|
122
|
+
return []
|
|
123
|
+
|
|
124
|
+
collect_steps: List[Tuple[CollectInformationFlowStep, str]] = []
|
|
125
|
+
|
|
126
|
+
active_frames = {frame.frame_id for frame in stack.frames}
|
|
127
|
+
|
|
128
|
+
for previous_stack in tracker.previous_stack_states():
|
|
129
|
+
active_frame = top_user_flow_frame(previous_stack)
|
|
130
|
+
if not active_frame or active_frame.frame_id != user_frame.frame_id:
|
|
131
|
+
continue
|
|
132
|
+
|
|
133
|
+
top_frame = previous_stack.top()
|
|
134
|
+
if not isinstance(top_frame, BaseFlowStackFrame):
|
|
135
|
+
continue
|
|
136
|
+
|
|
137
|
+
step = top_frame.step(all_flows)
|
|
138
|
+
if not isinstance(step, CollectInformationFlowStep):
|
|
139
|
+
continue
|
|
140
|
+
|
|
141
|
+
if isinstance(top_frame, UserFlowStackFrame):
|
|
142
|
+
collect_steps.append((step, top_frame.flow_id))
|
|
143
|
+
elif (
|
|
144
|
+
isinstance(top_frame, PatternFlowStackFrame)
|
|
145
|
+
and top_frame.frame_id in active_frames
|
|
146
|
+
):
|
|
147
|
+
# if this is a pattern, it is only relevant if it is still
|
|
148
|
+
# active in the current state of the conversation.
|
|
149
|
+
# completed patterns in the past are not relevant
|
|
150
|
+
collect_steps.append((step, top_frame.flow_id))
|
|
151
|
+
|
|
152
|
+
return collect_steps
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def user_flows_on_the_stack(dialogue_stack: DialogueStack) -> Set[str]:
|
|
156
|
+
"""Get all user flows that are currently on the stack.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
dialogue_stack: The dialogue stack.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
All user flows that are currently on the stack.
|
|
163
|
+
"""
|
|
164
|
+
return {
|
|
165
|
+
f.flow_id for f in dialogue_stack.frames if isinstance(f, UserFlowStackFrame)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def end_top_user_flow(stack: DialogueStack) -> DialogueStack:
|
|
170
|
+
"""Ends all frames on top of the stack including the topmost user frame.
|
|
171
|
+
|
|
172
|
+
Ends all flows until the next user flow is reached. This is useful
|
|
173
|
+
if you want to end all flows that are currently on the stack and
|
|
174
|
+
the user flow that triggered them.
|
|
175
|
+
|
|
176
|
+
Args:
|
|
177
|
+
stack: The dialogue stack.
|
|
178
|
+
"""
|
|
179
|
+
updated_stack = stack.copy()
|
|
180
|
+
|
|
181
|
+
for frame in reversed(updated_stack.frames):
|
|
182
|
+
if isinstance(frame, BaseFlowStackFrame):
|
|
183
|
+
frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
|
|
184
|
+
if isinstance(frame, UserFlowStackFrame):
|
|
185
|
+
break
|
|
186
|
+
return updated_stack
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def get_collect_steps_excluding_ask_before_filling_for_active_flow(
|
|
190
|
+
dialogue_stack: DialogueStack, all_flows: FlowsList
|
|
191
|
+
) -> Set[str]:
|
|
192
|
+
"""Get all collect steps that are part of the current flow, without
|
|
193
|
+
considering the collect steps that has to be asked before filling.
|
|
194
|
+
|
|
195
|
+
Args:
|
|
196
|
+
dialogue_stack: The dialogue stack.
|
|
197
|
+
all_flows: All flows.
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
All collect steps that are part of the current active flow,
|
|
201
|
+
excluding the collect steps that have to be asked before filling.
|
|
202
|
+
"""
|
|
203
|
+
active_frame = top_user_flow_frame(dialogue_stack)
|
|
204
|
+
if active_frame is None:
|
|
205
|
+
return set()
|
|
206
|
+
active_flow = active_frame.flow(all_flows)
|
|
207
|
+
return set(
|
|
208
|
+
step.collect
|
|
209
|
+
for step in active_flow.get_collect_steps()
|
|
210
|
+
if not step.ask_before_filling
|
|
211
|
+
)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from contextlib import contextmanager
|
|
2
|
+
from typing import Generator
|
|
3
|
+
|
|
4
|
+
record_commands_and_prompts = False
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@contextmanager
|
|
8
|
+
def set_record_commands_and_prompts() -> Generator:
|
|
9
|
+
global record_commands_and_prompts
|
|
10
|
+
record_commands_and_prompts = True
|
|
11
|
+
try:
|
|
12
|
+
yield
|
|
13
|
+
finally:
|
|
14
|
+
record_commands_and_prompts = False
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from typing import List, Dict
|
|
2
|
+
|
|
3
|
+
from rasa.dialogue_understanding_test.du_test_result import (
|
|
4
|
+
DialogueUnderstandingTestResult,
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def calculate_command_metrics(
|
|
9
|
+
test_results: List[DialogueUnderstandingTestResult],
|
|
10
|
+
) -> Dict[str, Dict[str, float]]:
|
|
11
|
+
"""Calculate the metrics for the commands."""
|
|
12
|
+
return {}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import rasa.e2e_test.constants as constants
|
|
2
|
+
|
|
3
|
+
KEY_FIXTURES = constants.KEY_FIXTURES
|
|
4
|
+
KEY_METADATA = constants.KEY_METADATA
|
|
5
|
+
KEY_STUB_CUSTOM_ACTIONS = constants.KEY_STUB_CUSTOM_ACTIONS
|
|
6
|
+
KEY_USER_INPUT = constants.KEY_USER_INPUT
|
|
7
|
+
KEY_BOT_INPUT = constants.KEY_BOT_INPUT
|
|
8
|
+
KEY_BOT_UTTERED = constants.KEY_BOT_UTTERED
|
|
9
|
+
KEY_STEPS = constants.KEY_STEPS
|
|
10
|
+
KEY_TEST_CASE = constants.KEY_TEST_CASE
|
|
11
|
+
KEY_TEST_CASES = constants.KEY_TEST_CASES
|
|
12
|
+
KEY_COMMANDS = "commands"
|
|
13
|
+
|
|
14
|
+
ACTOR_USER = "user"
|
|
15
|
+
ACTOR_BOT = "bot"
|
|
16
|
+
|
|
17
|
+
DEFAULT_INPUT_TESTS_PATH = "du_tests/"
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
from typing import List, Optional, Dict, Any
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
4
|
+
|
|
5
|
+
from rasa.dialogue_understanding.commands import Command
|
|
6
|
+
from rasa.dialogue_understanding_test.constants import (
|
|
7
|
+
ACTOR_USER,
|
|
8
|
+
KEY_COMMANDS,
|
|
9
|
+
ACTOR_BOT,
|
|
10
|
+
KEY_TEST_CASE,
|
|
11
|
+
KEY_STEPS,
|
|
12
|
+
KEY_FIXTURES,
|
|
13
|
+
KEY_METADATA,
|
|
14
|
+
KEY_USER_INPUT,
|
|
15
|
+
KEY_BOT_INPUT,
|
|
16
|
+
KEY_BOT_UTTERED,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DialogueUnderstandingOutput(BaseModel):
|
|
21
|
+
"""Output containing prompts and generated commands by component.
|
|
22
|
+
|
|
23
|
+
Example of commands:
|
|
24
|
+
{
|
|
25
|
+
"MultiStepLLMCommandGenerator": [
|
|
26
|
+
{"command": "set_slot", "name": "slot_name", "value": "slot_value"},
|
|
27
|
+
],
|
|
28
|
+
"NLUCommandAdapter": [
|
|
29
|
+
{"command": "start_flow", "name": "test_flow"},
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
Example of prompts:
|
|
34
|
+
{
|
|
35
|
+
"MultiStepLLMCommandGenerator": [
|
|
36
|
+
(
|
|
37
|
+
"fill_slots_prompt",
|
|
38
|
+
{
|
|
39
|
+
"user_prompt": "<prompt content>",
|
|
40
|
+
"system_prompt": "<prompt content>"
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
(
|
|
44
|
+
"handle_flows_prompt",
|
|
45
|
+
{
|
|
46
|
+
"user_prompt": "<prompt content>",
|
|
47
|
+
"system_prompt": "<prompt content>"
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
],
|
|
51
|
+
}
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
prompts: Dict[str, tuple[str, Dict[str, str]]]
|
|
55
|
+
commands: Dict[str, List[Command]]
|
|
56
|
+
|
|
57
|
+
model_config = ConfigDict(frozen=True)
|
|
58
|
+
|
|
59
|
+
def get_component_data(
|
|
60
|
+
self, component_name: str
|
|
61
|
+
) -> tuple[Optional[tuple[str, Dict[str, str]]], List[Command]]:
|
|
62
|
+
"""Get both the prompts and commands for a specific component."""
|
|
63
|
+
return self.prompts.get(component_name), self.commands.get(component_name, [])
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class DialogueUnderstandingTestStep(BaseModel):
|
|
67
|
+
actor: str
|
|
68
|
+
text: Optional[str] = None
|
|
69
|
+
template: Optional[str] = None
|
|
70
|
+
line: Optional[int] = None
|
|
71
|
+
metadata_name: Optional[str] = None
|
|
72
|
+
commands: Optional[List[Command]] = None
|
|
73
|
+
dialogue_understanding_output: Optional[DialogueUnderstandingOutput] = None
|
|
74
|
+
|
|
75
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
76
|
+
if self.actor == ACTOR_USER:
|
|
77
|
+
if self.commands:
|
|
78
|
+
return {
|
|
79
|
+
KEY_USER_INPUT: self.text,
|
|
80
|
+
# TODO: The command should be converted into our DSL
|
|
81
|
+
KEY_COMMANDS: [command.as_dict() for command in self.commands],
|
|
82
|
+
}
|
|
83
|
+
return {ACTOR_USER: self.text}
|
|
84
|
+
elif self.actor == ACTOR_BOT:
|
|
85
|
+
if self.text is not None:
|
|
86
|
+
return {KEY_BOT_INPUT: self.text}
|
|
87
|
+
elif self.template is not None:
|
|
88
|
+
return {KEY_BOT_UTTERED: self.template}
|
|
89
|
+
|
|
90
|
+
return {}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class DialogueUnderstandingTestCase(BaseModel):
|
|
94
|
+
name: str
|
|
95
|
+
steps: list[DialogueUnderstandingTestStep] = Field(min_length=1)
|
|
96
|
+
file: Optional[str] = None
|
|
97
|
+
line: Optional[int] = None
|
|
98
|
+
fixture_names: Optional[List[str]] = None
|
|
99
|
+
metadata_name: Optional[str] = None
|
|
100
|
+
|
|
101
|
+
def full_name(self) -> str:
|
|
102
|
+
return f"{self.file}::{self.name}"
|
|
103
|
+
|
|
104
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
105
|
+
result = {
|
|
106
|
+
KEY_TEST_CASE: self.name,
|
|
107
|
+
KEY_STEPS: [step.as_dict() for step in self.steps],
|
|
108
|
+
}
|
|
109
|
+
if self.fixture_names:
|
|
110
|
+
result[KEY_FIXTURES] = self.fixture_names
|
|
111
|
+
if self.metadata_name:
|
|
112
|
+
result[KEY_METADATA] = self.metadata_name
|
|
113
|
+
return result
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# Update forward references
|
|
117
|
+
DialogueUnderstandingTestStep.model_rebuild()
|
|
118
|
+
DialogueUnderstandingTestCase.model_rebuild()
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
from rasa.dialogue_understanding_test.du_test_case import DialogueUnderstandingTestCase
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DialogueUnderstandingTestResult(BaseModel):
|
|
9
|
+
test_case: DialogueUnderstandingTestCase
|
|
10
|
+
passed: bool
|
|
11
|
+
error_line: Optional[int] = None
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from typing import Dict, Optional, Text, Union, List
|
|
3
|
+
|
|
4
|
+
import structlog
|
|
5
|
+
|
|
6
|
+
from rasa.core.exceptions import AgentNotReady
|
|
7
|
+
from rasa.core.persistor import StorageType
|
|
8
|
+
from rasa.core.utils import AvailableEndpoints
|
|
9
|
+
from rasa.dialogue_understanding_test.du_test_case import DialogueUnderstandingTestCase
|
|
10
|
+
from rasa.dialogue_understanding_test.du_test_result import (
|
|
11
|
+
DialogueUnderstandingTestResult,
|
|
12
|
+
)
|
|
13
|
+
from rasa.e2e_test.e2e_test_case import (
|
|
14
|
+
KEY_STUB_CUSTOM_ACTIONS,
|
|
15
|
+
ActualStepOutput,
|
|
16
|
+
TestStep,
|
|
17
|
+
Fixture,
|
|
18
|
+
Metadata,
|
|
19
|
+
)
|
|
20
|
+
from rasa.e2e_test.e2e_test_runner import E2ETestRunner
|
|
21
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
22
|
+
|
|
23
|
+
structlogger = structlog.get_logger()
|
|
24
|
+
|
|
25
|
+
TEST_TURNS_TYPE = Dict[int, Union[TestStep, ActualStepOutput]]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class DialogueUnderstandingTestRunner:
|
|
29
|
+
"""Dialogue Understanding test suite runner."""
|
|
30
|
+
|
|
31
|
+
def __init__(
|
|
32
|
+
self,
|
|
33
|
+
model_path: Optional[Text] = None,
|
|
34
|
+
model_server: Optional[EndpointConfig] = None,
|
|
35
|
+
remote_storage: Optional[StorageType] = None,
|
|
36
|
+
endpoints: Optional[AvailableEndpoints] = None,
|
|
37
|
+
) -> None:
|
|
38
|
+
"""Initializes the Dialogue Understanding test suite runner.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
model_path: Path to the model.
|
|
42
|
+
model_server: Model server configuration.
|
|
43
|
+
remote_storage: Remote storage to use for model retrieval.
|
|
44
|
+
endpoints: Endpoints configuration.
|
|
45
|
+
"""
|
|
46
|
+
import rasa.core.agent
|
|
47
|
+
|
|
48
|
+
self._check_action_server(endpoints)
|
|
49
|
+
|
|
50
|
+
self.agent = asyncio.run(
|
|
51
|
+
rasa.core.agent.load_agent(
|
|
52
|
+
model_path=model_path,
|
|
53
|
+
model_server=model_server,
|
|
54
|
+
remote_storage=remote_storage,
|
|
55
|
+
endpoints=endpoints,
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
if not self.agent.is_ready():
|
|
59
|
+
raise AgentNotReady(
|
|
60
|
+
"Agent needs to be prepared before usage. "
|
|
61
|
+
"Please check that the agent was able to "
|
|
62
|
+
"load the trained model."
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
def _check_action_server(self, endpoints: AvailableEndpoints) -> None:
|
|
66
|
+
"""Check if the action server is reachable."""
|
|
67
|
+
are_custom_actions_stubbed = (
|
|
68
|
+
endpoints
|
|
69
|
+
and endpoints.action
|
|
70
|
+
and endpoints.action.kwargs.get(KEY_STUB_CUSTOM_ACTIONS)
|
|
71
|
+
)
|
|
72
|
+
if endpoints and not are_custom_actions_stubbed:
|
|
73
|
+
E2ETestRunner._action_server_is_reachable(
|
|
74
|
+
endpoints, "dialogue_understanding_test_runner"
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
async def run_tests(
|
|
78
|
+
self,
|
|
79
|
+
test_cases: List[DialogueUnderstandingTestCase],
|
|
80
|
+
fixtures: List[Fixture],
|
|
81
|
+
metadata: List[Metadata],
|
|
82
|
+
) -> List[DialogueUnderstandingTestResult]:
|
|
83
|
+
"""Run the dialogue understanding tests.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
test_cases: List of test cases.
|
|
87
|
+
fixtures: List of fixtures.
|
|
88
|
+
metadata: List of metadata.
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
List[DialogueUnderstandingTestResult]: List of test results.
|
|
92
|
+
"""
|
|
93
|
+
return []
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from typing import List, Dict
|
|
2
|
+
|
|
3
|
+
from rasa.dialogue_understanding_test.du_test_result import (
|
|
4
|
+
DialogueUnderstandingTestResult,
|
|
5
|
+
)
|
|
6
|
+
from rasa.e2e_test.e2e_test_case import TestSuite
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def read_test_suite(test_case_path: str) -> TestSuite:
|
|
10
|
+
"""Read the test cases from the given test case path.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
test_case_path: Path to the test cases.
|
|
14
|
+
|
|
15
|
+
Returns:
|
|
16
|
+
TestSuite: Test suite containing the dialogue understanding test cases.
|
|
17
|
+
"""
|
|
18
|
+
return TestSuite([], [], [], {})
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def write_test_results_to_file(
|
|
22
|
+
failed_tests: List[DialogueUnderstandingTestResult],
|
|
23
|
+
passed_tests: List[DialogueUnderstandingTestResult],
|
|
24
|
+
command_metrics: Dict[str, Dict[str, float]],
|
|
25
|
+
output_file: str,
|
|
26
|
+
output_prompt: bool,
|
|
27
|
+
) -> None:
|
|
28
|
+
"""Write the test results to the given output file.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
failed_tests: Failed test cases.
|
|
32
|
+
passed_tests: Passed test cases.
|
|
33
|
+
command_metrics: Metrics for the commands.
|
|
34
|
+
output_file: Path to the output file.
|
|
35
|
+
output_prompt: Whether to log the prompt or not.
|
|
36
|
+
"""
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def print_test_results(
|
|
41
|
+
failed_tests: List[DialogueUnderstandingTestResult],
|
|
42
|
+
passed_tests: List[DialogueUnderstandingTestResult],
|
|
43
|
+
command_metrics: Dict[str, Dict[str, float]],
|
|
44
|
+
output_prompt: bool,
|
|
45
|
+
) -> None:
|
|
46
|
+
"""Print the test results to console.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
failed_tests: Failed test cases.
|
|
50
|
+
passed_tests: Passed test cases.
|
|
51
|
+
command_metrics: Metrics for the commands.
|
|
52
|
+
output_prompt: Whether to log the prompt or not.
|
|
53
|
+
"""
|
|
54
|
+
pass
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
from rasa.dialogue_understanding_test.du_test_case import DialogueUnderstandingTestCase
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def validate_cli_arguments(args: argparse.Namespace) -> None:
|
|
8
|
+
"""Validate the CLI arguments for the dialogue understanding test.
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
args: Commandline arguments.
|
|
12
|
+
"""
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def validate_test_cases(test_cases: List[DialogueUnderstandingTestCase]) -> None:
|
|
17
|
+
"""Validate the dialogue understanding test cases.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
test_cases: Test cases to validate.
|
|
21
|
+
"""
|
|
22
|
+
pass
|
|
File without changes
|