rasa-pro 3.12.0.dev1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- README.md +41 -0
- rasa/__init__.py +9 -0
- rasa/__main__.py +177 -0
- rasa/anonymization/__init__.py +2 -0
- rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
- rasa/anonymization/anonymization_pipeline.py +286 -0
- rasa/anonymization/anonymization_rule_executor.py +260 -0
- rasa/anonymization/anonymization_rule_orchestrator.py +120 -0
- rasa/anonymization/schemas/config.yml +47 -0
- rasa/anonymization/utils.py +118 -0
- rasa/api.py +160 -0
- rasa/cli/__init__.py +5 -0
- rasa/cli/arguments/__init__.py +0 -0
- rasa/cli/arguments/data.py +106 -0
- rasa/cli/arguments/default_arguments.py +207 -0
- rasa/cli/arguments/evaluate.py +65 -0
- rasa/cli/arguments/export.py +51 -0
- rasa/cli/arguments/interactive.py +74 -0
- rasa/cli/arguments/run.py +219 -0
- rasa/cli/arguments/shell.py +17 -0
- rasa/cli/arguments/test.py +211 -0
- rasa/cli/arguments/train.py +279 -0
- rasa/cli/arguments/visualize.py +34 -0
- rasa/cli/arguments/x.py +30 -0
- rasa/cli/data.py +354 -0
- rasa/cli/dialogue_understanding_test.py +251 -0
- rasa/cli/e2e_test.py +259 -0
- rasa/cli/evaluate.py +222 -0
- rasa/cli/export.py +250 -0
- rasa/cli/inspect.py +75 -0
- rasa/cli/interactive.py +166 -0
- rasa/cli/license.py +65 -0
- rasa/cli/llm_fine_tuning.py +403 -0
- rasa/cli/markers.py +78 -0
- rasa/cli/project_templates/__init__.py +0 -0
- rasa/cli/project_templates/calm/actions/__init__.py +0 -0
- rasa/cli/project_templates/calm/actions/action_template.py +27 -0
- rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
- rasa/cli/project_templates/calm/actions/db.py +57 -0
- rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
- rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
- rasa/cli/project_templates/calm/config.yml +10 -0
- rasa/cli/project_templates/calm/credentials.yml +33 -0
- rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
- rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
- rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
- rasa/cli/project_templates/calm/db/contacts.json +10 -0
- rasa/cli/project_templates/calm/domain/add_contact.yml +39 -0
- rasa/cli/project_templates/calm/domain/list_contacts.yml +17 -0
- rasa/cli/project_templates/calm/domain/remove_contact.yml +38 -0
- rasa/cli/project_templates/calm/domain/shared.yml +10 -0
- rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
- rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
- rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
- rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
- rasa/cli/project_templates/calm/endpoints.yml +58 -0
- rasa/cli/project_templates/default/actions/__init__.py +0 -0
- rasa/cli/project_templates/default/actions/actions.py +27 -0
- rasa/cli/project_templates/default/config.yml +44 -0
- rasa/cli/project_templates/default/credentials.yml +33 -0
- rasa/cli/project_templates/default/data/nlu.yml +91 -0
- rasa/cli/project_templates/default/data/rules.yml +13 -0
- rasa/cli/project_templates/default/data/stories.yml +30 -0
- rasa/cli/project_templates/default/domain.yml +34 -0
- rasa/cli/project_templates/default/endpoints.yml +42 -0
- rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
- rasa/cli/project_templates/tutorial/actions/__init__.py +0 -0
- rasa/cli/project_templates/tutorial/actions/actions.py +22 -0
- rasa/cli/project_templates/tutorial/config.yml +12 -0
- rasa/cli/project_templates/tutorial/credentials.yml +33 -0
- rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
- rasa/cli/project_templates/tutorial/data/patterns.yml +11 -0
- rasa/cli/project_templates/tutorial/domain.yml +35 -0
- rasa/cli/project_templates/tutorial/endpoints.yml +55 -0
- rasa/cli/run.py +143 -0
- rasa/cli/scaffold.py +273 -0
- rasa/cli/shell.py +141 -0
- rasa/cli/studio/__init__.py +0 -0
- rasa/cli/studio/download.py +62 -0
- rasa/cli/studio/studio.py +296 -0
- rasa/cli/studio/train.py +59 -0
- rasa/cli/studio/upload.py +62 -0
- rasa/cli/telemetry.py +102 -0
- rasa/cli/test.py +280 -0
- rasa/cli/train.py +278 -0
- rasa/cli/utils.py +484 -0
- rasa/cli/visualize.py +40 -0
- rasa/cli/x.py +206 -0
- rasa/constants.py +45 -0
- rasa/core/__init__.py +17 -0
- rasa/core/actions/__init__.py +0 -0
- rasa/core/actions/action.py +1318 -0
- rasa/core/actions/action_clean_stack.py +59 -0
- rasa/core/actions/action_exceptions.py +24 -0
- rasa/core/actions/action_hangup.py +29 -0
- rasa/core/actions/action_repeat_bot_messages.py +89 -0
- rasa/core/actions/action_run_slot_rejections.py +210 -0
- rasa/core/actions/action_trigger_chitchat.py +31 -0
- rasa/core/actions/action_trigger_flow.py +109 -0
- rasa/core/actions/action_trigger_search.py +31 -0
- rasa/core/actions/constants.py +5 -0
- rasa/core/actions/custom_action_executor.py +191 -0
- rasa/core/actions/direct_custom_actions_executor.py +109 -0
- rasa/core/actions/e2e_stub_custom_action_executor.py +72 -0
- rasa/core/actions/forms.py +741 -0
- rasa/core/actions/grpc_custom_action_executor.py +251 -0
- rasa/core/actions/http_custom_action_executor.py +145 -0
- rasa/core/actions/loops.py +114 -0
- rasa/core/actions/two_stage_fallback.py +186 -0
- rasa/core/agent.py +559 -0
- rasa/core/auth_retry_tracker_store.py +122 -0
- rasa/core/brokers/__init__.py +0 -0
- rasa/core/brokers/broker.py +126 -0
- rasa/core/brokers/file.py +58 -0
- rasa/core/brokers/kafka.py +324 -0
- rasa/core/brokers/pika.py +388 -0
- rasa/core/brokers/sql.py +86 -0
- rasa/core/channels/__init__.py +61 -0
- rasa/core/channels/botframework.py +338 -0
- rasa/core/channels/callback.py +84 -0
- rasa/core/channels/channel.py +456 -0
- rasa/core/channels/console.py +241 -0
- rasa/core/channels/development_inspector.py +197 -0
- rasa/core/channels/facebook.py +419 -0
- rasa/core/channels/hangouts.py +329 -0
- rasa/core/channels/inspector/.eslintrc.cjs +25 -0
- rasa/core/channels/inspector/.gitignore +23 -0
- rasa/core/channels/inspector/README.md +54 -0
- rasa/core/channels/inspector/assets/favicon.ico +0 -0
- rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
- rasa/core/channels/inspector/custom.d.ts +3 -0
- rasa/core/channels/inspector/dist/assets/arc-861ddd57.js +1 -0
- rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-921f02db.js +10 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-b436c4f8.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-511a23cb.js +2 -0
- rasa/core/channels/inspector/dist/assets/createText-62fc7601-ef476ecd.js +7 -0
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-f1878e0a.js +4 -0
- rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-fac75185.js +51 -0
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-201c5bbc.js +6 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-f904ae41.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-1813da66.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-872af172.js +266 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-34a0af5a.js +70 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-42ba3e3d.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-37817b51.js +1317 -0
- rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
- rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-6b731386.js +7 -0
- rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
- rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-e8579ac6.js +139 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
- rasa/core/channels/inspector/dist/assets/layout-89e6403a.js +1 -0
- rasa/core/channels/inspector/dist/assets/line-dc73d3fc.js +1 -0
- rasa/core/channels/inspector/dist/assets/linear-f5b1d2bc.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-82cb74fa.js +109 -0
- rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
- rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
- rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-bdf5f29b.js +35 -0
- rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-c7a0cbe4.js +7 -0
- rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-7ec5410f.js +52 -0
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-caee5554.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-2935f8db.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-8f5d9693.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-d565d1de.js +1 -0
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-75ad421d.js +110 -0
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-7e764226.js +159 -0
- rasa/core/channels/inspector/dist/assets/styles-9c745c82-7a4e0e61.js +207 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-4019d1bf.js +1 -0
- rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-01ea12df.js +61 -0
- rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-89407137.js +7 -0
- rasa/core/channels/inspector/dist/index.html +42 -0
- rasa/core/channels/inspector/index.html +40 -0
- rasa/core/channels/inspector/jest.config.ts +13 -0
- rasa/core/channels/inspector/package.json +52 -0
- rasa/core/channels/inspector/setupTests.ts +2 -0
- rasa/core/channels/inspector/src/App.tsx +220 -0
- rasa/core/channels/inspector/src/components/Chat.tsx +95 -0
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +108 -0
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +136 -0
- rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
- rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +22 -0
- rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
- rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
- rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
- rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
- rasa/core/channels/inspector/src/helpers/audiostream.ts +191 -0
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +392 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +306 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +127 -0
- rasa/core/channels/inspector/src/main.tsx +13 -0
- rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
- rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
- rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
- rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
- rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
- rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
- rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
- rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
- rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
- rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
- rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
- rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
- rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
- rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
- rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
- rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
- rasa/core/channels/inspector/src/theme/index.ts +101 -0
- rasa/core/channels/inspector/src/types.ts +84 -0
- rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
- rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
- rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
- rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
- rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
- rasa/core/channels/inspector/tsconfig.json +26 -0
- rasa/core/channels/inspector/tsconfig.node.json +10 -0
- rasa/core/channels/inspector/vite.config.ts +8 -0
- rasa/core/channels/inspector/yarn.lock +6249 -0
- rasa/core/channels/mattermost.py +229 -0
- rasa/core/channels/rasa_chat.py +126 -0
- rasa/core/channels/rest.py +230 -0
- rasa/core/channels/rocketchat.py +174 -0
- rasa/core/channels/slack.py +620 -0
- rasa/core/channels/socketio.py +302 -0
- rasa/core/channels/telegram.py +298 -0
- rasa/core/channels/twilio.py +169 -0
- rasa/core/channels/vier_cvg.py +374 -0
- rasa/core/channels/voice_ready/__init__.py +0 -0
- rasa/core/channels/voice_ready/audiocodes.py +501 -0
- rasa/core/channels/voice_ready/jambonz.py +121 -0
- rasa/core/channels/voice_ready/jambonz_protocol.py +396 -0
- rasa/core/channels/voice_ready/twilio_voice.py +403 -0
- rasa/core/channels/voice_ready/utils.py +37 -0
- rasa/core/channels/voice_stream/__init__.py +0 -0
- rasa/core/channels/voice_stream/asr/__init__.py +0 -0
- rasa/core/channels/voice_stream/asr/asr_engine.py +89 -0
- rasa/core/channels/voice_stream/asr/asr_event.py +18 -0
- rasa/core/channels/voice_stream/asr/azure.py +130 -0
- rasa/core/channels/voice_stream/asr/deepgram.py +90 -0
- rasa/core/channels/voice_stream/audio_bytes.py +8 -0
- rasa/core/channels/voice_stream/browser_audio.py +107 -0
- rasa/core/channels/voice_stream/call_state.py +23 -0
- rasa/core/channels/voice_stream/tts/__init__.py +0 -0
- rasa/core/channels/voice_stream/tts/azure.py +106 -0
- rasa/core/channels/voice_stream/tts/cartesia.py +118 -0
- rasa/core/channels/voice_stream/tts/tts_cache.py +27 -0
- rasa/core/channels/voice_stream/tts/tts_engine.py +58 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +173 -0
- rasa/core/channels/voice_stream/util.py +57 -0
- rasa/core/channels/voice_stream/voice_channel.py +427 -0
- rasa/core/channels/webexteams.py +134 -0
- rasa/core/concurrent_lock_store.py +210 -0
- rasa/core/constants.py +112 -0
- rasa/core/evaluation/__init__.py +0 -0
- rasa/core/evaluation/marker.py +267 -0
- rasa/core/evaluation/marker_base.py +923 -0
- rasa/core/evaluation/marker_stats.py +293 -0
- rasa/core/evaluation/marker_tracker_loader.py +103 -0
- rasa/core/exceptions.py +29 -0
- rasa/core/exporter.py +284 -0
- rasa/core/featurizers/__init__.py +0 -0
- rasa/core/featurizers/precomputation.py +410 -0
- rasa/core/featurizers/single_state_featurizer.py +421 -0
- rasa/core/featurizers/tracker_featurizers.py +1262 -0
- rasa/core/http_interpreter.py +89 -0
- rasa/core/information_retrieval/__init__.py +7 -0
- rasa/core/information_retrieval/faiss.py +124 -0
- rasa/core/information_retrieval/information_retrieval.py +137 -0
- rasa/core/information_retrieval/milvus.py +59 -0
- rasa/core/information_retrieval/qdrant.py +96 -0
- rasa/core/jobs.py +63 -0
- rasa/core/lock.py +139 -0
- rasa/core/lock_store.py +343 -0
- rasa/core/migrate.py +403 -0
- rasa/core/nlg/__init__.py +3 -0
- rasa/core/nlg/callback.py +146 -0
- rasa/core/nlg/contextual_response_rephraser.py +320 -0
- rasa/core/nlg/generator.py +230 -0
- rasa/core/nlg/interpolator.py +143 -0
- rasa/core/nlg/response.py +155 -0
- rasa/core/nlg/summarize.py +70 -0
- rasa/core/persistor.py +538 -0
- rasa/core/policies/__init__.py +0 -0
- rasa/core/policies/ensemble.py +329 -0
- rasa/core/policies/enterprise_search_policy.py +905 -0
- rasa/core/policies/enterprise_search_prompt_template.jinja2 +25 -0
- rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +60 -0
- rasa/core/policies/flow_policy.py +205 -0
- rasa/core/policies/flows/__init__.py +0 -0
- rasa/core/policies/flows/flow_exceptions.py +44 -0
- rasa/core/policies/flows/flow_executor.py +754 -0
- rasa/core/policies/flows/flow_step_result.py +43 -0
- rasa/core/policies/intentless_policy.py +1031 -0
- rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
- rasa/core/policies/memoization.py +538 -0
- rasa/core/policies/policy.py +725 -0
- rasa/core/policies/rule_policy.py +1273 -0
- rasa/core/policies/ted_policy.py +2169 -0
- rasa/core/policies/unexpected_intent_policy.py +1022 -0
- rasa/core/processor.py +1465 -0
- rasa/core/run.py +342 -0
- rasa/core/secrets_manager/__init__.py +0 -0
- rasa/core/secrets_manager/constants.py +36 -0
- rasa/core/secrets_manager/endpoints.py +391 -0
- rasa/core/secrets_manager/factory.py +241 -0
- rasa/core/secrets_manager/secret_manager.py +262 -0
- rasa/core/secrets_manager/vault.py +584 -0
- rasa/core/test.py +1335 -0
- rasa/core/tracker_store.py +1703 -0
- rasa/core/train.py +105 -0
- rasa/core/training/__init__.py +89 -0
- rasa/core/training/converters/__init__.py +0 -0
- rasa/core/training/converters/responses_prefix_converter.py +119 -0
- rasa/core/training/interactive.py +1744 -0
- rasa/core/training/story_conflict.py +381 -0
- rasa/core/training/training.py +93 -0
- rasa/core/utils.py +366 -0
- rasa/core/visualize.py +70 -0
- rasa/dialogue_understanding/__init__.py +0 -0
- rasa/dialogue_understanding/coexistence/__init__.py +0 -0
- rasa/dialogue_understanding/coexistence/constants.py +4 -0
- rasa/dialogue_understanding/coexistence/intent_based_router.py +196 -0
- rasa/dialogue_understanding/coexistence/llm_based_router.py +327 -0
- rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
- rasa/dialogue_understanding/commands/__init__.py +61 -0
- rasa/dialogue_understanding/commands/can_not_handle_command.py +70 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +125 -0
- rasa/dialogue_understanding/commands/change_flow_command.py +44 -0
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +57 -0
- rasa/dialogue_understanding/commands/clarify_command.py +86 -0
- rasa/dialogue_understanding/commands/command.py +85 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +297 -0
- rasa/dialogue_understanding/commands/error_command.py +79 -0
- rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
- rasa/dialogue_understanding/commands/handle_code_change_command.py +73 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +66 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +57 -0
- rasa/dialogue_understanding/commands/noop_command.py +54 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +60 -0
- rasa/dialogue_understanding/commands/restart_command.py +58 -0
- rasa/dialogue_understanding/commands/session_end_command.py +61 -0
- rasa/dialogue_understanding/commands/session_start_command.py +59 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +160 -0
- rasa/dialogue_understanding/commands/skip_question_command.py +75 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +107 -0
- rasa/dialogue_understanding/commands/user_silence_command.py +59 -0
- rasa/dialogue_understanding/commands/utils.py +45 -0
- rasa/dialogue_understanding/generator/__init__.py +21 -0
- rasa/dialogue_understanding/generator/command_generator.py +464 -0
- rasa/dialogue_understanding/generator/constants.py +27 -0
- rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +466 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +500 -0
- rasa/dialogue_understanding/generator/llm_command_generator.py +67 -0
- rasa/dialogue_understanding/generator/multi_step/__init__.py +0 -0
- rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2 +62 -0
- rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2 +38 -0
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +920 -0
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +261 -0
- rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
- rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +60 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +486 -0
- rasa/dialogue_understanding/patterns/__init__.py +0 -0
- rasa/dialogue_understanding/patterns/cancel.py +111 -0
- rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
- rasa/dialogue_understanding/patterns/chitchat.py +37 -0
- rasa/dialogue_understanding/patterns/clarify.py +97 -0
- rasa/dialogue_understanding/patterns/code_change.py +41 -0
- rasa/dialogue_understanding/patterns/collect_information.py +90 -0
- rasa/dialogue_understanding/patterns/completed.py +40 -0
- rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
- rasa/dialogue_understanding/patterns/correction.py +278 -0
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +301 -0
- rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
- rasa/dialogue_understanding/patterns/internal_error.py +47 -0
- rasa/dialogue_understanding/patterns/repeat.py +37 -0
- rasa/dialogue_understanding/patterns/restart.py +37 -0
- rasa/dialogue_understanding/patterns/search.py +37 -0
- rasa/dialogue_understanding/patterns/session_start.py +37 -0
- rasa/dialogue_understanding/patterns/skip_question.py +38 -0
- rasa/dialogue_understanding/patterns/user_silence.py +37 -0
- rasa/dialogue_understanding/processor/__init__.py +0 -0
- rasa/dialogue_understanding/processor/command_processor.py +720 -0
- rasa/dialogue_understanding/processor/command_processor_component.py +43 -0
- rasa/dialogue_understanding/stack/__init__.py +0 -0
- rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
- rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
- rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
- rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
- rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
- rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
- rasa/dialogue_understanding/stack/utils.py +211 -0
- rasa/dialogue_understanding/utils.py +14 -0
- rasa/dialogue_understanding_test/__init__.py +0 -0
- rasa/dialogue_understanding_test/command_metric_calculation.py +12 -0
- rasa/dialogue_understanding_test/constants.py +17 -0
- rasa/dialogue_understanding_test/du_test_case.py +118 -0
- rasa/dialogue_understanding_test/du_test_result.py +11 -0
- rasa/dialogue_understanding_test/du_test_runner.py +93 -0
- rasa/dialogue_understanding_test/io.py +54 -0
- rasa/dialogue_understanding_test/validation.py +22 -0
- rasa/e2e_test/__init__.py +0 -0
- rasa/e2e_test/aggregate_test_stats_calculator.py +134 -0
- rasa/e2e_test/assertions.py +1345 -0
- rasa/e2e_test/assertions_schema.yml +129 -0
- rasa/e2e_test/constants.py +31 -0
- rasa/e2e_test/e2e_config.py +220 -0
- rasa/e2e_test/e2e_config_schema.yml +26 -0
- rasa/e2e_test/e2e_test_case.py +569 -0
- rasa/e2e_test/e2e_test_converter.py +363 -0
- rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
- rasa/e2e_test/e2e_test_coverage_report.py +364 -0
- rasa/e2e_test/e2e_test_result.py +54 -0
- rasa/e2e_test/e2e_test_runner.py +1192 -0
- rasa/e2e_test/e2e_test_schema.yml +181 -0
- rasa/e2e_test/pykwalify_extensions.py +39 -0
- rasa/e2e_test/stub_custom_action.py +70 -0
- rasa/e2e_test/utils/__init__.py +0 -0
- rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
- rasa/e2e_test/utils/io.py +598 -0
- rasa/e2e_test/utils/validation.py +178 -0
- rasa/engine/__init__.py +0 -0
- rasa/engine/caching.py +463 -0
- rasa/engine/constants.py +17 -0
- rasa/engine/exceptions.py +14 -0
- rasa/engine/graph.py +642 -0
- rasa/engine/loader.py +48 -0
- rasa/engine/recipes/__init__.py +0 -0
- rasa/engine/recipes/config_files/default_config.yml +41 -0
- rasa/engine/recipes/default_components.py +97 -0
- rasa/engine/recipes/default_recipe.py +1272 -0
- rasa/engine/recipes/graph_recipe.py +79 -0
- rasa/engine/recipes/recipe.py +93 -0
- rasa/engine/runner/__init__.py +0 -0
- rasa/engine/runner/dask.py +250 -0
- rasa/engine/runner/interface.py +49 -0
- rasa/engine/storage/__init__.py +0 -0
- rasa/engine/storage/local_model_storage.py +244 -0
- rasa/engine/storage/resource.py +110 -0
- rasa/engine/storage/storage.py +199 -0
- rasa/engine/training/__init__.py +0 -0
- rasa/engine/training/components.py +176 -0
- rasa/engine/training/fingerprinting.py +64 -0
- rasa/engine/training/graph_trainer.py +256 -0
- rasa/engine/training/hooks.py +164 -0
- rasa/engine/validation.py +1451 -0
- rasa/env.py +14 -0
- rasa/exceptions.py +69 -0
- rasa/graph_components/__init__.py +0 -0
- rasa/graph_components/converters/__init__.py +0 -0
- rasa/graph_components/converters/nlu_message_converter.py +48 -0
- rasa/graph_components/providers/__init__.py +0 -0
- rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
- rasa/graph_components/providers/domain_provider.py +71 -0
- rasa/graph_components/providers/flows_provider.py +74 -0
- rasa/graph_components/providers/forms_provider.py +44 -0
- rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
- rasa/graph_components/providers/responses_provider.py +44 -0
- rasa/graph_components/providers/rule_only_provider.py +49 -0
- rasa/graph_components/providers/story_graph_provider.py +96 -0
- rasa/graph_components/providers/training_tracker_provider.py +55 -0
- rasa/graph_components/validators/__init__.py +0 -0
- rasa/graph_components/validators/default_recipe_validator.py +550 -0
- rasa/graph_components/validators/finetuning_validator.py +302 -0
- rasa/hooks.py +111 -0
- rasa/jupyter.py +63 -0
- rasa/llm_fine_tuning/__init__.py +0 -0
- rasa/llm_fine_tuning/annotation_module.py +241 -0
- rasa/llm_fine_tuning/conversations.py +144 -0
- rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
- rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
- rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
- rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
- rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
- rasa/llm_fine_tuning/storage.py +174 -0
- rasa/llm_fine_tuning/train_test_split_module.py +441 -0
- rasa/markers/__init__.py +0 -0
- rasa/markers/marker.py +269 -0
- rasa/markers/marker_base.py +828 -0
- rasa/markers/upload.py +74 -0
- rasa/markers/validate.py +21 -0
- rasa/model.py +118 -0
- rasa/model_manager/__init__.py +0 -0
- rasa/model_manager/config.py +40 -0
- rasa/model_manager/model_api.py +559 -0
- rasa/model_manager/runner_service.py +286 -0
- rasa/model_manager/socket_bridge.py +146 -0
- rasa/model_manager/studio_jwt_auth.py +86 -0
- rasa/model_manager/trainer_service.py +325 -0
- rasa/model_manager/utils.py +87 -0
- rasa/model_manager/warm_rasa_process.py +187 -0
- rasa/model_service.py +112 -0
- rasa/model_testing.py +457 -0
- rasa/model_training.py +596 -0
- rasa/nlu/__init__.py +7 -0
- rasa/nlu/classifiers/__init__.py +3 -0
- rasa/nlu/classifiers/classifier.py +5 -0
- rasa/nlu/classifiers/diet_classifier.py +1881 -0
- rasa/nlu/classifiers/fallback_classifier.py +192 -0
- rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
- rasa/nlu/classifiers/logistic_regression_classifier.py +253 -0
- rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
- rasa/nlu/classifiers/regex_message_handler.py +56 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +330 -0
- rasa/nlu/constants.py +77 -0
- rasa/nlu/convert.py +40 -0
- rasa/nlu/emulators/__init__.py +0 -0
- rasa/nlu/emulators/dialogflow.py +55 -0
- rasa/nlu/emulators/emulator.py +49 -0
- rasa/nlu/emulators/luis.py +86 -0
- rasa/nlu/emulators/no_emulator.py +10 -0
- rasa/nlu/emulators/wit.py +56 -0
- rasa/nlu/extractors/__init__.py +0 -0
- rasa/nlu/extractors/crf_entity_extractor.py +715 -0
- rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
- rasa/nlu/extractors/entity_synonyms.py +178 -0
- rasa/nlu/extractors/extractor.py +470 -0
- rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
- rasa/nlu/extractors/regex_entity_extractor.py +220 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
- rasa/nlu/featurizers/__init__.py +0 -0
- rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +445 -0
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +768 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
- rasa/nlu/featurizers/featurizer.py +89 -0
- rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +867 -0
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +571 -0
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +271 -0
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
- rasa/nlu/model.py +24 -0
- rasa/nlu/run.py +27 -0
- rasa/nlu/selectors/__init__.py +0 -0
- rasa/nlu/selectors/response_selector.py +987 -0
- rasa/nlu/test.py +1940 -0
- rasa/nlu/tokenizers/__init__.py +0 -0
- rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
- rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
- rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
- rasa/nlu/tokenizers/tokenizer.py +239 -0
- rasa/nlu/tokenizers/whitespace_tokenizer.py +95 -0
- rasa/nlu/utils/__init__.py +35 -0
- rasa/nlu/utils/bilou_utils.py +462 -0
- rasa/nlu/utils/hugging_face/__init__.py +0 -0
- rasa/nlu/utils/hugging_face/registry.py +108 -0
- rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
- rasa/nlu/utils/mitie_utils.py +113 -0
- rasa/nlu/utils/pattern_utils.py +168 -0
- rasa/nlu/utils/spacy_utils.py +310 -0
- rasa/plugin.py +90 -0
- rasa/server.py +1588 -0
- rasa/shared/__init__.py +0 -0
- rasa/shared/constants.py +311 -0
- rasa/shared/core/__init__.py +0 -0
- rasa/shared/core/command_payload_reader.py +109 -0
- rasa/shared/core/constants.py +180 -0
- rasa/shared/core/conversation.py +46 -0
- rasa/shared/core/domain.py +2172 -0
- rasa/shared/core/events.py +2559 -0
- rasa/shared/core/flows/__init__.py +7 -0
- rasa/shared/core/flows/flow.py +562 -0
- rasa/shared/core/flows/flow_path.py +84 -0
- rasa/shared/core/flows/flow_step.py +146 -0
- rasa/shared/core/flows/flow_step_links.py +319 -0
- rasa/shared/core/flows/flow_step_sequence.py +70 -0
- rasa/shared/core/flows/flows_list.py +258 -0
- rasa/shared/core/flows/flows_yaml_schema.json +303 -0
- rasa/shared/core/flows/nlu_trigger.py +117 -0
- rasa/shared/core/flows/steps/__init__.py +24 -0
- rasa/shared/core/flows/steps/action.py +56 -0
- rasa/shared/core/flows/steps/call.py +64 -0
- rasa/shared/core/flows/steps/collect.py +112 -0
- rasa/shared/core/flows/steps/constants.py +5 -0
- rasa/shared/core/flows/steps/continuation.py +36 -0
- rasa/shared/core/flows/steps/end.py +22 -0
- rasa/shared/core/flows/steps/internal.py +44 -0
- rasa/shared/core/flows/steps/link.py +51 -0
- rasa/shared/core/flows/steps/no_operation.py +48 -0
- rasa/shared/core/flows/steps/set_slots.py +50 -0
- rasa/shared/core/flows/steps/start.py +30 -0
- rasa/shared/core/flows/utils.py +39 -0
- rasa/shared/core/flows/validation.py +735 -0
- rasa/shared/core/flows/yaml_flows_io.py +405 -0
- rasa/shared/core/generator.py +908 -0
- rasa/shared/core/slot_mappings.py +526 -0
- rasa/shared/core/slots.py +654 -0
- rasa/shared/core/trackers.py +1183 -0
- rasa/shared/core/training_data/__init__.py +0 -0
- rasa/shared/core/training_data/loading.py +89 -0
- rasa/shared/core/training_data/story_reader/__init__.py +0 -0
- rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
- rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
- rasa/shared/core/training_data/story_writer/__init__.py +0 -0
- rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
- rasa/shared/core/training_data/story_writer/yaml_story_writer.py +444 -0
- rasa/shared/core/training_data/structures.py +858 -0
- rasa/shared/core/training_data/visualization.html +146 -0
- rasa/shared/core/training_data/visualization.py +603 -0
- rasa/shared/data.py +249 -0
- rasa/shared/engine/__init__.py +0 -0
- rasa/shared/engine/caching.py +26 -0
- rasa/shared/exceptions.py +167 -0
- rasa/shared/importers/__init__.py +0 -0
- rasa/shared/importers/importer.py +770 -0
- rasa/shared/importers/multi_project.py +215 -0
- rasa/shared/importers/rasa.py +108 -0
- rasa/shared/importers/remote_importer.py +196 -0
- rasa/shared/importers/utils.py +36 -0
- rasa/shared/nlu/__init__.py +0 -0
- rasa/shared/nlu/constants.py +53 -0
- rasa/shared/nlu/interpreter.py +10 -0
- rasa/shared/nlu/training_data/__init__.py +0 -0
- rasa/shared/nlu/training_data/entities_parser.py +208 -0
- rasa/shared/nlu/training_data/features.py +492 -0
- rasa/shared/nlu/training_data/formats/__init__.py +10 -0
- rasa/shared/nlu/training_data/formats/dialogflow.py +163 -0
- rasa/shared/nlu/training_data/formats/luis.py +87 -0
- rasa/shared/nlu/training_data/formats/rasa.py +135 -0
- rasa/shared/nlu/training_data/formats/rasa_yaml.py +618 -0
- rasa/shared/nlu/training_data/formats/readerwriter.py +244 -0
- rasa/shared/nlu/training_data/formats/wit.py +52 -0
- rasa/shared/nlu/training_data/loading.py +137 -0
- rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
- rasa/shared/nlu/training_data/message.py +490 -0
- rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
- rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
- rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
- rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
- rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
- rasa/shared/nlu/training_data/training_data.py +729 -0
- rasa/shared/nlu/training_data/util.py +223 -0
- rasa/shared/providers/__init__.py +0 -0
- rasa/shared/providers/_configs/__init__.py +0 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +677 -0
- rasa/shared/providers/_configs/client_config.py +59 -0
- rasa/shared/providers/_configs/default_litellm_client_config.py +132 -0
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +236 -0
- rasa/shared/providers/_configs/litellm_router_client_config.py +222 -0
- rasa/shared/providers/_configs/model_group_config.py +173 -0
- rasa/shared/providers/_configs/openai_client_config.py +177 -0
- rasa/shared/providers/_configs/rasa_llm_client_config.py +75 -0
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +178 -0
- rasa/shared/providers/_configs/utils.py +117 -0
- rasa/shared/providers/_ssl_verification_utils.py +124 -0
- rasa/shared/providers/_utils.py +79 -0
- rasa/shared/providers/constants.py +7 -0
- rasa/shared/providers/embedding/__init__.py +0 -0
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +243 -0
- rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +335 -0
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +126 -0
- rasa/shared/providers/embedding/embedding_client.py +90 -0
- rasa/shared/providers/embedding/embedding_response.py +41 -0
- rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
- rasa/shared/providers/embedding/litellm_router_embedding_client.py +138 -0
- rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
- rasa/shared/providers/llm/__init__.py +0 -0
- rasa/shared/providers/llm/_base_litellm_client.py +265 -0
- rasa/shared/providers/llm/azure_openai_llm_client.py +415 -0
- rasa/shared/providers/llm/default_litellm_llm_client.py +110 -0
- rasa/shared/providers/llm/litellm_router_llm_client.py +202 -0
- rasa/shared/providers/llm/llm_client.py +78 -0
- rasa/shared/providers/llm/llm_response.py +50 -0
- rasa/shared/providers/llm/openai_llm_client.py +161 -0
- rasa/shared/providers/llm/rasa_llm_client.py +120 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +276 -0
- rasa/shared/providers/mappings.py +94 -0
- rasa/shared/providers/router/__init__.py +0 -0
- rasa/shared/providers/router/_base_litellm_router_client.py +185 -0
- rasa/shared/providers/router/router_client.py +75 -0
- rasa/shared/utils/__init__.py +0 -0
- rasa/shared/utils/cli.py +102 -0
- rasa/shared/utils/common.py +324 -0
- rasa/shared/utils/constants.py +4 -0
- rasa/shared/utils/health_check/__init__.py +0 -0
- rasa/shared/utils/health_check/embeddings_health_check_mixin.py +31 -0
- rasa/shared/utils/health_check/health_check.py +258 -0
- rasa/shared/utils/health_check/llm_health_check_mixin.py +31 -0
- rasa/shared/utils/io.py +499 -0
- rasa/shared/utils/llm.py +764 -0
- rasa/shared/utils/pykwalify_extensions.py +27 -0
- rasa/shared/utils/schemas/__init__.py +0 -0
- rasa/shared/utils/schemas/config.yml +2 -0
- rasa/shared/utils/schemas/domain.yml +145 -0
- rasa/shared/utils/schemas/events.py +214 -0
- rasa/shared/utils/schemas/model_config.yml +36 -0
- rasa/shared/utils/schemas/stories.yml +173 -0
- rasa/shared/utils/yaml.py +1068 -0
- rasa/studio/__init__.py +0 -0
- rasa/studio/auth.py +270 -0
- rasa/studio/config.py +136 -0
- rasa/studio/constants.py +19 -0
- rasa/studio/data_handler.py +368 -0
- rasa/studio/download.py +489 -0
- rasa/studio/results_logger.py +137 -0
- rasa/studio/train.py +134 -0
- rasa/studio/upload.py +563 -0
- rasa/telemetry.py +1876 -0
- rasa/tracing/__init__.py +0 -0
- rasa/tracing/config.py +355 -0
- rasa/tracing/constants.py +62 -0
- rasa/tracing/instrumentation/__init__.py +0 -0
- rasa/tracing/instrumentation/attribute_extractors.py +765 -0
- rasa/tracing/instrumentation/instrumentation.py +1306 -0
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +144 -0
- rasa/tracing/instrumentation/metrics.py +294 -0
- rasa/tracing/metric_instrument_provider.py +205 -0
- rasa/utils/__init__.py +0 -0
- rasa/utils/beta.py +83 -0
- rasa/utils/cli.py +28 -0
- rasa/utils/common.py +639 -0
- rasa/utils/converter.py +53 -0
- rasa/utils/endpoints.py +331 -0
- rasa/utils/io.py +252 -0
- rasa/utils/json_utils.py +60 -0
- rasa/utils/licensing.py +542 -0
- rasa/utils/log_utils.py +181 -0
- rasa/utils/mapper.py +210 -0
- rasa/utils/ml_utils.py +147 -0
- rasa/utils/plotting.py +362 -0
- rasa/utils/sanic_error_handler.py +32 -0
- rasa/utils/singleton.py +23 -0
- rasa/utils/tensorflow/__init__.py +0 -0
- rasa/utils/tensorflow/callback.py +112 -0
- rasa/utils/tensorflow/constants.py +116 -0
- rasa/utils/tensorflow/crf.py +492 -0
- rasa/utils/tensorflow/data_generator.py +440 -0
- rasa/utils/tensorflow/environment.py +161 -0
- rasa/utils/tensorflow/exceptions.py +5 -0
- rasa/utils/tensorflow/feature_array.py +366 -0
- rasa/utils/tensorflow/layers.py +1565 -0
- rasa/utils/tensorflow/layers_utils.py +113 -0
- rasa/utils/tensorflow/metrics.py +281 -0
- rasa/utils/tensorflow/model_data.py +798 -0
- rasa/utils/tensorflow/model_data_utils.py +499 -0
- rasa/utils/tensorflow/models.py +935 -0
- rasa/utils/tensorflow/rasa_layers.py +1094 -0
- rasa/utils/tensorflow/transformer.py +640 -0
- rasa/utils/tensorflow/types.py +6 -0
- rasa/utils/train_utils.py +572 -0
- rasa/utils/url_tools.py +53 -0
- rasa/utils/yaml.py +54 -0
- rasa/validator.py +1644 -0
- rasa/version.py +3 -0
- rasa_pro-3.12.0.dev1.dist-info/METADATA +199 -0
- rasa_pro-3.12.0.dev1.dist-info/NOTICE +5 -0
- rasa_pro-3.12.0.dev1.dist-info/RECORD +790 -0
- rasa_pro-3.12.0.dev1.dist-info/WHEEL +4 -0
- rasa_pro-3.12.0.dev1.dist-info/entry_points.txt +3 -0
rasa/cli/interactive.py
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import logging
|
|
3
|
+
import os
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import List, Optional, Text, Union
|
|
6
|
+
|
|
7
|
+
from rasa import model
|
|
8
|
+
from rasa.cli import SubParsersAction
|
|
9
|
+
from rasa.cli.arguments import interactive as arguments
|
|
10
|
+
import rasa.cli.train as train
|
|
11
|
+
import rasa.cli.utils
|
|
12
|
+
from rasa.engine.storage.local_model_storage import LocalModelStorage
|
|
13
|
+
from rasa.shared.constants import (
|
|
14
|
+
ASSISTANT_ID_DEFAULT_VALUE,
|
|
15
|
+
ASSISTANT_ID_KEY,
|
|
16
|
+
DEFAULT_ENDPOINTS_PATH,
|
|
17
|
+
DEFAULT_MODELS_PATH,
|
|
18
|
+
)
|
|
19
|
+
from rasa.shared.data import TrainingType
|
|
20
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
21
|
+
import rasa.shared.utils.cli
|
|
22
|
+
import rasa.utils.common
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
logger = logging.getLogger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def add_subparser(
|
|
29
|
+
subparsers: SubParsersAction, parents: List[argparse.ArgumentParser]
|
|
30
|
+
) -> None:
|
|
31
|
+
"""Add all interactive cli parsers.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
subparsers: subparser we are going to attach to
|
|
35
|
+
parents: Parent parsers, needed to ensure tree structure in argparse
|
|
36
|
+
"""
|
|
37
|
+
interactive_parser = subparsers.add_parser(
|
|
38
|
+
"interactive",
|
|
39
|
+
conflict_handler="resolve",
|
|
40
|
+
parents=parents,
|
|
41
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
42
|
+
help="Starts an interactive learning session to create new training data for a "
|
|
43
|
+
"Rasa model by chatting.",
|
|
44
|
+
)
|
|
45
|
+
interactive_parser.set_defaults(func=interactive, core_only=False)
|
|
46
|
+
|
|
47
|
+
interactive_subparsers = interactive_parser.add_subparsers()
|
|
48
|
+
interactive_core_parser = interactive_subparsers.add_parser(
|
|
49
|
+
"core",
|
|
50
|
+
conflict_handler="resolve",
|
|
51
|
+
parents=parents,
|
|
52
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
53
|
+
help="Starts an interactive learning session model to create new training data "
|
|
54
|
+
"for a Rasa Core model by chatting. Uses the 'RegexMessageHandler', i.e. "
|
|
55
|
+
"`/<intent>` input format.",
|
|
56
|
+
)
|
|
57
|
+
interactive_core_parser.set_defaults(func=interactive, core_only=True)
|
|
58
|
+
|
|
59
|
+
arguments.set_interactive_arguments(interactive_parser)
|
|
60
|
+
arguments.set_interactive_core_arguments(interactive_core_parser)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def interactive(args: argparse.Namespace) -> None:
|
|
64
|
+
_set_not_required_args(args)
|
|
65
|
+
file_importer = TrainingDataImporter.load_from_config(
|
|
66
|
+
args.config, args.domain, args.data if not args.core_only else [args.stories]
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
if args.model is None:
|
|
70
|
+
story_graph = file_importer.get_stories()
|
|
71
|
+
if not story_graph or story_graph.is_empty():
|
|
72
|
+
rasa.shared.utils.cli.print_error_and_exit(
|
|
73
|
+
"Could not run interactive learning without either core "
|
|
74
|
+
"data or a model containing core data."
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
zipped_model: Optional[Union[Text, Path]] = (
|
|
78
|
+
train.run_core_training(args)
|
|
79
|
+
if args.core_only
|
|
80
|
+
else train.run_training(args)
|
|
81
|
+
)
|
|
82
|
+
if not zipped_model:
|
|
83
|
+
rasa.shared.utils.cli.print_error_and_exit(
|
|
84
|
+
"Could not train an initial model. Either pass paths "
|
|
85
|
+
"to the relevant training files (`--data`, `--config`, `--domain`), "
|
|
86
|
+
"or use 'rasa train' to train a model."
|
|
87
|
+
)
|
|
88
|
+
else:
|
|
89
|
+
validate_assistant_id_key_in_config(file_importer)
|
|
90
|
+
|
|
91
|
+
zipped_model = get_provided_model(args.model)
|
|
92
|
+
if not (zipped_model and os.path.exists(zipped_model)):
|
|
93
|
+
rasa.shared.utils.cli.print_error_and_exit(
|
|
94
|
+
f"Interactive learning process cannot be started as no "
|
|
95
|
+
f"initial model was found at path '{args.model}'. "
|
|
96
|
+
f"Use 'rasa train' to train a model."
|
|
97
|
+
)
|
|
98
|
+
if not args.skip_visualization:
|
|
99
|
+
logger.info(f"Loading visualization data from {args.data}.")
|
|
100
|
+
|
|
101
|
+
perform_interactive_learning(args, zipped_model, file_importer)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def _set_not_required_args(args: argparse.Namespace) -> None:
|
|
105
|
+
args.fixed_model_name = None
|
|
106
|
+
args.store_uncompressed = False
|
|
107
|
+
args.dry_run = False
|
|
108
|
+
args.skip_validation = True
|
|
109
|
+
args.fail_on_validation_warnings = False
|
|
110
|
+
args.validation_max_history = None
|
|
111
|
+
args.remote_storage = None
|
|
112
|
+
args.keep_local_model_copy = False
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def perform_interactive_learning(
|
|
116
|
+
args: argparse.Namespace,
|
|
117
|
+
zipped_model: Union[Text, "Path"],
|
|
118
|
+
file_importer: TrainingDataImporter,
|
|
119
|
+
) -> None:
|
|
120
|
+
"""Performs interactive learning.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
args: Namespace arguments.
|
|
124
|
+
zipped_model: Path to zipped model.
|
|
125
|
+
file_importer: File importer which provides the training data and model config.
|
|
126
|
+
"""
|
|
127
|
+
from rasa.core.train import do_interactive_learning
|
|
128
|
+
|
|
129
|
+
args.model = str(zipped_model)
|
|
130
|
+
|
|
131
|
+
metadata = LocalModelStorage.metadata_from_archive(zipped_model)
|
|
132
|
+
if metadata.training_type == TrainingType.NLU:
|
|
133
|
+
rasa.shared.utils.cli.print_error_and_exit(
|
|
134
|
+
"Can not run interactive learning on an NLU-only model."
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
args.endpoints = rasa.cli.utils.get_validated_path(
|
|
138
|
+
args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
do_interactive_learning(args, file_importer)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def get_provided_model(arg_model: Text) -> Optional[Union[Text, Path]]:
|
|
145
|
+
"""Checks model path input and selects model from it."""
|
|
146
|
+
model_path = rasa.cli.utils.get_validated_path(
|
|
147
|
+
arg_model, "model", DEFAULT_MODELS_PATH
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
return (
|
|
151
|
+
model.get_latest_model(model_path) if os.path.isdir(model_path) else model_path
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def validate_assistant_id_key_in_config(file_importer: TrainingDataImporter) -> None:
|
|
156
|
+
"""Verifies that config contains a unique value for assistant identifier."""
|
|
157
|
+
config_data = file_importer.get_config()
|
|
158
|
+
assistant_id = config_data.get(ASSISTANT_ID_KEY)
|
|
159
|
+
|
|
160
|
+
if assistant_id is None or assistant_id == ASSISTANT_ID_DEFAULT_VALUE:
|
|
161
|
+
rasa.shared.utils.cli.print_error_and_exit(
|
|
162
|
+
f"The '{ASSISTANT_ID_KEY}' key in the config file is either missing or "
|
|
163
|
+
f"is set to the default value. Please replace the placeholder default "
|
|
164
|
+
f"value and re-train the model."
|
|
165
|
+
)
|
|
166
|
+
return None
|
rasa/cli/license.py
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
import rasa.shared.utils.cli
|
|
5
|
+
from rasa.cli import SubParsersAction
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def add_subparser(
|
|
9
|
+
subparsers: SubParsersAction, parents: List[argparse.ArgumentParser]
|
|
10
|
+
) -> None:
|
|
11
|
+
"""Add license parser.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
subparsers: subparser we are going to attach to
|
|
15
|
+
parents: Parent parsers, needed to ensure tree structure in argparse
|
|
16
|
+
"""
|
|
17
|
+
license_parser = subparsers.add_parser(
|
|
18
|
+
"license",
|
|
19
|
+
parents=parents,
|
|
20
|
+
help="Displays licensing information.",
|
|
21
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
22
|
+
description="Display licensing information.",
|
|
23
|
+
)
|
|
24
|
+
license_parser.set_defaults(func=display_license_information)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def display_license_information(_: argparse.Namespace) -> None:
|
|
28
|
+
"""Display licensing information to stdout."""
|
|
29
|
+
rasa.shared.utils.cli.print_info(
|
|
30
|
+
"By installing and using this software, you agree to be "
|
|
31
|
+
"bound by the terms and conditions of the Developer Terms "
|
|
32
|
+
"available at https://rasa.com/developer-terms. "
|
|
33
|
+
"Please review the Developer Terms carefully before proceeding.\n\n"
|
|
34
|
+
"Rasa Pro relies on several 3rd-party dependencies. "
|
|
35
|
+
"The ones below require a license disclorure:\n",
|
|
36
|
+
PSYCOPG2_LICENSE_DISCLOSURE,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
PSYCOPG2_LICENSE_DISCLOSURE = """
|
|
41
|
+
psycopg2 & psycopg2-binary
|
|
42
|
+
--------------------------
|
|
43
|
+
|
|
44
|
+
psycopg2 and the LGPL
|
|
45
|
+
|
|
46
|
+
psycopg2 is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
47
|
+
|
|
48
|
+
psycopg2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
|
49
|
+
|
|
50
|
+
In addition, as a special exception, the copyright holders give permission to link this program with the OpenSSL library (or with modified versions of OpenSSL that use the same license as OpenSSL), and distribute linked combinations including the two.
|
|
51
|
+
|
|
52
|
+
You must obey the GNU Lesser General Public License in all respects for all of the code used other than OpenSSL. If you modify file(s) with this exception, you may extend this exception to your version of the file(s), but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. If you delete this exception statement from all source files in the program, then also delete it here.
|
|
53
|
+
|
|
54
|
+
You should have received a copy of the GNU Lesser General Public License along with psycopg2 (see the doc/ directory.) If not, see https://www.gnu.org/licenses/. Alternative licenses
|
|
55
|
+
|
|
56
|
+
The following BSD-like license applies (at your option) to the files following the pattern psycopg/adapter*.{h,c} and psycopg/microprotocol*.{h,c}:
|
|
57
|
+
|
|
58
|
+
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
|
59
|
+
|
|
60
|
+
The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
|
61
|
+
|
|
62
|
+
Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
|
63
|
+
|
|
64
|
+
This notice may not be removed or altered from any source distribution.
|
|
65
|
+
""" # noqa: E501
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import asyncio
|
|
3
|
+
import sys
|
|
4
|
+
from typing import List, Any, Dict
|
|
5
|
+
|
|
6
|
+
import structlog
|
|
7
|
+
|
|
8
|
+
import rasa.cli.utils
|
|
9
|
+
import rasa.shared.utils.cli
|
|
10
|
+
import rasa.shared.utils.io
|
|
11
|
+
import rasa.shared.utils.yaml
|
|
12
|
+
from rasa.cli import SubParsersAction
|
|
13
|
+
from rasa.cli.arguments.default_arguments import (
|
|
14
|
+
add_endpoint_param,
|
|
15
|
+
add_model_param,
|
|
16
|
+
add_remote_storage_param,
|
|
17
|
+
)
|
|
18
|
+
from rasa.cli.e2e_test import (
|
|
19
|
+
read_test_cases,
|
|
20
|
+
validate_model_path,
|
|
21
|
+
RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME,
|
|
22
|
+
)
|
|
23
|
+
from rasa.core.exceptions import AgentNotReady
|
|
24
|
+
from rasa.core.utils import AvailableEndpoints
|
|
25
|
+
from rasa.dialogue_understanding.generator import SingleStepLLMCommandGenerator
|
|
26
|
+
from rasa.e2e_test.e2e_test_runner import E2ETestRunner
|
|
27
|
+
from rasa.llm_fine_tuning.annotation_module import annotate_e2e_tests
|
|
28
|
+
from rasa.llm_fine_tuning.llm_data_preparation_module import convert_to_fine_tuning_data
|
|
29
|
+
from rasa.llm_fine_tuning.paraphrasing.conversation_rephraser import (
|
|
30
|
+
ConversationRephraser,
|
|
31
|
+
)
|
|
32
|
+
from rasa.llm_fine_tuning.paraphrasing_module import create_paraphrased_conversations
|
|
33
|
+
from rasa.llm_fine_tuning.storage import (
|
|
34
|
+
StorageContext,
|
|
35
|
+
StorageType,
|
|
36
|
+
FileStorageStrategy,
|
|
37
|
+
)
|
|
38
|
+
from rasa.llm_fine_tuning.train_test_split_module import (
|
|
39
|
+
split_llm_fine_tuning_data,
|
|
40
|
+
INSTRUCTION_DATA_FORMAT,
|
|
41
|
+
CONVERSATIONAL_DATA_FORMAT,
|
|
42
|
+
)
|
|
43
|
+
from rasa.shared.constants import (
|
|
44
|
+
DEFAULT_ENDPOINTS_PATH,
|
|
45
|
+
DEFAULT_MODELS_PATH,
|
|
46
|
+
LLM_CONFIG_KEY,
|
|
47
|
+
)
|
|
48
|
+
from rasa.shared.utils.llm import (
|
|
49
|
+
combine_custom_and_default_config,
|
|
50
|
+
resolve_model_client_config,
|
|
51
|
+
)
|
|
52
|
+
from rasa.shared.utils.yaml import read_config_file
|
|
53
|
+
from rasa.utils.beta import ensure_beta_feature_is_enabled
|
|
54
|
+
|
|
55
|
+
DEFAULT_INPUT_E2E_TEST_PATH = "e2e_tests"
|
|
56
|
+
DEFAULT_OUTPUT_FOLDER = "output"
|
|
57
|
+
RESULT_SUMMARY_FILE = "result_summary.yaml"
|
|
58
|
+
PARAMETERS_FILE = "params.yaml"
|
|
59
|
+
|
|
60
|
+
structlogger = structlog.get_logger()
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def add_subparser(
|
|
64
|
+
subparsers: SubParsersAction, parents: List[argparse.ArgumentParser]
|
|
65
|
+
) -> None:
|
|
66
|
+
"""Add the llm fine-tuning subparser to `rasa test`.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
subparsers: subparser we are going to attach to
|
|
70
|
+
parents: Parent parsers, needed to ensure tree structure in argparse
|
|
71
|
+
"""
|
|
72
|
+
llm_parser = subparsers.add_parser(
|
|
73
|
+
"llm",
|
|
74
|
+
parents=parents,
|
|
75
|
+
conflict_handler="resolve",
|
|
76
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
77
|
+
help="Commands related to LLMs.",
|
|
78
|
+
)
|
|
79
|
+
llm_subparsers = llm_parser.add_subparsers()
|
|
80
|
+
|
|
81
|
+
llm_finetune_parser = llm_subparsers.add_parser(
|
|
82
|
+
"finetune",
|
|
83
|
+
parents=parents,
|
|
84
|
+
conflict_handler="resolve",
|
|
85
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
86
|
+
description="Commands related to LLM fine-tuning.",
|
|
87
|
+
)
|
|
88
|
+
llm_finetune_subparser = llm_finetune_parser.add_subparsers()
|
|
89
|
+
|
|
90
|
+
create_llm_finetune_data_preparation_subparser(llm_finetune_subparser, parents)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def create_llm_finetune_data_preparation_subparser(
|
|
94
|
+
fine_tune_llm_parser: SubParsersAction,
|
|
95
|
+
parents: List[argparse.ArgumentParser],
|
|
96
|
+
) -> argparse.ArgumentParser:
|
|
97
|
+
"""Create fine-tuning LLM data preparation subparser."""
|
|
98
|
+
data_preparation_subparser = fine_tune_llm_parser.add_parser(
|
|
99
|
+
"prepare-data",
|
|
100
|
+
parents=parents,
|
|
101
|
+
conflict_handler="resolve",
|
|
102
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
103
|
+
description="Prepares data for LLM fine-tuning.",
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
data_preparation_subparser.set_defaults(func=prepare_llm_fine_tuning_data)
|
|
107
|
+
|
|
108
|
+
add_data_preparation_arguments(data_preparation_subparser)
|
|
109
|
+
add_model_param(data_preparation_subparser, add_positional_arg=False)
|
|
110
|
+
add_endpoint_param(
|
|
111
|
+
data_preparation_subparser,
|
|
112
|
+
help_text="Configuration file for the model server and the connectors as a "
|
|
113
|
+
"yml file.",
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
return data_preparation_subparser
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def add_data_preparation_arguments(parser: argparse.ArgumentParser) -> None:
|
|
120
|
+
"""Arguments for preparing LLM fine-tuning data."""
|
|
121
|
+
parser.add_argument(
|
|
122
|
+
"-o",
|
|
123
|
+
"--out",
|
|
124
|
+
type=str,
|
|
125
|
+
default=DEFAULT_OUTPUT_FOLDER,
|
|
126
|
+
help="The output folder to store the data to.",
|
|
127
|
+
)
|
|
128
|
+
parser.add_argument(
|
|
129
|
+
"path-to-e2e-test-cases",
|
|
130
|
+
nargs="?",
|
|
131
|
+
type=str,
|
|
132
|
+
help="Input file or folder containing end-to-end test cases.",
|
|
133
|
+
default=DEFAULT_INPUT_E2E_TEST_PATH,
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
add_remote_storage_param(parser)
|
|
137
|
+
|
|
138
|
+
rephrasing_arguments = parser.add_argument_group("Rephrasing Module")
|
|
139
|
+
rephrasing_arguments.add_argument(
|
|
140
|
+
"--num-rephrases",
|
|
141
|
+
choices=range(0, 50),
|
|
142
|
+
type=int,
|
|
143
|
+
default=10,
|
|
144
|
+
help="Number of rephrases to be generated per user utterance.",
|
|
145
|
+
)
|
|
146
|
+
rephrasing_arguments.add_argument(
|
|
147
|
+
"--rephrase-config",
|
|
148
|
+
type=str,
|
|
149
|
+
default=None,
|
|
150
|
+
help="Path to config file that contains the configuration of the "
|
|
151
|
+
"rephrasing module.",
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
train_test_split_arguments = parser.add_argument_group("Train/Test Split Module")
|
|
155
|
+
train_test_split_arguments.add_argument(
|
|
156
|
+
"--train-frac",
|
|
157
|
+
type=restricted_float,
|
|
158
|
+
default=0.8,
|
|
159
|
+
help="The amount of data that should go into the training dataset. The value "
|
|
160
|
+
"should be >0.0 and <=1.0.",
|
|
161
|
+
)
|
|
162
|
+
train_test_split_arguments.add_argument(
|
|
163
|
+
"--output-format",
|
|
164
|
+
choices=[INSTRUCTION_DATA_FORMAT, CONVERSATIONAL_DATA_FORMAT],
|
|
165
|
+
type=str,
|
|
166
|
+
nargs="?",
|
|
167
|
+
default=INSTRUCTION_DATA_FORMAT,
|
|
168
|
+
help="Format of the output file.",
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def prepare_llm_fine_tuning_data(args: argparse.Namespace) -> None:
|
|
173
|
+
"""Prepare LLM fine-tuning data.
|
|
174
|
+
|
|
175
|
+
Args:
|
|
176
|
+
args: Commandline arguments.
|
|
177
|
+
"""
|
|
178
|
+
ensure_beta_feature_is_enabled(
|
|
179
|
+
"LLM fine-tuning recipe",
|
|
180
|
+
env_flag=RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME,
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
rephrase_config = (
|
|
184
|
+
read_config_file(args.rephrase_config) if args.rephrase_config else {}
|
|
185
|
+
)
|
|
186
|
+
ConversationRephraser.validate_config(rephrase_config)
|
|
187
|
+
|
|
188
|
+
# make sure the output directory exists
|
|
189
|
+
output_dir = args.out
|
|
190
|
+
rasa.shared.utils.io.create_directory(output_dir)
|
|
191
|
+
|
|
192
|
+
# read e2e test cases
|
|
193
|
+
path_to_test_cases = getattr(
|
|
194
|
+
args, "path-to-e2e-test-cases", DEFAULT_INPUT_E2E_TEST_PATH
|
|
195
|
+
)
|
|
196
|
+
test_suite = read_test_cases(path_to_test_cases)
|
|
197
|
+
# set up the e2e test runner
|
|
198
|
+
e2e_test_runner = set_up_e2e_test_runner(args)
|
|
199
|
+
|
|
200
|
+
if e2e_test_runner.agent.processor is None:
|
|
201
|
+
rasa.shared.utils.cli.print_error(
|
|
202
|
+
"No processor: Not able to retrieve flows and config from trained model."
|
|
203
|
+
)
|
|
204
|
+
sys.exit(0)
|
|
205
|
+
|
|
206
|
+
flows = asyncio.run(e2e_test_runner.agent.processor.get_flows())
|
|
207
|
+
llm_command_generator_config = _get_llm_command_generator_config(e2e_test_runner)
|
|
208
|
+
|
|
209
|
+
# set up storage context
|
|
210
|
+
storage_context = create_storage_context(StorageType.FILE, output_dir)
|
|
211
|
+
|
|
212
|
+
statistics = {}
|
|
213
|
+
|
|
214
|
+
# 1. annotate e2e tests
|
|
215
|
+
log_start_of_module("Annotation")
|
|
216
|
+
conversations = annotate_e2e_tests(e2e_test_runner, test_suite, storage_context)
|
|
217
|
+
statistics["num_input_e2e_tests"] = len(test_suite.test_cases)
|
|
218
|
+
statistics["num_annotated_conversations"] = len(conversations)
|
|
219
|
+
statistics["num_user_messages_across_conversations"] = sum(
|
|
220
|
+
[len(conversation.get_user_messages()) for conversation in conversations]
|
|
221
|
+
)
|
|
222
|
+
statistics["num_user_messages_to_rephrase_across_conversations"] = sum(
|
|
223
|
+
[
|
|
224
|
+
len(conversation.get_user_messages_to_rephrase())
|
|
225
|
+
for conversation in conversations
|
|
226
|
+
]
|
|
227
|
+
)
|
|
228
|
+
log_end_of_module("Annotation", statistics)
|
|
229
|
+
|
|
230
|
+
# 2. paraphrase conversations
|
|
231
|
+
log_start_of_module("Rephrasing")
|
|
232
|
+
conversations, rephrase_config = asyncio.run(
|
|
233
|
+
create_paraphrased_conversations(
|
|
234
|
+
conversations,
|
|
235
|
+
rephrase_config,
|
|
236
|
+
args.num_rephrases,
|
|
237
|
+
flows,
|
|
238
|
+
llm_command_generator_config,
|
|
239
|
+
storage_context,
|
|
240
|
+
)
|
|
241
|
+
)
|
|
242
|
+
statistics["num_passing_rephrased_user_messages"] = sum(
|
|
243
|
+
[conversation.get_number_of_rephrases(True) for conversation in conversations]
|
|
244
|
+
)
|
|
245
|
+
statistics["num_failing_rephrased_user_messages"] = sum(
|
|
246
|
+
[conversation.get_number_of_rephrases(False) for conversation in conversations]
|
|
247
|
+
)
|
|
248
|
+
log_end_of_module("Rephrasing", statistics)
|
|
249
|
+
|
|
250
|
+
# 3. create fine-tuning dataset
|
|
251
|
+
log_start_of_module("LLM Data Preparation")
|
|
252
|
+
llm_fine_tuning_data = convert_to_fine_tuning_data(conversations, storage_context)
|
|
253
|
+
statistics["num_ft_data_points"] = len(llm_fine_tuning_data)
|
|
254
|
+
log_end_of_module("LLM Data Preparation", statistics)
|
|
255
|
+
|
|
256
|
+
# 4. create train/test split
|
|
257
|
+
log_start_of_module("Train/Test Split")
|
|
258
|
+
train_data, val_data = split_llm_fine_tuning_data(
|
|
259
|
+
llm_fine_tuning_data,
|
|
260
|
+
args.train_frac,
|
|
261
|
+
args.output_format,
|
|
262
|
+
storage_context,
|
|
263
|
+
test_suite,
|
|
264
|
+
)
|
|
265
|
+
statistics["num_train_data_points"] = len(train_data)
|
|
266
|
+
statistics["num_val_data_points"] = len(val_data)
|
|
267
|
+
log_end_of_module("Train/Test Split", statistics)
|
|
268
|
+
|
|
269
|
+
# write down params and statistics to a file
|
|
270
|
+
write_params(args, rephrase_config, output_dir)
|
|
271
|
+
write_statistics(statistics, output_dir)
|
|
272
|
+
|
|
273
|
+
rasa.shared.utils.cli.print_success(
|
|
274
|
+
f"Data and intermediate results are written " f"to '{output_dir}'."
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def _get_llm_command_generator_config(e2e_test_runner: E2ETestRunner) -> Dict[str, Any]:
|
|
279
|
+
from rasa.dialogue_understanding.generator.constants import DEFAULT_LLM_CONFIG
|
|
280
|
+
|
|
281
|
+
train_schema = e2e_test_runner.agent.processor.model_metadata.train_schema # type: ignore
|
|
282
|
+
|
|
283
|
+
for node_name, node in train_schema.nodes.items():
|
|
284
|
+
if node.matches_type(SingleStepLLMCommandGenerator, include_subtypes=True):
|
|
285
|
+
# Configurations can reference model groups defined in the endpoints.yml
|
|
286
|
+
resolved_config = resolve_model_client_config(
|
|
287
|
+
node.config.get(LLM_CONFIG_KEY, {}), node_name
|
|
288
|
+
)
|
|
289
|
+
return combine_custom_and_default_config(
|
|
290
|
+
resolved_config, DEFAULT_LLM_CONFIG
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
rasa.shared.utils.cli.print_error(
|
|
294
|
+
"The provided model is not trained using 'SingleStepLLMCommandGenerator' or "
|
|
295
|
+
"its subclasses. Without it, no data for fine-tuning can be generated. To "
|
|
296
|
+
"resolve this, please include 'SingleStepLLMCommandGenerator' or its subclass "
|
|
297
|
+
"in your config and train your model."
|
|
298
|
+
)
|
|
299
|
+
sys.exit(1)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
def log_start_of_module(module_name: str) -> None:
|
|
303
|
+
log_info = f"Starting {module_name} Module"
|
|
304
|
+
rasa.shared.utils.cli.print_info(
|
|
305
|
+
f"{rasa.shared.utils.cli.pad(log_info, char='-')}\n"
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def log_end_of_module(module_name: str, statistics: Dict[str, int]) -> None:
|
|
310
|
+
log_info = f"Finished {module_name} Module"
|
|
311
|
+
rasa.shared.utils.cli.print_info(
|
|
312
|
+
f"{rasa.shared.utils.cli.pad(log_info, char='-')}\n"
|
|
313
|
+
)
|
|
314
|
+
rasa.shared.utils.cli.print_color(
|
|
315
|
+
"Current Statistics:", color=rasa.shared.utils.io.bcolors.BOLD
|
|
316
|
+
)
|
|
317
|
+
for key, value in statistics.items():
|
|
318
|
+
rasa.shared.utils.cli.print_color(
|
|
319
|
+
f" {key}: {value}", color=rasa.shared.utils.io.bcolors.BOLD
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
def restricted_float(x: Any) -> float:
|
|
324
|
+
try:
|
|
325
|
+
x = float(x)
|
|
326
|
+
except ValueError:
|
|
327
|
+
raise argparse.ArgumentTypeError("%r not a floating-point literal" % (x,))
|
|
328
|
+
|
|
329
|
+
if x <= 0.0 or x > 1.0:
|
|
330
|
+
raise argparse.ArgumentTypeError("%r not in range [0.0, 1.0]" % (x,))
|
|
331
|
+
return x
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def write_params(
|
|
335
|
+
args: argparse.Namespace, rephrase_config: Dict[str, Any], output_path: str
|
|
336
|
+
) -> None:
|
|
337
|
+
yaml_data = {
|
|
338
|
+
"parameters": {
|
|
339
|
+
"num_rephrases": args.num_rephrases,
|
|
340
|
+
"rephrase_config": rephrase_config,
|
|
341
|
+
"model": args.model,
|
|
342
|
+
"endpoints": args.endpoints,
|
|
343
|
+
"remote-storage": args.remote_storage,
|
|
344
|
+
"train_frac": args.train_frac,
|
|
345
|
+
"output_format": args.output_format,
|
|
346
|
+
"out": output_path,
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
rasa.shared.utils.yaml.write_yaml(yaml_data, f"{output_path}/{PARAMETERS_FILE}")
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
def write_statistics(statistics: Dict[str, Any], output_path: str) -> None:
|
|
354
|
+
rasa.shared.utils.yaml.write_yaml(
|
|
355
|
+
statistics, f"{output_path}/{RESULT_SUMMARY_FILE}"
|
|
356
|
+
)
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def get_valid_endpoints(endpoints_file: str) -> AvailableEndpoints:
|
|
360
|
+
validated_endpoints_file = rasa.cli.utils.get_validated_path(
|
|
361
|
+
endpoints_file, "endpoints", DEFAULT_ENDPOINTS_PATH, True
|
|
362
|
+
)
|
|
363
|
+
endpoints = AvailableEndpoints.get_instance(validated_endpoints_file)
|
|
364
|
+
|
|
365
|
+
# Ignore all endpoints apart from action server, model, nlu and nlg
|
|
366
|
+
# to ensure InMemoryTrackerStore is being used instead of production
|
|
367
|
+
# tracker store
|
|
368
|
+
endpoints.tracker_store = None
|
|
369
|
+
endpoints.lock_store = None
|
|
370
|
+
endpoints.event_broker = None
|
|
371
|
+
|
|
372
|
+
return endpoints
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
def set_up_e2e_test_runner(args: argparse.Namespace) -> E2ETestRunner:
|
|
376
|
+
endpoints = get_valid_endpoints(args.endpoints)
|
|
377
|
+
|
|
378
|
+
if endpoints.model is None:
|
|
379
|
+
args.model = validate_model_path(args.model, "model", DEFAULT_MODELS_PATH)
|
|
380
|
+
|
|
381
|
+
try:
|
|
382
|
+
return E2ETestRunner(
|
|
383
|
+
remote_storage=args.remote_storage,
|
|
384
|
+
model_path=args.model,
|
|
385
|
+
model_server=endpoints.model,
|
|
386
|
+
endpoints=endpoints,
|
|
387
|
+
)
|
|
388
|
+
except AgentNotReady as error:
|
|
389
|
+
structlogger.error(
|
|
390
|
+
"cli.finetune_llm.prepare_data.set_up_e2e_test_runner", error=error.message
|
|
391
|
+
)
|
|
392
|
+
sys.exit(1)
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
def create_storage_context(
|
|
396
|
+
storage_type: StorageType, output_dir: str
|
|
397
|
+
) -> StorageContext:
|
|
398
|
+
if storage_type == StorageType.FILE:
|
|
399
|
+
strategy = FileStorageStrategy(output_dir)
|
|
400
|
+
else:
|
|
401
|
+
raise ValueError("Unsupported storage type")
|
|
402
|
+
|
|
403
|
+
return StorageContext(strategy)
|