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,388 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import json
|
|
3
|
+
import logging
|
|
4
|
+
from functools import cached_property
|
|
5
|
+
|
|
6
|
+
import structlog
|
|
7
|
+
import os
|
|
8
|
+
import ssl
|
|
9
|
+
from asyncio import AbstractEventLoop
|
|
10
|
+
from collections import deque
|
|
11
|
+
from typing import Deque, Dict, Optional, Text, Union, Any, List, Set, Tuple, cast
|
|
12
|
+
from urllib.parse import urlparse
|
|
13
|
+
|
|
14
|
+
import aio_pika
|
|
15
|
+
|
|
16
|
+
from rasa.shared.exceptions import RasaException
|
|
17
|
+
from rasa.shared.constants import DOCS_URL_PIKA_EVENT_BROKER
|
|
18
|
+
from rasa.core.brokers.broker import EventBroker
|
|
19
|
+
import rasa.shared.utils.io
|
|
20
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
21
|
+
from rasa.shared.utils.io import DEFAULT_ENCODING
|
|
22
|
+
import rasa.shared.utils.common
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
structlogger = structlog.get_logger()
|
|
26
|
+
|
|
27
|
+
RABBITMQ_EXCHANGE = "rasa-exchange"
|
|
28
|
+
DEFAULT_QUEUE_NAME = "rasa_core_events"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class PikaEventBroker(EventBroker):
|
|
32
|
+
"""Pika-based event broker for publishing messages to RabbitMQ."""
|
|
33
|
+
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
host: Text,
|
|
37
|
+
username: Text,
|
|
38
|
+
password: Text,
|
|
39
|
+
port: Union[int, Text] = 5672,
|
|
40
|
+
queues: Union[List[Text], Tuple[Text, ...], Text, None] = None,
|
|
41
|
+
should_keep_unpublished_messages: bool = True,
|
|
42
|
+
raise_on_failure: bool = False,
|
|
43
|
+
event_loop: Optional[AbstractEventLoop] = None,
|
|
44
|
+
connection_attempts: int = 20,
|
|
45
|
+
retry_delay_in_seconds: float = 5,
|
|
46
|
+
exchange_name: Text = RABBITMQ_EXCHANGE,
|
|
47
|
+
**kwargs: Any,
|
|
48
|
+
):
|
|
49
|
+
"""Initialise RabbitMQ event broker.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
host: Pika host.
|
|
53
|
+
username: Username for authentication with Pika host.
|
|
54
|
+
password: Password for authentication with Pika host.
|
|
55
|
+
port: port of the Pika host.
|
|
56
|
+
queues: Pika queues to declare and publish to.
|
|
57
|
+
should_keep_unpublished_messages: Whether or not the event broker should
|
|
58
|
+
maintain a queue of unpublished messages to be published later in
|
|
59
|
+
case of errors.
|
|
60
|
+
raise_on_failure: Whether to raise an exception if publishing fails. If
|
|
61
|
+
`False`, keep retrying.
|
|
62
|
+
event_loop: The event loop which will be used to run `async` functions. If
|
|
63
|
+
`None` `asyncio.get_event_loop()` is used to get a loop.
|
|
64
|
+
connection_attempts: Number of attempts for connecting to RabbitMQ before
|
|
65
|
+
an exception is thrown.
|
|
66
|
+
retry_delay_in_seconds: Time in seconds between connection attempts.
|
|
67
|
+
exchange_name: Exchange name to which the queues binds to.
|
|
68
|
+
If nothing is mentioned then the default exchange name would be used.
|
|
69
|
+
"""
|
|
70
|
+
super().__init__()
|
|
71
|
+
|
|
72
|
+
self.host = host
|
|
73
|
+
self.username = username
|
|
74
|
+
self.password = password
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
self.port = int(port)
|
|
78
|
+
except ValueError as e:
|
|
79
|
+
raise RasaException("Port could not be converted to integer.") from e
|
|
80
|
+
|
|
81
|
+
self.queues = self._get_queues_from_args(queues)
|
|
82
|
+
self.raise_on_failure = raise_on_failure
|
|
83
|
+
self._connection_attempts = connection_attempts
|
|
84
|
+
self._retry_delay_in_seconds = retry_delay_in_seconds
|
|
85
|
+
self.exchange_name = exchange_name
|
|
86
|
+
|
|
87
|
+
# Unpublished messages which hopefully will be published later 🤞
|
|
88
|
+
self._unpublished_events: Deque[Dict[Text, Any]] = deque()
|
|
89
|
+
self.should_keep_unpublished_messages = should_keep_unpublished_messages
|
|
90
|
+
|
|
91
|
+
self._loop = event_loop or asyncio.get_event_loop()
|
|
92
|
+
self._background_tasks: Set[asyncio.Task] = set()
|
|
93
|
+
|
|
94
|
+
self._connection: Optional[aio_pika.abc.AbstractRobustConnection] = None
|
|
95
|
+
self._exchange: Optional[aio_pika.RobustExchange] = None
|
|
96
|
+
|
|
97
|
+
@staticmethod
|
|
98
|
+
def _get_queues_from_args(
|
|
99
|
+
queues_arg: Union[List[Text], Tuple[Text, ...], Text, None],
|
|
100
|
+
) -> Union[List[Text], Tuple[Text, ...]]:
|
|
101
|
+
"""Get queues for this event broker.
|
|
102
|
+
|
|
103
|
+
The preferred argument defining the RabbitMQ queues the `PikaEventBroker` should
|
|
104
|
+
publish to is `queues` (as of Rasa Open Source version 1.8.2). This method
|
|
105
|
+
can be removed in the future, and `self.queues` should just receive the value of
|
|
106
|
+
the `queues` kwarg in the constructor.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
queues_arg: Value of the supplied `queues` argument.
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
Queues this event broker publishes to.
|
|
113
|
+
|
|
114
|
+
Raises:
|
|
115
|
+
`ValueError` if no valid `queues` argument was found.
|
|
116
|
+
"""
|
|
117
|
+
if queues_arg and isinstance(queues_arg, (list, tuple)):
|
|
118
|
+
return queues_arg
|
|
119
|
+
|
|
120
|
+
if queues_arg and isinstance(queues_arg, str):
|
|
121
|
+
logger.debug(
|
|
122
|
+
f"Found a string value under the `queues` key of the Pika event broker "
|
|
123
|
+
f"config. Please supply a list of queues under this key, even if it is "
|
|
124
|
+
f"just a single one. See {DOCS_URL_PIKA_EVENT_BROKER}"
|
|
125
|
+
)
|
|
126
|
+
return [queues_arg]
|
|
127
|
+
|
|
128
|
+
rasa.shared.utils.io.raise_warning(
|
|
129
|
+
f"No `queues` argument provided. It is suggested to "
|
|
130
|
+
f"explicitly specify a queue as described in "
|
|
131
|
+
f"{DOCS_URL_PIKA_EVENT_BROKER}. "
|
|
132
|
+
f"Using the default queue '{DEFAULT_QUEUE_NAME}' for now."
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
return [DEFAULT_QUEUE_NAME]
|
|
136
|
+
|
|
137
|
+
@classmethod
|
|
138
|
+
async def from_endpoint_config(
|
|
139
|
+
cls,
|
|
140
|
+
broker_config: Optional["EndpointConfig"],
|
|
141
|
+
event_loop: Optional[AbstractEventLoop] = None,
|
|
142
|
+
) -> Optional["PikaEventBroker"]:
|
|
143
|
+
"""Creates broker. See the parent class for more information."""
|
|
144
|
+
if broker_config is None:
|
|
145
|
+
return None
|
|
146
|
+
|
|
147
|
+
broker = cls(broker_config.url, **broker_config.kwargs, event_loop=event_loop)
|
|
148
|
+
await broker.connect()
|
|
149
|
+
|
|
150
|
+
return broker
|
|
151
|
+
|
|
152
|
+
async def connect(self) -> None:
|
|
153
|
+
"""Connects to RabbitMQ."""
|
|
154
|
+
self._connection = await self._connect()
|
|
155
|
+
self._connection.reconnect_callbacks.add(self._publish_unpublished_messages)
|
|
156
|
+
logger.info(f"RabbitMQ connection to '{self.host}' was established.")
|
|
157
|
+
|
|
158
|
+
channel = await self._connection.channel()
|
|
159
|
+
logger.debug(
|
|
160
|
+
f"RabbitMQ channel was opened. "
|
|
161
|
+
f"Declaring fanout exchange '{self.exchange_name}'."
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
self._exchange = await self._set_up_exchange(channel)
|
|
165
|
+
|
|
166
|
+
def _configure_url(self) -> Optional[Text]:
|
|
167
|
+
"""Configures the URL to connect to RabbitMQ."""
|
|
168
|
+
url = None
|
|
169
|
+
|
|
170
|
+
if self.host.startswith("amqp"):
|
|
171
|
+
parsed_host = urlparse(self.host)
|
|
172
|
+
|
|
173
|
+
amqp_user = f"{self.username}:{self.password}"
|
|
174
|
+
if amqp_user not in parsed_host.netloc:
|
|
175
|
+
url = f"{parsed_host.scheme}://{amqp_user}@{parsed_host.netloc}"
|
|
176
|
+
else:
|
|
177
|
+
url = f"{parsed_host.scheme}://{parsed_host.netloc}"
|
|
178
|
+
|
|
179
|
+
if str(self.port) not in url:
|
|
180
|
+
url = f"{url}:{self.port}"
|
|
181
|
+
|
|
182
|
+
if parsed_host.path:
|
|
183
|
+
url = f"{url}{parsed_host.path}"
|
|
184
|
+
|
|
185
|
+
if parsed_host.query:
|
|
186
|
+
url = f"{url}?{parsed_host.query}"
|
|
187
|
+
|
|
188
|
+
return url
|
|
189
|
+
|
|
190
|
+
async def _connect(self) -> aio_pika.abc.AbstractRobustConnection:
|
|
191
|
+
# The `url` parameter will take precedence over parameters like `login` or
|
|
192
|
+
# `password`.
|
|
193
|
+
url = self._configure_url()
|
|
194
|
+
|
|
195
|
+
ssl_options = _create_rabbitmq_ssl_options(self.host)
|
|
196
|
+
logger.info("Connecting to RabbitMQ ...")
|
|
197
|
+
|
|
198
|
+
last_exception: Optional[Exception] = None
|
|
199
|
+
for _ in range(self._connection_attempts):
|
|
200
|
+
try:
|
|
201
|
+
return await aio_pika.connect_robust(
|
|
202
|
+
url=url,
|
|
203
|
+
host=self.host,
|
|
204
|
+
port=self.port,
|
|
205
|
+
password=self.password,
|
|
206
|
+
login=self.username,
|
|
207
|
+
loop=self._loop,
|
|
208
|
+
ssl=ssl_options is not None,
|
|
209
|
+
ssl_options=ssl_options,
|
|
210
|
+
)
|
|
211
|
+
# All sorts of exception can happen until RabbitMQ is in a stable state
|
|
212
|
+
except Exception as e:
|
|
213
|
+
last_exception = e
|
|
214
|
+
logger.debug(
|
|
215
|
+
f"Connecting to '{self.host}' failed with error '{e}'. "
|
|
216
|
+
f"Trying again."
|
|
217
|
+
)
|
|
218
|
+
await asyncio.sleep(self._retry_delay_in_seconds)
|
|
219
|
+
|
|
220
|
+
last_exception = cast(Exception, last_exception)
|
|
221
|
+
logger.error(
|
|
222
|
+
f"Connecting to '{self.host}' failed with error '{last_exception}'."
|
|
223
|
+
)
|
|
224
|
+
raise last_exception
|
|
225
|
+
|
|
226
|
+
def _publish_unpublished_messages(self, *_: Any, **__: Any) -> None:
|
|
227
|
+
while self._unpublished_events:
|
|
228
|
+
# Send unpublished messages
|
|
229
|
+
message = self._unpublished_events.popleft()
|
|
230
|
+
self.publish(message)
|
|
231
|
+
logger.debug(
|
|
232
|
+
f"Published message from queue of unpublished messages. "
|
|
233
|
+
f"Remaining unpublished messages: {len(self._unpublished_events)}."
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
async def _set_up_exchange(
|
|
237
|
+
self, channel: aio_pika.RobustChannel
|
|
238
|
+
) -> aio_pika.RobustExchange:
|
|
239
|
+
exchange = await channel.declare_exchange(
|
|
240
|
+
self.exchange_name, type=aio_pika.ExchangeType.FANOUT
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
await asyncio.gather(
|
|
244
|
+
*[
|
|
245
|
+
self._bind_queue(queue_name, channel, exchange)
|
|
246
|
+
for queue_name in self.queues
|
|
247
|
+
]
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
return exchange
|
|
251
|
+
|
|
252
|
+
@staticmethod
|
|
253
|
+
async def _bind_queue(
|
|
254
|
+
queue_name: Text, channel: aio_pika.RobustChannel, exchange: aio_pika.Exchange
|
|
255
|
+
) -> None:
|
|
256
|
+
queue = await channel.declare_queue(queue_name, durable=True)
|
|
257
|
+
|
|
258
|
+
await queue.bind(exchange, "")
|
|
259
|
+
|
|
260
|
+
async def close(self) -> None:
|
|
261
|
+
"""Closes connection to RabbitMQ."""
|
|
262
|
+
if not self._connection:
|
|
263
|
+
return
|
|
264
|
+
|
|
265
|
+
# Entering the context manager does nothing. Exiting closes the channels and
|
|
266
|
+
# the connection.
|
|
267
|
+
async with self._connection:
|
|
268
|
+
logger.debug("Closing RabbitMQ connection.")
|
|
269
|
+
|
|
270
|
+
def is_ready(self) -> bool:
|
|
271
|
+
"""Return `True` if a connection was established."""
|
|
272
|
+
if self._connection is None:
|
|
273
|
+
return False
|
|
274
|
+
|
|
275
|
+
return not self._connection.is_closed
|
|
276
|
+
|
|
277
|
+
def publish(
|
|
278
|
+
self, event: Dict[Text, Any], headers: Optional[Dict[Text, Text]] = None
|
|
279
|
+
) -> None:
|
|
280
|
+
"""Publishes `event` to Pika queues.
|
|
281
|
+
|
|
282
|
+
Args:
|
|
283
|
+
event: Serialised event to be published.
|
|
284
|
+
headers: Message headers to append to the published message. The headers
|
|
285
|
+
can be retrieved in the consumer from the `headers` attribute of the
|
|
286
|
+
message's `BasicProperties`.
|
|
287
|
+
"""
|
|
288
|
+
# We need to save a reference to this background task to
|
|
289
|
+
# make sure it doesn't disappear. See:
|
|
290
|
+
# https://docs.python.org/3/library/asyncio-task.html#asyncio.create_task
|
|
291
|
+
task: asyncio.Task = self._loop.create_task(self._publish(event, headers))
|
|
292
|
+
self._background_tasks.add(task)
|
|
293
|
+
task.add_done_callback(self._background_tasks.discard)
|
|
294
|
+
|
|
295
|
+
async def _publish(
|
|
296
|
+
self, event: Dict[Text, Any], headers: Optional[Dict[Text, Text]] = None
|
|
297
|
+
) -> None:
|
|
298
|
+
if self._exchange is None:
|
|
299
|
+
return
|
|
300
|
+
|
|
301
|
+
reduced_event = rasa.shared.core.events.remove_parse_data(event)
|
|
302
|
+
|
|
303
|
+
try:
|
|
304
|
+
await self._exchange.publish(self._message(event, headers), "")
|
|
305
|
+
|
|
306
|
+
structlogger.debug(
|
|
307
|
+
"pika.events.publish",
|
|
308
|
+
event_info="Logging a reduced version of the Pika event",
|
|
309
|
+
rabbitmq_exchange=RABBITMQ_EXCHANGE,
|
|
310
|
+
host=self.host,
|
|
311
|
+
rasa_event=reduced_event,
|
|
312
|
+
)
|
|
313
|
+
except Exception as e:
|
|
314
|
+
structlogger.error(
|
|
315
|
+
"pika.events.publish.failed",
|
|
316
|
+
event_info="Logging a reduced version of the failed Pika event",
|
|
317
|
+
host=self.host,
|
|
318
|
+
rasa_event=reduced_event,
|
|
319
|
+
)
|
|
320
|
+
if self.should_keep_unpublished_messages:
|
|
321
|
+
self._unpublished_events.append(event)
|
|
322
|
+
|
|
323
|
+
if self.raise_on_failure:
|
|
324
|
+
self.close() # type: ignore[unused-coroutine]
|
|
325
|
+
raise e
|
|
326
|
+
|
|
327
|
+
def _message(
|
|
328
|
+
self, event: Dict[Text, Any], headers: Optional[Dict[Text, Text]]
|
|
329
|
+
) -> aio_pika.Message:
|
|
330
|
+
body = json.dumps(event)
|
|
331
|
+
return aio_pika.Message(
|
|
332
|
+
bytes(body, DEFAULT_ENCODING),
|
|
333
|
+
headers=headers,
|
|
334
|
+
app_id=self.rasa_environment,
|
|
335
|
+
delivery_mode=aio_pika.DeliveryMode.PERSISTENT,
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
@cached_property
|
|
339
|
+
def rasa_environment(self) -> Optional[Text]:
|
|
340
|
+
"""Get value of the `RASA_ENVIRONMENT` environment variable."""
|
|
341
|
+
return os.environ.get("RASA_ENVIRONMENT")
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
def _create_rabbitmq_ssl_options(
|
|
345
|
+
rabbitmq_host: Optional[Text] = None,
|
|
346
|
+
) -> Optional[Dict]:
|
|
347
|
+
"""Create RabbitMQ SSL options.
|
|
348
|
+
|
|
349
|
+
Requires the following environment variables to be set:
|
|
350
|
+
|
|
351
|
+
RABBITMQ_SSL_CLIENT_CERTIFICATE - path to the SSL client certificate (required)
|
|
352
|
+
RABBITMQ_SSL_CLIENT_KEY - path to the SSL client key (required)
|
|
353
|
+
|
|
354
|
+
Details on how to enable RabbitMQ TLS support can be found here:
|
|
355
|
+
https://www.rabbitmq.com/ssl.html#enabling-tls
|
|
356
|
+
|
|
357
|
+
Args:
|
|
358
|
+
rabbitmq_host: RabbitMQ hostname.
|
|
359
|
+
|
|
360
|
+
Returns:
|
|
361
|
+
Optional SSL arguments for the RabbitMQ connection.
|
|
362
|
+
"""
|
|
363
|
+
client_certificate_path = os.environ.get("RABBITMQ_SSL_CLIENT_CERTIFICATE")
|
|
364
|
+
client_key_path = os.environ.get("RABBITMQ_SSL_CLIENT_KEY")
|
|
365
|
+
|
|
366
|
+
if os.environ.get("RABBITMQ_SSL_CA_FILE"):
|
|
367
|
+
rasa.shared.utils.io.raise_warning(
|
|
368
|
+
"Specifying 'RABBITMQ_SSL_CA_FILE' via "
|
|
369
|
+
"environment variables is no longer supported. Please specify this "
|
|
370
|
+
"through the RabbitMQ URL parameter 'cacertfile' as described here: "
|
|
371
|
+
"https://www.rabbitmq.com/uri-query-parameters.html "
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
if os.environ.get("RABBITMQ_SSL_KEY_PASSWORD"):
|
|
375
|
+
rasa.shared.utils.io.raise_warning(
|
|
376
|
+
"Specifying 'RABBITMQ_SSL_KEY_PASSWORD' via environment variables is no "
|
|
377
|
+
"longer supported. Please use an unencrypted key file."
|
|
378
|
+
)
|
|
379
|
+
|
|
380
|
+
if client_certificate_path and client_key_path:
|
|
381
|
+
logger.debug(f"Configuring SSL context for RabbitMQ host '{rabbitmq_host}'.")
|
|
382
|
+
return {
|
|
383
|
+
"certfile": client_certificate_path,
|
|
384
|
+
"client_key_path": client_key_path,
|
|
385
|
+
"cert_reqs": ssl.CERT_REQUIRED,
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return None
|
rasa/core/brokers/sql.py
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
import json
|
|
3
|
+
import logging
|
|
4
|
+
from asyncio import AbstractEventLoop
|
|
5
|
+
from typing import Any, Dict, Optional, Text, Generator
|
|
6
|
+
|
|
7
|
+
from sqlalchemy.orm import Session
|
|
8
|
+
from sqlalchemy import Column, Integer, String
|
|
9
|
+
from sqlalchemy import Text as SqlAlchemyText # to avoid name clash with typing.Text
|
|
10
|
+
|
|
11
|
+
from rasa.core.brokers.broker import EventBroker
|
|
12
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SQLEventBroker(EventBroker):
|
|
18
|
+
"""Save events into an SQL database.
|
|
19
|
+
|
|
20
|
+
All events will be stored in a table called `events`.
|
|
21
|
+
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from sqlalchemy.orm import DeclarativeBase
|
|
25
|
+
|
|
26
|
+
class Base(DeclarativeBase):
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
class SQLBrokerEvent(Base):
|
|
30
|
+
"""ORM which represents a row in the `events` table."""
|
|
31
|
+
|
|
32
|
+
__tablename__ = "events"
|
|
33
|
+
id = Column(Integer, primary_key=True)
|
|
34
|
+
sender_id = Column(String(255))
|
|
35
|
+
data = Column(SqlAlchemyText)
|
|
36
|
+
|
|
37
|
+
def __init__(
|
|
38
|
+
self,
|
|
39
|
+
dialect: Text = "sqlite",
|
|
40
|
+
host: Optional[Text] = None,
|
|
41
|
+
port: Optional[int] = None,
|
|
42
|
+
db: Text = "events.db",
|
|
43
|
+
username: Optional[Text] = None,
|
|
44
|
+
password: Optional[Text] = None,
|
|
45
|
+
) -> None:
|
|
46
|
+
"""Initializes `SQLBrokerEvent`."""
|
|
47
|
+
from rasa.core.tracker_store import SQLTrackerStore
|
|
48
|
+
import sqlalchemy.orm
|
|
49
|
+
|
|
50
|
+
engine_url = SQLTrackerStore.get_db_url(
|
|
51
|
+
dialect, host, port, db, username, password
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
logger.debug(f"SQLEventBroker: Connecting to database: '{engine_url}'.")
|
|
55
|
+
|
|
56
|
+
self.engine = sqlalchemy.create_engine(engine_url)
|
|
57
|
+
self.Base.metadata.create_all(self.engine)
|
|
58
|
+
self.sessionmaker = sqlalchemy.orm.sessionmaker(bind=self.engine)
|
|
59
|
+
|
|
60
|
+
@classmethod
|
|
61
|
+
async def from_endpoint_config(
|
|
62
|
+
cls,
|
|
63
|
+
broker_config: EndpointConfig,
|
|
64
|
+
event_loop: Optional[AbstractEventLoop] = None,
|
|
65
|
+
) -> "SQLEventBroker":
|
|
66
|
+
"""Creates broker. See the parent class for more information."""
|
|
67
|
+
return cls(host=broker_config.url, **broker_config.kwargs)
|
|
68
|
+
|
|
69
|
+
@contextlib.contextmanager
|
|
70
|
+
def session_scope(self) -> Generator[Session, None, None]:
|
|
71
|
+
"""Provide a transactional scope around a series of operations."""
|
|
72
|
+
session = self.sessionmaker()
|
|
73
|
+
try:
|
|
74
|
+
yield session
|
|
75
|
+
finally:
|
|
76
|
+
session.close()
|
|
77
|
+
|
|
78
|
+
def publish(self, event: Dict[Text, Any]) -> None:
|
|
79
|
+
"""Publishes a json-formatted Rasa Core event into an event queue."""
|
|
80
|
+
with self.session_scope() as session:
|
|
81
|
+
session.add(
|
|
82
|
+
self.SQLBrokerEvent(
|
|
83
|
+
sender_id=event.get("sender_id"), data=json.dumps(event)
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
session.commit()
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from typing import Text, Dict, List, Type
|
|
2
|
+
|
|
3
|
+
from rasa.core.channels.channel import ( # noqa: F401
|
|
4
|
+
InputChannel,
|
|
5
|
+
OutputChannel,
|
|
6
|
+
UserMessage,
|
|
7
|
+
CollectingOutputChannel,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
# this prevents IDE's from optimizing the imports - we need to import the
|
|
11
|
+
# above first, otherwise we will run into import cycles
|
|
12
|
+
from rasa.core.channels.socketio import SocketIOInput
|
|
13
|
+
from rasa.core.channels.botframework import BotFrameworkInput
|
|
14
|
+
from rasa.core.channels.callback import CallbackInput
|
|
15
|
+
from rasa.core.channels.console import CmdlineInput
|
|
16
|
+
from rasa.core.channels.facebook import FacebookInput
|
|
17
|
+
from rasa.core.channels.mattermost import MattermostInput
|
|
18
|
+
from rasa.core.channels.rasa_chat import RasaChatInput
|
|
19
|
+
from rasa.core.channels.rest import RestInput
|
|
20
|
+
from rasa.core.channels.rocketchat import RocketChatInput
|
|
21
|
+
from rasa.core.channels.slack import SlackInput
|
|
22
|
+
from rasa.core.channels.telegram import TelegramInput
|
|
23
|
+
from rasa.core.channels.twilio import TwilioInput
|
|
24
|
+
from rasa.core.channels.voice_ready.twilio_voice import TwilioVoiceInput
|
|
25
|
+
from rasa.core.channels.voice_ready.jambonz import JambonzVoiceReadyInput
|
|
26
|
+
from rasa.core.channels.voice_ready.audiocodes import AudiocodesInput
|
|
27
|
+
from rasa.core.channels.voice_stream.browser_audio import BrowserAudioInputChannel
|
|
28
|
+
from rasa.core.channels.webexteams import WebexTeamsInput
|
|
29
|
+
from rasa.core.channels.hangouts import HangoutsInput
|
|
30
|
+
from rasa.core.channels.vier_cvg import CVGInput
|
|
31
|
+
from rasa.core.channels.voice_stream.twilio_media_streams import (
|
|
32
|
+
TwilioMediaStreamsInputChannel,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
input_channel_classes: List[Type[InputChannel]] = [
|
|
36
|
+
CmdlineInput,
|
|
37
|
+
FacebookInput,
|
|
38
|
+
SlackInput,
|
|
39
|
+
TelegramInput,
|
|
40
|
+
MattermostInput,
|
|
41
|
+
TwilioInput,
|
|
42
|
+
TwilioVoiceInput,
|
|
43
|
+
RasaChatInput,
|
|
44
|
+
BotFrameworkInput,
|
|
45
|
+
RocketChatInput,
|
|
46
|
+
CallbackInput,
|
|
47
|
+
RestInput,
|
|
48
|
+
SocketIOInput,
|
|
49
|
+
WebexTeamsInput,
|
|
50
|
+
HangoutsInput,
|
|
51
|
+
AudiocodesInput,
|
|
52
|
+
CVGInput,
|
|
53
|
+
JambonzVoiceReadyInput,
|
|
54
|
+
TwilioMediaStreamsInputChannel,
|
|
55
|
+
BrowserAudioInputChannel,
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
# Mapping from an input channel name to its class to allow name based lookup.
|
|
59
|
+
BUILTIN_CHANNELS: Dict[Text, Type[InputChannel]] = {
|
|
60
|
+
c.name(): c for c in input_channel_classes
|
|
61
|
+
}
|