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,89 @@
|
|
|
1
|
+
import aiohttp
|
|
2
|
+
|
|
3
|
+
import copy
|
|
4
|
+
import logging
|
|
5
|
+
import structlog
|
|
6
|
+
|
|
7
|
+
from typing import Text, Dict, Any, Optional
|
|
8
|
+
|
|
9
|
+
from rasa.core import constants
|
|
10
|
+
from rasa.core.channels import UserMessage
|
|
11
|
+
from rasa.shared.nlu.constants import INTENT_NAME_KEY
|
|
12
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
structlogger = structlog.get_logger()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class RasaNLUHttpInterpreter:
|
|
19
|
+
"""Allows for an HTTP endpoint to be used to parse messages."""
|
|
20
|
+
|
|
21
|
+
def __init__(self, endpoint_config: Optional[EndpointConfig] = None) -> None:
|
|
22
|
+
"""Initializes a `RasaNLUHttpInterpreter`."""
|
|
23
|
+
self.session = aiohttp.ClientSession()
|
|
24
|
+
if endpoint_config:
|
|
25
|
+
self.endpoint_config = endpoint_config
|
|
26
|
+
else:
|
|
27
|
+
self.endpoint_config = EndpointConfig(constants.DEFAULT_SERVER_URL)
|
|
28
|
+
|
|
29
|
+
async def parse(self, message: UserMessage) -> Dict[Text, Any]:
|
|
30
|
+
"""Parse a text message.
|
|
31
|
+
|
|
32
|
+
Return a default value if the parsing of the text failed.
|
|
33
|
+
"""
|
|
34
|
+
default_return = {
|
|
35
|
+
"intent": {INTENT_NAME_KEY: "", "confidence": 0.0},
|
|
36
|
+
"entities": [],
|
|
37
|
+
"text": "",
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
result = await self._rasa_http_parse(message.text, message.sender_id)
|
|
41
|
+
return result if result is not None else default_return
|
|
42
|
+
|
|
43
|
+
async def _rasa_http_parse(
|
|
44
|
+
self, text: Text, message_id: Optional[Text] = None
|
|
45
|
+
) -> Optional[Dict[Text, Any]]:
|
|
46
|
+
"""Send a text message to a running rasa NLU http server.
|
|
47
|
+
|
|
48
|
+
Return `None` on failure.
|
|
49
|
+
"""
|
|
50
|
+
if not self.endpoint_config or self.endpoint_config.url is None:
|
|
51
|
+
structlogger.error(
|
|
52
|
+
"http.parse.text",
|
|
53
|
+
text=copy.deepcopy(text),
|
|
54
|
+
event_info="No rasa NLU server specified!",
|
|
55
|
+
)
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
params = {
|
|
59
|
+
"token": self.endpoint_config.token,
|
|
60
|
+
"text": text,
|
|
61
|
+
"message_id": message_id,
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if self.endpoint_config.url.endswith("/"):
|
|
65
|
+
url = self.endpoint_config.url + "model/parse"
|
|
66
|
+
else:
|
|
67
|
+
url = self.endpoint_config.url + "/model/parse"
|
|
68
|
+
|
|
69
|
+
# noinspection PyBroadException
|
|
70
|
+
try:
|
|
71
|
+
async with self.session.post(url, json=params) as resp:
|
|
72
|
+
if resp.status == 200:
|
|
73
|
+
return await resp.json()
|
|
74
|
+
else:
|
|
75
|
+
response_text = await resp.text()
|
|
76
|
+
structlogger.error(
|
|
77
|
+
"http.parse.text.failure",
|
|
78
|
+
text=copy.deepcopy(text),
|
|
79
|
+
response_text=copy.deepcopy(response_text),
|
|
80
|
+
)
|
|
81
|
+
return None
|
|
82
|
+
except Exception: # skipcq: PYL-W0703
|
|
83
|
+
# need to catch all possible exceptions when doing http requests
|
|
84
|
+
# (timeouts, value errors, parser errors, ...)
|
|
85
|
+
structlogger.exception(
|
|
86
|
+
"http.parse.text.exception",
|
|
87
|
+
text=copy.deepcopy(text),
|
|
88
|
+
)
|
|
89
|
+
return None
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from typing import TYPE_CHECKING, List, Optional, Text, Any, Dict
|
|
3
|
+
|
|
4
|
+
import structlog
|
|
5
|
+
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
|
6
|
+
from langchain_community.document_loaders.text import TextLoader
|
|
7
|
+
from langchain_community.document_loaders.directory import DirectoryLoader
|
|
8
|
+
from langchain_community.vectorstores.faiss import FAISS
|
|
9
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
10
|
+
|
|
11
|
+
from rasa.core.information_retrieval import (
|
|
12
|
+
SearchResultList,
|
|
13
|
+
InformationRetrieval,
|
|
14
|
+
InformationRetrievalException,
|
|
15
|
+
)
|
|
16
|
+
from rasa.utils.ml_utils import persist_faiss_vector_store
|
|
17
|
+
|
|
18
|
+
if TYPE_CHECKING:
|
|
19
|
+
from langchain.schema import Document
|
|
20
|
+
from langchain.schema.embeddings import Embeddings
|
|
21
|
+
|
|
22
|
+
logger = structlog.get_logger()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class FAISS_Store(InformationRetrieval):
|
|
26
|
+
"""FAISS Store implementation."""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
embeddings: "Embeddings",
|
|
31
|
+
index_path: str,
|
|
32
|
+
docs_folder: Optional[str],
|
|
33
|
+
create_index: Optional[bool] = False,
|
|
34
|
+
):
|
|
35
|
+
"""Initializes the FAISS Store."""
|
|
36
|
+
self.chunk_size = 1000
|
|
37
|
+
self.chunk_overlap = 20
|
|
38
|
+
|
|
39
|
+
path = Path(index_path) / "documents_faiss"
|
|
40
|
+
if create_index:
|
|
41
|
+
logger.info(
|
|
42
|
+
"information_retrieval.faiss_store.create_index", path=path.absolute()
|
|
43
|
+
)
|
|
44
|
+
self.index = self._create_document_index(docs_folder, embeddings)
|
|
45
|
+
self._persist(path)
|
|
46
|
+
else:
|
|
47
|
+
logger.info(
|
|
48
|
+
"information_retrieval.faiss_store.load_index", path=path.absolute()
|
|
49
|
+
)
|
|
50
|
+
self.index = FAISS.load_local(
|
|
51
|
+
str(path), embeddings, allow_dangerous_deserialization=True
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
@staticmethod
|
|
55
|
+
def load_documents(docs_folder: str) -> List["Document"]:
|
|
56
|
+
"""Loads documents from a given folder.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
docs_folder: The folder containing the documents.
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
the list of documents
|
|
63
|
+
"""
|
|
64
|
+
logger.info(
|
|
65
|
+
"information_retrieval.faiss_store.load_documents",
|
|
66
|
+
docs_folder=Path(docs_folder).absolute(),
|
|
67
|
+
)
|
|
68
|
+
loader = DirectoryLoader(
|
|
69
|
+
docs_folder, glob="**/*.txt", loader_cls=TextLoader, show_progress=True
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
return loader.load()
|
|
73
|
+
|
|
74
|
+
def _create_document_index(
|
|
75
|
+
self, docs_folder: Optional[str], embedding: "Embeddings"
|
|
76
|
+
) -> FAISS:
|
|
77
|
+
"""Creates a document index from the documents in the given folder.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
docs_folder: The folder containing the documents.
|
|
81
|
+
embedding: The embedding to use.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
The document index.
|
|
85
|
+
"""
|
|
86
|
+
if not docs_folder:
|
|
87
|
+
raise ValueError("parameter `docs_folder` needs to be specified")
|
|
88
|
+
|
|
89
|
+
docs = self.load_documents(docs_folder)
|
|
90
|
+
splitter = RecursiveCharacterTextSplitter(
|
|
91
|
+
chunk_size=self.chunk_size,
|
|
92
|
+
chunk_overlap=self.chunk_overlap,
|
|
93
|
+
length_function=len,
|
|
94
|
+
)
|
|
95
|
+
doc_chunks = splitter.split_documents(docs)
|
|
96
|
+
|
|
97
|
+
logger.info(
|
|
98
|
+
"information_retrieval.faiss_store._create_document_index",
|
|
99
|
+
len_chunks=len(doc_chunks),
|
|
100
|
+
)
|
|
101
|
+
if doc_chunks:
|
|
102
|
+
texts = [chunk.page_content for chunk in doc_chunks]
|
|
103
|
+
metadatas = [chunk.metadata for chunk in doc_chunks]
|
|
104
|
+
return FAISS.from_texts(texts, embedding, metadatas=metadatas, ids=None)
|
|
105
|
+
else:
|
|
106
|
+
raise ValueError(f"No documents found at '{docs_folder}'.")
|
|
107
|
+
|
|
108
|
+
def _persist(self, path: Path) -> None:
|
|
109
|
+
persist_faiss_vector_store(path, self.index)
|
|
110
|
+
|
|
111
|
+
def connect(self, config: EndpointConfig) -> None:
|
|
112
|
+
"""Faiss does not need to connect to a server."""
|
|
113
|
+
pass
|
|
114
|
+
|
|
115
|
+
async def search(
|
|
116
|
+
self, query: Text, tracker_state: Dict[str, Any], threshold: float = 0.0
|
|
117
|
+
) -> SearchResultList:
|
|
118
|
+
logger.debug("information_retrieval.faiss_store.search", query=query)
|
|
119
|
+
try:
|
|
120
|
+
documents = await self.index.as_retriever().ainvoke(query)
|
|
121
|
+
except Exception as exc:
|
|
122
|
+
raise InformationRetrievalException from exc
|
|
123
|
+
|
|
124
|
+
return SearchResultList.from_document_list(documents)
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import TYPE_CHECKING, List, Text, Any, Optional
|
|
5
|
+
|
|
6
|
+
import structlog
|
|
7
|
+
|
|
8
|
+
from rasa.shared.exceptions import RasaException
|
|
9
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
10
|
+
import importlib
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from langchain.schema import Document
|
|
14
|
+
from langchain.schema.embeddings import Embeddings
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
logger = structlog.get_logger()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class SearchResult:
|
|
22
|
+
"""A search result object.
|
|
23
|
+
|
|
24
|
+
Attributes:
|
|
25
|
+
text: The text content of the retrieved document result.
|
|
26
|
+
metadata: The metadata associated with the document result.
|
|
27
|
+
score: The score of the search result.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
text: str
|
|
31
|
+
metadata: dict
|
|
32
|
+
score: Optional[float] = None
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def from_document(cls, document: Document) -> "SearchResult":
|
|
36
|
+
"""Construct a SearchResult object from Langchain Document object."""
|
|
37
|
+
return cls(text=document.page_content, metadata=document.metadata)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass
|
|
41
|
+
class SearchResultList:
|
|
42
|
+
results: List[SearchResult]
|
|
43
|
+
metadata: dict
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def from_document_list(cls, documents: List["Document"]) -> "SearchResultList":
|
|
47
|
+
"""
|
|
48
|
+
Convert a list of Langchain Documents to a SearchResultList object.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
documents: List of Langchain Documents.
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
SearchResultList object.
|
|
55
|
+
"""
|
|
56
|
+
return cls(
|
|
57
|
+
results=[SearchResult.from_document(doc) for doc in documents],
|
|
58
|
+
metadata={"total_results": len(documents)},
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class InformationRetrievalException(RasaException):
|
|
63
|
+
"""Base class for exceptions raised by InformationRetrieval operations."""
|
|
64
|
+
|
|
65
|
+
def __init__(self) -> None:
|
|
66
|
+
self.base_message = "An error occurred while searching for documents: "
|
|
67
|
+
|
|
68
|
+
def __str__(self) -> str:
|
|
69
|
+
return self.base_message + f"{self.__cause__}"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class InformationRetrieval:
|
|
73
|
+
"""Base class for any InformationRetrieval implementation."""
|
|
74
|
+
|
|
75
|
+
def __init__(self, embeddings: "Embeddings") -> None:
|
|
76
|
+
self.embeddings = embeddings
|
|
77
|
+
|
|
78
|
+
def connect(
|
|
79
|
+
self,
|
|
80
|
+
config: EndpointConfig,
|
|
81
|
+
) -> None:
|
|
82
|
+
"""Connect to the InformationRetrieval system."""
|
|
83
|
+
raise NotImplementedError(
|
|
84
|
+
"InformationRetrieval must implement the `connect` method."
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
async def search(
|
|
88
|
+
self,
|
|
89
|
+
query: Text,
|
|
90
|
+
tracker_state: dict[str, Any],
|
|
91
|
+
threshold: float = 0.0,
|
|
92
|
+
) -> SearchResultList:
|
|
93
|
+
"""Search for a document in the InformationRetrieval system."""
|
|
94
|
+
raise NotImplementedError(
|
|
95
|
+
"InformationRetrieval must implement the `search` method."
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def create_from_endpoint_config(
|
|
100
|
+
config_type: Text,
|
|
101
|
+
embeddings: "Embeddings",
|
|
102
|
+
) -> InformationRetrieval:
|
|
103
|
+
"""Instantiate a vector store based on its configuration."""
|
|
104
|
+
logger.debug(
|
|
105
|
+
"information_retrieval.create_from_endpoint_config", config_type=config_type
|
|
106
|
+
)
|
|
107
|
+
if config_type == "milvus":
|
|
108
|
+
from rasa.core.information_retrieval.milvus import Milvus_Store
|
|
109
|
+
|
|
110
|
+
return Milvus_Store(embeddings=embeddings)
|
|
111
|
+
elif config_type == "qdrant":
|
|
112
|
+
from rasa.core.information_retrieval.qdrant import Qdrant_Store
|
|
113
|
+
|
|
114
|
+
return Qdrant_Store(embeddings=embeddings)
|
|
115
|
+
else:
|
|
116
|
+
# Import the module dynamically
|
|
117
|
+
try:
|
|
118
|
+
module_name, class_name = config_type.rsplit(".", 1)
|
|
119
|
+
module = importlib.import_module(module_name)
|
|
120
|
+
except ValueError:
|
|
121
|
+
logger.error(
|
|
122
|
+
"information_retrieval.create_from_endpoint_config.invalid_config",
|
|
123
|
+
config_type=config_type,
|
|
124
|
+
)
|
|
125
|
+
raise ValueError(
|
|
126
|
+
f"Invalid configuration for vector store: '{config_type}'. "
|
|
127
|
+
f"Expected a module path and a class name separated by a dot."
|
|
128
|
+
)
|
|
129
|
+
except ModuleNotFoundError:
|
|
130
|
+
logger.error(
|
|
131
|
+
"information_retrieval.create_from_endpoint_config.unknown_type",
|
|
132
|
+
config_type=config_type,
|
|
133
|
+
)
|
|
134
|
+
raise ImportError(f"Cannot retrieve class from path {config_type}.")
|
|
135
|
+
|
|
136
|
+
external_class = getattr(module, class_name)
|
|
137
|
+
return external_class(embeddings=embeddings)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from typing import Text, Any, Dict
|
|
2
|
+
|
|
3
|
+
import structlog
|
|
4
|
+
from langchain_community.vectorstores.milvus import Milvus
|
|
5
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
6
|
+
|
|
7
|
+
from rasa.core.information_retrieval import (
|
|
8
|
+
SearchResultList,
|
|
9
|
+
InformationRetrieval,
|
|
10
|
+
InformationRetrievalException,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
logger = structlog.get_logger()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Milvus_Store(InformationRetrieval):
|
|
17
|
+
"""Milvus Store implementation."""
|
|
18
|
+
|
|
19
|
+
def connect(self, config: EndpointConfig) -> None:
|
|
20
|
+
"""Connect to the Milvus system."""
|
|
21
|
+
params = config.kwargs
|
|
22
|
+
self.client = Milvus(
|
|
23
|
+
self.embeddings,
|
|
24
|
+
connection_args={
|
|
25
|
+
"host": str(params.get("host")),
|
|
26
|
+
"port": str(params.get("port")),
|
|
27
|
+
"user": str(params.get("user")),
|
|
28
|
+
"password": str(params.get("password")),
|
|
29
|
+
},
|
|
30
|
+
collection_name=str(params.get("collection")),
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
async def search(
|
|
34
|
+
self, query: Text, tracker_state: Dict[str, Any], threshold: float = 0.0
|
|
35
|
+
) -> SearchResultList:
|
|
36
|
+
"""Search for documents in the Milvus store.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
query: The query to search for.
|
|
40
|
+
threshold: minimum similarity score to consider a document a match.
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
A list of documents that match the query.
|
|
44
|
+
"""
|
|
45
|
+
logger.debug("information_retrieval.milvus_store.search", query=query)
|
|
46
|
+
try:
|
|
47
|
+
hits = await self.client.asimilarity_search_with_score(query, k=4)
|
|
48
|
+
except Exception as exc:
|
|
49
|
+
raise InformationRetrievalException from exc
|
|
50
|
+
|
|
51
|
+
scores = [score for _, score in hits]
|
|
52
|
+
logger.debug(
|
|
53
|
+
"information_retrieval.milvus_store.search_results_before_threshold",
|
|
54
|
+
scores=scores,
|
|
55
|
+
)
|
|
56
|
+
# Milvus uses Euclidean distance metric by default
|
|
57
|
+
# so the lower the score, the better the match.
|
|
58
|
+
filtered_hits = [doc for doc, score in hits if score <= threshold]
|
|
59
|
+
return SearchResultList.from_document_list(filtered_hits)
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
from typing import Text, Any, Dict
|
|
2
|
+
|
|
3
|
+
import structlog
|
|
4
|
+
from langchain_community.vectorstores.qdrant import Qdrant
|
|
5
|
+
from pydantic import ValidationError
|
|
6
|
+
from qdrant_client import QdrantClient
|
|
7
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
8
|
+
|
|
9
|
+
from rasa.core.information_retrieval import (
|
|
10
|
+
SearchResultList,
|
|
11
|
+
InformationRetrieval,
|
|
12
|
+
InformationRetrievalException,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
logger = structlog.get_logger()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class PayloadNotFoundException(InformationRetrievalException):
|
|
19
|
+
"""Exception raised for errors in missing payloads."""
|
|
20
|
+
|
|
21
|
+
def __init__(self, message: str) -> None:
|
|
22
|
+
self.message = message
|
|
23
|
+
super().__init__()
|
|
24
|
+
|
|
25
|
+
def __str__(self) -> str:
|
|
26
|
+
return self.base_message + self.message + f"{self.__cause__}"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class QdrantInformationRetrievalException(InformationRetrievalException):
|
|
30
|
+
"""Exception raised for errors in the Qdrant vector store."""
|
|
31
|
+
|
|
32
|
+
def __init__(self, message: str) -> None:
|
|
33
|
+
self.message = message
|
|
34
|
+
super().__init__()
|
|
35
|
+
|
|
36
|
+
def __str__(self) -> str:
|
|
37
|
+
return self.base_message + self.message + f"{self.__cause__}"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class Qdrant_Store(InformationRetrieval):
|
|
41
|
+
def connect(
|
|
42
|
+
self,
|
|
43
|
+
config: EndpointConfig,
|
|
44
|
+
) -> None:
|
|
45
|
+
"""Connect to the Qdrant system."""
|
|
46
|
+
params = config.kwargs
|
|
47
|
+
self.client = Qdrant(
|
|
48
|
+
client=QdrantClient(
|
|
49
|
+
location=params.get("location"),
|
|
50
|
+
url=params.get("url"),
|
|
51
|
+
port=int(params.get("port", 6333)),
|
|
52
|
+
grpc_port=int(params.get("grpc_port", 6334)),
|
|
53
|
+
prefer_grpc=bool(params.get("prefer_grpc", False)),
|
|
54
|
+
https=bool(params.get("https")),
|
|
55
|
+
api_key=params.get("api_key"),
|
|
56
|
+
prefix=params.get("prefix"),
|
|
57
|
+
timeout=int(params.get("timeout", 5)),
|
|
58
|
+
host=params.get("host"),
|
|
59
|
+
path=params.get("path"),
|
|
60
|
+
),
|
|
61
|
+
collection_name=str(params.get("collection")),
|
|
62
|
+
embeddings=self.embeddings,
|
|
63
|
+
content_payload_key=params.get("content_payload_key", "text"),
|
|
64
|
+
metadata_payload_key=params.get("metadata_payload_key", "metadata"),
|
|
65
|
+
vector_name=params.get("vector_name", None),
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
async def search(
|
|
69
|
+
self, query: Text, tracker_state: Dict[str, Any], threshold: float = 0.0
|
|
70
|
+
) -> SearchResultList:
|
|
71
|
+
"""Search for a document in the Qdrant vector store.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
query: The query to search for.
|
|
75
|
+
threshold: minimum similarity score to consider a document a match.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
A list of documents that match the query.
|
|
79
|
+
"""
|
|
80
|
+
logger.debug("information_retrieval.qdrant_store.search", query=query)
|
|
81
|
+
try:
|
|
82
|
+
hits = await self.client.asimilarity_search(
|
|
83
|
+
query, k=4, score_threshold=threshold
|
|
84
|
+
)
|
|
85
|
+
except ValidationError as e:
|
|
86
|
+
raise PayloadNotFoundException(
|
|
87
|
+
"Payload not found in the Qdrant response. Please make sure "
|
|
88
|
+
"the `content_payload_key`and `metadata_payload_key` are correct in "
|
|
89
|
+
f"the Qdrant configuration. Error: {e}"
|
|
90
|
+
""
|
|
91
|
+
) from e
|
|
92
|
+
except Exception as e:
|
|
93
|
+
raise QdrantInformationRetrievalException(
|
|
94
|
+
f"Failed to search the Qdrant vector store. Encountered error: {e}"
|
|
95
|
+
) from e
|
|
96
|
+
return SearchResultList.from_document_list(hits)
|
rasa/core/jobs.py
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import logging
|
|
3
|
+
|
|
4
|
+
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
5
|
+
from pytz import UnknownTimeZoneError, utc
|
|
6
|
+
import rasa.shared.utils.io
|
|
7
|
+
|
|
8
|
+
__scheduler = None
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
async def scheduler() -> AsyncIOScheduler:
|
|
14
|
+
"""Thread global scheduler to handle all recurring tasks.
|
|
15
|
+
|
|
16
|
+
If no scheduler exists yet, this will instantiate one.
|
|
17
|
+
"""
|
|
18
|
+
global __scheduler
|
|
19
|
+
|
|
20
|
+
if not __scheduler:
|
|
21
|
+
try:
|
|
22
|
+
__scheduler = AsyncIOScheduler(event_loop=asyncio.get_event_loop())
|
|
23
|
+
__scheduler.start()
|
|
24
|
+
return __scheduler
|
|
25
|
+
except UnknownTimeZoneError:
|
|
26
|
+
rasa.shared.utils.io.raise_warning(
|
|
27
|
+
"apscheduler could not find a timezone and is "
|
|
28
|
+
"defaulting to utc. This is probably because "
|
|
29
|
+
"your system timezone is not set. "
|
|
30
|
+
'Set it with e.g. echo "Europe/Berlin" > '
|
|
31
|
+
"/etc/timezone"
|
|
32
|
+
)
|
|
33
|
+
__scheduler = AsyncIOScheduler(
|
|
34
|
+
event_loop=asyncio.get_event_loop(), timezone=utc
|
|
35
|
+
)
|
|
36
|
+
__scheduler.start()
|
|
37
|
+
return __scheduler
|
|
38
|
+
else:
|
|
39
|
+
# scheduler already created, make sure it is running on
|
|
40
|
+
# the correct loop
|
|
41
|
+
# noinspection PyProtectedMember
|
|
42
|
+
if not __scheduler._eventloop == asyncio.get_event_loop():
|
|
43
|
+
raise RuntimeError(
|
|
44
|
+
"Detected inconsistent loop usage. "
|
|
45
|
+
"Trying to schedule a task on a new event "
|
|
46
|
+
"loop, but scheduler was created with a "
|
|
47
|
+
"different event loop. Make sure there "
|
|
48
|
+
"is only one event loop in use and that the "
|
|
49
|
+
"scheduler is running on that one."
|
|
50
|
+
)
|
|
51
|
+
return __scheduler
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def kill_scheduler() -> None:
|
|
55
|
+
"""Terminate the scheduler if started.
|
|
56
|
+
|
|
57
|
+
Another call to `scheduler` will create a new scheduler.
|
|
58
|
+
"""
|
|
59
|
+
global __scheduler
|
|
60
|
+
|
|
61
|
+
if __scheduler:
|
|
62
|
+
__scheduler.shutdown()
|
|
63
|
+
__scheduler = None
|