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,311 @@
|
|
|
1
|
+
from typing import List, Tuple, Text
|
|
2
|
+
import numpy as np
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def cleanup_tokens(
|
|
6
|
+
token_ids_string: List[Tuple[int, Text]], delimiter: Text
|
|
7
|
+
) -> Tuple[List[int], List[Text]]:
|
|
8
|
+
"""Utility method to apply delimiter based cleanup on list of tokens.
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
token_ids_string: List of tuples with each tuple containing
|
|
12
|
+
(token id, token string).
|
|
13
|
+
delimiter: character/string to be cleaned from token strings.
|
|
14
|
+
|
|
15
|
+
Returns:
|
|
16
|
+
Token ids and Token strings unpacked.
|
|
17
|
+
"""
|
|
18
|
+
token_ids_string = [
|
|
19
|
+
(id, string.replace(delimiter, "")) for id, string in token_ids_string
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
# remove empty strings
|
|
23
|
+
token_ids_string = [(id, string) for id, string in token_ids_string if string]
|
|
24
|
+
|
|
25
|
+
# return as individual token ids and token strings
|
|
26
|
+
token_ids, token_strings = zip(*token_ids_string)
|
|
27
|
+
# FIXME: zip official typing is not really properly set up
|
|
28
|
+
return token_ids, token_strings # type: ignore[return-value]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def bert_tokens_pre_processor(token_ids: List[int]) -> List[int]:
|
|
32
|
+
"""Add BERT style special tokens(CLS and SEP).
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
token_ids: List of token ids without any special tokens.
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
List of token ids augmented with special tokens.
|
|
39
|
+
"""
|
|
40
|
+
BERT_CLS_ID = 101
|
|
41
|
+
BERT_SEP_ID = 102
|
|
42
|
+
|
|
43
|
+
processed_tokens = token_ids
|
|
44
|
+
|
|
45
|
+
processed_tokens.insert(0, BERT_CLS_ID)
|
|
46
|
+
processed_tokens.append(BERT_SEP_ID)
|
|
47
|
+
|
|
48
|
+
return processed_tokens
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def gpt_tokens_pre_processor(token_ids: List[int]) -> List[int]:
|
|
52
|
+
"""Add GPT style special tokens(None).
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
token_ids: List of token ids without any special tokens.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
List of token ids augmented with special tokens.
|
|
59
|
+
"""
|
|
60
|
+
return token_ids
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def xlnet_tokens_pre_processor(token_ids: List[int]) -> List[int]:
|
|
64
|
+
"""Add XLNET style special tokens.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
token_ids: List of token ids without any special tokens.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
List of token ids augmented with special tokens.
|
|
71
|
+
"""
|
|
72
|
+
XLNET_CLS_ID = 3
|
|
73
|
+
XLNET_SEP_ID = 4
|
|
74
|
+
|
|
75
|
+
token_ids.append(XLNET_SEP_ID)
|
|
76
|
+
token_ids.append(XLNET_CLS_ID)
|
|
77
|
+
|
|
78
|
+
return token_ids
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def roberta_tokens_pre_processor(token_ids: List[int]) -> List[int]:
|
|
82
|
+
"""Add RoBERTa style special tokens.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
token_ids: List of token ids without any special tokens.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
List of token ids augmented with special tokens.
|
|
89
|
+
"""
|
|
90
|
+
ROBERTA_BEG_ID = 0
|
|
91
|
+
ROBERTA_END_ID = 2
|
|
92
|
+
|
|
93
|
+
token_ids.insert(0, ROBERTA_BEG_ID)
|
|
94
|
+
token_ids.append(ROBERTA_END_ID)
|
|
95
|
+
|
|
96
|
+
return token_ids
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def xlm_tokens_pre_processor(token_ids: List[int]) -> List[int]:
|
|
100
|
+
"""Add XLM style special tokens.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
token_ids: List of token ids without any special tokens.
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
List of token ids augmented with special tokens.
|
|
107
|
+
"""
|
|
108
|
+
XLM_SEP_ID = 1
|
|
109
|
+
|
|
110
|
+
token_ids.insert(0, XLM_SEP_ID)
|
|
111
|
+
token_ids.append(XLM_SEP_ID)
|
|
112
|
+
|
|
113
|
+
return token_ids
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def camembert_tokens_pre_processor(token_ids: List[int]) -> List[int]:
|
|
117
|
+
"""Add camembert style special tokens.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
token_ids: List of token ids without any special tokens.
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
List of token ids augmented with special tokens.
|
|
124
|
+
"""
|
|
125
|
+
CAMEMBERT_BEG_ID = 5
|
|
126
|
+
CAMEMBERT_END_ID = 6
|
|
127
|
+
|
|
128
|
+
token_ids.insert(0, CAMEMBERT_BEG_ID)
|
|
129
|
+
token_ids.append(CAMEMBERT_END_ID)
|
|
130
|
+
|
|
131
|
+
return token_ids
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def bert_embeddings_post_processor(
|
|
135
|
+
sequence_embeddings: np.ndarray,
|
|
136
|
+
) -> Tuple[np.ndarray, np.ndarray]:
|
|
137
|
+
"""Post-process embeddings from BERT.
|
|
138
|
+
|
|
139
|
+
by removing CLS and SEP embeddings and returning CLS token embedding as
|
|
140
|
+
sentence representation.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
sequence_embeddings: Sequence of token level embeddings received as output from
|
|
144
|
+
BERT.
|
|
145
|
+
|
|
146
|
+
Returns:
|
|
147
|
+
sentence level embedding and post-processed sequence level embedding.
|
|
148
|
+
"""
|
|
149
|
+
sentence_embedding = sequence_embeddings[0]
|
|
150
|
+
post_processed_embedding = sequence_embeddings[1:-1]
|
|
151
|
+
|
|
152
|
+
return sentence_embedding, post_processed_embedding
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def gpt_embeddings_post_processor(
|
|
156
|
+
sequence_embeddings: np.ndarray,
|
|
157
|
+
) -> Tuple[np.ndarray, np.ndarray]:
|
|
158
|
+
"""Post-process embeddings from GPT models.
|
|
159
|
+
|
|
160
|
+
by taking a mean over sequence embeddings and returning that as sentence
|
|
161
|
+
representation.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
sequence_embeddings: Sequence of token level embeddings received as output from
|
|
165
|
+
GPT.
|
|
166
|
+
|
|
167
|
+
Returns:
|
|
168
|
+
sentence level embedding and post-processed sequence level embedding.
|
|
169
|
+
"""
|
|
170
|
+
sentence_embedding = np.mean(sequence_embeddings, axis=0)
|
|
171
|
+
post_processed_embedding = sequence_embeddings
|
|
172
|
+
|
|
173
|
+
return sentence_embedding, post_processed_embedding
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def xlnet_embeddings_post_processor(
|
|
177
|
+
sequence_embeddings: np.ndarray,
|
|
178
|
+
) -> Tuple[np.ndarray, np.ndarray]:
|
|
179
|
+
"""Post-process embeddings from XLNet models.
|
|
180
|
+
|
|
181
|
+
by taking a mean over sequence embeddings and returning that as sentence
|
|
182
|
+
representation. Remove last two time steps corresponding
|
|
183
|
+
to special tokens from the sequence embeddings.
|
|
184
|
+
|
|
185
|
+
Args:
|
|
186
|
+
sequence_embeddings: Sequence of token level embeddings received as output from
|
|
187
|
+
XLNet.
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
sentence level embedding and post-processed sequence level embedding.
|
|
191
|
+
"""
|
|
192
|
+
post_processed_embedding = sequence_embeddings[:-2]
|
|
193
|
+
sentence_embedding = np.mean(post_processed_embedding, axis=0)
|
|
194
|
+
|
|
195
|
+
return sentence_embedding, post_processed_embedding
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def roberta_embeddings_post_processor(
|
|
199
|
+
sequence_embeddings: np.ndarray,
|
|
200
|
+
) -> Tuple[np.ndarray, np.ndarray]:
|
|
201
|
+
"""Post process embeddings from Roberta models.
|
|
202
|
+
|
|
203
|
+
by taking a mean over sequence embeddings and returning that as sentence
|
|
204
|
+
representation. Remove first and last time steps
|
|
205
|
+
corresponding to special tokens from the sequence embeddings.
|
|
206
|
+
|
|
207
|
+
Args:
|
|
208
|
+
sequence_embeddings: Sequence of token level embeddings received as output from
|
|
209
|
+
Roberta
|
|
210
|
+
|
|
211
|
+
Returns:
|
|
212
|
+
sentence level embedding and post-processed sequence level embedding
|
|
213
|
+
"""
|
|
214
|
+
post_processed_embedding = sequence_embeddings[1:-1]
|
|
215
|
+
sentence_embedding = np.mean(post_processed_embedding, axis=0)
|
|
216
|
+
|
|
217
|
+
return sentence_embedding, post_processed_embedding
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def xlm_embeddings_post_processor(
|
|
221
|
+
sequence_embeddings: np.ndarray,
|
|
222
|
+
) -> Tuple[np.ndarray, np.ndarray]:
|
|
223
|
+
"""Post process embeddings from XLM models.
|
|
224
|
+
|
|
225
|
+
by taking a mean over sequence embeddings and returning that as sentence
|
|
226
|
+
representation. Remove first and last time steps
|
|
227
|
+
corresponding to special tokens from the sequence embeddings.
|
|
228
|
+
|
|
229
|
+
Args:
|
|
230
|
+
sequence_embeddings: Sequence of token level embeddings received as output from
|
|
231
|
+
XLM
|
|
232
|
+
|
|
233
|
+
Returns:
|
|
234
|
+
sentence level embedding and post-processed sequence level embedding
|
|
235
|
+
"""
|
|
236
|
+
post_processed_embedding = sequence_embeddings[1:-1]
|
|
237
|
+
sentence_embedding = np.mean(post_processed_embedding, axis=0)
|
|
238
|
+
|
|
239
|
+
return sentence_embedding, post_processed_embedding
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def bert_tokens_cleaner(
|
|
243
|
+
token_ids: List[int], token_strings: List[Text]
|
|
244
|
+
) -> Tuple[List[int], List[Text]]:
|
|
245
|
+
"""Token cleanup method for BERT.
|
|
246
|
+
|
|
247
|
+
Clean up tokens with the extra delimiters(##) BERT adds while breaking a token into
|
|
248
|
+
sub-tokens.
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
token_ids: List of token ids received as output from BERT Tokenizer.
|
|
252
|
+
token_strings: List of token strings received as output from BERT Tokenizer.
|
|
253
|
+
|
|
254
|
+
Returns:
|
|
255
|
+
Cleaned token ids and token strings.
|
|
256
|
+
"""
|
|
257
|
+
return cleanup_tokens(list(zip(token_ids, token_strings)), "##")
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
def openaigpt_tokens_cleaner(
|
|
261
|
+
token_ids: List[int], token_strings: List[Text]
|
|
262
|
+
) -> Tuple[List[int], List[Text]]:
|
|
263
|
+
"""Token cleanup method for GPT.
|
|
264
|
+
|
|
265
|
+
Clean up tokens with the extra delimiters(</w>) OpenAIGPT adds while breaking a
|
|
266
|
+
token into sub-tokens.
|
|
267
|
+
|
|
268
|
+
Args:
|
|
269
|
+
token_ids: List of token ids received as output from GPT Tokenizer.
|
|
270
|
+
token_strings: List of token strings received as output from GPT Tokenizer.
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
Cleaned token ids and token strings.
|
|
274
|
+
"""
|
|
275
|
+
return cleanup_tokens(list(zip(token_ids, token_strings)), "</w>")
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def gpt2_tokens_cleaner(
|
|
279
|
+
token_ids: List[int], token_strings: List[Text]
|
|
280
|
+
) -> Tuple[List[int], List[Text]]:
|
|
281
|
+
"""Token cleanup method for GPT2.
|
|
282
|
+
|
|
283
|
+
Clean up tokens with the extra delimiters(Ġ) GPT2 adds while breaking a token into
|
|
284
|
+
sub-tokens.
|
|
285
|
+
|
|
286
|
+
Args:
|
|
287
|
+
token_ids: List of token ids received as output from GPT Tokenizer.
|
|
288
|
+
token_strings: List of token strings received as output from GPT Tokenizer.
|
|
289
|
+
|
|
290
|
+
Returns:
|
|
291
|
+
Cleaned token ids and token strings.
|
|
292
|
+
"""
|
|
293
|
+
return cleanup_tokens(list(zip(token_ids, token_strings)), "Ġ")
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
def xlnet_tokens_cleaner(
|
|
297
|
+
token_ids: List[int], token_strings: List[Text]
|
|
298
|
+
) -> Tuple[List[int], List[Text]]:
|
|
299
|
+
"""Token cleanup method for XLNet.
|
|
300
|
+
|
|
301
|
+
Clean up tokens with the extra delimiters(▁) XLNet adds while breaking a token into
|
|
302
|
+
sub-tokens.
|
|
303
|
+
|
|
304
|
+
Args:
|
|
305
|
+
token_ids: List of token ids received as output from GPT Tokenizer.
|
|
306
|
+
token_strings: List of token strings received as output from GPT Tokenizer.
|
|
307
|
+
|
|
308
|
+
Returns:
|
|
309
|
+
Cleaned token ids and token strings.
|
|
310
|
+
"""
|
|
311
|
+
return cleanup_tokens(list(zip(token_ids, token_strings)), "▁")
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import typing
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any, Dict, List, Optional, Text
|
|
5
|
+
|
|
6
|
+
from rasa.engine.graph import GraphComponent, ExecutionContext
|
|
7
|
+
from rasa.engine.recipes.default_recipe import DefaultV1Recipe
|
|
8
|
+
from rasa.engine.storage.resource import Resource
|
|
9
|
+
from rasa.engine.storage.storage import ModelStorage
|
|
10
|
+
from rasa.shared.exceptions import InvalidConfigException
|
|
11
|
+
|
|
12
|
+
if typing.TYPE_CHECKING:
|
|
13
|
+
import mitie
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class MitieModel:
|
|
17
|
+
"""Wraps `MitieNLP` output to make it fingerprintable."""
|
|
18
|
+
|
|
19
|
+
def __init__(
|
|
20
|
+
self,
|
|
21
|
+
model_path: Path,
|
|
22
|
+
word_feature_extractor: Optional["mitie.total_word_feature_extractor"] = None,
|
|
23
|
+
) -> None:
|
|
24
|
+
"""Initializing MitieModel."""
|
|
25
|
+
import mitie
|
|
26
|
+
|
|
27
|
+
self.word_feature_extractor = (
|
|
28
|
+
word_feature_extractor or mitie.total_word_feature_extractor
|
|
29
|
+
)
|
|
30
|
+
self.model_path = model_path
|
|
31
|
+
|
|
32
|
+
def fingerprint(self) -> Text:
|
|
33
|
+
"""Fingerprints the model path.
|
|
34
|
+
|
|
35
|
+
Use a static fingerprint as we assume this only changes if the file path
|
|
36
|
+
changes and want to avoid investigating the model in greater detail for now.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
Fingerprint for model.
|
|
40
|
+
"""
|
|
41
|
+
return str(self.model_path)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@DefaultV1Recipe.register(
|
|
45
|
+
DefaultV1Recipe.ComponentType.MODEL_LOADER, is_trainable=False
|
|
46
|
+
)
|
|
47
|
+
class MitieNLP(GraphComponent):
|
|
48
|
+
"""Component which provides the common configuration and loaded model to others.
|
|
49
|
+
|
|
50
|
+
This is used to avoid loading the Mitie model multiple times. Instead the Mitie
|
|
51
|
+
model is only loaded once and then shared by depending components.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
@staticmethod
|
|
55
|
+
def get_default_config() -> Dict[Text, Any]:
|
|
56
|
+
"""Returns default config (see parent class for full docstring)."""
|
|
57
|
+
return {
|
|
58
|
+
# name of the language model to load - this contains
|
|
59
|
+
# the MITIE feature extractor
|
|
60
|
+
"model": Path("data", "total_word_feature_extractor.dat")
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
def __init__(
|
|
64
|
+
self,
|
|
65
|
+
path_to_model_file: Path,
|
|
66
|
+
extractor: Optional["mitie.total_word_feature_extractor"] = None,
|
|
67
|
+
) -> None:
|
|
68
|
+
"""Constructs a new language model from the MITIE framework."""
|
|
69
|
+
self._path_to_model_file = path_to_model_file
|
|
70
|
+
self._extractor = extractor
|
|
71
|
+
|
|
72
|
+
@staticmethod
|
|
73
|
+
def required_packages() -> List[Text]:
|
|
74
|
+
"""Lists required dependencies (see parent class for full docstring)."""
|
|
75
|
+
return ["mitie"]
|
|
76
|
+
|
|
77
|
+
@classmethod
|
|
78
|
+
def create(
|
|
79
|
+
cls,
|
|
80
|
+
config: Dict[Text, Any],
|
|
81
|
+
model_storage: ModelStorage,
|
|
82
|
+
resource: Resource,
|
|
83
|
+
execution_context: ExecutionContext,
|
|
84
|
+
) -> MitieNLP:
|
|
85
|
+
"""Creates component (see parent class for full docstring)."""
|
|
86
|
+
import mitie
|
|
87
|
+
|
|
88
|
+
model_file = config.get("model")
|
|
89
|
+
if not model_file:
|
|
90
|
+
raise InvalidConfigException(
|
|
91
|
+
"The MITIE component 'MitieNLP' needs "
|
|
92
|
+
"the configuration value for 'model'."
|
|
93
|
+
"Please take a look at the "
|
|
94
|
+
"documentation in the pipeline section "
|
|
95
|
+
"to get more info about this "
|
|
96
|
+
"parameter."
|
|
97
|
+
)
|
|
98
|
+
if not Path(model_file).is_file():
|
|
99
|
+
raise InvalidConfigException(
|
|
100
|
+
"The model file configured in the MITIE "
|
|
101
|
+
"component cannot be found. "
|
|
102
|
+
"Please ensure the directory path and/or "
|
|
103
|
+
"filename, '{}', are correct.".format(model_file)
|
|
104
|
+
)
|
|
105
|
+
extractor = mitie.total_word_feature_extractor(str(model_file))
|
|
106
|
+
|
|
107
|
+
return cls(Path(model_file), extractor)
|
|
108
|
+
|
|
109
|
+
def provide(self) -> MitieModel:
|
|
110
|
+
"""Provides loaded `MitieModel` and path during training and inference."""
|
|
111
|
+
return MitieModel(
|
|
112
|
+
word_feature_extractor=self._extractor, model_path=self._path_to_model_file
|
|
113
|
+
)
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import re
|
|
2
|
+
from typing import Dict, List, Text, Union
|
|
3
|
+
|
|
4
|
+
import rasa.shared.utils.io
|
|
5
|
+
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
6
|
+
from rasa.shared.exceptions import InvalidConfigException
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _convert_lookup_tables_to_regex(
|
|
10
|
+
training_data: TrainingData,
|
|
11
|
+
use_only_entities: bool = False,
|
|
12
|
+
use_word_boundaries: bool = True,
|
|
13
|
+
) -> List[Dict[Text, Text]]:
|
|
14
|
+
r"""Convert the lookup tables from the training data to regex patterns.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
training_data: The training data.
|
|
18
|
+
use_only_entities: If True only regex features with a name equal to a entity
|
|
19
|
+
are considered.
|
|
20
|
+
use_word_boundaries: If True add `\b` around the regex expression
|
|
21
|
+
for each lookup table expressions.
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
A list of regex patterns.
|
|
25
|
+
"""
|
|
26
|
+
patterns = []
|
|
27
|
+
for table in training_data.lookup_tables:
|
|
28
|
+
if use_only_entities and table["name"] not in training_data.entities:
|
|
29
|
+
continue
|
|
30
|
+
regex_pattern = _generate_lookup_regex(table, use_word_boundaries)
|
|
31
|
+
lookup_regex = {"name": table["name"], "pattern": regex_pattern}
|
|
32
|
+
patterns.append(lookup_regex)
|
|
33
|
+
return patterns
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _generate_lookup_regex(
|
|
37
|
+
lookup_table: Dict[Text, Union[Text, List[Text]]], use_word_boundaries: bool = True
|
|
38
|
+
) -> Text:
|
|
39
|
+
r"""Creates a regex pattern from the given lookup table.
|
|
40
|
+
|
|
41
|
+
The lookup table is either a file or a list of entries.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
lookup_table: The lookup table.
|
|
45
|
+
use_word_boundaries: If True add `\b` around the regex expression
|
|
46
|
+
for each lookup table expressions.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
The regex pattern.
|
|
50
|
+
"""
|
|
51
|
+
lookup_elements = lookup_table["elements"]
|
|
52
|
+
|
|
53
|
+
# if it's a list, it should be the elements directly
|
|
54
|
+
if isinstance(lookup_elements, list):
|
|
55
|
+
elements_to_regex = lookup_elements
|
|
56
|
+
# otherwise it's a file path.
|
|
57
|
+
else:
|
|
58
|
+
elements_to_regex = read_lookup_table_file(lookup_elements)
|
|
59
|
+
|
|
60
|
+
# sanitize the regex, escape special characters
|
|
61
|
+
elements_sanitized = [re.escape(e) for e in elements_to_regex]
|
|
62
|
+
|
|
63
|
+
if use_word_boundaries:
|
|
64
|
+
# regex matching elements with word boundaries on either side
|
|
65
|
+
return "(\\b" + "\\b|\\b".join(elements_sanitized) + "\\b)"
|
|
66
|
+
else:
|
|
67
|
+
return "(" + "|".join(elements_sanitized) + ")"
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def read_lookup_table_file(lookup_table_file: Text) -> List[Text]:
|
|
71
|
+
"""Read the lookup table file.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
lookup_table_file: the file path to the lookup table
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Elements listed in the lookup table file.
|
|
78
|
+
"""
|
|
79
|
+
try:
|
|
80
|
+
f = open(lookup_table_file, "r", encoding=rasa.shared.utils.io.DEFAULT_ENCODING)
|
|
81
|
+
except OSError:
|
|
82
|
+
raise ValueError(
|
|
83
|
+
f"Could not load lookup table {lookup_table_file}. "
|
|
84
|
+
f"Please make sure you've provided the correct path."
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
elements_to_regex = []
|
|
88
|
+
with f:
|
|
89
|
+
for line in f:
|
|
90
|
+
new_element = line.strip()
|
|
91
|
+
if new_element:
|
|
92
|
+
elements_to_regex.append(new_element)
|
|
93
|
+
return elements_to_regex
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _collect_regex_features(
|
|
97
|
+
training_data: TrainingData, use_only_entities: bool = False
|
|
98
|
+
) -> List[Dict[Text, Text]]:
|
|
99
|
+
"""Get regex features from training data.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
training_data: The training data
|
|
103
|
+
use_only_entities: If True only regex features with a name equal to a entity
|
|
104
|
+
are considered.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
Regex features.
|
|
108
|
+
"""
|
|
109
|
+
if not use_only_entities:
|
|
110
|
+
return training_data.regex_features
|
|
111
|
+
|
|
112
|
+
return [
|
|
113
|
+
regex
|
|
114
|
+
for regex in training_data.regex_features
|
|
115
|
+
if regex["name"] in training_data.entities
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def extract_patterns(
|
|
120
|
+
training_data: TrainingData,
|
|
121
|
+
use_lookup_tables: bool = True,
|
|
122
|
+
use_regexes: bool = True,
|
|
123
|
+
use_only_entities: bool = False,
|
|
124
|
+
use_word_boundaries: bool = True,
|
|
125
|
+
) -> List[Dict[Text, Text]]:
|
|
126
|
+
r"""Extract a list of patterns from the training data.
|
|
127
|
+
|
|
128
|
+
The patterns are constructed using the regex features and lookup tables defined
|
|
129
|
+
in the training data.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
training_data: The training data.
|
|
133
|
+
use_only_entities: If True only lookup tables and regex features with a name
|
|
134
|
+
equal to a entity are considered.
|
|
135
|
+
use_regexes: Boolean indicating whether to use regex features or not.
|
|
136
|
+
use_lookup_tables: Boolean indicating whether to use lookup tables or not.
|
|
137
|
+
use_word_boundaries: Boolean indicating whether to use `\b` around the lookup
|
|
138
|
+
table regex expressions
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
The list of regex patterns.
|
|
142
|
+
"""
|
|
143
|
+
if not training_data.lookup_tables and not training_data.regex_features:
|
|
144
|
+
return []
|
|
145
|
+
|
|
146
|
+
patterns = []
|
|
147
|
+
|
|
148
|
+
if use_regexes:
|
|
149
|
+
patterns.extend(_collect_regex_features(training_data, use_only_entities))
|
|
150
|
+
if use_lookup_tables:
|
|
151
|
+
patterns.extend(
|
|
152
|
+
_convert_lookup_tables_to_regex(
|
|
153
|
+
training_data, use_only_entities, use_word_boundaries
|
|
154
|
+
)
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
# validate regexes, raise Error when invalid
|
|
158
|
+
for pattern in patterns:
|
|
159
|
+
try:
|
|
160
|
+
re.compile(pattern["pattern"])
|
|
161
|
+
except re.error:
|
|
162
|
+
raise InvalidConfigException(
|
|
163
|
+
f"Model training failed. '{pattern['pattern']}' "
|
|
164
|
+
"is not a valid regex. Please update your nlu "
|
|
165
|
+
f"training data configuration at {pattern}."
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
return patterns
|