rasa-pro 3.11.3__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/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 +80 -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-632a63ec.js +1 -0
- rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-081e0df4.js +10 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-3df0afc2.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-8c5ed31e.js +2 -0
- rasa/core/channels/inspector/dist/assets/createText-62fc7601-89c73b31.js +7 -0
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-4fc48c3e.js +4 -0
- rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-907e0440.js +51 -0
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-9ec53a3c.js +6 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-41da787a.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-8bea338b.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-ce370633.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-90a36523.js +266 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-41e1aa3f.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-e6f2af62.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
- rasa/core/channels/inspector/dist/assets/index-e793d777.js +1317 -0
- rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-8ceba4db.js +7 -0
- rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
- rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-960d3809.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-498807d8.js +1 -0
- rasa/core/channels/inspector/dist/assets/line-eeccc4e2.js +1 -0
- rasa/core/channels/inspector/dist/assets/linear-8a078617.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-396d17dd.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-dc9b5e1b.js +35 -0
- rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-a08cba6d.js +7 -0
- rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-87242b9e.js +52 -0
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-53f6f391.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-715c9c20.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-2e8fb31f.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-7e2d2aa0.js +1 -0
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-4420cea6.js +110 -0
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-28676cf4.js +159 -0
- rasa/core/channels/inspector/dist/assets/styles-9c745c82-cef936a6.js +207 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-151251e9.js +1 -0
- rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-0d39bdb2.js +61 -0
- rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-a03fa445.js +7 -0
- rasa/core/channels/inspector/dist/index.html +44 -0
- rasa/core/channels/inspector/index.html +42 -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 +217 -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 +301 -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 +343 -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 +893 -0
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +258 -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 +478 -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/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 +568 -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 +1190 -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 +80 -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 +1258 -0
- rasa/engine/recipes/graph_recipe.py +78 -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 +112 -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 +595 -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 +1624 -0
- rasa/shared/__init__.py +0 -0
- rasa/shared/constants.py +310 -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 +49 -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 +183 -0
- rasa/shared/providers/_configs/client_config.py +57 -0
- rasa/shared/providers/_configs/default_litellm_client_config.py +130 -0
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +234 -0
- rasa/shared/providers/_configs/litellm_router_client_config.py +220 -0
- rasa/shared/providers/_configs/model_group_config.py +167 -0
- rasa/shared/providers/_configs/openai_client_config.py +175 -0
- rasa/shared/providers/_configs/rasa_llm_client_config.py +73 -0
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +177 -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/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 +310 -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 +135 -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 +263 -0
- rasa/shared/providers/llm/azure_openai_llm_client.py +359 -0
- rasa/shared/providers/llm/default_litellm_llm_client.py +108 -0
- rasa/shared/providers/llm/litellm_router_llm_client.py +182 -0
- rasa/shared/providers/llm/llm_client.py +76 -0
- rasa/shared/providers/llm/llm_response.py +50 -0
- rasa/shared/providers/llm/openai_llm_client.py +155 -0
- rasa/shared/providers/llm/rasa_llm_client.py +112 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +269 -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 +183 -0
- rasa/shared/providers/router/router_client.py +73 -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 +760 -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 +1067 -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 +549 -0
- rasa/telemetry.py +1869 -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 +764 -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 +1653 -0
- rasa/version.py +3 -0
- rasa_pro-3.11.3.dist-info/METADATA +198 -0
- rasa_pro-3.11.3.dist-info/NOTICE +5 -0
- rasa_pro-3.11.3.dist-info/RECORD +779 -0
- rasa_pro-3.11.3.dist-info/WHEEL +4 -0
- rasa_pro-3.11.3.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
from dataclasses import asdict, dataclass, field
|
|
2
|
+
from typing import Any, Dict, Optional
|
|
3
|
+
|
|
4
|
+
import structlog
|
|
5
|
+
|
|
6
|
+
from rasa.shared.constants import (
|
|
7
|
+
MODEL_CONFIG_KEY,
|
|
8
|
+
MODEL_NAME_CONFIG_KEY,
|
|
9
|
+
OPENAI_API_BASE_CONFIG_KEY,
|
|
10
|
+
API_BASE_CONFIG_KEY,
|
|
11
|
+
OPENAI_API_TYPE_CONFIG_KEY,
|
|
12
|
+
API_TYPE_CONFIG_KEY,
|
|
13
|
+
OPENAI_API_VERSION_CONFIG_KEY,
|
|
14
|
+
API_VERSION_CONFIG_KEY,
|
|
15
|
+
RASA_TYPE_CONFIG_KEY,
|
|
16
|
+
LANGCHAIN_TYPE_CONFIG_KEY,
|
|
17
|
+
STREAM_CONFIG_KEY,
|
|
18
|
+
N_REPHRASES_CONFIG_KEY,
|
|
19
|
+
REQUEST_TIMEOUT_CONFIG_KEY,
|
|
20
|
+
TIMEOUT_CONFIG_KEY,
|
|
21
|
+
PROVIDER_CONFIG_KEY,
|
|
22
|
+
OPENAI_API_TYPE,
|
|
23
|
+
OPENAI_PROVIDER,
|
|
24
|
+
)
|
|
25
|
+
from rasa.shared.providers._configs.utils import (
|
|
26
|
+
resolve_aliases,
|
|
27
|
+
validate_required_keys,
|
|
28
|
+
raise_deprecation_warnings,
|
|
29
|
+
validate_forbidden_keys,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
structlogger = structlog.get_logger()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING = {
|
|
36
|
+
# Model name aliases
|
|
37
|
+
MODEL_NAME_CONFIG_KEY: MODEL_CONFIG_KEY,
|
|
38
|
+
# Provider aliases
|
|
39
|
+
RASA_TYPE_CONFIG_KEY: PROVIDER_CONFIG_KEY,
|
|
40
|
+
LANGCHAIN_TYPE_CONFIG_KEY: PROVIDER_CONFIG_KEY,
|
|
41
|
+
# API type aliases
|
|
42
|
+
OPENAI_API_TYPE_CONFIG_KEY: API_TYPE_CONFIG_KEY,
|
|
43
|
+
# API base aliases
|
|
44
|
+
OPENAI_API_BASE_CONFIG_KEY: API_BASE_CONFIG_KEY,
|
|
45
|
+
# API version aliases
|
|
46
|
+
OPENAI_API_VERSION_CONFIG_KEY: API_VERSION_CONFIG_KEY,
|
|
47
|
+
# Timeout aliases
|
|
48
|
+
REQUEST_TIMEOUT_CONFIG_KEY: TIMEOUT_CONFIG_KEY,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
REQUIRED_KEYS = [MODEL_CONFIG_KEY]
|
|
52
|
+
|
|
53
|
+
FORBIDDEN_KEYS = [
|
|
54
|
+
STREAM_CONFIG_KEY,
|
|
55
|
+
N_REPHRASES_CONFIG_KEY,
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@dataclass
|
|
60
|
+
class OpenAIClientConfig:
|
|
61
|
+
"""Parses configuration for Azure OpenAI client, resolves aliases and
|
|
62
|
+
raises deprecation warnings.
|
|
63
|
+
|
|
64
|
+
Raises:
|
|
65
|
+
ValueError: Raised in cases of invalid configuration:
|
|
66
|
+
- If any of the required configuration keys are missing.
|
|
67
|
+
- If `api_type` has a value different from `openai`.
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
model: str
|
|
71
|
+
api_base: Optional[str]
|
|
72
|
+
api_version: Optional[str]
|
|
73
|
+
|
|
74
|
+
# API Type is not actually used by LiteLLM backend, but we define
|
|
75
|
+
# it here for backward compatibility.
|
|
76
|
+
api_type: str = OPENAI_API_TYPE
|
|
77
|
+
|
|
78
|
+
# Provider is not used by LiteLLM backend, but we define
|
|
79
|
+
# it here since it's used as switch between different
|
|
80
|
+
# clients
|
|
81
|
+
provider: str = OPENAI_PROVIDER
|
|
82
|
+
|
|
83
|
+
extra_parameters: dict = field(default_factory=dict)
|
|
84
|
+
|
|
85
|
+
def __post_init__(self) -> None:
|
|
86
|
+
# In case of OpenAI hosting, it doesn't make sense
|
|
87
|
+
# for API type to be anything else that 'openai'
|
|
88
|
+
if self.api_type != OPENAI_API_TYPE:
|
|
89
|
+
message = f"API type must be set to '{OPENAI_API_TYPE}'."
|
|
90
|
+
structlogger.error(
|
|
91
|
+
"openai_client_config.validation_error",
|
|
92
|
+
message=message,
|
|
93
|
+
api_type=self.api_type,
|
|
94
|
+
)
|
|
95
|
+
raise ValueError(message)
|
|
96
|
+
if self.provider != OPENAI_PROVIDER:
|
|
97
|
+
message = f"Provider must be set to '{OPENAI_PROVIDER}'."
|
|
98
|
+
structlogger.error(
|
|
99
|
+
"openai_client_config.validation_error",
|
|
100
|
+
message=message,
|
|
101
|
+
provider=self.provider,
|
|
102
|
+
)
|
|
103
|
+
raise ValueError(message)
|
|
104
|
+
if self.model is None:
|
|
105
|
+
message = "Model cannot be set to None."
|
|
106
|
+
structlogger.error(
|
|
107
|
+
"openai_client_config.validation_error",
|
|
108
|
+
message=message,
|
|
109
|
+
model=self.model,
|
|
110
|
+
)
|
|
111
|
+
raise ValueError(message)
|
|
112
|
+
|
|
113
|
+
@classmethod
|
|
114
|
+
def from_dict(cls, config: dict) -> "OpenAIClientConfig":
|
|
115
|
+
"""
|
|
116
|
+
Initializes a dataclass from the passed config.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
config: (dict) The config from which to initialize.
|
|
120
|
+
|
|
121
|
+
Raises:
|
|
122
|
+
ValueError: Config is missing required keys.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
AzureOpenAIClientConfig
|
|
126
|
+
"""
|
|
127
|
+
# Check for deprecated keys
|
|
128
|
+
raise_deprecation_warnings(config, DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING)
|
|
129
|
+
# Resolve any potential aliases
|
|
130
|
+
config = cls.resolve_config_aliases(config)
|
|
131
|
+
# Validate that the required keys are present
|
|
132
|
+
validate_required_keys(config, REQUIRED_KEYS)
|
|
133
|
+
# Validate that the forbidden keys are not present
|
|
134
|
+
validate_forbidden_keys(config, FORBIDDEN_KEYS)
|
|
135
|
+
this = OpenAIClientConfig(
|
|
136
|
+
# Required parameters
|
|
137
|
+
model=config.pop(MODEL_CONFIG_KEY),
|
|
138
|
+
# Pop the 'provider' key. Currently, it's *optional* because of
|
|
139
|
+
# backward compatibility with older versions.
|
|
140
|
+
provider=config.pop(PROVIDER_CONFIG_KEY, OPENAI_PROVIDER),
|
|
141
|
+
# Optional parameters
|
|
142
|
+
api_base=config.pop(API_BASE_CONFIG_KEY, None),
|
|
143
|
+
api_version=config.pop(API_VERSION_CONFIG_KEY, None),
|
|
144
|
+
api_type=config.pop(API_TYPE_CONFIG_KEY, OPENAI_API_TYPE),
|
|
145
|
+
# The rest of parameters (e.g. model parameters) are considered
|
|
146
|
+
# as extra parameters (this also includes timeout).
|
|
147
|
+
extra_parameters=config,
|
|
148
|
+
)
|
|
149
|
+
return this
|
|
150
|
+
|
|
151
|
+
def to_dict(self) -> dict:
|
|
152
|
+
"""Converts the config instance into a dictionary."""
|
|
153
|
+
d = asdict(self)
|
|
154
|
+
# Extra parameters should also be on the top level
|
|
155
|
+
d.pop("extra_parameters", None)
|
|
156
|
+
d.update(self.extra_parameters)
|
|
157
|
+
return d
|
|
158
|
+
|
|
159
|
+
@staticmethod
|
|
160
|
+
def resolve_config_aliases(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
161
|
+
return resolve_aliases(config, DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def is_openai_config(config: dict) -> bool:
|
|
165
|
+
"""Check whether the configuration is meant to configure
|
|
166
|
+
an OpenAI client.
|
|
167
|
+
"""
|
|
168
|
+
# Process the config to handle all the aliases
|
|
169
|
+
config = OpenAIClientConfig.resolve_config_aliases(config)
|
|
170
|
+
|
|
171
|
+
# Case: Configuration contains `provider: openai`
|
|
172
|
+
if config.get(PROVIDER_CONFIG_KEY) == OPENAI_PROVIDER:
|
|
173
|
+
return True
|
|
174
|
+
|
|
175
|
+
return False
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from dataclasses import asdict, dataclass, field
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
import structlog
|
|
5
|
+
|
|
6
|
+
from rasa.shared.constants import (
|
|
7
|
+
MODEL_CONFIG_KEY,
|
|
8
|
+
RASA_PROVIDER,
|
|
9
|
+
PROVIDER_CONFIG_KEY,
|
|
10
|
+
API_BASE_CONFIG_KEY,
|
|
11
|
+
)
|
|
12
|
+
from rasa.shared.providers._configs.utils import (
|
|
13
|
+
validate_required_keys,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
REQUIRED_KEYS = [MODEL_CONFIG_KEY, PROVIDER_CONFIG_KEY, API_BASE_CONFIG_KEY]
|
|
17
|
+
|
|
18
|
+
structlogger = structlog.get_logger()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass
|
|
22
|
+
class RasaLLMClientConfig:
|
|
23
|
+
"""Parses configuration for a Rasa Hosted LiteLLM client,
|
|
24
|
+
checks required keys present.
|
|
25
|
+
|
|
26
|
+
Raises:
|
|
27
|
+
ValueError: Raised in cases of invalid configuration:
|
|
28
|
+
- If any of the required configuration keys are missing.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
model: Optional[str]
|
|
32
|
+
api_base: Optional[str]
|
|
33
|
+
# Provider is not used by LiteLLM backend, but we define it here since it's
|
|
34
|
+
# used as switch between different clients.
|
|
35
|
+
provider: str = RASA_PROVIDER
|
|
36
|
+
|
|
37
|
+
extra_parameters: dict = field(default_factory=dict)
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def from_dict(cls, config: dict) -> "RasaLLMClientConfig":
|
|
41
|
+
"""
|
|
42
|
+
Initializes a dataclass from the passed config.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
config: (dict) The config from which to initialize.
|
|
46
|
+
|
|
47
|
+
Raises:
|
|
48
|
+
ValueError: Raised in cases of invalid configuration:
|
|
49
|
+
- If any of the required configuration keys are missing.
|
|
50
|
+
- If `api_type` has a value different from `azure`.
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
RasaLLMClientConfig
|
|
54
|
+
"""
|
|
55
|
+
# Validate that required keys are set
|
|
56
|
+
validate_required_keys(config, REQUIRED_KEYS)
|
|
57
|
+
|
|
58
|
+
extra_parameters = {k: v for k, v in config.items() if k not in REQUIRED_KEYS}
|
|
59
|
+
|
|
60
|
+
return cls(
|
|
61
|
+
model=config.get(MODEL_CONFIG_KEY),
|
|
62
|
+
api_base=config.get(API_BASE_CONFIG_KEY),
|
|
63
|
+
provider=config.get(PROVIDER_CONFIG_KEY, RASA_PROVIDER),
|
|
64
|
+
extra_parameters=extra_parameters,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
def to_dict(self) -> dict:
|
|
68
|
+
"""Converts the config instance into a dictionary."""
|
|
69
|
+
d = asdict(self)
|
|
70
|
+
# Extra parameters should also be on the top level
|
|
71
|
+
d.pop("extra_parameters", None)
|
|
72
|
+
d.update(self.extra_parameters)
|
|
73
|
+
return d
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
from dataclasses import asdict, dataclass, field
|
|
2
|
+
from typing import Any, Dict, Optional
|
|
3
|
+
|
|
4
|
+
import structlog
|
|
5
|
+
|
|
6
|
+
from rasa.shared.constants import (
|
|
7
|
+
MODEL_CONFIG_KEY,
|
|
8
|
+
MODEL_NAME_CONFIG_KEY,
|
|
9
|
+
OPENAI_API_BASE_CONFIG_KEY,
|
|
10
|
+
API_BASE_CONFIG_KEY,
|
|
11
|
+
OPENAI_API_TYPE_CONFIG_KEY,
|
|
12
|
+
API_TYPE_CONFIG_KEY,
|
|
13
|
+
OPENAI_API_VERSION_CONFIG_KEY,
|
|
14
|
+
API_VERSION_CONFIG_KEY,
|
|
15
|
+
RASA_TYPE_CONFIG_KEY,
|
|
16
|
+
LANGCHAIN_TYPE_CONFIG_KEY,
|
|
17
|
+
STREAM_CONFIG_KEY,
|
|
18
|
+
N_REPHRASES_CONFIG_KEY,
|
|
19
|
+
REQUEST_TIMEOUT_CONFIG_KEY,
|
|
20
|
+
TIMEOUT_CONFIG_KEY,
|
|
21
|
+
PROVIDER_CONFIG_KEY,
|
|
22
|
+
OPENAI_PROVIDER,
|
|
23
|
+
SELF_HOSTED_PROVIDER,
|
|
24
|
+
USE_CHAT_COMPLETIONS_ENDPOINT_CONFIG_KEY,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
from rasa.shared.providers._configs.utils import (
|
|
28
|
+
raise_deprecation_warnings,
|
|
29
|
+
resolve_aliases,
|
|
30
|
+
validate_forbidden_keys,
|
|
31
|
+
validate_required_keys,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
structlogger = structlog.get_logger()
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING = {
|
|
38
|
+
# Model name aliases
|
|
39
|
+
MODEL_NAME_CONFIG_KEY: MODEL_CONFIG_KEY,
|
|
40
|
+
# Provider aliases
|
|
41
|
+
RASA_TYPE_CONFIG_KEY: PROVIDER_CONFIG_KEY,
|
|
42
|
+
LANGCHAIN_TYPE_CONFIG_KEY: PROVIDER_CONFIG_KEY,
|
|
43
|
+
# API type aliases
|
|
44
|
+
OPENAI_API_TYPE_CONFIG_KEY: API_TYPE_CONFIG_KEY,
|
|
45
|
+
# API base aliases
|
|
46
|
+
OPENAI_API_BASE_CONFIG_KEY: API_BASE_CONFIG_KEY,
|
|
47
|
+
# API version aliases
|
|
48
|
+
OPENAI_API_VERSION_CONFIG_KEY: API_VERSION_CONFIG_KEY,
|
|
49
|
+
# Timeout aliases
|
|
50
|
+
REQUEST_TIMEOUT_CONFIG_KEY: TIMEOUT_CONFIG_KEY,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
REQUIRED_KEYS = [API_BASE_CONFIG_KEY, MODEL_CONFIG_KEY, PROVIDER_CONFIG_KEY]
|
|
54
|
+
|
|
55
|
+
FORBIDDEN_KEYS = [
|
|
56
|
+
STREAM_CONFIG_KEY,
|
|
57
|
+
N_REPHRASES_CONFIG_KEY,
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@dataclass
|
|
62
|
+
class SelfHostedLLMClientConfig:
|
|
63
|
+
"""Parses configuration for Self Hosted LiteLLM client, resolves aliases and
|
|
64
|
+
raises deprecation warnings.
|
|
65
|
+
|
|
66
|
+
Raises:
|
|
67
|
+
ValueError: Raised in cases of invalid configuration:
|
|
68
|
+
- If any of the required configuration keys are missing.
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
model: str
|
|
72
|
+
provider: str
|
|
73
|
+
api_base: str
|
|
74
|
+
api_version: Optional[str] = None
|
|
75
|
+
api_type: Optional[str] = OPENAI_PROVIDER
|
|
76
|
+
use_chat_completions_endpoint: Optional[bool] = True
|
|
77
|
+
extra_parameters: dict = field(default_factory=dict)
|
|
78
|
+
|
|
79
|
+
def __post_init__(self) -> None:
|
|
80
|
+
if self.model is None:
|
|
81
|
+
message = "Model cannot be set to None."
|
|
82
|
+
structlogger.error(
|
|
83
|
+
"self_hosted_llm_client_config.validation_error",
|
|
84
|
+
message=message,
|
|
85
|
+
model=self.model,
|
|
86
|
+
)
|
|
87
|
+
raise ValueError(message)
|
|
88
|
+
if self.provider is None:
|
|
89
|
+
message = "Provider cannot be set to None."
|
|
90
|
+
structlogger.error(
|
|
91
|
+
"self_hosted_llm_client_config.validation_error",
|
|
92
|
+
message=message,
|
|
93
|
+
provider=self.provider,
|
|
94
|
+
)
|
|
95
|
+
raise ValueError(message)
|
|
96
|
+
if self.api_base is None:
|
|
97
|
+
message = "API base cannot be set to None."
|
|
98
|
+
structlogger.error(
|
|
99
|
+
"self_hosted_llm_client_config.validation_error",
|
|
100
|
+
message=message,
|
|
101
|
+
provider=self.provider,
|
|
102
|
+
)
|
|
103
|
+
raise ValueError(message)
|
|
104
|
+
if self.api_type != OPENAI_PROVIDER:
|
|
105
|
+
message = (
|
|
106
|
+
f"Currently supports only {OPENAI_PROVIDER} endpoints. "
|
|
107
|
+
f"API type must be set to '{OPENAI_PROVIDER}'."
|
|
108
|
+
)
|
|
109
|
+
structlogger.error(
|
|
110
|
+
"self_hosted_llm_client_config.validation_error",
|
|
111
|
+
message=message,
|
|
112
|
+
api_type=self.api_type,
|
|
113
|
+
)
|
|
114
|
+
raise ValueError(message)
|
|
115
|
+
|
|
116
|
+
@classmethod
|
|
117
|
+
def from_dict(cls, config: dict) -> "SelfHostedLLMClientConfig":
|
|
118
|
+
"""
|
|
119
|
+
Initializes a dataclass from the passed config.
|
|
120
|
+
|
|
121
|
+
Args:
|
|
122
|
+
config: (dict) The config from which to initialize.
|
|
123
|
+
|
|
124
|
+
Raises:
|
|
125
|
+
ValueError: Config is missing required keys.
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
DefaultLiteLLMClientConfig
|
|
129
|
+
"""
|
|
130
|
+
# Check for deprecated keys
|
|
131
|
+
raise_deprecation_warnings(config, DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING)
|
|
132
|
+
# Resolve any potential aliases
|
|
133
|
+
config = cls.resolve_config_aliases(config)
|
|
134
|
+
# Validate that the required keys are present
|
|
135
|
+
validate_required_keys(config, REQUIRED_KEYS)
|
|
136
|
+
# Validate that the forbidden keys are not present
|
|
137
|
+
validate_forbidden_keys(config, FORBIDDEN_KEYS)
|
|
138
|
+
this = SelfHostedLLMClientConfig(
|
|
139
|
+
# Required parameters
|
|
140
|
+
model=config.pop(MODEL_CONFIG_KEY),
|
|
141
|
+
provider=config.pop(PROVIDER_CONFIG_KEY),
|
|
142
|
+
api_base=config.pop(API_BASE_CONFIG_KEY),
|
|
143
|
+
# Optional parameters
|
|
144
|
+
api_type=config.pop(API_TYPE_CONFIG_KEY, OPENAI_PROVIDER),
|
|
145
|
+
api_version=config.pop(API_VERSION_CONFIG_KEY, None),
|
|
146
|
+
use_chat_completions_endpoint=config.pop(
|
|
147
|
+
USE_CHAT_COMPLETIONS_ENDPOINT_CONFIG_KEY, True
|
|
148
|
+
),
|
|
149
|
+
# The rest of parameters (e.g. model parameters) are considered
|
|
150
|
+
# as extra parameters
|
|
151
|
+
extra_parameters=config,
|
|
152
|
+
)
|
|
153
|
+
return this
|
|
154
|
+
|
|
155
|
+
def to_dict(self) -> dict:
|
|
156
|
+
"""Converts the config instance into a dictionary."""
|
|
157
|
+
d = asdict(self)
|
|
158
|
+
# Extra parameters should also be on the top level
|
|
159
|
+
d.pop("extra_parameters", None)
|
|
160
|
+
d.update(self.extra_parameters)
|
|
161
|
+
return d
|
|
162
|
+
|
|
163
|
+
@staticmethod
|
|
164
|
+
def resolve_config_aliases(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
165
|
+
return resolve_aliases(config, DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def is_self_hosted_config(config: dict) -> bool:
|
|
169
|
+
"""Check whether the configuration is meant to configure an self-hosted client."""
|
|
170
|
+
# Process the config to handle all the aliases
|
|
171
|
+
config = SelfHostedLLMClientConfig.resolve_config_aliases(config)
|
|
172
|
+
|
|
173
|
+
# Case: Configuration contains `provider: self-hosted`
|
|
174
|
+
if config.get(PROVIDER_CONFIG_KEY) == SELF_HOSTED_PROVIDER:
|
|
175
|
+
return True
|
|
176
|
+
|
|
177
|
+
return False
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import structlog
|
|
2
|
+
from rasa.shared.utils.io import raise_deprecation_warning
|
|
3
|
+
|
|
4
|
+
structlogger = structlog.get_logger()
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def resolve_aliases(config: dict, deprecated_alias_mapping: dict) -> dict:
|
|
8
|
+
"""
|
|
9
|
+
Resolve aliases in the configuration to standard keys.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
config: Dictionary containing the configuration.
|
|
13
|
+
deprecated_alias_mapping: Dictionary mapping aliases to
|
|
14
|
+
their standard keys.
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
New dictionary containing the processed configuration.
|
|
18
|
+
"""
|
|
19
|
+
config = config.copy()
|
|
20
|
+
|
|
21
|
+
for alias, standard_key in deprecated_alias_mapping.items():
|
|
22
|
+
# We check for the alias instead of the standard key because our goal is to
|
|
23
|
+
# update the standard key when the alias is found. Since the standard key is
|
|
24
|
+
# always included in the default component configurations, we overwrite it
|
|
25
|
+
# with the alias value if the alias exists.
|
|
26
|
+
if alias in config:
|
|
27
|
+
config[standard_key] = config.pop(alias)
|
|
28
|
+
|
|
29
|
+
return config
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def raise_deprecation_warnings(config: dict, deprecated_alias_mapping: dict) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Raises warnings for deprecated keys in the configuration.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
config: Dictionary containing the configuration.
|
|
38
|
+
deprecated_alias_mapping: Dictionary mapping deprecated keys to
|
|
39
|
+
their standard keys.
|
|
40
|
+
|
|
41
|
+
Raises:
|
|
42
|
+
DeprecationWarning: If any deprecated key is found in the config.
|
|
43
|
+
"""
|
|
44
|
+
for alias, standard_key in deprecated_alias_mapping.items():
|
|
45
|
+
if alias in config:
|
|
46
|
+
raise_deprecation_warning(
|
|
47
|
+
message=(
|
|
48
|
+
f"'{alias}' is deprecated and will be removed in "
|
|
49
|
+
f"4.0.0. Use '{standard_key}' instead."
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def validate_required_keys(config: dict, required_keys: list) -> None:
|
|
55
|
+
"""
|
|
56
|
+
Validates that the passed config contains all the required keys.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
config: Dictionary containing the configuration.
|
|
60
|
+
required_keys: List of keys that must be present in the config.
|
|
61
|
+
|
|
62
|
+
Raises:
|
|
63
|
+
ValueError: If any required key is missing.
|
|
64
|
+
"""
|
|
65
|
+
missing_keys = [key for key in required_keys if key not in config]
|
|
66
|
+
if missing_keys:
|
|
67
|
+
message = f"Missing required keys '{missing_keys}' for configuration."
|
|
68
|
+
structlogger.error(
|
|
69
|
+
"validate_required_keys",
|
|
70
|
+
message=message,
|
|
71
|
+
missing_keys=missing_keys,
|
|
72
|
+
config=config,
|
|
73
|
+
)
|
|
74
|
+
raise ValueError(message)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def validate_forbidden_keys(config: dict, forbidden_keys: list) -> None:
|
|
78
|
+
"""
|
|
79
|
+
Validates that the passed config doesn't contain any forbidden keys.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
config: Dictionary containing the configuration.
|
|
83
|
+
forbidden_keys: List of keys that are forbidden in the config.
|
|
84
|
+
|
|
85
|
+
Raises:
|
|
86
|
+
ValueError: If any forbidden key is present.
|
|
87
|
+
"""
|
|
88
|
+
forbidden_keys_in_config = set(config.keys()).intersection(set(forbidden_keys))
|
|
89
|
+
|
|
90
|
+
if forbidden_keys_in_config:
|
|
91
|
+
message = (
|
|
92
|
+
f"Forbidden keys '{forbidden_keys_in_config}' present "
|
|
93
|
+
f"in the configuration."
|
|
94
|
+
)
|
|
95
|
+
structlogger.error(
|
|
96
|
+
"validate_forbidden_keys",
|
|
97
|
+
message=message,
|
|
98
|
+
forbidden_keys=forbidden_keys_in_config,
|
|
99
|
+
config=config,
|
|
100
|
+
)
|
|
101
|
+
raise ValueError(message)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def get_provider_prefixed_model_name(provider: str, model: str) -> str:
|
|
105
|
+
"""
|
|
106
|
+
Returns the model name with the provider prefixed.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
provider: The provider of the model.
|
|
110
|
+
model: The model name.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
The model name with the provider prefixed.
|
|
114
|
+
"""
|
|
115
|
+
if model and f"{provider}/" not in model:
|
|
116
|
+
return f"{provider}/{model}"
|
|
117
|
+
return model
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from typing import Optional, Union
|
|
3
|
+
|
|
4
|
+
import httpx
|
|
5
|
+
import litellm
|
|
6
|
+
from rasa.shared.constants import (
|
|
7
|
+
RASA_CA_BUNDLE_ENV_VAR,
|
|
8
|
+
REQUESTS_CA_BUNDLE_ENV_VAR,
|
|
9
|
+
RASA_SSL_CERTIFICATE_ENV_VAR,
|
|
10
|
+
LITELLM_SSL_VERIFY_ENV_VAR,
|
|
11
|
+
LITELLM_SSL_CERTIFICATE_ENV_VAR,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
import structlog
|
|
15
|
+
|
|
16
|
+
from rasa.shared.utils.io import raise_deprecation_warning
|
|
17
|
+
|
|
18
|
+
structlogger = structlog.get_logger()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def ensure_ssl_certificates_for_litellm_non_openai_based_clients() -> None:
|
|
22
|
+
"""
|
|
23
|
+
Ensure SSL certificates configuration for LiteLLM based on environment
|
|
24
|
+
variables for clients that are not utilizing OpenAI's clients from
|
|
25
|
+
`openai` library.
|
|
26
|
+
"""
|
|
27
|
+
ssl_verify = _get_ssl_verify()
|
|
28
|
+
ssl_certificate = _get_ssl_cert()
|
|
29
|
+
|
|
30
|
+
structlogger.debug(
|
|
31
|
+
"ensure_ssl_certificates_for_litellm_non_openai_based_clients",
|
|
32
|
+
ssl_verify=ssl_verify,
|
|
33
|
+
ssl_certificate=ssl_certificate,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
if ssl_verify is not None:
|
|
37
|
+
litellm.ssl_verify = ssl_verify
|
|
38
|
+
if ssl_certificate is not None:
|
|
39
|
+
litellm.ssl_certificate = ssl_certificate
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def ensure_ssl_certificates_for_litellm_openai_based_clients() -> None:
|
|
43
|
+
"""
|
|
44
|
+
Ensure SSL certificates configuration for LiteLLM based on environment
|
|
45
|
+
variables for clients that are utilizing OpenAI's clients from
|
|
46
|
+
`openai` library.
|
|
47
|
+
|
|
48
|
+
The ssl configuration is ensured by setting `litellm.client_session` and
|
|
49
|
+
`litellm.aclient_session` if not previously set.
|
|
50
|
+
"""
|
|
51
|
+
client_args = {}
|
|
52
|
+
|
|
53
|
+
ssl_verify = _get_ssl_verify()
|
|
54
|
+
ssl_certificate = _get_ssl_cert()
|
|
55
|
+
|
|
56
|
+
structlogger.debug(
|
|
57
|
+
"ensure_ssl_certificates_for_litellm_openai_based_clients",
|
|
58
|
+
ssl_verify=ssl_verify,
|
|
59
|
+
ssl_certificate=ssl_certificate,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
if ssl_verify is not None:
|
|
63
|
+
client_args["verify"] = ssl_verify
|
|
64
|
+
if ssl_certificate is not None:
|
|
65
|
+
client_args["cert"] = ssl_certificate
|
|
66
|
+
|
|
67
|
+
if client_args and not isinstance(litellm.aclient_session, httpx.AsyncClient):
|
|
68
|
+
litellm.aclient_session = httpx.AsyncClient(**client_args)
|
|
69
|
+
if client_args and not isinstance(litellm.client_session, httpx.Client):
|
|
70
|
+
litellm.client_session = httpx.Client(**client_args)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _get_ssl_verify() -> Optional[Union[bool, str]]:
|
|
74
|
+
"""
|
|
75
|
+
Environment variable priority (ssl verify):
|
|
76
|
+
1. `RASA_CA_BUNDLE`: Preferred for SSL verification.
|
|
77
|
+
2. `REQUESTS_CA_BUNDLE`: Deprecated; use `RASA_CA_BUNDLE_ENV_VAR` instead.
|
|
78
|
+
3. `SSL_VERIFY`: Fallback for SSL verification.
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
Path to a self-signed SSL certificate or None if no SSL certificate is found.
|
|
82
|
+
"""
|
|
83
|
+
if os.environ.get(REQUESTS_CA_BUNDLE_ENV_VAR) and os.environ.get(
|
|
84
|
+
RASA_CA_BUNDLE_ENV_VAR
|
|
85
|
+
):
|
|
86
|
+
raise_deprecation_warning(
|
|
87
|
+
"Both REQUESTS_CA_BUNDLE and RASA_CA_BUNDLE environment variables are set. "
|
|
88
|
+
"RASA_CA_BUNDLE will be used as the SSL verification path.\n"
|
|
89
|
+
"Support of the REQUESTS_CA_BUNDLE environment variable is deprecated and "
|
|
90
|
+
"will be removed in Rasa Pro 4.0.0. Please set the RASA_CA_BUNDLE "
|
|
91
|
+
"environment variable instead."
|
|
92
|
+
)
|
|
93
|
+
elif os.environ.get(REQUESTS_CA_BUNDLE_ENV_VAR):
|
|
94
|
+
raise_deprecation_warning(
|
|
95
|
+
"Support of the REQUESTS_CA_BUNDLE environment variable is deprecated and "
|
|
96
|
+
"will be removed in Rasa Pro 4.0.0. Please set the RASA_CA_BUNDLE "
|
|
97
|
+
"environment variable instead."
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
return (
|
|
101
|
+
os.environ.get(RASA_CA_BUNDLE_ENV_VAR)
|
|
102
|
+
# Deprecated
|
|
103
|
+
or os.environ.get(REQUESTS_CA_BUNDLE_ENV_VAR)
|
|
104
|
+
# From LiteLLM, use as a fallback
|
|
105
|
+
or os.environ.get(LITELLM_SSL_VERIFY_ENV_VAR)
|
|
106
|
+
or None
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _get_ssl_cert() -> Optional[str]:
|
|
111
|
+
"""
|
|
112
|
+
Environment variable priority (ssl certificate):
|
|
113
|
+
1. `RASA_SSL_CERTIFICATE`: Preferred for client certificate.
|
|
114
|
+
2. `SSL_CERTIFICATE`: Fallback for client certificate.
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
Path to a SSL certificate or None if no SSL certificate is found.
|
|
118
|
+
"""
|
|
119
|
+
return (
|
|
120
|
+
os.environ.get(RASA_SSL_CERTIFICATE_ENV_VAR)
|
|
121
|
+
# From LiteLLM, use as a fallback
|
|
122
|
+
or os.environ.get(LITELLM_SSL_CERTIFICATE_ENV_VAR)
|
|
123
|
+
or None
|
|
124
|
+
)
|