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,126 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import logging
|
|
3
|
+
from asyncio import AbstractEventLoop
|
|
4
|
+
from typing import Any, Dict, Text, Optional, Union, TypeVar, Type
|
|
5
|
+
|
|
6
|
+
import aiormq
|
|
7
|
+
|
|
8
|
+
import rasa.shared.utils.common
|
|
9
|
+
import rasa.shared.utils.io
|
|
10
|
+
from rasa.shared.exceptions import ConnectionException
|
|
11
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
EB = TypeVar("EB", bound="EventBroker")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class EventBroker:
|
|
20
|
+
"""Base class for any event broker implementation."""
|
|
21
|
+
|
|
22
|
+
@staticmethod
|
|
23
|
+
async def create(
|
|
24
|
+
obj: Union[EventBroker, EndpointConfig, None],
|
|
25
|
+
loop: Optional[AbstractEventLoop] = None,
|
|
26
|
+
) -> Optional[EventBroker]:
|
|
27
|
+
"""Factory to create an event broker."""
|
|
28
|
+
if isinstance(obj, EventBroker):
|
|
29
|
+
return obj
|
|
30
|
+
|
|
31
|
+
import aio_pika.exceptions
|
|
32
|
+
import sqlalchemy.exc
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
return await _create_from_endpoint_config(obj, loop)
|
|
36
|
+
except (
|
|
37
|
+
sqlalchemy.exc.OperationalError,
|
|
38
|
+
aio_pika.exceptions.AMQPConnectionError,
|
|
39
|
+
aiormq.exceptions.ChannelNotFoundEntity,
|
|
40
|
+
*aio_pika.exceptions.CONNECTION_EXCEPTIONS,
|
|
41
|
+
) as error:
|
|
42
|
+
raise ConnectionException("Cannot connect to event broker.") from error
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
async def from_endpoint_config(
|
|
46
|
+
cls: Type[EB],
|
|
47
|
+
broker_config: EndpointConfig,
|
|
48
|
+
event_loop: Optional[AbstractEventLoop] = None,
|
|
49
|
+
) -> Optional[EB]:
|
|
50
|
+
"""Creates an `EventBroker` from the endpoint configuration.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
broker_config: The configuration for the broker.
|
|
54
|
+
event_loop: The current event loop or `None`.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
An `EventBroker` object.
|
|
58
|
+
"""
|
|
59
|
+
raise NotImplementedError(
|
|
60
|
+
"Event broker must implement the `from_endpoint_config` method."
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
def publish(self, event: Dict[Text, Any]) -> None:
|
|
64
|
+
"""Publishes a json-formatted Rasa Core event into an event queue."""
|
|
65
|
+
raise NotImplementedError("Event broker must implement the `publish` method.")
|
|
66
|
+
|
|
67
|
+
def is_ready(self) -> bool:
|
|
68
|
+
"""Determine whether or not the event broker is ready.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
`True` by default, but this may be overridden by subclasses.
|
|
72
|
+
"""
|
|
73
|
+
return True
|
|
74
|
+
|
|
75
|
+
async def close(self) -> None:
|
|
76
|
+
"""Close the connection to an event broker."""
|
|
77
|
+
# default implementation does nothing
|
|
78
|
+
pass
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
async def _create_from_endpoint_config(
|
|
82
|
+
endpoint_config: Optional[EndpointConfig], event_loop: Optional[AbstractEventLoop]
|
|
83
|
+
) -> Optional[EventBroker]:
|
|
84
|
+
"""Instantiate an event broker based on its configuration."""
|
|
85
|
+
if endpoint_config is None:
|
|
86
|
+
broker: Optional[EventBroker] = None
|
|
87
|
+
elif endpoint_config.type is None or endpoint_config.type.lower() == "pika":
|
|
88
|
+
from rasa.core.brokers.pika import PikaEventBroker
|
|
89
|
+
|
|
90
|
+
# default broker if no type is set
|
|
91
|
+
broker = await PikaEventBroker.from_endpoint_config(endpoint_config, event_loop)
|
|
92
|
+
elif endpoint_config.type.lower() == "sql":
|
|
93
|
+
from rasa.core.brokers.sql import SQLEventBroker
|
|
94
|
+
|
|
95
|
+
broker = await SQLEventBroker.from_endpoint_config(endpoint_config)
|
|
96
|
+
elif endpoint_config.type.lower() == "file":
|
|
97
|
+
from rasa.core.brokers.file import FileEventBroker
|
|
98
|
+
|
|
99
|
+
broker = await FileEventBroker.from_endpoint_config(endpoint_config)
|
|
100
|
+
elif endpoint_config.type.lower() == "kafka":
|
|
101
|
+
from rasa.core.brokers.kafka import KafkaEventBroker
|
|
102
|
+
|
|
103
|
+
broker = await KafkaEventBroker.from_endpoint_config(endpoint_config)
|
|
104
|
+
else:
|
|
105
|
+
broker = await _load_from_module_name_in_endpoint_config(endpoint_config)
|
|
106
|
+
|
|
107
|
+
if broker:
|
|
108
|
+
logger.debug(f"Instantiated event broker to '{broker.__class__.__name__}'.")
|
|
109
|
+
return broker
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
async def _load_from_module_name_in_endpoint_config(
|
|
113
|
+
broker_config: EndpointConfig,
|
|
114
|
+
) -> Optional[EventBroker]:
|
|
115
|
+
"""Instantiate an event broker based on its class name."""
|
|
116
|
+
try:
|
|
117
|
+
event_broker_class = rasa.shared.utils.common.class_from_module_path(
|
|
118
|
+
broker_config.type
|
|
119
|
+
)
|
|
120
|
+
return await event_broker_class.from_endpoint_config(broker_config)
|
|
121
|
+
except (AttributeError, ImportError) as e:
|
|
122
|
+
logger.warning(
|
|
123
|
+
f"The `EventBroker` type '{broker_config.type}' could not be found. "
|
|
124
|
+
f"Not using any event broker. Error: {e}"
|
|
125
|
+
)
|
|
126
|
+
return None
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import logging
|
|
3
|
+
import typing
|
|
4
|
+
from asyncio import AbstractEventLoop
|
|
5
|
+
from typing import Optional, Text, Dict
|
|
6
|
+
|
|
7
|
+
from rasa.core.brokers.broker import EventBroker
|
|
8
|
+
|
|
9
|
+
if typing.TYPE_CHECKING:
|
|
10
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FileEventBroker(EventBroker):
|
|
16
|
+
"""Log events to a file in json format.
|
|
17
|
+
|
|
18
|
+
There will be one event per line and each event is stored as json.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
DEFAULT_LOG_FILE_NAME = "rasa_event.log"
|
|
22
|
+
|
|
23
|
+
def __init__(self, path: Optional[Text] = None) -> None:
|
|
24
|
+
self.path = path or self.DEFAULT_LOG_FILE_NAME
|
|
25
|
+
self.event_logger = self._event_logger()
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
async def from_endpoint_config(
|
|
29
|
+
cls,
|
|
30
|
+
broker_config: Optional["EndpointConfig"],
|
|
31
|
+
event_loop: Optional[AbstractEventLoop] = None,
|
|
32
|
+
) -> Optional["FileEventBroker"]:
|
|
33
|
+
"""Creates broker. See the parent class for more information."""
|
|
34
|
+
if broker_config is None:
|
|
35
|
+
return None
|
|
36
|
+
|
|
37
|
+
# noinspection PyArgumentList
|
|
38
|
+
return cls(**broker_config.kwargs)
|
|
39
|
+
|
|
40
|
+
def _event_logger(self) -> logging.Logger:
|
|
41
|
+
"""Instantiate the file logger."""
|
|
42
|
+
logger_file = self.path
|
|
43
|
+
# noinspection PyTypeChecker
|
|
44
|
+
query_logger = logging.getLogger("event-logger")
|
|
45
|
+
query_logger.setLevel(logging.INFO)
|
|
46
|
+
handler = logging.FileHandler(logger_file)
|
|
47
|
+
handler.setFormatter(logging.Formatter("%(message)s"))
|
|
48
|
+
query_logger.propagate = False
|
|
49
|
+
query_logger.addHandler(handler)
|
|
50
|
+
|
|
51
|
+
logger.info(f"Logging events to '{logger_file}'.")
|
|
52
|
+
|
|
53
|
+
return query_logger
|
|
54
|
+
|
|
55
|
+
def publish(self, event: Dict) -> None:
|
|
56
|
+
"""Write event to file."""
|
|
57
|
+
self.event_logger.info(json.dumps(event))
|
|
58
|
+
self.event_logger.handlers[0].flush()
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import os
|
|
3
|
+
import json
|
|
4
|
+
import logging
|
|
5
|
+
from functools import cached_property
|
|
6
|
+
|
|
7
|
+
import structlog
|
|
8
|
+
import threading
|
|
9
|
+
from asyncio import AbstractEventLoop
|
|
10
|
+
from typing import Any, Text, List, Optional, Union, Dict, TYPE_CHECKING
|
|
11
|
+
import time
|
|
12
|
+
|
|
13
|
+
from rasa.core.brokers.broker import EventBroker
|
|
14
|
+
from rasa.core.exceptions import KafkaProducerInitializationError
|
|
15
|
+
from rasa.shared.utils.io import DEFAULT_ENCODING
|
|
16
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
17
|
+
import rasa.shared.utils.common
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
from confluent_kafka import KafkaError, Producer, Message
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger(__name__)
|
|
23
|
+
structlogger = structlog.get_logger()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class KafkaEventBroker(EventBroker):
|
|
27
|
+
"""Kafka event broker."""
|
|
28
|
+
|
|
29
|
+
def __init__(
|
|
30
|
+
self,
|
|
31
|
+
url: Union[Text, List[Text], None],
|
|
32
|
+
topic: Text = "rasa_core_events",
|
|
33
|
+
client_id: Optional[Text] = None,
|
|
34
|
+
partition_by_sender: bool = False,
|
|
35
|
+
sasl_username: Optional[Text] = None,
|
|
36
|
+
sasl_password: Optional[Text] = None,
|
|
37
|
+
sasl_mechanism: Optional[Text] = "PLAIN",
|
|
38
|
+
ssl_cafile: Optional[Text] = None,
|
|
39
|
+
ssl_certfile: Optional[Text] = None,
|
|
40
|
+
ssl_keyfile: Optional[Text] = None,
|
|
41
|
+
ssl_check_hostname: bool = False,
|
|
42
|
+
security_protocol: Text = "SASL_PLAINTEXT",
|
|
43
|
+
**kwargs: Any,
|
|
44
|
+
) -> None:
|
|
45
|
+
"""Kafka event broker.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
url: 'url[:port]' string (or list of 'url[:port]'
|
|
49
|
+
strings) that the producer should contact to bootstrap initial
|
|
50
|
+
cluster metadata. This does not have to be the full node list.
|
|
51
|
+
It just needs to have at least one broker that will respond to a
|
|
52
|
+
Metadata API Request.
|
|
53
|
+
topic: Topics to subscribe to.
|
|
54
|
+
client_id: A name for this client. This string is passed in each request
|
|
55
|
+
to servers and can be used to identify specific server-side log entries
|
|
56
|
+
that correspond to this client. Also submitted to `GroupCoordinator` for
|
|
57
|
+
logging with respect to producer group administration.
|
|
58
|
+
partition_by_sender: Flag to configure whether messages are partitioned by
|
|
59
|
+
sender_id or not
|
|
60
|
+
sasl_username: Username for plain authentication.
|
|
61
|
+
sasl_password: Password for plain authentication.
|
|
62
|
+
sasl_mechanism: Authentication mechanism when security_protocol is
|
|
63
|
+
configured for SASL_PLAINTEXT or SASL_SSL.
|
|
64
|
+
Valid values are: PLAIN, GSSAPI, OAUTHBEARER, SCRAM-SHA-256,
|
|
65
|
+
SCRAM-SHA-512. Default: `PLAIN`
|
|
66
|
+
ssl_cafile: Optional filename of ca file to use in certificate
|
|
67
|
+
verification.
|
|
68
|
+
|
|
69
|
+
ssl_certfile : Optional filename of file in pem format containing
|
|
70
|
+
the client certificate, as well as any ca certificates needed to
|
|
71
|
+
establish the certificate's authenticity.
|
|
72
|
+
|
|
73
|
+
ssl_keyfile : Optional filename containing the client private key.
|
|
74
|
+
|
|
75
|
+
ssl_check_hostname : Flag to configure whether ssl handshake
|
|
76
|
+
should verify that the certificate matches the broker's hostname.
|
|
77
|
+
|
|
78
|
+
security_protocol : Protocol used to communicate with brokers.
|
|
79
|
+
Valid values are: PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL.
|
|
80
|
+
"""
|
|
81
|
+
self.producer: Optional[Producer] = None
|
|
82
|
+
self.url = url
|
|
83
|
+
self.topic = topic
|
|
84
|
+
self.client_id = client_id
|
|
85
|
+
self.partition_by_sender = partition_by_sender
|
|
86
|
+
self.security_protocol = security_protocol.upper()
|
|
87
|
+
self.sasl_username = sasl_username
|
|
88
|
+
self.sasl_password = sasl_password
|
|
89
|
+
self.sasl_mechanism = sasl_mechanism
|
|
90
|
+
self.ssl_cafile = ssl_cafile
|
|
91
|
+
self.ssl_certfile = ssl_certfile
|
|
92
|
+
self.ssl_keyfile = ssl_keyfile
|
|
93
|
+
self.queue_size = kwargs.get("queue_size")
|
|
94
|
+
self.ssl_check_hostname = "https" if ssl_check_hostname else None
|
|
95
|
+
|
|
96
|
+
# Async producer implementation followed from confluent-kafka asyncio example:
|
|
97
|
+
# https://github.com/confluentinc/confluent-kafka-python/blob/master/examples/asyncio_example.py#L88 # noqa: E501
|
|
98
|
+
self._loop = asyncio.get_event_loop()
|
|
99
|
+
self._cancelled = False
|
|
100
|
+
self._poll_thread = threading.Thread(target=self._poll_loop)
|
|
101
|
+
self._poll_thread.start()
|
|
102
|
+
|
|
103
|
+
@classmethod
|
|
104
|
+
async def from_endpoint_config(
|
|
105
|
+
cls,
|
|
106
|
+
broker_config: EndpointConfig,
|
|
107
|
+
event_loop: Optional[AbstractEventLoop] = None,
|
|
108
|
+
) -> Optional["KafkaEventBroker"]:
|
|
109
|
+
"""Creates broker. See the parent class for more information."""
|
|
110
|
+
if broker_config is None:
|
|
111
|
+
return None
|
|
112
|
+
|
|
113
|
+
return cls(broker_config.url, **broker_config.kwargs)
|
|
114
|
+
|
|
115
|
+
def publish(
|
|
116
|
+
self,
|
|
117
|
+
event: Dict[Text, Any],
|
|
118
|
+
retries: int = 60,
|
|
119
|
+
retry_delay_in_seconds: float = 5,
|
|
120
|
+
) -> None:
|
|
121
|
+
"""Publishes events."""
|
|
122
|
+
from confluent_kafka import KafkaException
|
|
123
|
+
|
|
124
|
+
if retries == 1:
|
|
125
|
+
retries = 2
|
|
126
|
+
|
|
127
|
+
if self.producer is None:
|
|
128
|
+
self.producer = self._create_producer()
|
|
129
|
+
try:
|
|
130
|
+
self._check_kafka_connection()
|
|
131
|
+
logger.debug("Connection to kafka successful.")
|
|
132
|
+
except KafkaException:
|
|
133
|
+
logger.debug("Failed to connect kafka.")
|
|
134
|
+
return
|
|
135
|
+
while retries:
|
|
136
|
+
try:
|
|
137
|
+
self._publish(event)
|
|
138
|
+
return
|
|
139
|
+
except BufferError as e:
|
|
140
|
+
logger.error(
|
|
141
|
+
f"Could not publish message to kafka url '{self.url}'. "
|
|
142
|
+
f"Failed with error: {e}"
|
|
143
|
+
)
|
|
144
|
+
self.producer.poll(1)
|
|
145
|
+
retries -= 1
|
|
146
|
+
except Exception as e:
|
|
147
|
+
logger.error(
|
|
148
|
+
f"Could not publish message to kafka url '{self.url}'. "
|
|
149
|
+
f"Failed with error: {e}"
|
|
150
|
+
)
|
|
151
|
+
try:
|
|
152
|
+
self._check_kafka_connection()
|
|
153
|
+
except KafkaException:
|
|
154
|
+
logger.debug("Connection to kafka lost, reconnecting...")
|
|
155
|
+
self.producer = self._create_producer()
|
|
156
|
+
try:
|
|
157
|
+
self._check_kafka_connection()
|
|
158
|
+
logger.debug("Reconnection to kafka successful")
|
|
159
|
+
self._publish(event)
|
|
160
|
+
return
|
|
161
|
+
except KafkaException:
|
|
162
|
+
pass
|
|
163
|
+
retries -= 1
|
|
164
|
+
time.sleep(retry_delay_in_seconds)
|
|
165
|
+
|
|
166
|
+
logger.error("Failed to publish Kafka event.")
|
|
167
|
+
|
|
168
|
+
def _check_kafka_connection(self) -> None:
|
|
169
|
+
"""Verifies connection with Kafka.
|
|
170
|
+
|
|
171
|
+
Raises:
|
|
172
|
+
KafkaException: if Kafka is disconnected.
|
|
173
|
+
"""
|
|
174
|
+
if self.producer is not None:
|
|
175
|
+
self.producer.list_topics(timeout=5)
|
|
176
|
+
|
|
177
|
+
def _get_kafka_config(self) -> Dict[Text, Any]:
|
|
178
|
+
config = {
|
|
179
|
+
"client.id": self.client_id,
|
|
180
|
+
"bootstrap.servers": self.url,
|
|
181
|
+
"error_cb": kafka_error_callback,
|
|
182
|
+
}
|
|
183
|
+
if self.queue_size:
|
|
184
|
+
config["queue.buffering.max.messages"] = self.queue_size
|
|
185
|
+
|
|
186
|
+
if self.security_protocol == "PLAINTEXT":
|
|
187
|
+
authentication_params: Dict[Text, Any] = {
|
|
188
|
+
"security.protocol": self.security_protocol,
|
|
189
|
+
}
|
|
190
|
+
elif self.security_protocol == "SASL_PLAINTEXT":
|
|
191
|
+
authentication_params = {
|
|
192
|
+
"sasl.username": self.sasl_username,
|
|
193
|
+
"sasl.password": self.sasl_password,
|
|
194
|
+
"sasl.mechanism": self.sasl_mechanism,
|
|
195
|
+
"security.protocol": self.security_protocol,
|
|
196
|
+
}
|
|
197
|
+
elif self.security_protocol == "SSL":
|
|
198
|
+
authentication_params = {
|
|
199
|
+
"ssl.ca.location": self.ssl_cafile,
|
|
200
|
+
"ssl.certificate.location": self.ssl_certfile,
|
|
201
|
+
"ssl.key.location": self.ssl_keyfile,
|
|
202
|
+
"security.protocol": self.security_protocol,
|
|
203
|
+
}
|
|
204
|
+
elif self.security_protocol == "SASL_SSL":
|
|
205
|
+
authentication_params = {
|
|
206
|
+
"sasl.username": self.sasl_username,
|
|
207
|
+
"sasl.password": self.sasl_password,
|
|
208
|
+
"ssl.ca.location": self.ssl_cafile,
|
|
209
|
+
"ssl.certificate.location": self.ssl_certfile,
|
|
210
|
+
"ssl.key.location": self.ssl_keyfile,
|
|
211
|
+
"ssl.endpoint.identification.algorithm": self.ssl_check_hostname,
|
|
212
|
+
"security.protocol": self.security_protocol,
|
|
213
|
+
"sasl.mechanism": self.sasl_mechanism,
|
|
214
|
+
}
|
|
215
|
+
else:
|
|
216
|
+
raise ValueError(
|
|
217
|
+
f"Cannot initialise `KafkaEventBroker`: "
|
|
218
|
+
f"Invalid `security_protocol` ('{self.security_protocol}')."
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
return {**config, **authentication_params}
|
|
222
|
+
|
|
223
|
+
def _create_producer(self) -> "Producer":
|
|
224
|
+
import confluent_kafka
|
|
225
|
+
|
|
226
|
+
try:
|
|
227
|
+
return confluent_kafka.Producer(self._get_kafka_config())
|
|
228
|
+
except confluent_kafka.KafkaException as e:
|
|
229
|
+
raise KafkaProducerInitializationError(
|
|
230
|
+
f"Cannot initialise `KafkaEventBroker`: {e}"
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
def _publish(self, event: Dict[Text, Any]) -> None:
|
|
234
|
+
if self.partition_by_sender:
|
|
235
|
+
partition_key = bytes(event.get("sender_id"), encoding=DEFAULT_ENCODING)
|
|
236
|
+
else:
|
|
237
|
+
partition_key = None
|
|
238
|
+
|
|
239
|
+
headers = []
|
|
240
|
+
if self.rasa_environment:
|
|
241
|
+
headers = [
|
|
242
|
+
(
|
|
243
|
+
"RASA_ENVIRONMENT",
|
|
244
|
+
bytes(self.rasa_environment, encoding=DEFAULT_ENCODING),
|
|
245
|
+
)
|
|
246
|
+
]
|
|
247
|
+
|
|
248
|
+
reduced_event = rasa.shared.core.events.remove_parse_data(event)
|
|
249
|
+
structlogger.debug(
|
|
250
|
+
"kafka.publish.event",
|
|
251
|
+
event_info="Logging a reduced version of the Kafka event",
|
|
252
|
+
topic=self.topic,
|
|
253
|
+
rasa_event=reduced_event,
|
|
254
|
+
partition_key=partition_key,
|
|
255
|
+
headers=headers,
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
serialized_event = json.dumps(event).encode(DEFAULT_ENCODING)
|
|
259
|
+
|
|
260
|
+
if self.producer is not None:
|
|
261
|
+
self.producer.produce(
|
|
262
|
+
self.topic,
|
|
263
|
+
value=serialized_event,
|
|
264
|
+
key=partition_key,
|
|
265
|
+
headers=headers,
|
|
266
|
+
on_delivery=delivery_report,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
async def close(self) -> None:
|
|
270
|
+
self._cancelled = True
|
|
271
|
+
self._poll_thread.join()
|
|
272
|
+
if self.producer:
|
|
273
|
+
self.producer.flush()
|
|
274
|
+
|
|
275
|
+
@cached_property
|
|
276
|
+
def rasa_environment(self) -> Optional[Text]:
|
|
277
|
+
"""Get value of the `RASA_ENVIRONMENT` environment variable."""
|
|
278
|
+
return os.environ.get("RASA_ENVIRONMENT", "RASA_ENVIRONMENT_NOT_SET")
|
|
279
|
+
|
|
280
|
+
def _poll_loop(self) -> None:
|
|
281
|
+
"""Polls the producer for events.
|
|
282
|
+
|
|
283
|
+
Required to trigger the on_delivery callback passed to produce method.
|
|
284
|
+
"""
|
|
285
|
+
if self.producer is not None:
|
|
286
|
+
while not self._cancelled:
|
|
287
|
+
self.producer.poll(0.1)
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def kafka_error_callback(err: "KafkaError") -> None:
|
|
291
|
+
"""Callback for Kafka errors.
|
|
292
|
+
|
|
293
|
+
Any exception raised from this callback will be re-raised from the
|
|
294
|
+
triggering flush() call.
|
|
295
|
+
"""
|
|
296
|
+
from confluent_kafka import KafkaException, KafkaError
|
|
297
|
+
|
|
298
|
+
# handle authentication / connection related issues, likely pointing
|
|
299
|
+
# to a configuration error
|
|
300
|
+
if (
|
|
301
|
+
err.code() == KafkaError._ALL_BROKERS_DOWN
|
|
302
|
+
or err.code() == KafkaError._AUTHENTICATION
|
|
303
|
+
or err.code() == KafkaError._MAX_POLL_EXCEEDED
|
|
304
|
+
):
|
|
305
|
+
raise KafkaException(err)
|
|
306
|
+
else:
|
|
307
|
+
logger.warning("A KafkaError has been raised.", exc_info=True)
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
def delivery_report(err: Exception, msg: "Message") -> None:
|
|
311
|
+
"""Reports the failure or success of a message delivery.
|
|
312
|
+
|
|
313
|
+
Args:
|
|
314
|
+
err (KafkaError): The error that occurred on None on success.
|
|
315
|
+
msg (Message): The message that was produced or failed.
|
|
316
|
+
"""
|
|
317
|
+
if err is not None:
|
|
318
|
+
logger.error(f"Delivery failed for User record {msg.key()}: {err}")
|
|
319
|
+
return
|
|
320
|
+
|
|
321
|
+
logger.info(
|
|
322
|
+
f"User record {msg.key()} successfully produced to "
|
|
323
|
+
f"{msg.topic()} [{msg.partition()}] at offset {msg.offset()}."
|
|
324
|
+
)
|