rasa-pro 3.11.3a1.dev2__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 +1320 -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 +200 -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 +306 -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 +379 -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 +973 -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 +778 -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 +472 -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 +502 -0
- rasa/dialogue_understanding/generator/llm_command_generator.py +68 -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 +935 -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 +489 -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/constants.py +15 -0
- rasa/dialogue_understanding_test/du_test_case.py +118 -0
- rasa/dialogue_understanding_test/du_test_result.py +11 -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 +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 +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 +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 +287 -0
- rasa/model_manager/socket_bridge.py +152 -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 +321 -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 +54 -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 +79 -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 +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.11.3a1.dev2.dist-info/METADATA +198 -0
- rasa_pro-3.11.3a1.dev2.dist-info/NOTICE +5 -0
- rasa_pro-3.11.3a1.dev2.dist-info/RECORD +784 -0
- rasa_pro-3.11.3a1.dev2.dist-info/WHEEL +4 -0
- rasa_pro-3.11.3a1.dev2.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import logging
|
|
3
|
+
import os
|
|
4
|
+
import re
|
|
5
|
+
from typing import Any, Dict, Optional, Text, Match, List
|
|
6
|
+
|
|
7
|
+
import scipy.sparse
|
|
8
|
+
from rasa.shared.nlu.constants import (
|
|
9
|
+
ENTITIES,
|
|
10
|
+
EXTRACTOR,
|
|
11
|
+
PRETRAINED_EXTRACTORS,
|
|
12
|
+
ENTITY_ATTRIBUTE_START,
|
|
13
|
+
ENTITY_ATTRIBUTE_END,
|
|
14
|
+
ENTITY_ATTRIBUTE_VALUE,
|
|
15
|
+
ENTITY_ATTRIBUTE_TYPE,
|
|
16
|
+
ENTITY_ATTRIBUTE_ROLE,
|
|
17
|
+
ENTITY_ATTRIBUTE_GROUP,
|
|
18
|
+
)
|
|
19
|
+
from rasa.shared.constants import UTTER_PREFIX
|
|
20
|
+
import rasa.shared.utils.io
|
|
21
|
+
import rasa.shared.data
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
ESCAPE_DCT = {"\b": "\\b", "\f": "\\f", "\n": "\\n", "\r": "\\r", "\t": "\\t"}
|
|
26
|
+
ESCAPE_CHARS = set(ESCAPE_DCT.keys())
|
|
27
|
+
ESCAPE = re.compile(f'[{"".join(ESCAPE_DCT.values())}]')
|
|
28
|
+
UNESCAPE_DCT = {espaced_char: char for char, espaced_char in ESCAPE_DCT.items()}
|
|
29
|
+
UNESCAPE = re.compile(f'[{"".join(UNESCAPE_DCT.values())}]')
|
|
30
|
+
GROUP_COMPLETE_MATCH = 0
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def transform_entity_synonyms(
|
|
34
|
+
synonyms: List[Dict[Text, Any]], known_synonyms: Optional[Dict[Text, Any]] = None
|
|
35
|
+
) -> Dict[Text, Any]:
|
|
36
|
+
"""Transforms the entity synonyms into a text->value dictionary."""
|
|
37
|
+
entity_synonyms = known_synonyms if known_synonyms else {}
|
|
38
|
+
for s in synonyms:
|
|
39
|
+
if "value" in s and "synonyms" in s:
|
|
40
|
+
for synonym in s["synonyms"]:
|
|
41
|
+
entity_synonyms[synonym] = s["value"]
|
|
42
|
+
return entity_synonyms
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def check_duplicate_synonym(
|
|
46
|
+
entity_synonyms: Dict[Text, Any], text: Text, syn: Text, context_str: Text = ""
|
|
47
|
+
) -> None:
|
|
48
|
+
if text in entity_synonyms and entity_synonyms[text] != syn:
|
|
49
|
+
rasa.shared.utils.io.raise_warning(
|
|
50
|
+
f"Found inconsistent entity synonyms while {context_str}, "
|
|
51
|
+
f"overwriting {text}->{entity_synonyms[text]} "
|
|
52
|
+
f"with {text}->{syn} during merge."
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def get_file_format_extension(resource_name: Text) -> Text:
|
|
57
|
+
"""Get the file extension based on training data format. It supports both a folder and
|
|
58
|
+
a file, and tries to guess the format as follows:
|
|
59
|
+
|
|
60
|
+
- if the resource is a file and has a known format, return this format's extension
|
|
61
|
+
- if the resource is a folder and all the resources have the
|
|
62
|
+
same known format, return it's extension
|
|
63
|
+
- otherwise, default to DEFAULT_FILE_FORMAT (yml).
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
resource_name: The name of the resource, can be a file or a folder.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
The resource file format.
|
|
70
|
+
""" # noqa: E501
|
|
71
|
+
from rasa.shared.nlu.training_data import loading
|
|
72
|
+
|
|
73
|
+
if resource_name is None or not os.path.exists(resource_name):
|
|
74
|
+
raise AttributeError(f"Resource '{resource_name}' does not exist.")
|
|
75
|
+
|
|
76
|
+
files = rasa.shared.utils.io.list_files(resource_name)
|
|
77
|
+
|
|
78
|
+
file_formats = list(map(lambda f: loading.guess_format(f), files))
|
|
79
|
+
|
|
80
|
+
if not file_formats:
|
|
81
|
+
return rasa.shared.data.yaml_file_extension()
|
|
82
|
+
|
|
83
|
+
known_file_formats = {loading.RASA_YAML: rasa.shared.data.yaml_file_extension()}
|
|
84
|
+
fformat = file_formats[0]
|
|
85
|
+
if all(f == fformat for f in file_formats):
|
|
86
|
+
return known_file_formats.get(fformat, rasa.shared.data.yaml_file_extension())
|
|
87
|
+
|
|
88
|
+
return rasa.shared.data.yaml_file_extension()
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def remove_untrainable_entities_from(example: Dict[Text, Any]) -> None:
|
|
92
|
+
"""Remove untrainable entities from serialised training example `example`.
|
|
93
|
+
|
|
94
|
+
Entities with an untrainable extractor will be removed. Untrainable extractors
|
|
95
|
+
are defined in `rasa.nlu.constants.PRETRAINED_EXTRACTORS`.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
example: Serialised training example to inspect.
|
|
99
|
+
"""
|
|
100
|
+
example_entities = example.get(ENTITIES)
|
|
101
|
+
|
|
102
|
+
if not example_entities:
|
|
103
|
+
# example contains no entities, so there's nothing to do
|
|
104
|
+
return None
|
|
105
|
+
|
|
106
|
+
trainable_entities = []
|
|
107
|
+
|
|
108
|
+
for entity in example_entities:
|
|
109
|
+
if entity.get(EXTRACTOR) in PRETRAINED_EXTRACTORS:
|
|
110
|
+
logger.debug(
|
|
111
|
+
f"Excluding entity '{json.dumps(entity)}' from training data. "
|
|
112
|
+
f"Entity examples extracted by the following classes are not "
|
|
113
|
+
f"dumped to training data in markdown format: "
|
|
114
|
+
f"`{'`, `'.join(sorted(PRETRAINED_EXTRACTORS))}`."
|
|
115
|
+
)
|
|
116
|
+
else:
|
|
117
|
+
trainable_entities.append(entity)
|
|
118
|
+
|
|
119
|
+
example[ENTITIES] = trainable_entities
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def intent_response_key_to_template_key(intent_response_key: Text) -> Text:
|
|
123
|
+
"""Resolve the response template key for a given intent response key.
|
|
124
|
+
|
|
125
|
+
Args:
|
|
126
|
+
intent_response_key: retrieval intent with the response key suffix attached.
|
|
127
|
+
|
|
128
|
+
Returns: The corresponding response template.
|
|
129
|
+
|
|
130
|
+
"""
|
|
131
|
+
return f"{UTTER_PREFIX}{intent_response_key}"
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def template_key_to_intent_response_key(template_key: Text) -> Text:
|
|
135
|
+
"""Resolve the intent response key for the given response template.
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
template_key: Name of the response template.
|
|
139
|
+
|
|
140
|
+
Returns: The corresponding intent response key.
|
|
141
|
+
|
|
142
|
+
"""
|
|
143
|
+
return template_key.split(UTTER_PREFIX)[1]
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def has_string_escape_chars(s: Text) -> bool:
|
|
147
|
+
"""Checks whether there are any of the escape characters in the string."""
|
|
148
|
+
intersection = ESCAPE_CHARS.intersection(set(s))
|
|
149
|
+
return len(intersection) > 0
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def encode_string(s: Text) -> Text:
|
|
153
|
+
"""Return an encoded python string."""
|
|
154
|
+
|
|
155
|
+
def replace(match: Match) -> Text:
|
|
156
|
+
return ESCAPE_DCT[match.group(GROUP_COMPLETE_MATCH)]
|
|
157
|
+
|
|
158
|
+
return ESCAPE.sub(replace, s)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def decode_string(s: Text) -> Text:
|
|
162
|
+
"""Return a decoded python string."""
|
|
163
|
+
|
|
164
|
+
def replace(match: Match) -> Text:
|
|
165
|
+
return UNESCAPE_DCT[match.group(GROUP_COMPLETE_MATCH)]
|
|
166
|
+
|
|
167
|
+
return UNESCAPE.sub(replace, s)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def build_entity(
|
|
171
|
+
start: int,
|
|
172
|
+
end: int,
|
|
173
|
+
value: Text,
|
|
174
|
+
entity_type: Text,
|
|
175
|
+
role: Optional[Text] = None,
|
|
176
|
+
group: Optional[Text] = None,
|
|
177
|
+
**kwargs: Any,
|
|
178
|
+
) -> Dict[Text, Any]:
|
|
179
|
+
"""Builds a standard entity dictionary.
|
|
180
|
+
|
|
181
|
+
Adds additional keyword parameters.
|
|
182
|
+
|
|
183
|
+
Args:
|
|
184
|
+
start: start position of entity
|
|
185
|
+
end: end position of entity
|
|
186
|
+
value: text value of the entity
|
|
187
|
+
entity_type: name of the entity type
|
|
188
|
+
role: role of the entity
|
|
189
|
+
group: group of the entity
|
|
190
|
+
**kwargs: additional parameters
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
an entity dictionary
|
|
194
|
+
"""
|
|
195
|
+
entity = {
|
|
196
|
+
ENTITY_ATTRIBUTE_START: start,
|
|
197
|
+
ENTITY_ATTRIBUTE_END: end,
|
|
198
|
+
ENTITY_ATTRIBUTE_VALUE: value,
|
|
199
|
+
ENTITY_ATTRIBUTE_TYPE: entity_type,
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if role:
|
|
203
|
+
entity[ENTITY_ATTRIBUTE_ROLE] = role
|
|
204
|
+
if group:
|
|
205
|
+
entity[ENTITY_ATTRIBUTE_GROUP] = group
|
|
206
|
+
|
|
207
|
+
entity.update(kwargs)
|
|
208
|
+
return entity
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def sparse_matrix_to_string(m: scipy.sparse.spmatrix) -> Text:
|
|
212
|
+
"""Turns a sparse matrix into a string.
|
|
213
|
+
|
|
214
|
+
Will return a line "(i,j) v" for each value in the matrix.
|
|
215
|
+
|
|
216
|
+
taken from official scipy source to operate on full sparse matrix to not have
|
|
217
|
+
to change the `maxprint` property in-place.
|
|
218
|
+
https://github.com/scipy/scipy/blob/v1.7.0/scipy/sparse/base.py#L258
|
|
219
|
+
"""
|
|
220
|
+
# make sure sparse matrix is in COOrdinate format
|
|
221
|
+
m_coo = m.tocoo()
|
|
222
|
+
triples = zip(list(zip(m_coo.row, m_coo.col)), m_coo.data)
|
|
223
|
+
return "\n".join([(" %s\t%s" % t) for t in triples])
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,183 @@
|
|
|
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
|
+
DEPLOYMENT_CONFIG_KEY,
|
|
16
|
+
DEPLOYMENT_NAME_CONFIG_KEY,
|
|
17
|
+
ENGINE_CONFIG_KEY,
|
|
18
|
+
RASA_TYPE_CONFIG_KEY,
|
|
19
|
+
LANGCHAIN_TYPE_CONFIG_KEY,
|
|
20
|
+
STREAM_CONFIG_KEY,
|
|
21
|
+
N_REPHRASES_CONFIG_KEY,
|
|
22
|
+
REQUEST_TIMEOUT_CONFIG_KEY,
|
|
23
|
+
TIMEOUT_CONFIG_KEY,
|
|
24
|
+
PROVIDER_CONFIG_KEY,
|
|
25
|
+
AZURE_OPENAI_PROVIDER,
|
|
26
|
+
AZURE_API_TYPE,
|
|
27
|
+
)
|
|
28
|
+
from rasa.shared.providers._configs.utils import (
|
|
29
|
+
resolve_aliases,
|
|
30
|
+
raise_deprecation_warnings,
|
|
31
|
+
validate_required_keys,
|
|
32
|
+
validate_forbidden_keys,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
structlogger = structlog.get_logger()
|
|
36
|
+
|
|
37
|
+
DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING = {
|
|
38
|
+
# Deployment name aliases
|
|
39
|
+
DEPLOYMENT_NAME_CONFIG_KEY: DEPLOYMENT_CONFIG_KEY,
|
|
40
|
+
ENGINE_CONFIG_KEY: DEPLOYMENT_CONFIG_KEY,
|
|
41
|
+
# Provider aliases
|
|
42
|
+
RASA_TYPE_CONFIG_KEY: PROVIDER_CONFIG_KEY,
|
|
43
|
+
LANGCHAIN_TYPE_CONFIG_KEY: PROVIDER_CONFIG_KEY,
|
|
44
|
+
# API type aliases
|
|
45
|
+
OPENAI_API_TYPE_CONFIG_KEY: API_TYPE_CONFIG_KEY,
|
|
46
|
+
# API base aliases
|
|
47
|
+
OPENAI_API_BASE_CONFIG_KEY: API_BASE_CONFIG_KEY,
|
|
48
|
+
# API version aliases
|
|
49
|
+
OPENAI_API_VERSION_CONFIG_KEY: API_VERSION_CONFIG_KEY,
|
|
50
|
+
# Model name aliases
|
|
51
|
+
MODEL_NAME_CONFIG_KEY: MODEL_CONFIG_KEY,
|
|
52
|
+
# Timeout aliases
|
|
53
|
+
REQUEST_TIMEOUT_CONFIG_KEY: TIMEOUT_CONFIG_KEY,
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
REQUIRED_KEYS = [DEPLOYMENT_CONFIG_KEY]
|
|
57
|
+
|
|
58
|
+
FORBIDDEN_KEYS = [
|
|
59
|
+
STREAM_CONFIG_KEY,
|
|
60
|
+
N_REPHRASES_CONFIG_KEY,
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@dataclass
|
|
65
|
+
class AzureOpenAIClientConfig:
|
|
66
|
+
"""Parses configuration for Azure OpenAI client, resolves aliases and
|
|
67
|
+
raises deprecation warnings.
|
|
68
|
+
|
|
69
|
+
Raises:
|
|
70
|
+
ValueError: Raised in cases of invalid configuration:
|
|
71
|
+
- If any of the required configuration keys are missing.
|
|
72
|
+
- If `api_type` has a value different from `azure`.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
deployment: str
|
|
76
|
+
|
|
77
|
+
model: Optional[str]
|
|
78
|
+
api_base: Optional[str]
|
|
79
|
+
api_version: Optional[str]
|
|
80
|
+
# API Type is not used by LiteLLM backend, but we define
|
|
81
|
+
# it here for backward compatibility.
|
|
82
|
+
api_type: Optional[str] = AZURE_API_TYPE
|
|
83
|
+
|
|
84
|
+
# Provider is not used by LiteLLM backend, but we define it here since it's
|
|
85
|
+
# used as switch between different clients.
|
|
86
|
+
provider: str = AZURE_OPENAI_PROVIDER
|
|
87
|
+
|
|
88
|
+
extra_parameters: dict = field(default_factory=dict)
|
|
89
|
+
|
|
90
|
+
def __post_init__(self) -> None:
|
|
91
|
+
if self.provider != AZURE_OPENAI_PROVIDER:
|
|
92
|
+
message = f"Provider must be set to '{AZURE_OPENAI_PROVIDER}'."
|
|
93
|
+
structlogger.error(
|
|
94
|
+
"azure_openai_client_config.validation_error",
|
|
95
|
+
message=message,
|
|
96
|
+
provider=self.provider,
|
|
97
|
+
)
|
|
98
|
+
raise ValueError(message)
|
|
99
|
+
if self.deployment is None:
|
|
100
|
+
message = "Deployment cannot be set to None."
|
|
101
|
+
structlogger.error(
|
|
102
|
+
"azure_openai_client_config.validation_error",
|
|
103
|
+
message=message,
|
|
104
|
+
deployment=self.deployment,
|
|
105
|
+
)
|
|
106
|
+
raise ValueError(message)
|
|
107
|
+
|
|
108
|
+
@classmethod
|
|
109
|
+
def from_dict(cls, config: dict) -> "AzureOpenAIClientConfig":
|
|
110
|
+
"""Initializes a dataclass from the passed config.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
config: (dict) The config from which to initialize.
|
|
114
|
+
|
|
115
|
+
Raises:
|
|
116
|
+
ValueError: Raised in cases of invalid configuration:
|
|
117
|
+
- If any of the required configuration keys are missing.
|
|
118
|
+
- If `api_type` has a value different from `azure`.
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
AzureOpenAIClientConfig
|
|
122
|
+
"""
|
|
123
|
+
# Check for deprecated keys
|
|
124
|
+
raise_deprecation_warnings(config, DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING)
|
|
125
|
+
# Resolve any potential aliases
|
|
126
|
+
config = cls.resolve_config_aliases(config)
|
|
127
|
+
# Validate that required keys are set
|
|
128
|
+
validate_required_keys(config, REQUIRED_KEYS)
|
|
129
|
+
# Validate that the forbidden keys are not present
|
|
130
|
+
validate_forbidden_keys(config, FORBIDDEN_KEYS)
|
|
131
|
+
# Init client config
|
|
132
|
+
this = AzureOpenAIClientConfig(
|
|
133
|
+
# Required parameters
|
|
134
|
+
deployment=config.pop(DEPLOYMENT_CONFIG_KEY),
|
|
135
|
+
# Pop the 'provider' key. Currently, it's *optional* because of
|
|
136
|
+
# backward compatibility with older versions.
|
|
137
|
+
provider=config.pop(PROVIDER_CONFIG_KEY, AZURE_OPENAI_PROVIDER),
|
|
138
|
+
# Optional
|
|
139
|
+
api_type=config.pop(API_TYPE_CONFIG_KEY, AZURE_API_TYPE),
|
|
140
|
+
model=config.pop(MODEL_CONFIG_KEY, None),
|
|
141
|
+
# Optional, can also be set through environment variables
|
|
142
|
+
# in clients.
|
|
143
|
+
api_base=config.pop(API_BASE_CONFIG_KEY, None),
|
|
144
|
+
api_version=config.pop(API_VERSION_CONFIG_KEY, None),
|
|
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_azure_openai_config(config: dict) -> bool:
|
|
165
|
+
"""Check whether the configuration is meant to configure
|
|
166
|
+
an Azure OpenAI client.
|
|
167
|
+
"""
|
|
168
|
+
# Resolve any aliases that are specific to Azure OpenAI configuration
|
|
169
|
+
config = AzureOpenAIClientConfig.resolve_config_aliases(config)
|
|
170
|
+
|
|
171
|
+
# Case: Configuration contains `provider: azure`.
|
|
172
|
+
if config.get(PROVIDER_CONFIG_KEY) == AZURE_OPENAI_PROVIDER:
|
|
173
|
+
return True
|
|
174
|
+
|
|
175
|
+
# Case: Configuration contains `deployment` key
|
|
176
|
+
# (specific to Azure OpenAI configuration)
|
|
177
|
+
if (
|
|
178
|
+
config.get(DEPLOYMENT_CONFIG_KEY) is not None
|
|
179
|
+
and config.get(PROVIDER_CONFIG_KEY) is None
|
|
180
|
+
):
|
|
181
|
+
return True
|
|
182
|
+
|
|
183
|
+
return False
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from typing import Protocol, runtime_checkable
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@runtime_checkable
|
|
5
|
+
class ClientConfig(Protocol):
|
|
6
|
+
"""
|
|
7
|
+
Protocol for the client config that specifies the interface for interacting
|
|
8
|
+
with the API.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
@classmethod
|
|
12
|
+
def from_dict(cls, config: dict) -> "ClientConfig":
|
|
13
|
+
"""
|
|
14
|
+
Initializes the client config with the given configuration.
|
|
15
|
+
|
|
16
|
+
This class method should be implemented to parse the given
|
|
17
|
+
configuration and create an instance of an client config.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
config: (dict) The config from which to initialize.
|
|
21
|
+
|
|
22
|
+
Raises:
|
|
23
|
+
ValueError: Config is missing required keys.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
ClientConfig
|
|
27
|
+
"""
|
|
28
|
+
...
|
|
29
|
+
|
|
30
|
+
def to_dict(self) -> dict:
|
|
31
|
+
"""
|
|
32
|
+
Returns the configuration for that the client config is initialized with.
|
|
33
|
+
|
|
34
|
+
This method should be implemented to return a dictionary containing
|
|
35
|
+
the configuration settings for the client config.
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
dictionary containing the configuration settings for the client config.
|
|
39
|
+
"""
|
|
40
|
+
...
|
|
41
|
+
|
|
42
|
+
@staticmethod
|
|
43
|
+
def resolve_config_aliases(config: dict) -> dict:
|
|
44
|
+
"""
|
|
45
|
+
Resolve any potential aliases in the configuration.
|
|
46
|
+
|
|
47
|
+
This method should be implemented to resolve any potential aliases in the
|
|
48
|
+
configuration.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
config: (dict) The config from which to initialize.
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
dictionary containing the resolved configuration settings for the
|
|
55
|
+
client config.
|
|
56
|
+
"""
|
|
57
|
+
...
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
from dataclasses import asdict, dataclass, field
|
|
2
|
+
from typing import Any, Dict
|
|
3
|
+
|
|
4
|
+
import structlog
|
|
5
|
+
|
|
6
|
+
from rasa.shared.constants import (
|
|
7
|
+
MODEL_CONFIG_KEY,
|
|
8
|
+
MODEL_NAME_CONFIG_KEY,
|
|
9
|
+
STREAM_CONFIG_KEY,
|
|
10
|
+
N_REPHRASES_CONFIG_KEY,
|
|
11
|
+
PROVIDER_CONFIG_KEY,
|
|
12
|
+
TIMEOUT_CONFIG_KEY,
|
|
13
|
+
REQUEST_TIMEOUT_CONFIG_KEY,
|
|
14
|
+
)
|
|
15
|
+
from rasa.shared.providers._configs.utils import (
|
|
16
|
+
validate_required_keys,
|
|
17
|
+
validate_forbidden_keys,
|
|
18
|
+
resolve_aliases,
|
|
19
|
+
raise_deprecation_warnings,
|
|
20
|
+
)
|
|
21
|
+
import rasa.shared.utils.cli
|
|
22
|
+
|
|
23
|
+
structlogger = structlog.get_logger()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING = {
|
|
27
|
+
# Timeout aliases
|
|
28
|
+
REQUEST_TIMEOUT_CONFIG_KEY: TIMEOUT_CONFIG_KEY,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
REQUIRED_KEYS = [MODEL_CONFIG_KEY, PROVIDER_CONFIG_KEY]
|
|
32
|
+
|
|
33
|
+
FORBIDDEN_KEYS = [
|
|
34
|
+
STREAM_CONFIG_KEY,
|
|
35
|
+
N_REPHRASES_CONFIG_KEY,
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass
|
|
40
|
+
class DefaultLiteLLMClientConfig:
|
|
41
|
+
"""Parses configuration for default LiteLLM client, resolves aliases and
|
|
42
|
+
raises deprecation warnings.
|
|
43
|
+
|
|
44
|
+
Raises:
|
|
45
|
+
ValueError: Raised in cases of invalid configuration:
|
|
46
|
+
- If any of the required configuration keys are missing.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
model: str
|
|
50
|
+
provider: str
|
|
51
|
+
extra_parameters: dict = field(default_factory=dict)
|
|
52
|
+
|
|
53
|
+
def __post_init__(self) -> None:
|
|
54
|
+
if self.model is None:
|
|
55
|
+
message = "Model cannot be set to None."
|
|
56
|
+
structlogger.error(
|
|
57
|
+
"default_litellm_client_config.validation_error",
|
|
58
|
+
message=message,
|
|
59
|
+
model=self.model,
|
|
60
|
+
)
|
|
61
|
+
raise ValueError(message)
|
|
62
|
+
if self.provider is None:
|
|
63
|
+
message = "Provider cannot be set to None."
|
|
64
|
+
structlogger.error(
|
|
65
|
+
"default_litellm_client_config.validation_error",
|
|
66
|
+
message=message,
|
|
67
|
+
provider=self.provider,
|
|
68
|
+
)
|
|
69
|
+
raise ValueError(message)
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def from_dict(cls, config: dict) -> "DefaultLiteLLMClientConfig":
|
|
73
|
+
"""
|
|
74
|
+
Initializes a dataclass from the passed config.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
config: (dict) The config from which to initialize.
|
|
78
|
+
|
|
79
|
+
Raises:
|
|
80
|
+
ValueError: Config is missing required keys.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
DefaultLiteLLMClientConfig
|
|
84
|
+
"""
|
|
85
|
+
# Check for deprecated keys
|
|
86
|
+
raise_deprecation_warnings(config, DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING)
|
|
87
|
+
# Raise error for using `model_name` instead instead of `model`
|
|
88
|
+
cls.check_and_error_for_model_name_in_config(config)
|
|
89
|
+
# Resolve any potential aliases.
|
|
90
|
+
config = cls.resolve_config_aliases(config)
|
|
91
|
+
# Validate that the required keys are present
|
|
92
|
+
validate_required_keys(config, REQUIRED_KEYS)
|
|
93
|
+
# Validate that the forbidden keys are not present
|
|
94
|
+
validate_forbidden_keys(config, FORBIDDEN_KEYS)
|
|
95
|
+
this = DefaultLiteLLMClientConfig(
|
|
96
|
+
# Required parameters
|
|
97
|
+
model=config.pop(MODEL_CONFIG_KEY),
|
|
98
|
+
provider=config.pop(PROVIDER_CONFIG_KEY),
|
|
99
|
+
# The rest of parameters (e.g. model parameters) are considered
|
|
100
|
+
# as extra parameters
|
|
101
|
+
extra_parameters=config,
|
|
102
|
+
)
|
|
103
|
+
return this
|
|
104
|
+
|
|
105
|
+
def to_dict(self) -> dict:
|
|
106
|
+
"""Converts the config instance into a dictionary."""
|
|
107
|
+
d = asdict(self)
|
|
108
|
+
# Extra parameters should also be on the top level
|
|
109
|
+
d.pop("extra_parameters", None)
|
|
110
|
+
d.update(self.extra_parameters)
|
|
111
|
+
return d
|
|
112
|
+
|
|
113
|
+
@staticmethod
|
|
114
|
+
def resolve_config_aliases(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
115
|
+
return resolve_aliases(config, DEPRECATED_ALIASES_TO_STANDARD_KEY_MAPPING)
|
|
116
|
+
|
|
117
|
+
@staticmethod
|
|
118
|
+
def check_and_error_for_model_name_in_config(config: Dict[str, Any]) -> None:
|
|
119
|
+
"""Check for usage of deprecated model_name and raise an error if found."""
|
|
120
|
+
if config.get(MODEL_NAME_CONFIG_KEY) and not config.get(MODEL_CONFIG_KEY):
|
|
121
|
+
event_info = (
|
|
122
|
+
f"Unsupported parameter - {MODEL_NAME_CONFIG_KEY} is set. Please use "
|
|
123
|
+
f"{MODEL_CONFIG_KEY} instead."
|
|
124
|
+
)
|
|
125
|
+
structlogger.error(
|
|
126
|
+
"default_litellm_client_config.unsupported_parameter_in_config",
|
|
127
|
+
event_info=event_info,
|
|
128
|
+
config=config,
|
|
129
|
+
)
|
|
130
|
+
rasa.shared.utils.cli.print_error_and_exit(event_info)
|