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,572 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
import numpy as np
|
|
3
|
+
from typing import Optional, Text, Dict, Any, Union, List, Tuple, TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
import rasa.shared.utils.common
|
|
6
|
+
import rasa.shared.utils.io
|
|
7
|
+
import rasa.nlu.utils.bilou_utils
|
|
8
|
+
from rasa.shared.constants import NEXT_MAJOR_VERSION_FOR_DEPRECATIONS
|
|
9
|
+
from rasa.nlu.constants import NUMBER_OF_SUB_TOKENS
|
|
10
|
+
import rasa.utils.io as io_utils
|
|
11
|
+
from rasa.utils.tensorflow.constants import (
|
|
12
|
+
LOSS_TYPE,
|
|
13
|
+
RANKING_LENGTH,
|
|
14
|
+
RENORMALIZE_CONFIDENCES,
|
|
15
|
+
SIMILARITY_TYPE,
|
|
16
|
+
EVAL_NUM_EXAMPLES,
|
|
17
|
+
EVAL_NUM_EPOCHS,
|
|
18
|
+
EPOCHS,
|
|
19
|
+
SOFTMAX,
|
|
20
|
+
MARGIN,
|
|
21
|
+
AUTO,
|
|
22
|
+
INNER,
|
|
23
|
+
COSINE,
|
|
24
|
+
SEQUENCE,
|
|
25
|
+
CROSS_ENTROPY,
|
|
26
|
+
CONSTRAIN_SIMILARITIES,
|
|
27
|
+
MODEL_CONFIDENCE,
|
|
28
|
+
TOLERANCE,
|
|
29
|
+
CHECKPOINT_MODEL,
|
|
30
|
+
)
|
|
31
|
+
from rasa.utils.tensorflow.callback import RasaTrainingLogger, RasaModelCheckpoint
|
|
32
|
+
from rasa.utils.tensorflow.data_generator import RasaBatchDataGenerator
|
|
33
|
+
from rasa.utils.tensorflow.model_data import RasaModelData
|
|
34
|
+
from rasa.shared.nlu.constants import SPLIT_ENTITIES_BY_COMMA
|
|
35
|
+
from rasa.shared.exceptions import InvalidConfigException
|
|
36
|
+
|
|
37
|
+
if TYPE_CHECKING:
|
|
38
|
+
from rasa.nlu.extractors.extractor import EntityTagSpec
|
|
39
|
+
from rasa.nlu.tokenizers.tokenizer import Token
|
|
40
|
+
from tensorflow.keras.callbacks import Callback
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def rank_and_mask(
|
|
44
|
+
confidences: np.ndarray, ranking_length: int = 0, renormalize: bool = False
|
|
45
|
+
) -> Tuple[np.ndarray, np.ndarray]:
|
|
46
|
+
"""Computes a ranking of the given confidences.
|
|
47
|
+
|
|
48
|
+
First, it computes a list containing the indices that would sort all the given
|
|
49
|
+
confidences in decreasing order.
|
|
50
|
+
If a `ranking_length` is specified, then only the indices for the `ranking_length`
|
|
51
|
+
largest confidences will be returned and all other confidences (i.e. whose indices
|
|
52
|
+
we do not return) will be masked by setting them to 0.
|
|
53
|
+
Moreover, if `renormalize` is set to `True`, then the confidences will
|
|
54
|
+
additionally be renormalised by dividing them by their sum.
|
|
55
|
+
|
|
56
|
+
We assume that the given confidences sum up to 1 and, if the
|
|
57
|
+
`ranking_length` is 0 or larger than the given number of confidences,
|
|
58
|
+
we set the `ranking_length` to the number of confidences.
|
|
59
|
+
Hence, in this case the confidences won't be modified.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
confidences: a 1-d array of confidences that are non-negative and sum up to 1
|
|
63
|
+
ranking_length: the size of the ranking to be computed. If set to 0 or
|
|
64
|
+
something larger than the number of given confidences, then this is set
|
|
65
|
+
to the exact number of given confidences.
|
|
66
|
+
renormalize: determines whether the masked confidences should be renormalised.
|
|
67
|
+
return_indices:
|
|
68
|
+
Returns:
|
|
69
|
+
indices of the top `ranking_length` confidences and an array of the same
|
|
70
|
+
shape as the given confidences that contains the possibly masked and
|
|
71
|
+
renormalized confidence values
|
|
72
|
+
"""
|
|
73
|
+
indices = confidences.argsort()[::-1]
|
|
74
|
+
confidences = confidences.copy()
|
|
75
|
+
|
|
76
|
+
if 0 < ranking_length < len(confidences):
|
|
77
|
+
confidences[indices[ranking_length:]] = 0
|
|
78
|
+
|
|
79
|
+
if renormalize and np.sum(confidences) > 0:
|
|
80
|
+
confidences = confidences / np.sum(confidences)
|
|
81
|
+
|
|
82
|
+
indices = indices[:ranking_length]
|
|
83
|
+
|
|
84
|
+
return indices, confidences
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def update_similarity_type(config: Dict[Text, Any]) -> Dict[Text, Any]:
|
|
88
|
+
"""If SIMILARITY_TYPE is set to 'auto', update the SIMILARITY_TYPE depending
|
|
89
|
+
on the LOSS_TYPE.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
config: model configuration
|
|
93
|
+
|
|
94
|
+
Returns: updated model configuration
|
|
95
|
+
"""
|
|
96
|
+
if config.get(SIMILARITY_TYPE) == AUTO:
|
|
97
|
+
if config[LOSS_TYPE] == CROSS_ENTROPY:
|
|
98
|
+
config[SIMILARITY_TYPE] = INNER
|
|
99
|
+
elif config[LOSS_TYPE] == MARGIN:
|
|
100
|
+
config[SIMILARITY_TYPE] = COSINE
|
|
101
|
+
|
|
102
|
+
return config
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def align_token_features(
|
|
106
|
+
list_of_tokens: List[List["Token"]],
|
|
107
|
+
in_token_features: np.ndarray,
|
|
108
|
+
shape: Optional[Tuple] = None,
|
|
109
|
+
) -> np.ndarray:
|
|
110
|
+
"""Align token features to match tokens.
|
|
111
|
+
|
|
112
|
+
ConveRTFeaturizer and LanguageModelFeaturizer might split up tokens into sub-tokens.
|
|
113
|
+
We need to take the mean of the sub-token vectors and take that as token vector.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
list_of_tokens: tokens for examples
|
|
117
|
+
in_token_features: token features from ConveRT
|
|
118
|
+
shape: shape of feature matrix
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
Token features.
|
|
122
|
+
"""
|
|
123
|
+
if shape is None:
|
|
124
|
+
shape = in_token_features.shape
|
|
125
|
+
out_token_features = np.zeros(shape)
|
|
126
|
+
|
|
127
|
+
for example_idx, example_tokens in enumerate(list_of_tokens):
|
|
128
|
+
offset = 0
|
|
129
|
+
for token_idx, token in enumerate(example_tokens):
|
|
130
|
+
number_sub_words = token.get(NUMBER_OF_SUB_TOKENS, 1)
|
|
131
|
+
|
|
132
|
+
if number_sub_words > 1:
|
|
133
|
+
token_start_idx = token_idx + offset
|
|
134
|
+
token_end_idx = token_idx + offset + number_sub_words
|
|
135
|
+
|
|
136
|
+
mean_vec = np.mean(
|
|
137
|
+
in_token_features[example_idx][token_start_idx:token_end_idx],
|
|
138
|
+
axis=0,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
offset += number_sub_words - 1
|
|
142
|
+
|
|
143
|
+
out_token_features[example_idx][token_idx] = mean_vec
|
|
144
|
+
else:
|
|
145
|
+
out_token_features[example_idx][token_idx] = in_token_features[
|
|
146
|
+
example_idx
|
|
147
|
+
][token_idx + offset]
|
|
148
|
+
|
|
149
|
+
return out_token_features
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def update_evaluation_parameters(config: Dict[Text, Any]) -> Dict[Text, Any]:
|
|
153
|
+
"""If EVAL_NUM_EPOCHS is set to -1, evaluate at the end of the training.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
config: model configuration
|
|
157
|
+
|
|
158
|
+
Returns: updated model configuration
|
|
159
|
+
"""
|
|
160
|
+
if config[EVAL_NUM_EPOCHS] == -1:
|
|
161
|
+
config[EVAL_NUM_EPOCHS] = config[EPOCHS]
|
|
162
|
+
elif config[EVAL_NUM_EPOCHS] < 1:
|
|
163
|
+
raise InvalidConfigException(
|
|
164
|
+
f"'{EVAL_NUM_EPOCHS}' is set to "
|
|
165
|
+
f"'{config[EVAL_NUM_EPOCHS]}'. "
|
|
166
|
+
"Only values either equal to -1 or greater than 0 are allowed for this "
|
|
167
|
+
"parameter."
|
|
168
|
+
)
|
|
169
|
+
if config[CHECKPOINT_MODEL] and config[EVAL_NUM_EXAMPLES] == 0:
|
|
170
|
+
config[CHECKPOINT_MODEL] = False
|
|
171
|
+
return config
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def load_tf_hub_model(model_url: Text) -> Any:
|
|
175
|
+
"""Load model from cache if possible, otherwise from TFHub."""
|
|
176
|
+
import os
|
|
177
|
+
from tensorflow_hub.module_v2 import load as tfhub_load
|
|
178
|
+
|
|
179
|
+
# needed to load the ConveRT model
|
|
180
|
+
# noinspection PyUnresolvedReferences
|
|
181
|
+
import tensorflow_text # noqa: F401
|
|
182
|
+
|
|
183
|
+
# required to take care of cases when other files are already
|
|
184
|
+
# stored in the default TFHUB_CACHE_DIR
|
|
185
|
+
try:
|
|
186
|
+
return tfhub_load(model_url)
|
|
187
|
+
except OSError:
|
|
188
|
+
directory = io_utils.create_temporary_directory()
|
|
189
|
+
os.environ["TFHUB_CACHE_DIR"] = directory
|
|
190
|
+
return tfhub_load(model_url)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def _replace_deprecated_option(
|
|
194
|
+
old_option: Text,
|
|
195
|
+
new_option: Union[Text, List[Text]],
|
|
196
|
+
config: Dict[Text, Any],
|
|
197
|
+
warn_until_version: Text = NEXT_MAJOR_VERSION_FOR_DEPRECATIONS,
|
|
198
|
+
) -> Dict[Text, Any]:
|
|
199
|
+
if old_option not in config:
|
|
200
|
+
return {}
|
|
201
|
+
|
|
202
|
+
if isinstance(new_option, str):
|
|
203
|
+
rasa.shared.utils.io.raise_deprecation_warning(
|
|
204
|
+
f"Option '{old_option}' got renamed to '{new_option}'. "
|
|
205
|
+
f"Please update your configuration file.",
|
|
206
|
+
warn_until_version=warn_until_version,
|
|
207
|
+
)
|
|
208
|
+
return {new_option: config[old_option]}
|
|
209
|
+
|
|
210
|
+
rasa.shared.utils.io.raise_deprecation_warning(
|
|
211
|
+
f"Option '{old_option}' got renamed to "
|
|
212
|
+
f"a dictionary '{new_option[0]}' with a key '{new_option[1]}'. "
|
|
213
|
+
f"Please update your configuration file.",
|
|
214
|
+
warn_until_version=warn_until_version,
|
|
215
|
+
)
|
|
216
|
+
return {new_option[0]: {new_option[1]: config[old_option]}}
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def check_deprecated_options(config: Dict[Text, Any]) -> Dict[Text, Any]:
|
|
220
|
+
"""Update the config according to changed config params.
|
|
221
|
+
|
|
222
|
+
If old model configuration parameters are present in the provided config, replace
|
|
223
|
+
them with the new parameters and log a warning.
|
|
224
|
+
|
|
225
|
+
Args:
|
|
226
|
+
config: model configuration
|
|
227
|
+
|
|
228
|
+
Returns: updated model configuration
|
|
229
|
+
"""
|
|
230
|
+
# note: call _replace_deprecated_option() here when there are options to deprecate
|
|
231
|
+
|
|
232
|
+
return config
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def check_core_deprecated_options(config: Dict[Text, Any]) -> Dict[Text, Any]:
|
|
236
|
+
"""Update the core config according to changed config params.
|
|
237
|
+
|
|
238
|
+
If old model configuration parameters are present in the provided config, replace
|
|
239
|
+
them with the new parameters and log a warning.
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
config: model configuration
|
|
243
|
+
|
|
244
|
+
Returns: updated model configuration
|
|
245
|
+
"""
|
|
246
|
+
# note: call _replace_deprecated_option() here when there are options to deprecate
|
|
247
|
+
|
|
248
|
+
return config
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def entity_label_to_tags(
|
|
252
|
+
model_predictions: Dict[Text, Any],
|
|
253
|
+
entity_tag_specs: List["EntityTagSpec"],
|
|
254
|
+
bilou_flag: bool = False,
|
|
255
|
+
prediction_index: int = 0,
|
|
256
|
+
) -> Tuple[Dict[Text, List[Text]], Dict[Text, List[float]]]:
|
|
257
|
+
"""Convert the output predictions for entities to the actual entity tags.
|
|
258
|
+
|
|
259
|
+
Args:
|
|
260
|
+
model_predictions: the output predictions using the entity tag indices
|
|
261
|
+
entity_tag_specs: the entity tag specifications
|
|
262
|
+
bilou_flag: if 'True', the BILOU tagging schema was used
|
|
263
|
+
prediction_index: the index in the batch of predictions
|
|
264
|
+
to use for entity extraction
|
|
265
|
+
|
|
266
|
+
Returns:
|
|
267
|
+
A map of entity tag type, e.g. entity, role, group, to actual entity tags and
|
|
268
|
+
confidences.
|
|
269
|
+
"""
|
|
270
|
+
predicted_tags = {}
|
|
271
|
+
confidence_values = {}
|
|
272
|
+
|
|
273
|
+
for tag_spec in entity_tag_specs:
|
|
274
|
+
predictions = model_predictions[f"e_{tag_spec.tag_name}_ids"]
|
|
275
|
+
confidences = model_predictions[f"e_{tag_spec.tag_name}_scores"]
|
|
276
|
+
|
|
277
|
+
if not np.any(predictions):
|
|
278
|
+
continue
|
|
279
|
+
|
|
280
|
+
confidences = [float(c) for c in confidences[prediction_index]]
|
|
281
|
+
tags = [tag_spec.ids_to_tags[p] for p in predictions[prediction_index]]
|
|
282
|
+
|
|
283
|
+
if bilou_flag:
|
|
284
|
+
(
|
|
285
|
+
tags,
|
|
286
|
+
confidences,
|
|
287
|
+
) = rasa.nlu.utils.bilou_utils.ensure_consistent_bilou_tagging(
|
|
288
|
+
tags, confidences
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
predicted_tags[tag_spec.tag_name] = tags
|
|
292
|
+
confidence_values[tag_spec.tag_name] = confidences
|
|
293
|
+
|
|
294
|
+
return predicted_tags, confidence_values
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
def create_data_generators(
|
|
298
|
+
model_data: RasaModelData,
|
|
299
|
+
batch_sizes: Union[int, List[int]],
|
|
300
|
+
epochs: int,
|
|
301
|
+
batch_strategy: Text = SEQUENCE,
|
|
302
|
+
eval_num_examples: int = 0,
|
|
303
|
+
random_seed: Optional[int] = None,
|
|
304
|
+
shuffle: bool = True,
|
|
305
|
+
drop_small_last_batch: bool = False,
|
|
306
|
+
) -> Tuple[RasaBatchDataGenerator, Optional[RasaBatchDataGenerator]]:
|
|
307
|
+
"""Create data generators for train and optional validation data.
|
|
308
|
+
|
|
309
|
+
Args:
|
|
310
|
+
model_data: The model data to use.
|
|
311
|
+
batch_sizes: The batch size(s).
|
|
312
|
+
epochs: The number of epochs to train.
|
|
313
|
+
batch_strategy: The batch strategy to use.
|
|
314
|
+
eval_num_examples: Number of examples to use for validation data.
|
|
315
|
+
random_seed: The random seed.
|
|
316
|
+
shuffle: Whether to shuffle data inside the data generator.
|
|
317
|
+
drop_small_last_batch: whether to drop the last batch if it has fewer than half
|
|
318
|
+
a batch size of examples
|
|
319
|
+
|
|
320
|
+
Returns:
|
|
321
|
+
The training data generator and optional validation data generator.
|
|
322
|
+
"""
|
|
323
|
+
validation_data_generator = None
|
|
324
|
+
if eval_num_examples > 0:
|
|
325
|
+
model_data, evaluation_model_data = model_data.split(
|
|
326
|
+
eval_num_examples, random_seed
|
|
327
|
+
)
|
|
328
|
+
validation_data_generator = RasaBatchDataGenerator(
|
|
329
|
+
evaluation_model_data,
|
|
330
|
+
batch_size=batch_sizes,
|
|
331
|
+
epochs=epochs,
|
|
332
|
+
batch_strategy=batch_strategy,
|
|
333
|
+
shuffle=shuffle,
|
|
334
|
+
drop_small_last_batch=drop_small_last_batch,
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
data_generator = RasaBatchDataGenerator(
|
|
338
|
+
model_data,
|
|
339
|
+
batch_size=batch_sizes,
|
|
340
|
+
epochs=epochs,
|
|
341
|
+
batch_strategy=batch_strategy,
|
|
342
|
+
shuffle=shuffle,
|
|
343
|
+
drop_small_last_batch=drop_small_last_batch,
|
|
344
|
+
)
|
|
345
|
+
|
|
346
|
+
return data_generator, validation_data_generator
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
def create_common_callbacks(
|
|
350
|
+
epochs: int,
|
|
351
|
+
tensorboard_log_dir: Optional[Text] = None,
|
|
352
|
+
tensorboard_log_level: Optional[Text] = None,
|
|
353
|
+
checkpoint_dir: Optional[Path] = None,
|
|
354
|
+
) -> List["Callback"]:
|
|
355
|
+
"""Create common callbacks.
|
|
356
|
+
|
|
357
|
+
The following callbacks are created:
|
|
358
|
+
- RasaTrainingLogger callback
|
|
359
|
+
- Optional TensorBoard callback
|
|
360
|
+
- Optional RasaModelCheckpoint callback
|
|
361
|
+
|
|
362
|
+
Args:
|
|
363
|
+
epochs: the number of epochs to train
|
|
364
|
+
tensorboard_log_dir: optional directory that should be used for tensorboard
|
|
365
|
+
tensorboard_log_level: defines when training metrics for tensorboard should be
|
|
366
|
+
logged. Valid values: 'epoch' and 'batch'.
|
|
367
|
+
checkpoint_dir: optional directory that should be used for model checkpointing
|
|
368
|
+
|
|
369
|
+
Returns:
|
|
370
|
+
A list of callbacks.
|
|
371
|
+
"""
|
|
372
|
+
import tensorflow as tf
|
|
373
|
+
|
|
374
|
+
callbacks = [RasaTrainingLogger(epochs, silent=False)]
|
|
375
|
+
|
|
376
|
+
if tensorboard_log_dir:
|
|
377
|
+
callbacks.append(
|
|
378
|
+
tf.keras.callbacks.TensorBoard(
|
|
379
|
+
log_dir=tensorboard_log_dir,
|
|
380
|
+
update_freq=tensorboard_log_level,
|
|
381
|
+
write_graph=True,
|
|
382
|
+
write_images=True,
|
|
383
|
+
histogram_freq=10,
|
|
384
|
+
)
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
if checkpoint_dir:
|
|
388
|
+
callbacks.append(RasaModelCheckpoint(checkpoint_dir))
|
|
389
|
+
|
|
390
|
+
return callbacks
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
def update_confidence_type(component_config: Dict[Text, Any]) -> Dict[Text, Any]:
|
|
394
|
+
"""Set model confidence to auto if margin loss is used.
|
|
395
|
+
|
|
396
|
+
Option `auto` is reserved for margin loss type. It will be removed once margin loss
|
|
397
|
+
is deprecated.
|
|
398
|
+
|
|
399
|
+
Args:
|
|
400
|
+
component_config: model configuration
|
|
401
|
+
|
|
402
|
+
Returns:
|
|
403
|
+
updated model configuration
|
|
404
|
+
"""
|
|
405
|
+
if component_config[LOSS_TYPE] == MARGIN:
|
|
406
|
+
rasa.shared.utils.io.raise_warning(
|
|
407
|
+
f"Overriding defaults by setting {MODEL_CONFIDENCE} to "
|
|
408
|
+
f"{AUTO} as {LOSS_TYPE} is set to {MARGIN} in the configuration. "
|
|
409
|
+
f"This means that model's confidences will be computed "
|
|
410
|
+
f"as cosine similarities. Users are encouraged to shift to "
|
|
411
|
+
f"cross entropy loss by setting `{LOSS_TYPE}={CROSS_ENTROPY}`."
|
|
412
|
+
)
|
|
413
|
+
component_config[MODEL_CONFIDENCE] = AUTO
|
|
414
|
+
return component_config
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
def validate_configuration_settings(component_config: Dict[Text, Any]) -> None:
|
|
418
|
+
"""Validates that combination of parameters in the configuration are correctly set.
|
|
419
|
+
|
|
420
|
+
Args:
|
|
421
|
+
component_config: Configuration to validate.
|
|
422
|
+
"""
|
|
423
|
+
_check_loss_setting(component_config)
|
|
424
|
+
_check_confidence_setting(component_config)
|
|
425
|
+
_check_similarity_loss_setting(component_config)
|
|
426
|
+
_check_tolerance_setting(component_config)
|
|
427
|
+
_check_evaluation_setting(component_config)
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
def _check_tolerance_setting(component_config: Dict[Text, Any]) -> None:
|
|
431
|
+
if not (0.0 <= component_config.get(TOLERANCE, 0.0) <= 1.0):
|
|
432
|
+
raise InvalidConfigException(
|
|
433
|
+
f"`{TOLERANCE}` was set to `{component_config.get(TOLERANCE)}` "
|
|
434
|
+
f"which is an invalid setting. Please set it to a value "
|
|
435
|
+
f"between 0.0 and 1.0 inclusive."
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
def _check_evaluation_setting(component_config: Dict[Text, Any]) -> None:
|
|
440
|
+
if (
|
|
441
|
+
EVAL_NUM_EPOCHS in component_config
|
|
442
|
+
and component_config[EVAL_NUM_EPOCHS] != -1
|
|
443
|
+
and component_config[EVAL_NUM_EPOCHS] > component_config[EPOCHS]
|
|
444
|
+
):
|
|
445
|
+
warning = (
|
|
446
|
+
f"'{EVAL_NUM_EPOCHS}={component_config[EVAL_NUM_EPOCHS]}' is "
|
|
447
|
+
f"greater than '{EPOCHS}={component_config[EPOCHS]}'."
|
|
448
|
+
f" No evaluation will occur."
|
|
449
|
+
)
|
|
450
|
+
if component_config[CHECKPOINT_MODEL]:
|
|
451
|
+
warning = (
|
|
452
|
+
f"You have opted to save the best model, but {warning} "
|
|
453
|
+
f"No checkpoint model will be saved."
|
|
454
|
+
)
|
|
455
|
+
rasa.shared.utils.io.raise_warning(warning)
|
|
456
|
+
if component_config.get(CHECKPOINT_MODEL):
|
|
457
|
+
if (
|
|
458
|
+
component_config[EVAL_NUM_EPOCHS] != -1
|
|
459
|
+
and component_config[EVAL_NUM_EPOCHS] < 1
|
|
460
|
+
):
|
|
461
|
+
rasa.shared.utils.io.raise_warning(
|
|
462
|
+
f"You have opted to save the best model, but the value of "
|
|
463
|
+
f"'{EVAL_NUM_EPOCHS}' is not -1 or greater than 0. Training will fail."
|
|
464
|
+
)
|
|
465
|
+
if (
|
|
466
|
+
EVAL_NUM_EXAMPLES in component_config
|
|
467
|
+
and component_config[EVAL_NUM_EXAMPLES] <= 0
|
|
468
|
+
):
|
|
469
|
+
rasa.shared.utils.io.raise_warning(
|
|
470
|
+
f"You have opted to save the best model, but the value of "
|
|
471
|
+
f"'{EVAL_NUM_EXAMPLES}' is not greater than 0. No checkpoint model "
|
|
472
|
+
f"will be saved."
|
|
473
|
+
)
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
def _check_confidence_setting(component_config: Dict[Text, Any]) -> None:
|
|
477
|
+
if component_config[MODEL_CONFIDENCE] == COSINE:
|
|
478
|
+
raise InvalidConfigException(
|
|
479
|
+
f"{MODEL_CONFIDENCE}={COSINE} was introduced in Rasa Open Source 2.3.0 "
|
|
480
|
+
f"but post-release experiments revealed that using cosine similarity can "
|
|
481
|
+
f"change the order of predicted labels. "
|
|
482
|
+
f"Since this is not ideal, using `{MODEL_CONFIDENCE}={COSINE}` has been "
|
|
483
|
+
f"removed in versions post `2.3.3`. "
|
|
484
|
+
f"Please use `{MODEL_CONFIDENCE}={SOFTMAX}` instead."
|
|
485
|
+
)
|
|
486
|
+
if component_config[MODEL_CONFIDENCE] == INNER:
|
|
487
|
+
raise InvalidConfigException(
|
|
488
|
+
f"{MODEL_CONFIDENCE}={INNER} is deprecated as it produces an unbounded "
|
|
489
|
+
f"range of confidences which can break the logic of assistants in various "
|
|
490
|
+
f"other places. "
|
|
491
|
+
f"Please use `{MODEL_CONFIDENCE}={SOFTMAX}` instead. "
|
|
492
|
+
)
|
|
493
|
+
if component_config[MODEL_CONFIDENCE] not in [SOFTMAX, AUTO]:
|
|
494
|
+
raise InvalidConfigException(
|
|
495
|
+
f"{MODEL_CONFIDENCE}={component_config[MODEL_CONFIDENCE]} is not a valid "
|
|
496
|
+
f"setting. Please use `{MODEL_CONFIDENCE}={SOFTMAX}` instead."
|
|
497
|
+
)
|
|
498
|
+
if component_config[MODEL_CONFIDENCE] == SOFTMAX:
|
|
499
|
+
if component_config[LOSS_TYPE] != CROSS_ENTROPY:
|
|
500
|
+
raise InvalidConfigException(
|
|
501
|
+
f"{LOSS_TYPE}={component_config[LOSS_TYPE]} and "
|
|
502
|
+
f"{MODEL_CONFIDENCE}={SOFTMAX} is not a valid "
|
|
503
|
+
f"combination. You can use {MODEL_CONFIDENCE}={SOFTMAX} "
|
|
504
|
+
f"only with {LOSS_TYPE}={CROSS_ENTROPY}."
|
|
505
|
+
)
|
|
506
|
+
if component_config[SIMILARITY_TYPE] not in [INNER, AUTO]:
|
|
507
|
+
raise InvalidConfigException(
|
|
508
|
+
f"{SIMILARITY_TYPE}={component_config[SIMILARITY_TYPE]} and "
|
|
509
|
+
f"{MODEL_CONFIDENCE}={SOFTMAX} is not a valid "
|
|
510
|
+
f"combination. You can use {MODEL_CONFIDENCE}={SOFTMAX} "
|
|
511
|
+
f"only with {SIMILARITY_TYPE}={INNER}."
|
|
512
|
+
)
|
|
513
|
+
if component_config.get(RENORMALIZE_CONFIDENCES) and component_config.get(
|
|
514
|
+
RANKING_LENGTH
|
|
515
|
+
):
|
|
516
|
+
if component_config[MODEL_CONFIDENCE] != SOFTMAX:
|
|
517
|
+
raise InvalidConfigException(
|
|
518
|
+
f"Renormalizing the {component_config[RANKING_LENGTH]} top "
|
|
519
|
+
f"predictions should only be done if {MODEL_CONFIDENCE}={SOFTMAX} "
|
|
520
|
+
f"Please use {RENORMALIZE_CONFIDENCES}={True} "
|
|
521
|
+
f"only with {MODEL_CONFIDENCE}={SOFTMAX}."
|
|
522
|
+
)
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
def _check_loss_setting(component_config: Dict[Text, Any]) -> None:
|
|
526
|
+
if (
|
|
527
|
+
not component_config[CONSTRAIN_SIMILARITIES]
|
|
528
|
+
and component_config[LOSS_TYPE] == CROSS_ENTROPY
|
|
529
|
+
):
|
|
530
|
+
rasa.shared.utils.io.raise_warning(
|
|
531
|
+
f"{CONSTRAIN_SIMILARITIES} is set to `False`. It is recommended "
|
|
532
|
+
f"to set it to `True` when using cross-entropy loss.",
|
|
533
|
+
category=UserWarning,
|
|
534
|
+
)
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
def _check_similarity_loss_setting(component_config: Dict[Text, Any]) -> None:
|
|
538
|
+
if (
|
|
539
|
+
component_config[SIMILARITY_TYPE] == COSINE
|
|
540
|
+
and component_config[LOSS_TYPE] == CROSS_ENTROPY
|
|
541
|
+
or component_config[SIMILARITY_TYPE] == INNER
|
|
542
|
+
and component_config[LOSS_TYPE] == MARGIN
|
|
543
|
+
):
|
|
544
|
+
rasa.shared.utils.io.raise_warning(
|
|
545
|
+
f"`{SIMILARITY_TYPE}={component_config[SIMILARITY_TYPE]}`"
|
|
546
|
+
f" and `{LOSS_TYPE}={component_config[LOSS_TYPE]}` "
|
|
547
|
+
f"is not a recommended setting as it may not lead to best results."
|
|
548
|
+
f"Ideally use `{SIMILARITY_TYPE}={INNER}`"
|
|
549
|
+
f" and `{LOSS_TYPE}={CROSS_ENTROPY}` or"
|
|
550
|
+
f"`{SIMILARITY_TYPE}={COSINE}` and `{LOSS_TYPE}={MARGIN}`.",
|
|
551
|
+
category=UserWarning,
|
|
552
|
+
)
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
def init_split_entities(
|
|
556
|
+
split_entities_config: Union[bool, Dict[Text, Any]], default_split_entity: bool
|
|
557
|
+
) -> Dict[Text, bool]:
|
|
558
|
+
"""Initialise the behaviour for splitting entities by comma (or not).
|
|
559
|
+
|
|
560
|
+
Returns:
|
|
561
|
+
Defines desired behaviour for splitting specific entity types and
|
|
562
|
+
default behaviour for splitting any entity types for which no behaviour
|
|
563
|
+
is defined.
|
|
564
|
+
"""
|
|
565
|
+
if isinstance(split_entities_config, bool):
|
|
566
|
+
# All entities will be split according to `split_entities_config`
|
|
567
|
+
split_entities_config = {SPLIT_ENTITIES_BY_COMMA: split_entities_config}
|
|
568
|
+
else:
|
|
569
|
+
# All entities not named in split_entities_config will be split
|
|
570
|
+
# according to `split_entities_config`
|
|
571
|
+
split_entities_config[SPLIT_ENTITIES_BY_COMMA] = default_split_entity
|
|
572
|
+
return split_entities_config
|
rasa/utils/url_tools.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import enum
|
|
3
|
+
from typing import Dict
|
|
4
|
+
|
|
5
|
+
from urllib.parse import urlparse
|
|
6
|
+
|
|
7
|
+
import structlog
|
|
8
|
+
|
|
9
|
+
structlogger = structlog.get_logger()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class UrlSchema(enum.Enum):
|
|
13
|
+
HTTP = "http"
|
|
14
|
+
HTTPS = "https"
|
|
15
|
+
FILE = "file"
|
|
16
|
+
FTP = "ftp"
|
|
17
|
+
SFTP = "sftp"
|
|
18
|
+
GRPC = "grpc"
|
|
19
|
+
UNKNOWN = "unknown"
|
|
20
|
+
NOT_SPECIFIED = "not_specified"
|
|
21
|
+
|
|
22
|
+
@property
|
|
23
|
+
def available_schemas(self) -> Dict[str, UrlSchema]:
|
|
24
|
+
"""Get all available URL schemas except for the unknown schema."""
|
|
25
|
+
return {
|
|
26
|
+
schema.value: schema for schema in UrlSchema if schema != UrlSchema.UNKNOWN
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def get_url_schema(url: str) -> UrlSchema:
|
|
31
|
+
"""Get the schema of a URL.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
url: The URL to parse.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
The schema of the URL.
|
|
38
|
+
"""
|
|
39
|
+
parsed_url = urlparse(url)
|
|
40
|
+
|
|
41
|
+
if parsed_url.scheme == "":
|
|
42
|
+
return UrlSchema.NOT_SPECIFIED
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
return UrlSchema(parsed_url.scheme)
|
|
46
|
+
except ValueError:
|
|
47
|
+
structlogger.warn(
|
|
48
|
+
"rasa.utils.url_tools.get_url_schema.unknown_schema",
|
|
49
|
+
event_info=f"Unknown URL schema '{parsed_url.scheme}'. "
|
|
50
|
+
f"Returning 'unknown'.",
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
return UrlSchema.UNKNOWN
|
rasa/utils/yaml.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Any, Dict, List, Text, Union
|
|
4
|
+
|
|
5
|
+
from rasa.shared.data import is_likely_yaml_file
|
|
6
|
+
from rasa.shared.exceptions import RasaException, YamlSyntaxException
|
|
7
|
+
from rasa.shared.utils.yaml import read_yaml_file
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def collect_yaml_files_from_path(path: Union[Text, Path]) -> List[Text]:
|
|
11
|
+
path = os.path.abspath(path)
|
|
12
|
+
if os.path.isfile(path):
|
|
13
|
+
yaml_files = [
|
|
14
|
+
yaml_file for yaml_file in [path] if is_likely_yaml_file(yaml_file)
|
|
15
|
+
]
|
|
16
|
+
if not yaml_files:
|
|
17
|
+
raise FileNotFoundError(f"Could not find a yaml file at '{path}'.")
|
|
18
|
+
elif os.path.isdir(path):
|
|
19
|
+
yaml_files = [
|
|
20
|
+
os.path.join(root, file)
|
|
21
|
+
for root, _, files in os.walk(path, followlinks=True)
|
|
22
|
+
for file in files
|
|
23
|
+
if is_likely_yaml_file(file)
|
|
24
|
+
]
|
|
25
|
+
if not yaml_files:
|
|
26
|
+
raise FileNotFoundError(
|
|
27
|
+
f"Could not find any yaml in the directory tree rooted at '{path}'."
|
|
28
|
+
)
|
|
29
|
+
else:
|
|
30
|
+
raise RasaException(
|
|
31
|
+
f"The given path ({path}) is neither pointing to a directory "
|
|
32
|
+
f"nor a file. Please specify the location of a yaml file or a "
|
|
33
|
+
f"root directory (all yaml configs found in the directories "
|
|
34
|
+
f"under that root directory will be loaded). "
|
|
35
|
+
)
|
|
36
|
+
return yaml_files
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
YAML_CONFIG = Dict[Text, Any]
|
|
40
|
+
YAML_CONFIGS = Dict[Text, Dict[Text, YAML_CONFIG]]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def collect_configs_from_yaml_files(yaml_files: List[Text]) -> YAML_CONFIGS:
|
|
44
|
+
loaded_configs: YAML_CONFIGS = {}
|
|
45
|
+
for yaml_file in yaml_files:
|
|
46
|
+
loaded_config = read_yaml_file(yaml_file)
|
|
47
|
+
if not isinstance(loaded_config, dict):
|
|
48
|
+
raise YamlSyntaxException(
|
|
49
|
+
f"Expected the loaded configurations to be a "
|
|
50
|
+
f"valid YAML dictionary but found a "
|
|
51
|
+
f"{type(loaded_config)} in {yaml_file}. "
|
|
52
|
+
)
|
|
53
|
+
loaded_configs[yaml_file] = loaded_config
|
|
54
|
+
return loaded_configs
|