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,445 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import logging
|
|
3
|
+
import os
|
|
4
|
+
from typing import Any, Dict, List, Optional, Text, Tuple, Type
|
|
5
|
+
|
|
6
|
+
import tensorflow as tf
|
|
7
|
+
from tensorflow.python.eager.wrap_function import WrappedFunction
|
|
8
|
+
from tqdm import tqdm
|
|
9
|
+
import numpy as np
|
|
10
|
+
|
|
11
|
+
from rasa.engine.graph import GraphComponent, ExecutionContext
|
|
12
|
+
from rasa.engine.recipes.default_recipe import DefaultV1Recipe
|
|
13
|
+
from rasa.engine.storage.storage import ModelStorage
|
|
14
|
+
from rasa.engine.storage.resource import Resource
|
|
15
|
+
import rasa.shared.utils.io
|
|
16
|
+
import rasa.core.utils
|
|
17
|
+
from rasa.nlu.tokenizers.tokenizer import Token, Tokenizer
|
|
18
|
+
from rasa.nlu.featurizers.dense_featurizer.dense_featurizer import DenseFeaturizer
|
|
19
|
+
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
20
|
+
from rasa.shared.nlu.training_data.message import Message
|
|
21
|
+
from rasa.nlu.constants import (
|
|
22
|
+
DENSE_FEATURIZABLE_ATTRIBUTES,
|
|
23
|
+
TOKENS_NAMES,
|
|
24
|
+
NUMBER_OF_SUB_TOKENS,
|
|
25
|
+
)
|
|
26
|
+
from rasa.shared.nlu.constants import TEXT, ACTION_TEXT
|
|
27
|
+
from rasa.exceptions import RasaException
|
|
28
|
+
import rasa.nlu.utils
|
|
29
|
+
import rasa.utils.train_utils as train_utils
|
|
30
|
+
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
|
|
33
|
+
# URL to the old remote location of the model which
|
|
34
|
+
# users might use. The model is no longer hosted here.
|
|
35
|
+
ORIGINAL_TF_HUB_MODULE_URL = (
|
|
36
|
+
"https://github.com/PolyAI-LDN/polyai-models/releases/download/v1.0/model.tar.gz"
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# Warning: This URL is only intended for running pytests on ConveRT
|
|
40
|
+
# related components. This URL should not be allowed to be used by the user.
|
|
41
|
+
RESTRICTED_ACCESS_URL = (
|
|
42
|
+
"https://storage.googleapis.com/continuous-"
|
|
43
|
+
"integration-model-storage/convert_tf2.tar.gz"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@DefaultV1Recipe.register(
|
|
48
|
+
DefaultV1Recipe.ComponentType.MESSAGE_FEATURIZER, is_trainable=False
|
|
49
|
+
)
|
|
50
|
+
class ConveRTFeaturizer(DenseFeaturizer, GraphComponent):
|
|
51
|
+
"""Featurizer using ConveRT model.
|
|
52
|
+
|
|
53
|
+
Loads the ConveRT(https://github.com/PolyAI-LDN/polyai-models#convert)
|
|
54
|
+
model from TFHub and computes sentence and sequence level feature representations
|
|
55
|
+
for dense featurizable attributes of each message object.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def required_components(cls) -> List[Type]:
|
|
60
|
+
"""Components that should be included in the pipeline before this component."""
|
|
61
|
+
return [Tokenizer]
|
|
62
|
+
|
|
63
|
+
@staticmethod
|
|
64
|
+
def get_default_config() -> Dict[Text, Any]:
|
|
65
|
+
"""The component's default config (see parent class for full docstring)."""
|
|
66
|
+
return {
|
|
67
|
+
**DenseFeaturizer.get_default_config(),
|
|
68
|
+
# Remote URL/Local path to model files
|
|
69
|
+
"model_url": None,
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@staticmethod
|
|
73
|
+
def required_packages() -> List[Text]:
|
|
74
|
+
"""Packages needed to be installed."""
|
|
75
|
+
return ["tensorflow_text", "tensorflow_hub"]
|
|
76
|
+
|
|
77
|
+
@staticmethod
|
|
78
|
+
def supported_languages() -> Optional[List[Text]]:
|
|
79
|
+
"""Determines which languages this component can work with.
|
|
80
|
+
|
|
81
|
+
Returns: A list of supported languages, or `None` to signify all are supported.
|
|
82
|
+
"""
|
|
83
|
+
return ["en"]
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def create(
|
|
87
|
+
cls,
|
|
88
|
+
config: Dict[Text, Any],
|
|
89
|
+
model_storage: ModelStorage,
|
|
90
|
+
resource: Resource,
|
|
91
|
+
execution_context: ExecutionContext,
|
|
92
|
+
) -> ConveRTFeaturizer:
|
|
93
|
+
"""Creates a new component (see parent class for full docstring)."""
|
|
94
|
+
return cls(name=execution_context.node_name, config=config)
|
|
95
|
+
|
|
96
|
+
def __init__(self, name: Text, config: Dict[Text, Any]) -> None:
|
|
97
|
+
"""Initializes a `ConveRTFeaturizer`.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
name: An identifier for this featurizer.
|
|
101
|
+
config: The configuration.
|
|
102
|
+
"""
|
|
103
|
+
super().__init__(name=name, config=config)
|
|
104
|
+
|
|
105
|
+
model_url = self._config["model_url"]
|
|
106
|
+
self.model_url = (
|
|
107
|
+
model_url
|
|
108
|
+
if rasa.nlu.utils.is_url(model_url)
|
|
109
|
+
else os.path.abspath(model_url)
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
self.module = train_utils.load_tf_hub_model(self.model_url)
|
|
113
|
+
|
|
114
|
+
self.tokenize_signature: WrappedFunction = self._get_signature(
|
|
115
|
+
"tokenize", self.module
|
|
116
|
+
)
|
|
117
|
+
self.sequence_encoding_signature: WrappedFunction = self._get_signature(
|
|
118
|
+
"encode_sequence", self.module
|
|
119
|
+
)
|
|
120
|
+
self.sentence_encoding_signature: WrappedFunction = self._get_signature(
|
|
121
|
+
"default", self.module
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
@classmethod
|
|
125
|
+
def validate_config(cls, config: Dict[Text, Any]) -> None:
|
|
126
|
+
"""Validates that the component is configured properly."""
|
|
127
|
+
cls._validate_model_url(config)
|
|
128
|
+
|
|
129
|
+
@staticmethod
|
|
130
|
+
def _validate_model_files_exist(model_directory: Text) -> None:
|
|
131
|
+
"""Check if essential model files exist inside the model_directory.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
model_directory: Directory to investigate
|
|
135
|
+
"""
|
|
136
|
+
files_to_check = [
|
|
137
|
+
os.path.join(model_directory, "saved_model.pb"),
|
|
138
|
+
os.path.join(model_directory, "variables/variables.index"),
|
|
139
|
+
os.path.join(model_directory, "variables/variables.data-00001-of-00002"),
|
|
140
|
+
os.path.join(model_directory, "variables/variables.data-00000-of-00002"),
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
for file_path in files_to_check:
|
|
144
|
+
if not os.path.exists(file_path):
|
|
145
|
+
raise RasaException(
|
|
146
|
+
f"File {file_path} does not exist. "
|
|
147
|
+
f"Re-check the files inside the directory {model_directory}. "
|
|
148
|
+
f"It should contain the following model "
|
|
149
|
+
f"files - [{', '.join(files_to_check)}]"
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
@classmethod
|
|
153
|
+
def _validate_model_url(cls, config: Dict[Text, Any]) -> None:
|
|
154
|
+
"""Validates the specified `model_url` parameter.
|
|
155
|
+
|
|
156
|
+
The `model_url` parameter cannot be left empty. It can either
|
|
157
|
+
be set to a remote URL where the model is hosted or it can be
|
|
158
|
+
a path to a local directory.
|
|
159
|
+
|
|
160
|
+
Args:
|
|
161
|
+
config: a configuration for this graph component
|
|
162
|
+
"""
|
|
163
|
+
model_url = config.get("model_url", None)
|
|
164
|
+
|
|
165
|
+
if not model_url:
|
|
166
|
+
raise RasaException(
|
|
167
|
+
f"Parameter 'model_url' was not specified in the configuration "
|
|
168
|
+
f"of '{ConveRTFeaturizer.__name__}'. "
|
|
169
|
+
f"It is mandatory to pass a value for this parameter. "
|
|
170
|
+
f"You can either use a community hosted URL of the model "
|
|
171
|
+
f"or if you have a local copy of the model, pass the "
|
|
172
|
+
f"path to the directory containing the model files."
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
if model_url == ORIGINAL_TF_HUB_MODULE_URL:
|
|
176
|
+
# Can't use the originally hosted URL
|
|
177
|
+
raise RasaException(
|
|
178
|
+
f"Parameter 'model_url' of "
|
|
179
|
+
f"'{ConveRTFeaturizer.__name__}' was "
|
|
180
|
+
f"set to '{model_url}' which does not contain the model any longer. "
|
|
181
|
+
f"You can either use a community hosted URL or if you have a "
|
|
182
|
+
f"local copy of the model, pass the path to the directory "
|
|
183
|
+
f"containing the model files."
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
if model_url == RESTRICTED_ACCESS_URL:
|
|
187
|
+
# Can't use the URL that is reserved for tests only
|
|
188
|
+
raise RasaException(
|
|
189
|
+
f"Parameter 'model_url' of "
|
|
190
|
+
f"'{ConveRTFeaturizer.__name__}' was "
|
|
191
|
+
f"set to '{model_url}' which is strictly reserved for pytests of "
|
|
192
|
+
f"Rasa Pro only. Due to licensing issues you are "
|
|
193
|
+
f"not allowed to use the model from this URL. "
|
|
194
|
+
f"You can either use a community hosted URL or if you have a "
|
|
195
|
+
f"local copy of the model, pass the path to the directory "
|
|
196
|
+
f"containing the model files."
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
if os.path.isfile(model_url):
|
|
200
|
+
# Definitely invalid since the specified path should be a directory
|
|
201
|
+
raise RasaException(
|
|
202
|
+
f"Parameter 'model_url' of "
|
|
203
|
+
f"'{ConveRTFeaturizer.__name__}' was "
|
|
204
|
+
f"set to the path of a file which is invalid. You "
|
|
205
|
+
f"can either use a community hosted URL or if you have a "
|
|
206
|
+
f"local copy of the model, pass the path to the directory "
|
|
207
|
+
f"containing the model files."
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
if not rasa.nlu.utils.is_url(model_url) and not os.path.isdir(model_url):
|
|
211
|
+
raise RasaException(
|
|
212
|
+
f"{model_url} is neither a valid remote URL nor a local directory. "
|
|
213
|
+
f"You can either use a community hosted URL or if you have a "
|
|
214
|
+
f"local copy of the model, pass the path to "
|
|
215
|
+
f"the directory containing the model files."
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
if os.path.isdir(model_url):
|
|
219
|
+
# Looks like a local directory. Inspect the directory
|
|
220
|
+
# to see if model files exist.
|
|
221
|
+
cls._validate_model_files_exist(model_url)
|
|
222
|
+
|
|
223
|
+
@staticmethod
|
|
224
|
+
def _get_signature(signature: Text, module: Any) -> WrappedFunction:
|
|
225
|
+
"""Retrieve a signature from a (hopefully loaded) TF model."""
|
|
226
|
+
if not module:
|
|
227
|
+
raise Exception(
|
|
228
|
+
f"{ConveRTFeaturizer.__name__} needs "
|
|
229
|
+
f"a proper loaded tensorflow module when used. "
|
|
230
|
+
f"Make sure to pass a module when training and using the component."
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
return module.signatures[signature]
|
|
234
|
+
|
|
235
|
+
def _compute_features(
|
|
236
|
+
self, batch_examples: List[Message], attribute: Text = TEXT
|
|
237
|
+
) -> Tuple[np.ndarray, np.ndarray]:
|
|
238
|
+
sentence_encodings = self._compute_sentence_encodings(batch_examples, attribute)
|
|
239
|
+
|
|
240
|
+
(
|
|
241
|
+
sequence_encodings,
|
|
242
|
+
number_of_tokens_in_sentence,
|
|
243
|
+
) = self._compute_sequence_encodings(batch_examples, attribute)
|
|
244
|
+
|
|
245
|
+
return self._get_features(
|
|
246
|
+
sentence_encodings, sequence_encodings, number_of_tokens_in_sentence
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
def _compute_sentence_encodings(
|
|
250
|
+
self, batch_examples: List[Message], attribute: Text = TEXT
|
|
251
|
+
) -> np.ndarray:
|
|
252
|
+
# Get text for attribute of each example
|
|
253
|
+
batch_attribute_text = [ex.get(attribute) for ex in batch_examples]
|
|
254
|
+
sentence_encodings = self._sentence_encoding_of_text(batch_attribute_text)
|
|
255
|
+
|
|
256
|
+
# convert them to a sequence of 1
|
|
257
|
+
return np.reshape(sentence_encodings, (len(batch_examples), 1, -1))
|
|
258
|
+
|
|
259
|
+
def _compute_sequence_encodings(
|
|
260
|
+
self, batch_examples: List[Message], attribute: Text = TEXT
|
|
261
|
+
) -> Tuple[np.ndarray, List[int]]:
|
|
262
|
+
list_of_tokens = [
|
|
263
|
+
self.tokenize(example, attribute) for example in batch_examples
|
|
264
|
+
]
|
|
265
|
+
|
|
266
|
+
number_of_tokens_in_sentence = [
|
|
267
|
+
len(sent_tokens) for sent_tokens in list_of_tokens
|
|
268
|
+
]
|
|
269
|
+
|
|
270
|
+
# join the tokens to get a clean text to ensure the sequence length of
|
|
271
|
+
# the returned embeddings from ConveRT matches the length of the tokens
|
|
272
|
+
# (including sub-tokens)
|
|
273
|
+
tokenized_texts = self._tokens_to_text(list_of_tokens)
|
|
274
|
+
token_features = self._sequence_encoding_of_text(tokenized_texts)
|
|
275
|
+
|
|
276
|
+
# ConveRT might split up tokens into sub-tokens
|
|
277
|
+
# take the mean of the sub-token vectors and use that as the token vector
|
|
278
|
+
token_features = train_utils.align_token_features(
|
|
279
|
+
list_of_tokens, token_features
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
return token_features, number_of_tokens_in_sentence
|
|
283
|
+
|
|
284
|
+
@staticmethod
|
|
285
|
+
def _get_features(
|
|
286
|
+
sentence_encodings: np.ndarray,
|
|
287
|
+
sequence_encodings: np.ndarray,
|
|
288
|
+
number_of_tokens_in_sentence: List[int],
|
|
289
|
+
) -> Tuple[np.ndarray, np.ndarray]:
|
|
290
|
+
"""Get the sequence and sentence features."""
|
|
291
|
+
sentence_embeddings = []
|
|
292
|
+
sequence_embeddings = []
|
|
293
|
+
|
|
294
|
+
for index in range(len(number_of_tokens_in_sentence)):
|
|
295
|
+
sequence_length = number_of_tokens_in_sentence[index]
|
|
296
|
+
sequence_encoding = sequence_encodings[index][:sequence_length]
|
|
297
|
+
sentence_encoding = sentence_encodings[index]
|
|
298
|
+
|
|
299
|
+
sequence_embeddings.append(sequence_encoding)
|
|
300
|
+
sentence_embeddings.append(sentence_encoding)
|
|
301
|
+
|
|
302
|
+
return np.array(sequence_embeddings), np.array(sentence_embeddings)
|
|
303
|
+
|
|
304
|
+
@staticmethod
|
|
305
|
+
def _tokens_to_text(list_of_tokens: List[List[Token]]) -> List[Text]:
|
|
306
|
+
"""Convert list of tokens to text.
|
|
307
|
+
|
|
308
|
+
Add a whitespace between two tokens if the end value of the first tokens
|
|
309
|
+
is not the same as the end value of the second token.
|
|
310
|
+
"""
|
|
311
|
+
texts = []
|
|
312
|
+
for tokens in list_of_tokens:
|
|
313
|
+
text = ""
|
|
314
|
+
offset = 0
|
|
315
|
+
for token in tokens:
|
|
316
|
+
if offset != token.start:
|
|
317
|
+
text += " "
|
|
318
|
+
text += token.text
|
|
319
|
+
|
|
320
|
+
offset = token.end
|
|
321
|
+
texts.append(text)
|
|
322
|
+
|
|
323
|
+
return texts
|
|
324
|
+
|
|
325
|
+
def _sentence_encoding_of_text(self, batch: List[Text]) -> np.ndarray:
|
|
326
|
+
return self.sentence_encoding_signature(tf.convert_to_tensor(batch))[
|
|
327
|
+
"default"
|
|
328
|
+
].numpy()
|
|
329
|
+
|
|
330
|
+
def _sequence_encoding_of_text(self, batch: List[Text]) -> np.ndarray:
|
|
331
|
+
return self.sequence_encoding_signature(tf.convert_to_tensor(batch))[
|
|
332
|
+
"sequence_encoding"
|
|
333
|
+
].numpy()
|
|
334
|
+
|
|
335
|
+
def process_training_data(self, training_data: TrainingData) -> TrainingData:
|
|
336
|
+
"""Featurize all message attributes in the training data with the ConveRT model.
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
training_data: Training data to be featurized
|
|
340
|
+
|
|
341
|
+
Returns:
|
|
342
|
+
featurized training data
|
|
343
|
+
"""
|
|
344
|
+
batch_size = 64
|
|
345
|
+
|
|
346
|
+
for attribute in DENSE_FEATURIZABLE_ATTRIBUTES:
|
|
347
|
+
non_empty_examples = list(
|
|
348
|
+
filter(lambda x: x.get(attribute), training_data.training_examples)
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
progress_bar = tqdm(
|
|
352
|
+
range(0, len(non_empty_examples), batch_size),
|
|
353
|
+
desc=attribute.capitalize() + " batches",
|
|
354
|
+
)
|
|
355
|
+
for batch_start_index in progress_bar:
|
|
356
|
+
batch_end_index = min(
|
|
357
|
+
batch_start_index + batch_size, len(non_empty_examples)
|
|
358
|
+
)
|
|
359
|
+
|
|
360
|
+
# Collect batch examples
|
|
361
|
+
batch_examples = non_empty_examples[batch_start_index:batch_end_index]
|
|
362
|
+
|
|
363
|
+
(
|
|
364
|
+
batch_sequence_features,
|
|
365
|
+
batch_sentence_features,
|
|
366
|
+
) = self._compute_features(batch_examples, attribute)
|
|
367
|
+
|
|
368
|
+
self._set_features(
|
|
369
|
+
batch_examples,
|
|
370
|
+
batch_sequence_features,
|
|
371
|
+
batch_sentence_features,
|
|
372
|
+
attribute,
|
|
373
|
+
)
|
|
374
|
+
return training_data
|
|
375
|
+
|
|
376
|
+
def process(self, messages: List[Message]) -> List[Message]:
|
|
377
|
+
"""Featurize an incoming message with the ConveRT model.
|
|
378
|
+
|
|
379
|
+
Args:
|
|
380
|
+
messages: Message to be featurized
|
|
381
|
+
"""
|
|
382
|
+
for message in messages:
|
|
383
|
+
for attribute in {TEXT, ACTION_TEXT}:
|
|
384
|
+
if message.get(attribute):
|
|
385
|
+
sequence_features, sentence_features = self._compute_features(
|
|
386
|
+
[message], attribute=attribute
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
self._set_features(
|
|
390
|
+
[message], sequence_features, sentence_features, attribute
|
|
391
|
+
)
|
|
392
|
+
return messages
|
|
393
|
+
|
|
394
|
+
def _set_features(
|
|
395
|
+
self,
|
|
396
|
+
examples: List[Message],
|
|
397
|
+
sequence_features: np.ndarray,
|
|
398
|
+
sentence_features: np.ndarray,
|
|
399
|
+
attribute: Text,
|
|
400
|
+
) -> None:
|
|
401
|
+
for index, example in enumerate(examples):
|
|
402
|
+
self.add_features_to_message(
|
|
403
|
+
sequence=sequence_features[index],
|
|
404
|
+
sentence=sentence_features[index],
|
|
405
|
+
message=example,
|
|
406
|
+
attribute=attribute,
|
|
407
|
+
)
|
|
408
|
+
|
|
409
|
+
def _tokenize(self, sentence: Text) -> Any:
|
|
410
|
+
return self.tokenize_signature(tf.convert_to_tensor([sentence]))[
|
|
411
|
+
"default"
|
|
412
|
+
].numpy()
|
|
413
|
+
|
|
414
|
+
def tokenize(self, message: Message, attribute: Text) -> List[Token]:
|
|
415
|
+
"""Tokenize the text using the ConveRT model.
|
|
416
|
+
|
|
417
|
+
ConveRT adds a special char in front of (some) words and splits words into
|
|
418
|
+
sub-words. To ensure the entity start and end values matches the token values,
|
|
419
|
+
reuse the tokens that are already assigned to the message. If individual tokens
|
|
420
|
+
are split up into multiple tokens, add this information to the
|
|
421
|
+
respected tokens.
|
|
422
|
+
"""
|
|
423
|
+
tokens_in = message.get(TOKENS_NAMES[attribute])
|
|
424
|
+
|
|
425
|
+
tokens_out = []
|
|
426
|
+
|
|
427
|
+
for token in tokens_in:
|
|
428
|
+
# use ConveRT model to tokenize the text
|
|
429
|
+
split_token_strings = self._tokenize(token.text)[0]
|
|
430
|
+
|
|
431
|
+
# clean tokens (remove special chars and empty tokens)
|
|
432
|
+
split_token_strings = self._clean_tokens(split_token_strings)
|
|
433
|
+
|
|
434
|
+
token.set(NUMBER_OF_SUB_TOKENS, len(split_token_strings))
|
|
435
|
+
|
|
436
|
+
tokens_out.append(token)
|
|
437
|
+
|
|
438
|
+
message.set(TOKENS_NAMES[attribute], tokens_out)
|
|
439
|
+
return tokens_out
|
|
440
|
+
|
|
441
|
+
@staticmethod
|
|
442
|
+
def _clean_tokens(tokens: List[bytes]) -> List[Text]:
|
|
443
|
+
"""Encode tokens and remove special char added by ConveRT."""
|
|
444
|
+
decoded_tokens = [string.decode("utf-8").replace("﹏", "") for string in tokens]
|
|
445
|
+
return [string for string in decoded_tokens if string]
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from abc import ABC
|
|
2
|
+
from typing import Text
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
from rasa.nlu.featurizers.featurizer import Featurizer
|
|
6
|
+
from rasa.utils.tensorflow.constants import MEAN_POOLING, MAX_POOLING
|
|
7
|
+
from rasa.shared.exceptions import InvalidConfigException
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class DenseFeaturizer(Featurizer[np.ndarray], ABC):
|
|
11
|
+
"""Base class for all dense featurizers."""
|
|
12
|
+
|
|
13
|
+
@staticmethod
|
|
14
|
+
def aggregate_sequence_features(
|
|
15
|
+
dense_sequence_features: np.ndarray,
|
|
16
|
+
pooling_operation: Text,
|
|
17
|
+
only_non_zero_vectors: bool = True,
|
|
18
|
+
) -> np.ndarray:
|
|
19
|
+
"""Aggregates the non-zero vectors of a dense sequence feature matrix.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
dense_sequence_features: a 2-dimensional matrix where the first dimension
|
|
23
|
+
is the sequence dimension over which we want to aggregate of shape
|
|
24
|
+
[seq_len, feat_dim]
|
|
25
|
+
pooling_operation: either max pooling or average pooling
|
|
26
|
+
only_non_zero_vectors: determines whether the aggregation is done over
|
|
27
|
+
non-zero vectors only
|
|
28
|
+
Returns:
|
|
29
|
+
a matrix of shape [1, feat_dim]
|
|
30
|
+
"""
|
|
31
|
+
shape = dense_sequence_features.shape
|
|
32
|
+
if len(shape) != 2 or min(shape) == 0:
|
|
33
|
+
raise ValueError(
|
|
34
|
+
f"Expected a non-empty 2-dimensional matrix (where the first "
|
|
35
|
+
f"dimension is the sequence dimension which we want to aggregate), "
|
|
36
|
+
f"but found a matrix of shape {dense_sequence_features.shape}."
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
if only_non_zero_vectors:
|
|
40
|
+
# take only non zeros feature vectors into account
|
|
41
|
+
is_non_zero_vector = [f.any() for f in dense_sequence_features]
|
|
42
|
+
dense_sequence_features = dense_sequence_features[is_non_zero_vector]
|
|
43
|
+
|
|
44
|
+
# if features are all zero, then we must continue with zeros
|
|
45
|
+
if not len(dense_sequence_features):
|
|
46
|
+
dense_sequence_features = np.zeros([1, shape[-1]])
|
|
47
|
+
|
|
48
|
+
if pooling_operation == MEAN_POOLING:
|
|
49
|
+
return np.mean(dense_sequence_features, axis=0, keepdims=True)
|
|
50
|
+
elif pooling_operation == MAX_POOLING:
|
|
51
|
+
return np.max(dense_sequence_features, axis=0, keepdims=True)
|
|
52
|
+
else:
|
|
53
|
+
raise InvalidConfigException(
|
|
54
|
+
f"Invalid pooling operation specified. Available operations are "
|
|
55
|
+
f"'{MEAN_POOLING}' or '{MAX_POOLING}', but provided value is "
|
|
56
|
+
f"'{pooling_operation}'."
|
|
57
|
+
)
|