rasa-pro 3.12.0.dev1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- README.md +41 -0
- rasa/__init__.py +9 -0
- rasa/__main__.py +177 -0
- rasa/anonymization/__init__.py +2 -0
- rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
- rasa/anonymization/anonymization_pipeline.py +286 -0
- rasa/anonymization/anonymization_rule_executor.py +260 -0
- rasa/anonymization/anonymization_rule_orchestrator.py +120 -0
- rasa/anonymization/schemas/config.yml +47 -0
- rasa/anonymization/utils.py +118 -0
- rasa/api.py +160 -0
- rasa/cli/__init__.py +5 -0
- rasa/cli/arguments/__init__.py +0 -0
- rasa/cli/arguments/data.py +106 -0
- rasa/cli/arguments/default_arguments.py +207 -0
- rasa/cli/arguments/evaluate.py +65 -0
- rasa/cli/arguments/export.py +51 -0
- rasa/cli/arguments/interactive.py +74 -0
- rasa/cli/arguments/run.py +219 -0
- rasa/cli/arguments/shell.py +17 -0
- rasa/cli/arguments/test.py +211 -0
- rasa/cli/arguments/train.py +279 -0
- rasa/cli/arguments/visualize.py +34 -0
- rasa/cli/arguments/x.py +30 -0
- rasa/cli/data.py +354 -0
- rasa/cli/dialogue_understanding_test.py +251 -0
- rasa/cli/e2e_test.py +259 -0
- rasa/cli/evaluate.py +222 -0
- rasa/cli/export.py +250 -0
- rasa/cli/inspect.py +75 -0
- rasa/cli/interactive.py +166 -0
- rasa/cli/license.py +65 -0
- rasa/cli/llm_fine_tuning.py +403 -0
- rasa/cli/markers.py +78 -0
- rasa/cli/project_templates/__init__.py +0 -0
- rasa/cli/project_templates/calm/actions/__init__.py +0 -0
- rasa/cli/project_templates/calm/actions/action_template.py +27 -0
- rasa/cli/project_templates/calm/actions/add_contact.py +30 -0
- rasa/cli/project_templates/calm/actions/db.py +57 -0
- rasa/cli/project_templates/calm/actions/list_contacts.py +22 -0
- rasa/cli/project_templates/calm/actions/remove_contact.py +35 -0
- rasa/cli/project_templates/calm/config.yml +10 -0
- rasa/cli/project_templates/calm/credentials.yml +33 -0
- rasa/cli/project_templates/calm/data/flows/add_contact.yml +31 -0
- rasa/cli/project_templates/calm/data/flows/list_contacts.yml +14 -0
- rasa/cli/project_templates/calm/data/flows/remove_contact.yml +29 -0
- rasa/cli/project_templates/calm/db/contacts.json +10 -0
- rasa/cli/project_templates/calm/domain/add_contact.yml +39 -0
- rasa/cli/project_templates/calm/domain/list_contacts.yml +17 -0
- rasa/cli/project_templates/calm/domain/remove_contact.yml +38 -0
- rasa/cli/project_templates/calm/domain/shared.yml +10 -0
- rasa/cli/project_templates/calm/e2e_tests/cancelations/user_cancels_during_a_correction.yml +16 -0
- rasa/cli/project_templates/calm/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +7 -0
- rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_handle.yml +20 -0
- rasa/cli/project_templates/calm/e2e_tests/corrections/user_corrects_contact_name.yml +19 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +15 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_lists_contacts.yml +5 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact.yml +11 -0
- rasa/cli/project_templates/calm/e2e_tests/happy_paths/user_removes_contact_from_list.yml +12 -0
- rasa/cli/project_templates/calm/endpoints.yml +58 -0
- rasa/cli/project_templates/default/actions/__init__.py +0 -0
- rasa/cli/project_templates/default/actions/actions.py +27 -0
- rasa/cli/project_templates/default/config.yml +44 -0
- rasa/cli/project_templates/default/credentials.yml +33 -0
- rasa/cli/project_templates/default/data/nlu.yml +91 -0
- rasa/cli/project_templates/default/data/rules.yml +13 -0
- rasa/cli/project_templates/default/data/stories.yml +30 -0
- rasa/cli/project_templates/default/domain.yml +34 -0
- rasa/cli/project_templates/default/endpoints.yml +42 -0
- rasa/cli/project_templates/default/tests/test_stories.yml +91 -0
- rasa/cli/project_templates/tutorial/actions/__init__.py +0 -0
- rasa/cli/project_templates/tutorial/actions/actions.py +22 -0
- rasa/cli/project_templates/tutorial/config.yml +12 -0
- rasa/cli/project_templates/tutorial/credentials.yml +33 -0
- rasa/cli/project_templates/tutorial/data/flows.yml +8 -0
- rasa/cli/project_templates/tutorial/data/patterns.yml +11 -0
- rasa/cli/project_templates/tutorial/domain.yml +35 -0
- rasa/cli/project_templates/tutorial/endpoints.yml +55 -0
- rasa/cli/run.py +143 -0
- rasa/cli/scaffold.py +273 -0
- rasa/cli/shell.py +141 -0
- rasa/cli/studio/__init__.py +0 -0
- rasa/cli/studio/download.py +62 -0
- rasa/cli/studio/studio.py +296 -0
- rasa/cli/studio/train.py +59 -0
- rasa/cli/studio/upload.py +62 -0
- rasa/cli/telemetry.py +102 -0
- rasa/cli/test.py +280 -0
- rasa/cli/train.py +278 -0
- rasa/cli/utils.py +484 -0
- rasa/cli/visualize.py +40 -0
- rasa/cli/x.py +206 -0
- rasa/constants.py +45 -0
- rasa/core/__init__.py +17 -0
- rasa/core/actions/__init__.py +0 -0
- rasa/core/actions/action.py +1318 -0
- rasa/core/actions/action_clean_stack.py +59 -0
- rasa/core/actions/action_exceptions.py +24 -0
- rasa/core/actions/action_hangup.py +29 -0
- rasa/core/actions/action_repeat_bot_messages.py +89 -0
- rasa/core/actions/action_run_slot_rejections.py +210 -0
- rasa/core/actions/action_trigger_chitchat.py +31 -0
- rasa/core/actions/action_trigger_flow.py +109 -0
- rasa/core/actions/action_trigger_search.py +31 -0
- rasa/core/actions/constants.py +5 -0
- rasa/core/actions/custom_action_executor.py +191 -0
- rasa/core/actions/direct_custom_actions_executor.py +109 -0
- rasa/core/actions/e2e_stub_custom_action_executor.py +72 -0
- rasa/core/actions/forms.py +741 -0
- rasa/core/actions/grpc_custom_action_executor.py +251 -0
- rasa/core/actions/http_custom_action_executor.py +145 -0
- rasa/core/actions/loops.py +114 -0
- rasa/core/actions/two_stage_fallback.py +186 -0
- rasa/core/agent.py +559 -0
- rasa/core/auth_retry_tracker_store.py +122 -0
- rasa/core/brokers/__init__.py +0 -0
- rasa/core/brokers/broker.py +126 -0
- rasa/core/brokers/file.py +58 -0
- rasa/core/brokers/kafka.py +324 -0
- rasa/core/brokers/pika.py +388 -0
- rasa/core/brokers/sql.py +86 -0
- rasa/core/channels/__init__.py +61 -0
- rasa/core/channels/botframework.py +338 -0
- rasa/core/channels/callback.py +84 -0
- rasa/core/channels/channel.py +456 -0
- rasa/core/channels/console.py +241 -0
- rasa/core/channels/development_inspector.py +197 -0
- rasa/core/channels/facebook.py +419 -0
- rasa/core/channels/hangouts.py +329 -0
- rasa/core/channels/inspector/.eslintrc.cjs +25 -0
- rasa/core/channels/inspector/.gitignore +23 -0
- rasa/core/channels/inspector/README.md +54 -0
- rasa/core/channels/inspector/assets/favicon.ico +0 -0
- rasa/core/channels/inspector/assets/rasa-chat.js +2 -0
- rasa/core/channels/inspector/custom.d.ts +3 -0
- rasa/core/channels/inspector/dist/assets/arc-861ddd57.js +1 -0
- rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-921f02db.js +10 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-b436c4f8.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-511a23cb.js +2 -0
- rasa/core/channels/inspector/dist/assets/createText-62fc7601-ef476ecd.js +7 -0
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-f1878e0a.js +4 -0
- rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-fac75185.js +51 -0
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-201c5bbc.js +6 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-f904ae41.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-b080d6f2.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-1813da66.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-872af172.js +266 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-34a0af5a.js +70 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-128cfa44.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-21dbcb97.woff +0 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-222b5e26.svg +329 -0
- rasa/core/channels/inspector/dist/assets/ibm-plex-mono-v4-latin-regular-9ad89b2a.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-42ba3e3d.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-37817b51.js +1317 -0
- rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
- rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-6b731386.js +7 -0
- rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
- rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-e8579ac6.js +139 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-60c05ee4.woff +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-8335d9b8.svg +438 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-9cc39c75.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-700-ead13ccf.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-16705655.woff2 +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-5aeb07f9.woff +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9c459044.ttf +0 -0
- rasa/core/channels/inspector/dist/assets/lato-v14-latin-regular-9e2898a4.svg +435 -0
- rasa/core/channels/inspector/dist/assets/layout-89e6403a.js +1 -0
- rasa/core/channels/inspector/dist/assets/line-dc73d3fc.js +1 -0
- rasa/core/channels/inspector/dist/assets/linear-f5b1d2bc.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-82cb74fa.js +109 -0
- rasa/core/channels/inspector/dist/assets/ordinal-ba9b4969.js +1 -0
- rasa/core/channels/inspector/dist/assets/path-53f90ab3.js +1 -0
- rasa/core/channels/inspector/dist/assets/pieDiagram-dbbf0591-bdf5f29b.js +35 -0
- rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-c7a0cbe4.js +7 -0
- rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-7ec5410f.js +52 -0
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-caee5554.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-2935f8db.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-8f5d9693.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-d565d1de.js +1 -0
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-75ad421d.js +110 -0
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-7e764226.js +159 -0
- rasa/core/channels/inspector/dist/assets/styles-9c745c82-7a4e0e61.js +207 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-4019d1bf.js +1 -0
- rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-01ea12df.js +61 -0
- rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-89407137.js +7 -0
- rasa/core/channels/inspector/dist/index.html +42 -0
- rasa/core/channels/inspector/index.html +40 -0
- rasa/core/channels/inspector/jest.config.ts +13 -0
- rasa/core/channels/inspector/package.json +52 -0
- rasa/core/channels/inspector/setupTests.ts +2 -0
- rasa/core/channels/inspector/src/App.tsx +220 -0
- rasa/core/channels/inspector/src/components/Chat.tsx +95 -0
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +108 -0
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +136 -0
- rasa/core/channels/inspector/src/components/ExpandIcon.tsx +16 -0
- rasa/core/channels/inspector/src/components/FullscreenButton.tsx +45 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +22 -0
- rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +21 -0
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +32 -0
- rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +39 -0
- rasa/core/channels/inspector/src/components/Slots.tsx +91 -0
- rasa/core/channels/inspector/src/components/Welcome.tsx +54 -0
- rasa/core/channels/inspector/src/helpers/audiostream.ts +191 -0
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +392 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +306 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +127 -0
- rasa/core/channels/inspector/src/main.tsx +13 -0
- rasa/core/channels/inspector/src/theme/Button/Button.ts +29 -0
- rasa/core/channels/inspector/src/theme/Heading/Heading.ts +31 -0
- rasa/core/channels/inspector/src/theme/Input/Input.ts +27 -0
- rasa/core/channels/inspector/src/theme/Link/Link.ts +10 -0
- rasa/core/channels/inspector/src/theme/Modal/Modal.ts +47 -0
- rasa/core/channels/inspector/src/theme/Table/Table.tsx +38 -0
- rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +12 -0
- rasa/core/channels/inspector/src/theme/base/breakpoints.ts +8 -0
- rasa/core/channels/inspector/src/theme/base/colors.ts +88 -0
- rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +29 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.svg +329 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/ibm-plex-mono-v4-latin/ibm-plex-mono-v4-latin-regular.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.svg +438 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-700.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.eot +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.svg +435 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.ttf +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff +0 -0
- rasa/core/channels/inspector/src/theme/base/fonts/lato-v14-latin/lato-v14-latin-regular.woff2 +0 -0
- rasa/core/channels/inspector/src/theme/base/radii.ts +9 -0
- rasa/core/channels/inspector/src/theme/base/shadows.ts +7 -0
- rasa/core/channels/inspector/src/theme/base/sizes.ts +7 -0
- rasa/core/channels/inspector/src/theme/base/space.ts +15 -0
- rasa/core/channels/inspector/src/theme/base/styles.ts +13 -0
- rasa/core/channels/inspector/src/theme/base/typography.ts +24 -0
- rasa/core/channels/inspector/src/theme/base/zIndices.ts +19 -0
- rasa/core/channels/inspector/src/theme/index.ts +101 -0
- rasa/core/channels/inspector/src/types.ts +84 -0
- rasa/core/channels/inspector/src/vite-env.d.ts +1 -0
- rasa/core/channels/inspector/tests/__mocks__/fileMock.ts +1 -0
- rasa/core/channels/inspector/tests/__mocks__/matchMedia.ts +16 -0
- rasa/core/channels/inspector/tests/__mocks__/styleMock.ts +1 -0
- rasa/core/channels/inspector/tests/renderWithProviders.tsx +14 -0
- rasa/core/channels/inspector/tsconfig.json +26 -0
- rasa/core/channels/inspector/tsconfig.node.json +10 -0
- rasa/core/channels/inspector/vite.config.ts +8 -0
- rasa/core/channels/inspector/yarn.lock +6249 -0
- rasa/core/channels/mattermost.py +229 -0
- rasa/core/channels/rasa_chat.py +126 -0
- rasa/core/channels/rest.py +230 -0
- rasa/core/channels/rocketchat.py +174 -0
- rasa/core/channels/slack.py +620 -0
- rasa/core/channels/socketio.py +302 -0
- rasa/core/channels/telegram.py +298 -0
- rasa/core/channels/twilio.py +169 -0
- rasa/core/channels/vier_cvg.py +374 -0
- rasa/core/channels/voice_ready/__init__.py +0 -0
- rasa/core/channels/voice_ready/audiocodes.py +501 -0
- rasa/core/channels/voice_ready/jambonz.py +121 -0
- rasa/core/channels/voice_ready/jambonz_protocol.py +396 -0
- rasa/core/channels/voice_ready/twilio_voice.py +403 -0
- rasa/core/channels/voice_ready/utils.py +37 -0
- rasa/core/channels/voice_stream/__init__.py +0 -0
- rasa/core/channels/voice_stream/asr/__init__.py +0 -0
- rasa/core/channels/voice_stream/asr/asr_engine.py +89 -0
- rasa/core/channels/voice_stream/asr/asr_event.py +18 -0
- rasa/core/channels/voice_stream/asr/azure.py +130 -0
- rasa/core/channels/voice_stream/asr/deepgram.py +90 -0
- rasa/core/channels/voice_stream/audio_bytes.py +8 -0
- rasa/core/channels/voice_stream/browser_audio.py +107 -0
- rasa/core/channels/voice_stream/call_state.py +23 -0
- rasa/core/channels/voice_stream/tts/__init__.py +0 -0
- rasa/core/channels/voice_stream/tts/azure.py +106 -0
- rasa/core/channels/voice_stream/tts/cartesia.py +118 -0
- rasa/core/channels/voice_stream/tts/tts_cache.py +27 -0
- rasa/core/channels/voice_stream/tts/tts_engine.py +58 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +173 -0
- rasa/core/channels/voice_stream/util.py +57 -0
- rasa/core/channels/voice_stream/voice_channel.py +427 -0
- rasa/core/channels/webexteams.py +134 -0
- rasa/core/concurrent_lock_store.py +210 -0
- rasa/core/constants.py +112 -0
- rasa/core/evaluation/__init__.py +0 -0
- rasa/core/evaluation/marker.py +267 -0
- rasa/core/evaluation/marker_base.py +923 -0
- rasa/core/evaluation/marker_stats.py +293 -0
- rasa/core/evaluation/marker_tracker_loader.py +103 -0
- rasa/core/exceptions.py +29 -0
- rasa/core/exporter.py +284 -0
- rasa/core/featurizers/__init__.py +0 -0
- rasa/core/featurizers/precomputation.py +410 -0
- rasa/core/featurizers/single_state_featurizer.py +421 -0
- rasa/core/featurizers/tracker_featurizers.py +1262 -0
- rasa/core/http_interpreter.py +89 -0
- rasa/core/information_retrieval/__init__.py +7 -0
- rasa/core/information_retrieval/faiss.py +124 -0
- rasa/core/information_retrieval/information_retrieval.py +137 -0
- rasa/core/information_retrieval/milvus.py +59 -0
- rasa/core/information_retrieval/qdrant.py +96 -0
- rasa/core/jobs.py +63 -0
- rasa/core/lock.py +139 -0
- rasa/core/lock_store.py +343 -0
- rasa/core/migrate.py +403 -0
- rasa/core/nlg/__init__.py +3 -0
- rasa/core/nlg/callback.py +146 -0
- rasa/core/nlg/contextual_response_rephraser.py +320 -0
- rasa/core/nlg/generator.py +230 -0
- rasa/core/nlg/interpolator.py +143 -0
- rasa/core/nlg/response.py +155 -0
- rasa/core/nlg/summarize.py +70 -0
- rasa/core/persistor.py +538 -0
- rasa/core/policies/__init__.py +0 -0
- rasa/core/policies/ensemble.py +329 -0
- rasa/core/policies/enterprise_search_policy.py +905 -0
- rasa/core/policies/enterprise_search_prompt_template.jinja2 +25 -0
- rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +60 -0
- rasa/core/policies/flow_policy.py +205 -0
- rasa/core/policies/flows/__init__.py +0 -0
- rasa/core/policies/flows/flow_exceptions.py +44 -0
- rasa/core/policies/flows/flow_executor.py +754 -0
- rasa/core/policies/flows/flow_step_result.py +43 -0
- rasa/core/policies/intentless_policy.py +1031 -0
- rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
- rasa/core/policies/memoization.py +538 -0
- rasa/core/policies/policy.py +725 -0
- rasa/core/policies/rule_policy.py +1273 -0
- rasa/core/policies/ted_policy.py +2169 -0
- rasa/core/policies/unexpected_intent_policy.py +1022 -0
- rasa/core/processor.py +1465 -0
- rasa/core/run.py +342 -0
- rasa/core/secrets_manager/__init__.py +0 -0
- rasa/core/secrets_manager/constants.py +36 -0
- rasa/core/secrets_manager/endpoints.py +391 -0
- rasa/core/secrets_manager/factory.py +241 -0
- rasa/core/secrets_manager/secret_manager.py +262 -0
- rasa/core/secrets_manager/vault.py +584 -0
- rasa/core/test.py +1335 -0
- rasa/core/tracker_store.py +1703 -0
- rasa/core/train.py +105 -0
- rasa/core/training/__init__.py +89 -0
- rasa/core/training/converters/__init__.py +0 -0
- rasa/core/training/converters/responses_prefix_converter.py +119 -0
- rasa/core/training/interactive.py +1744 -0
- rasa/core/training/story_conflict.py +381 -0
- rasa/core/training/training.py +93 -0
- rasa/core/utils.py +366 -0
- rasa/core/visualize.py +70 -0
- rasa/dialogue_understanding/__init__.py +0 -0
- rasa/dialogue_understanding/coexistence/__init__.py +0 -0
- rasa/dialogue_understanding/coexistence/constants.py +4 -0
- rasa/dialogue_understanding/coexistence/intent_based_router.py +196 -0
- rasa/dialogue_understanding/coexistence/llm_based_router.py +327 -0
- rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
- rasa/dialogue_understanding/commands/__init__.py +61 -0
- rasa/dialogue_understanding/commands/can_not_handle_command.py +70 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +125 -0
- rasa/dialogue_understanding/commands/change_flow_command.py +44 -0
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +57 -0
- rasa/dialogue_understanding/commands/clarify_command.py +86 -0
- rasa/dialogue_understanding/commands/command.py +85 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +297 -0
- rasa/dialogue_understanding/commands/error_command.py +79 -0
- rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
- rasa/dialogue_understanding/commands/handle_code_change_command.py +73 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +66 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +57 -0
- rasa/dialogue_understanding/commands/noop_command.py +54 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +60 -0
- rasa/dialogue_understanding/commands/restart_command.py +58 -0
- rasa/dialogue_understanding/commands/session_end_command.py +61 -0
- rasa/dialogue_understanding/commands/session_start_command.py +59 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +160 -0
- rasa/dialogue_understanding/commands/skip_question_command.py +75 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +107 -0
- rasa/dialogue_understanding/commands/user_silence_command.py +59 -0
- rasa/dialogue_understanding/commands/utils.py +45 -0
- rasa/dialogue_understanding/generator/__init__.py +21 -0
- rasa/dialogue_understanding/generator/command_generator.py +464 -0
- rasa/dialogue_understanding/generator/constants.py +27 -0
- rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +466 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +500 -0
- rasa/dialogue_understanding/generator/llm_command_generator.py +67 -0
- rasa/dialogue_understanding/generator/multi_step/__init__.py +0 -0
- rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2 +62 -0
- rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2 +38 -0
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +920 -0
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +261 -0
- rasa/dialogue_understanding/generator/single_step/__init__.py +0 -0
- rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +60 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +486 -0
- rasa/dialogue_understanding/patterns/__init__.py +0 -0
- rasa/dialogue_understanding/patterns/cancel.py +111 -0
- rasa/dialogue_understanding/patterns/cannot_handle.py +43 -0
- rasa/dialogue_understanding/patterns/chitchat.py +37 -0
- rasa/dialogue_understanding/patterns/clarify.py +97 -0
- rasa/dialogue_understanding/patterns/code_change.py +41 -0
- rasa/dialogue_understanding/patterns/collect_information.py +90 -0
- rasa/dialogue_understanding/patterns/completed.py +40 -0
- rasa/dialogue_understanding/patterns/continue_interrupted.py +42 -0
- rasa/dialogue_understanding/patterns/correction.py +278 -0
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +301 -0
- rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
- rasa/dialogue_understanding/patterns/internal_error.py +47 -0
- rasa/dialogue_understanding/patterns/repeat.py +37 -0
- rasa/dialogue_understanding/patterns/restart.py +37 -0
- rasa/dialogue_understanding/patterns/search.py +37 -0
- rasa/dialogue_understanding/patterns/session_start.py +37 -0
- rasa/dialogue_understanding/patterns/skip_question.py +38 -0
- rasa/dialogue_understanding/patterns/user_silence.py +37 -0
- rasa/dialogue_understanding/processor/__init__.py +0 -0
- rasa/dialogue_understanding/processor/command_processor.py +720 -0
- rasa/dialogue_understanding/processor/command_processor_component.py +43 -0
- rasa/dialogue_understanding/stack/__init__.py +0 -0
- rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
- rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
- rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
- rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
- rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
- rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
- rasa/dialogue_understanding/stack/utils.py +211 -0
- rasa/dialogue_understanding/utils.py +14 -0
- rasa/dialogue_understanding_test/__init__.py +0 -0
- rasa/dialogue_understanding_test/command_metric_calculation.py +12 -0
- rasa/dialogue_understanding_test/constants.py +17 -0
- rasa/dialogue_understanding_test/du_test_case.py +118 -0
- rasa/dialogue_understanding_test/du_test_result.py +11 -0
- rasa/dialogue_understanding_test/du_test_runner.py +93 -0
- rasa/dialogue_understanding_test/io.py +54 -0
- rasa/dialogue_understanding_test/validation.py +22 -0
- rasa/e2e_test/__init__.py +0 -0
- rasa/e2e_test/aggregate_test_stats_calculator.py +134 -0
- rasa/e2e_test/assertions.py +1345 -0
- rasa/e2e_test/assertions_schema.yml +129 -0
- rasa/e2e_test/constants.py +31 -0
- rasa/e2e_test/e2e_config.py +220 -0
- rasa/e2e_test/e2e_config_schema.yml +26 -0
- rasa/e2e_test/e2e_test_case.py +569 -0
- rasa/e2e_test/e2e_test_converter.py +363 -0
- rasa/e2e_test/e2e_test_converter_prompt.jinja2 +70 -0
- rasa/e2e_test/e2e_test_coverage_report.py +364 -0
- rasa/e2e_test/e2e_test_result.py +54 -0
- rasa/e2e_test/e2e_test_runner.py +1192 -0
- rasa/e2e_test/e2e_test_schema.yml +181 -0
- rasa/e2e_test/pykwalify_extensions.py +39 -0
- rasa/e2e_test/stub_custom_action.py +70 -0
- rasa/e2e_test/utils/__init__.py +0 -0
- rasa/e2e_test/utils/e2e_yaml_utils.py +55 -0
- rasa/e2e_test/utils/io.py +598 -0
- rasa/e2e_test/utils/validation.py +178 -0
- rasa/engine/__init__.py +0 -0
- rasa/engine/caching.py +463 -0
- rasa/engine/constants.py +17 -0
- rasa/engine/exceptions.py +14 -0
- rasa/engine/graph.py +642 -0
- rasa/engine/loader.py +48 -0
- rasa/engine/recipes/__init__.py +0 -0
- rasa/engine/recipes/config_files/default_config.yml +41 -0
- rasa/engine/recipes/default_components.py +97 -0
- rasa/engine/recipes/default_recipe.py +1272 -0
- rasa/engine/recipes/graph_recipe.py +79 -0
- rasa/engine/recipes/recipe.py +93 -0
- rasa/engine/runner/__init__.py +0 -0
- rasa/engine/runner/dask.py +250 -0
- rasa/engine/runner/interface.py +49 -0
- rasa/engine/storage/__init__.py +0 -0
- rasa/engine/storage/local_model_storage.py +244 -0
- rasa/engine/storage/resource.py +110 -0
- rasa/engine/storage/storage.py +199 -0
- rasa/engine/training/__init__.py +0 -0
- rasa/engine/training/components.py +176 -0
- rasa/engine/training/fingerprinting.py +64 -0
- rasa/engine/training/graph_trainer.py +256 -0
- rasa/engine/training/hooks.py +164 -0
- rasa/engine/validation.py +1451 -0
- rasa/env.py +14 -0
- rasa/exceptions.py +69 -0
- rasa/graph_components/__init__.py +0 -0
- rasa/graph_components/converters/__init__.py +0 -0
- rasa/graph_components/converters/nlu_message_converter.py +48 -0
- rasa/graph_components/providers/__init__.py +0 -0
- rasa/graph_components/providers/domain_for_core_training_provider.py +87 -0
- rasa/graph_components/providers/domain_provider.py +71 -0
- rasa/graph_components/providers/flows_provider.py +74 -0
- rasa/graph_components/providers/forms_provider.py +44 -0
- rasa/graph_components/providers/nlu_training_data_provider.py +56 -0
- rasa/graph_components/providers/responses_provider.py +44 -0
- rasa/graph_components/providers/rule_only_provider.py +49 -0
- rasa/graph_components/providers/story_graph_provider.py +96 -0
- rasa/graph_components/providers/training_tracker_provider.py +55 -0
- rasa/graph_components/validators/__init__.py +0 -0
- rasa/graph_components/validators/default_recipe_validator.py +550 -0
- rasa/graph_components/validators/finetuning_validator.py +302 -0
- rasa/hooks.py +111 -0
- rasa/jupyter.py +63 -0
- rasa/llm_fine_tuning/__init__.py +0 -0
- rasa/llm_fine_tuning/annotation_module.py +241 -0
- rasa/llm_fine_tuning/conversations.py +144 -0
- rasa/llm_fine_tuning/llm_data_preparation_module.py +178 -0
- rasa/llm_fine_tuning/paraphrasing/__init__.py +0 -0
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +281 -0
- rasa/llm_fine_tuning/paraphrasing/default_rephrase_prompt_template.jina2 +44 -0
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +121 -0
- rasa/llm_fine_tuning/paraphrasing/rephrased_user_message.py +10 -0
- rasa/llm_fine_tuning/paraphrasing_module.py +128 -0
- rasa/llm_fine_tuning/storage.py +174 -0
- rasa/llm_fine_tuning/train_test_split_module.py +441 -0
- rasa/markers/__init__.py +0 -0
- rasa/markers/marker.py +269 -0
- rasa/markers/marker_base.py +828 -0
- rasa/markers/upload.py +74 -0
- rasa/markers/validate.py +21 -0
- rasa/model.py +118 -0
- rasa/model_manager/__init__.py +0 -0
- rasa/model_manager/config.py +40 -0
- rasa/model_manager/model_api.py +559 -0
- rasa/model_manager/runner_service.py +286 -0
- rasa/model_manager/socket_bridge.py +146 -0
- rasa/model_manager/studio_jwt_auth.py +86 -0
- rasa/model_manager/trainer_service.py +325 -0
- rasa/model_manager/utils.py +87 -0
- rasa/model_manager/warm_rasa_process.py +187 -0
- rasa/model_service.py +112 -0
- rasa/model_testing.py +457 -0
- rasa/model_training.py +596 -0
- rasa/nlu/__init__.py +7 -0
- rasa/nlu/classifiers/__init__.py +3 -0
- rasa/nlu/classifiers/classifier.py +5 -0
- rasa/nlu/classifiers/diet_classifier.py +1881 -0
- rasa/nlu/classifiers/fallback_classifier.py +192 -0
- rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
- rasa/nlu/classifiers/logistic_regression_classifier.py +253 -0
- rasa/nlu/classifiers/mitie_intent_classifier.py +156 -0
- rasa/nlu/classifiers/regex_message_handler.py +56 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +330 -0
- rasa/nlu/constants.py +77 -0
- rasa/nlu/convert.py +40 -0
- rasa/nlu/emulators/__init__.py +0 -0
- rasa/nlu/emulators/dialogflow.py +55 -0
- rasa/nlu/emulators/emulator.py +49 -0
- rasa/nlu/emulators/luis.py +86 -0
- rasa/nlu/emulators/no_emulator.py +10 -0
- rasa/nlu/emulators/wit.py +56 -0
- rasa/nlu/extractors/__init__.py +0 -0
- rasa/nlu/extractors/crf_entity_extractor.py +715 -0
- rasa/nlu/extractors/duckling_entity_extractor.py +206 -0
- rasa/nlu/extractors/entity_synonyms.py +178 -0
- rasa/nlu/extractors/extractor.py +470 -0
- rasa/nlu/extractors/mitie_entity_extractor.py +293 -0
- rasa/nlu/extractors/regex_entity_extractor.py +220 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +95 -0
- rasa/nlu/featurizers/__init__.py +0 -0
- rasa/nlu/featurizers/dense_featurizer/__init__.py +0 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +445 -0
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +768 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +170 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +132 -0
- rasa/nlu/featurizers/featurizer.py +89 -0
- rasa/nlu/featurizers/sparse_featurizer/__init__.py +0 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +867 -0
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +571 -0
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +271 -0
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
- rasa/nlu/model.py +24 -0
- rasa/nlu/run.py +27 -0
- rasa/nlu/selectors/__init__.py +0 -0
- rasa/nlu/selectors/response_selector.py +987 -0
- rasa/nlu/test.py +1940 -0
- rasa/nlu/tokenizers/__init__.py +0 -0
- rasa/nlu/tokenizers/jieba_tokenizer.py +148 -0
- rasa/nlu/tokenizers/mitie_tokenizer.py +75 -0
- rasa/nlu/tokenizers/spacy_tokenizer.py +72 -0
- rasa/nlu/tokenizers/tokenizer.py +239 -0
- rasa/nlu/tokenizers/whitespace_tokenizer.py +95 -0
- rasa/nlu/utils/__init__.py +35 -0
- rasa/nlu/utils/bilou_utils.py +462 -0
- rasa/nlu/utils/hugging_face/__init__.py +0 -0
- rasa/nlu/utils/hugging_face/registry.py +108 -0
- rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +311 -0
- rasa/nlu/utils/mitie_utils.py +113 -0
- rasa/nlu/utils/pattern_utils.py +168 -0
- rasa/nlu/utils/spacy_utils.py +310 -0
- rasa/plugin.py +90 -0
- rasa/server.py +1588 -0
- rasa/shared/__init__.py +0 -0
- rasa/shared/constants.py +311 -0
- rasa/shared/core/__init__.py +0 -0
- rasa/shared/core/command_payload_reader.py +109 -0
- rasa/shared/core/constants.py +180 -0
- rasa/shared/core/conversation.py +46 -0
- rasa/shared/core/domain.py +2172 -0
- rasa/shared/core/events.py +2559 -0
- rasa/shared/core/flows/__init__.py +7 -0
- rasa/shared/core/flows/flow.py +562 -0
- rasa/shared/core/flows/flow_path.py +84 -0
- rasa/shared/core/flows/flow_step.py +146 -0
- rasa/shared/core/flows/flow_step_links.py +319 -0
- rasa/shared/core/flows/flow_step_sequence.py +70 -0
- rasa/shared/core/flows/flows_list.py +258 -0
- rasa/shared/core/flows/flows_yaml_schema.json +303 -0
- rasa/shared/core/flows/nlu_trigger.py +117 -0
- rasa/shared/core/flows/steps/__init__.py +24 -0
- rasa/shared/core/flows/steps/action.py +56 -0
- rasa/shared/core/flows/steps/call.py +64 -0
- rasa/shared/core/flows/steps/collect.py +112 -0
- rasa/shared/core/flows/steps/constants.py +5 -0
- rasa/shared/core/flows/steps/continuation.py +36 -0
- rasa/shared/core/flows/steps/end.py +22 -0
- rasa/shared/core/flows/steps/internal.py +44 -0
- rasa/shared/core/flows/steps/link.py +51 -0
- rasa/shared/core/flows/steps/no_operation.py +48 -0
- rasa/shared/core/flows/steps/set_slots.py +50 -0
- rasa/shared/core/flows/steps/start.py +30 -0
- rasa/shared/core/flows/utils.py +39 -0
- rasa/shared/core/flows/validation.py +735 -0
- rasa/shared/core/flows/yaml_flows_io.py +405 -0
- rasa/shared/core/generator.py +908 -0
- rasa/shared/core/slot_mappings.py +526 -0
- rasa/shared/core/slots.py +654 -0
- rasa/shared/core/trackers.py +1183 -0
- rasa/shared/core/training_data/__init__.py +0 -0
- rasa/shared/core/training_data/loading.py +89 -0
- rasa/shared/core/training_data/story_reader/__init__.py +0 -0
- rasa/shared/core/training_data/story_reader/story_reader.py +129 -0
- rasa/shared/core/training_data/story_reader/story_step_builder.py +168 -0
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +888 -0
- rasa/shared/core/training_data/story_writer/__init__.py +0 -0
- rasa/shared/core/training_data/story_writer/story_writer.py +76 -0
- rasa/shared/core/training_data/story_writer/yaml_story_writer.py +444 -0
- rasa/shared/core/training_data/structures.py +858 -0
- rasa/shared/core/training_data/visualization.html +146 -0
- rasa/shared/core/training_data/visualization.py +603 -0
- rasa/shared/data.py +249 -0
- rasa/shared/engine/__init__.py +0 -0
- rasa/shared/engine/caching.py +26 -0
- rasa/shared/exceptions.py +167 -0
- rasa/shared/importers/__init__.py +0 -0
- rasa/shared/importers/importer.py +770 -0
- rasa/shared/importers/multi_project.py +215 -0
- rasa/shared/importers/rasa.py +108 -0
- rasa/shared/importers/remote_importer.py +196 -0
- rasa/shared/importers/utils.py +36 -0
- rasa/shared/nlu/__init__.py +0 -0
- rasa/shared/nlu/constants.py +53 -0
- rasa/shared/nlu/interpreter.py +10 -0
- rasa/shared/nlu/training_data/__init__.py +0 -0
- rasa/shared/nlu/training_data/entities_parser.py +208 -0
- rasa/shared/nlu/training_data/features.py +492 -0
- rasa/shared/nlu/training_data/formats/__init__.py +10 -0
- rasa/shared/nlu/training_data/formats/dialogflow.py +163 -0
- rasa/shared/nlu/training_data/formats/luis.py +87 -0
- rasa/shared/nlu/training_data/formats/rasa.py +135 -0
- rasa/shared/nlu/training_data/formats/rasa_yaml.py +618 -0
- rasa/shared/nlu/training_data/formats/readerwriter.py +244 -0
- rasa/shared/nlu/training_data/formats/wit.py +52 -0
- rasa/shared/nlu/training_data/loading.py +137 -0
- rasa/shared/nlu/training_data/lookup_tables_parser.py +30 -0
- rasa/shared/nlu/training_data/message.py +490 -0
- rasa/shared/nlu/training_data/schemas/__init__.py +0 -0
- rasa/shared/nlu/training_data/schemas/data_schema.py +85 -0
- rasa/shared/nlu/training_data/schemas/nlu.yml +53 -0
- rasa/shared/nlu/training_data/schemas/responses.yml +70 -0
- rasa/shared/nlu/training_data/synonyms_parser.py +42 -0
- rasa/shared/nlu/training_data/training_data.py +729 -0
- rasa/shared/nlu/training_data/util.py +223 -0
- rasa/shared/providers/__init__.py +0 -0
- rasa/shared/providers/_configs/__init__.py +0 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +677 -0
- rasa/shared/providers/_configs/client_config.py +59 -0
- rasa/shared/providers/_configs/default_litellm_client_config.py +132 -0
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +236 -0
- rasa/shared/providers/_configs/litellm_router_client_config.py +222 -0
- rasa/shared/providers/_configs/model_group_config.py +173 -0
- rasa/shared/providers/_configs/openai_client_config.py +177 -0
- rasa/shared/providers/_configs/rasa_llm_client_config.py +75 -0
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +178 -0
- rasa/shared/providers/_configs/utils.py +117 -0
- rasa/shared/providers/_ssl_verification_utils.py +124 -0
- rasa/shared/providers/_utils.py +79 -0
- rasa/shared/providers/constants.py +7 -0
- rasa/shared/providers/embedding/__init__.py +0 -0
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +243 -0
- rasa/shared/providers/embedding/_langchain_embedding_client_adapter.py +74 -0
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +335 -0
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +126 -0
- rasa/shared/providers/embedding/embedding_client.py +90 -0
- rasa/shared/providers/embedding/embedding_response.py +41 -0
- rasa/shared/providers/embedding/huggingface_local_embedding_client.py +191 -0
- rasa/shared/providers/embedding/litellm_router_embedding_client.py +138 -0
- rasa/shared/providers/embedding/openai_embedding_client.py +172 -0
- rasa/shared/providers/llm/__init__.py +0 -0
- rasa/shared/providers/llm/_base_litellm_client.py +265 -0
- rasa/shared/providers/llm/azure_openai_llm_client.py +415 -0
- rasa/shared/providers/llm/default_litellm_llm_client.py +110 -0
- rasa/shared/providers/llm/litellm_router_llm_client.py +202 -0
- rasa/shared/providers/llm/llm_client.py +78 -0
- rasa/shared/providers/llm/llm_response.py +50 -0
- rasa/shared/providers/llm/openai_llm_client.py +161 -0
- rasa/shared/providers/llm/rasa_llm_client.py +120 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +276 -0
- rasa/shared/providers/mappings.py +94 -0
- rasa/shared/providers/router/__init__.py +0 -0
- rasa/shared/providers/router/_base_litellm_router_client.py +185 -0
- rasa/shared/providers/router/router_client.py +75 -0
- rasa/shared/utils/__init__.py +0 -0
- rasa/shared/utils/cli.py +102 -0
- rasa/shared/utils/common.py +324 -0
- rasa/shared/utils/constants.py +4 -0
- rasa/shared/utils/health_check/__init__.py +0 -0
- rasa/shared/utils/health_check/embeddings_health_check_mixin.py +31 -0
- rasa/shared/utils/health_check/health_check.py +258 -0
- rasa/shared/utils/health_check/llm_health_check_mixin.py +31 -0
- rasa/shared/utils/io.py +499 -0
- rasa/shared/utils/llm.py +764 -0
- rasa/shared/utils/pykwalify_extensions.py +27 -0
- rasa/shared/utils/schemas/__init__.py +0 -0
- rasa/shared/utils/schemas/config.yml +2 -0
- rasa/shared/utils/schemas/domain.yml +145 -0
- rasa/shared/utils/schemas/events.py +214 -0
- rasa/shared/utils/schemas/model_config.yml +36 -0
- rasa/shared/utils/schemas/stories.yml +173 -0
- rasa/shared/utils/yaml.py +1068 -0
- rasa/studio/__init__.py +0 -0
- rasa/studio/auth.py +270 -0
- rasa/studio/config.py +136 -0
- rasa/studio/constants.py +19 -0
- rasa/studio/data_handler.py +368 -0
- rasa/studio/download.py +489 -0
- rasa/studio/results_logger.py +137 -0
- rasa/studio/train.py +134 -0
- rasa/studio/upload.py +563 -0
- rasa/telemetry.py +1876 -0
- rasa/tracing/__init__.py +0 -0
- rasa/tracing/config.py +355 -0
- rasa/tracing/constants.py +62 -0
- rasa/tracing/instrumentation/__init__.py +0 -0
- rasa/tracing/instrumentation/attribute_extractors.py +765 -0
- rasa/tracing/instrumentation/instrumentation.py +1306 -0
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +144 -0
- rasa/tracing/instrumentation/metrics.py +294 -0
- rasa/tracing/metric_instrument_provider.py +205 -0
- rasa/utils/__init__.py +0 -0
- rasa/utils/beta.py +83 -0
- rasa/utils/cli.py +28 -0
- rasa/utils/common.py +639 -0
- rasa/utils/converter.py +53 -0
- rasa/utils/endpoints.py +331 -0
- rasa/utils/io.py +252 -0
- rasa/utils/json_utils.py +60 -0
- rasa/utils/licensing.py +542 -0
- rasa/utils/log_utils.py +181 -0
- rasa/utils/mapper.py +210 -0
- rasa/utils/ml_utils.py +147 -0
- rasa/utils/plotting.py +362 -0
- rasa/utils/sanic_error_handler.py +32 -0
- rasa/utils/singleton.py +23 -0
- rasa/utils/tensorflow/__init__.py +0 -0
- rasa/utils/tensorflow/callback.py +112 -0
- rasa/utils/tensorflow/constants.py +116 -0
- rasa/utils/tensorflow/crf.py +492 -0
- rasa/utils/tensorflow/data_generator.py +440 -0
- rasa/utils/tensorflow/environment.py +161 -0
- rasa/utils/tensorflow/exceptions.py +5 -0
- rasa/utils/tensorflow/feature_array.py +366 -0
- rasa/utils/tensorflow/layers.py +1565 -0
- rasa/utils/tensorflow/layers_utils.py +113 -0
- rasa/utils/tensorflow/metrics.py +281 -0
- rasa/utils/tensorflow/model_data.py +798 -0
- rasa/utils/tensorflow/model_data_utils.py +499 -0
- rasa/utils/tensorflow/models.py +935 -0
- rasa/utils/tensorflow/rasa_layers.py +1094 -0
- rasa/utils/tensorflow/transformer.py +640 -0
- rasa/utils/tensorflow/types.py +6 -0
- rasa/utils/train_utils.py +572 -0
- rasa/utils/url_tools.py +53 -0
- rasa/utils/yaml.py +54 -0
- rasa/validator.py +1644 -0
- rasa/version.py +3 -0
- rasa_pro-3.12.0.dev1.dist-info/METADATA +199 -0
- rasa_pro-3.12.0.dev1.dist-info/NOTICE +5 -0
- rasa_pro-3.12.0.dev1.dist-info/RECORD +790 -0
- rasa_pro-3.12.0.dev1.dist-info/WHEEL +4 -0
- rasa_pro-3.12.0.dev1.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,765 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import logging
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, Union
|
|
5
|
+
|
|
6
|
+
import tiktoken
|
|
7
|
+
from numpy import ndarray
|
|
8
|
+
from rasa_sdk.grpc_py import action_webhook_pb2
|
|
9
|
+
|
|
10
|
+
from rasa.core.actions.action import DirectCustomActionExecutor
|
|
11
|
+
from rasa.core.actions.grpc_custom_action_executor import GRPCCustomActionExecutor
|
|
12
|
+
from rasa.core.actions.http_custom_action_executor import HTTPCustomActionExecutor
|
|
13
|
+
from rasa.core.agent import Agent
|
|
14
|
+
from rasa.core.brokers.broker import EventBroker
|
|
15
|
+
from rasa.core.channels import UserMessage
|
|
16
|
+
from rasa.core.lock_store import LOCK_LIFETIME, LockStore
|
|
17
|
+
from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
|
|
18
|
+
from rasa.core.processor import MessageProcessor
|
|
19
|
+
from rasa.core.tracker_store import TrackerStore
|
|
20
|
+
from rasa.dialogue_understanding.commands import Command
|
|
21
|
+
from rasa.dialogue_understanding.generator import LLMBasedCommandGenerator
|
|
22
|
+
from rasa.dialogue_understanding.generator.constants import FLOW_RETRIEVAL_KEY
|
|
23
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
24
|
+
from rasa.engine.graph import ExecutionContext, GraphModelConfiguration, GraphNode
|
|
25
|
+
from rasa.engine.training.graph_trainer import GraphTrainer
|
|
26
|
+
from rasa.shared.constants import (
|
|
27
|
+
CONFIG_RECIPE_KEY,
|
|
28
|
+
DEPLOYMENT_CONFIG_KEY,
|
|
29
|
+
EMBEDDINGS_CONFIG_KEY,
|
|
30
|
+
LLM_CONFIG_KEY,
|
|
31
|
+
MODEL_CONFIG_KEY,
|
|
32
|
+
MODEL_GROUP_ID_CONFIG_KEY,
|
|
33
|
+
PROVIDER_CONFIG_KEY,
|
|
34
|
+
TIMEOUT_CONFIG_KEY,
|
|
35
|
+
)
|
|
36
|
+
from rasa.shared.core.constants import REQUESTED_SLOT
|
|
37
|
+
from rasa.shared.core.domain import Domain
|
|
38
|
+
from rasa.shared.core.events import DialogueStackUpdated, Event
|
|
39
|
+
from rasa.shared.core.flows import Flow, FlowsList, FlowStep
|
|
40
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
41
|
+
from rasa.shared.core.training_data.structures import StoryGraph
|
|
42
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
43
|
+
from rasa.shared.nlu.constants import INTENT_NAME_KEY, SET_SLOT_COMMAND
|
|
44
|
+
from rasa.shared.utils.llm import (
|
|
45
|
+
combine_custom_and_default_config,
|
|
46
|
+
)
|
|
47
|
+
from rasa.tracing.constants import (
|
|
48
|
+
PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME,
|
|
49
|
+
REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
if TYPE_CHECKING:
|
|
53
|
+
from langchain.llms.base import BaseLLM
|
|
54
|
+
|
|
55
|
+
from rasa.core.policies.enterprise_search_policy import EnterpriseSearchPolicy
|
|
56
|
+
from rasa.core.policies.intentless_policy import IntentlessPolicy
|
|
57
|
+
from rasa.core.policies.policy import PolicyPrediction
|
|
58
|
+
from rasa.dialogue_understanding.generator import CommandGenerator
|
|
59
|
+
|
|
60
|
+
# This file contains all attribute extractors for tracing instrumentation.
|
|
61
|
+
# These are functions that are applied to the arguments of the wrapped function to be
|
|
62
|
+
# traced to extract the attributes that we want to forward to our tracing backend.
|
|
63
|
+
# Note that we always mirror the argument lists of the wrapped functions, as our
|
|
64
|
+
# wrapping mechanism always passes in the original arguments unchanged for further
|
|
65
|
+
# processing.
|
|
66
|
+
|
|
67
|
+
logger = logging.getLogger(__name__)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def extract_attrs_for_agent(
|
|
71
|
+
self: Agent,
|
|
72
|
+
message: UserMessage,
|
|
73
|
+
) -> Dict[str, Any]:
|
|
74
|
+
"""Extract the attributes for `Agent.handle_message`.
|
|
75
|
+
|
|
76
|
+
:param self: The `Agent` on which `handle_message` is called.
|
|
77
|
+
:param message: The `UserMessage` argument.
|
|
78
|
+
:return: A dictionary containing the attributes.
|
|
79
|
+
"""
|
|
80
|
+
return {
|
|
81
|
+
"input_channel": str(message.input_channel),
|
|
82
|
+
"sender_id": message.sender_id,
|
|
83
|
+
"model_id": str(self.model_id),
|
|
84
|
+
"model_name": self.processor.model_filename if self.processor else "None",
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def extract_llm_command_generator_attrs(
|
|
89
|
+
attributes: Dict[str, Any], commands: List[Dict[str, Any]]
|
|
90
|
+
) -> None:
|
|
91
|
+
"""Extract more attributes for `GraphNode` type `LLMCommandGenerator`.
|
|
92
|
+
|
|
93
|
+
:param attributes: A dictionary containing attributes.
|
|
94
|
+
:param commands: The commands to execute.
|
|
95
|
+
"""
|
|
96
|
+
commands_list = []
|
|
97
|
+
|
|
98
|
+
for command in commands:
|
|
99
|
+
command_name = command.get("command")
|
|
100
|
+
commands_list.append(command_name)
|
|
101
|
+
|
|
102
|
+
if command_name == SET_SLOT_COMMAND:
|
|
103
|
+
attributes["slot_name"] = command.get("name")
|
|
104
|
+
|
|
105
|
+
if command_name == "start flow":
|
|
106
|
+
attributes["flow_name"] = command.get("flow")
|
|
107
|
+
|
|
108
|
+
attributes["commands"] = str(commands_list)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def extract_flow_policy_attrs(
|
|
112
|
+
attributes: Dict[str, Any], policy_prediction: "PolicyPrediction"
|
|
113
|
+
) -> None:
|
|
114
|
+
"""Extract more attributes for `GraphNode` type `FlowPolicy`.
|
|
115
|
+
|
|
116
|
+
:param attributes: A dictionary containing attributes.
|
|
117
|
+
:param policy_prediction: The PolicyPrediction to use.
|
|
118
|
+
"""
|
|
119
|
+
attributes["policy"] = policy_prediction.policy_name
|
|
120
|
+
|
|
121
|
+
if policy_prediction.events:
|
|
122
|
+
attributes["events"] = str(
|
|
123
|
+
[event.__class__.__name__ for event in policy_prediction.events]
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
if policy_prediction.optional_events:
|
|
127
|
+
optional_events_name = []
|
|
128
|
+
flows = []
|
|
129
|
+
utters = []
|
|
130
|
+
|
|
131
|
+
for optional_event in policy_prediction.optional_events:
|
|
132
|
+
optional_events_name.append(optional_event.__class__.__name__)
|
|
133
|
+
|
|
134
|
+
if (
|
|
135
|
+
isinstance(optional_event, DialogueStackUpdated)
|
|
136
|
+
and "value" in optional_event.update
|
|
137
|
+
):
|
|
138
|
+
updates = json.loads(optional_event.update)
|
|
139
|
+
for update in updates:
|
|
140
|
+
value = update.get("value", {})
|
|
141
|
+
if isinstance(value, dict):
|
|
142
|
+
flow = value.get("flow_id", "")
|
|
143
|
+
utter = value.get("utter", "")
|
|
144
|
+
if flow:
|
|
145
|
+
flows.append(flow)
|
|
146
|
+
if utter:
|
|
147
|
+
utters.append(utter)
|
|
148
|
+
else:
|
|
149
|
+
if hasattr(optional_event, "flow_id") and optional_event.flow_id:
|
|
150
|
+
flows.append(optional_event.flow_id)
|
|
151
|
+
if hasattr(optional_event, "utter") and optional_event.utter:
|
|
152
|
+
utters.append(optional_event.utter)
|
|
153
|
+
|
|
154
|
+
attributes["optional_events"] = str(set(optional_events_name))
|
|
155
|
+
|
|
156
|
+
if flows:
|
|
157
|
+
attributes["flows"] = str(set(flows))
|
|
158
|
+
if utters:
|
|
159
|
+
attributes["utters"] = str(set(utters))
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def extract_attrs_for_graph_node(
|
|
163
|
+
self: GraphNode, *inputs_from_previous_nodes: Tuple[Text, Any]
|
|
164
|
+
) -> Dict[str, Any]:
|
|
165
|
+
"""Extract the attributes for `GraphNode.__call__`.
|
|
166
|
+
|
|
167
|
+
:param self: The `GraphNode` on which `__call__` is called.
|
|
168
|
+
:param inputs_from_previous_nodes: Unused outputs of all parent nodes.
|
|
169
|
+
:return: A dictionary containing the attributes.
|
|
170
|
+
"""
|
|
171
|
+
attributes = {
|
|
172
|
+
"node_name": self._node_name,
|
|
173
|
+
"component_class": self._component_class.__name__,
|
|
174
|
+
"fn_name": self._fn_name,
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
for node_input in inputs_from_previous_nodes:
|
|
178
|
+
if "LLMCommandGenerator" in node_input[0]:
|
|
179
|
+
commands = node_input[1][0].data.get("commands")
|
|
180
|
+
extract_llm_command_generator_attrs(attributes, commands)
|
|
181
|
+
|
|
182
|
+
if "FlowPolicy" in node_input[0]:
|
|
183
|
+
policy_prediction = node_input[1]
|
|
184
|
+
extract_flow_policy_attrs(attributes, policy_prediction)
|
|
185
|
+
|
|
186
|
+
return attributes
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def extract_number_of_events(
|
|
190
|
+
self: MessageProcessor, tracker: DialogueStateTracker
|
|
191
|
+
) -> Dict[str, Any]:
|
|
192
|
+
"""Extract the attributes for `MessageProcessor.save_tracker`.
|
|
193
|
+
|
|
194
|
+
:param self: The `MessageProcessor` on which `save_tracker` is called.
|
|
195
|
+
:param tracker: The `DialogueStateTracker` argument.
|
|
196
|
+
:return: A dictionary containing the attributes.
|
|
197
|
+
"""
|
|
198
|
+
return {"number_of_events": len(tracker.events)}
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def extract_attrs_for_tracker_store(
|
|
202
|
+
self: TrackerStore,
|
|
203
|
+
event_broker: EventBroker,
|
|
204
|
+
new_events: List[Event],
|
|
205
|
+
sender_id: Text,
|
|
206
|
+
) -> Dict[str, Any]:
|
|
207
|
+
"""Extract the attributes for `TrackerStore.stream_events`.
|
|
208
|
+
|
|
209
|
+
:param self: The `TrackerStore` on which `stream_events` is called.
|
|
210
|
+
:param event_broker: The `EventBroker` on which the new events are published.
|
|
211
|
+
:param new_events: List of new events to stream.
|
|
212
|
+
:param sender_id: The sender id of the tracker to which the new events were added.
|
|
213
|
+
"""
|
|
214
|
+
return {
|
|
215
|
+
"number_of_streamed_events": len(new_events),
|
|
216
|
+
"broker_class": self.event_broker.__class__.__name__,
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def extract_attrs_for_lock_store(
|
|
221
|
+
self: LockStore,
|
|
222
|
+
conversation_id: Text,
|
|
223
|
+
lock_lifetime: float = LOCK_LIFETIME,
|
|
224
|
+
wait_time_in_seconds: float = 1,
|
|
225
|
+
) -> Dict[str, Any]:
|
|
226
|
+
"""Extract the attributes for `LockStore.lock`.
|
|
227
|
+
|
|
228
|
+
:param self: the `LockStore` on which `lock` is called.
|
|
229
|
+
:param conversation_id: The conversation id for which the lock is acquired.
|
|
230
|
+
:param lock_lifetime: The lifetime of the lock.
|
|
231
|
+
:param wait_time_in_seconds: The time to wait for the lock.
|
|
232
|
+
:return: A dictionary containing the attributes.
|
|
233
|
+
"""
|
|
234
|
+
return {"lock_store_class": self.__class__.__name__}
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def extract_attrs_for_graph_trainer(
|
|
238
|
+
self: GraphTrainer,
|
|
239
|
+
model_configuration: GraphModelConfiguration,
|
|
240
|
+
importer: TrainingDataImporter,
|
|
241
|
+
output_filename: Path,
|
|
242
|
+
is_finetuning: bool = False,
|
|
243
|
+
force_retraining: bool = False,
|
|
244
|
+
) -> Dict[str, Any]:
|
|
245
|
+
"""Extract the attributes for `GraphTrainer.train`.
|
|
246
|
+
|
|
247
|
+
:param self: the `GraphTrainer` on which `train` is called.
|
|
248
|
+
:param model_configuration: The model configuration (training_type, language etc.).
|
|
249
|
+
:param importer: The importer which provides the training data for the training.
|
|
250
|
+
:param output_filename: The location where the packaged model is saved.
|
|
251
|
+
:param is_finetuning: Boolean argument, if `True` enables incremental training.
|
|
252
|
+
:param force_retraining: Unused boolean argument,i.e, if `True` then the cache
|
|
253
|
+
is skipped and all components are retrained.
|
|
254
|
+
:return: A dictionary containing the attributes.
|
|
255
|
+
"""
|
|
256
|
+
return {
|
|
257
|
+
"training_type": model_configuration.training_type.model_type,
|
|
258
|
+
"language": model_configuration.language,
|
|
259
|
+
"recipe_name": importer.get_config().get(CONFIG_RECIPE_KEY),
|
|
260
|
+
"output_filename": output_filename.name,
|
|
261
|
+
"is_finetuning": is_finetuning,
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def extract_headers(message: UserMessage, **kwargs: Any) -> Any:
|
|
266
|
+
"""Extract the headers from the `UserMessage`."""
|
|
267
|
+
if message.headers:
|
|
268
|
+
return message.headers
|
|
269
|
+
return {}
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def extract_intent_name_and_slots(
|
|
273
|
+
self: MessageProcessor, tracker: DialogueStateTracker
|
|
274
|
+
) -> Dict[str, Any]:
|
|
275
|
+
"""Extract the attributes for `MessageProcessor._predict_next_with_tracker`.
|
|
276
|
+
|
|
277
|
+
:param self: The `MessageProcessor` on which `_predict_next_with_tracker` is called.
|
|
278
|
+
:param tracker: The `DialogueStateTracker` argument.
|
|
279
|
+
:return: A dictionary containing the attributes.
|
|
280
|
+
"""
|
|
281
|
+
slots = {}
|
|
282
|
+
for slot_name, slot_value in tracker.slots.items():
|
|
283
|
+
if slot_name == REQUESTED_SLOT and slot_value.value:
|
|
284
|
+
slots[slot_name] = slot_value.value
|
|
285
|
+
break
|
|
286
|
+
return {
|
|
287
|
+
"intent_name": str(tracker.latest_message.intent.get(INTENT_NAME_KEY)), # type: ignore[union-attr]
|
|
288
|
+
**slots,
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def extract_attrs_for_command(
|
|
293
|
+
self: Command,
|
|
294
|
+
tracker: DialogueStateTracker,
|
|
295
|
+
all_flows: FlowsList,
|
|
296
|
+
original_tracker: DialogueStateTracker,
|
|
297
|
+
) -> Dict[str, Any]:
|
|
298
|
+
return {
|
|
299
|
+
"class_name": self.__class__.__name__,
|
|
300
|
+
"number_of_events": len(tracker.events),
|
|
301
|
+
"sender_id": tracker.sender_id,
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def extract_llm_config(
|
|
306
|
+
self: Any,
|
|
307
|
+
default_llm_config: Dict[str, Any],
|
|
308
|
+
default_embeddings_config: Dict[str, Any],
|
|
309
|
+
) -> Dict[str, Any]:
|
|
310
|
+
if isinstance(self, ContextualResponseRephraser):
|
|
311
|
+
# ContextualResponseRephraser is not a graph component, so it's
|
|
312
|
+
# not having a full config.
|
|
313
|
+
config = {"llm": self.llm_config}
|
|
314
|
+
else:
|
|
315
|
+
config = self.config
|
|
316
|
+
|
|
317
|
+
llm_property = combine_custom_and_default_config(
|
|
318
|
+
config.get(LLM_CONFIG_KEY), default_llm_config
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
if isinstance(self, LLMBasedCommandGenerator):
|
|
322
|
+
flow_retrieval_config = config.get(FLOW_RETRIEVAL_KEY, {}) or {}
|
|
323
|
+
embeddings_property = combine_custom_and_default_config(
|
|
324
|
+
flow_retrieval_config.get(EMBEDDINGS_CONFIG_KEY),
|
|
325
|
+
default_embeddings_config,
|
|
326
|
+
)
|
|
327
|
+
else:
|
|
328
|
+
embeddings_property = combine_custom_and_default_config(
|
|
329
|
+
config.get(EMBEDDINGS_CONFIG_KEY), default_embeddings_config
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
attributes = {
|
|
333
|
+
"class_name": self.__class__.__name__,
|
|
334
|
+
# llm client attributes
|
|
335
|
+
"llm_model": str(llm_property.get(MODEL_CONFIG_KEY)),
|
|
336
|
+
"llm_type": str(llm_property.get(PROVIDER_CONFIG_KEY)),
|
|
337
|
+
"llm_model_group_id": str(llm_property.get(MODEL_GROUP_ID_CONFIG_KEY)),
|
|
338
|
+
"llm_temperature": str(llm_property.get("temperature")),
|
|
339
|
+
"llm_request_timeout": str(llm_property.get(TIMEOUT_CONFIG_KEY)),
|
|
340
|
+
# embedding client attributes
|
|
341
|
+
"embeddings_model": str(embeddings_property.get(MODEL_CONFIG_KEY)),
|
|
342
|
+
"embeddings_type": str(embeddings_property.get(PROVIDER_CONFIG_KEY)),
|
|
343
|
+
"embeddings_model_group_id": str(
|
|
344
|
+
embeddings_property.get(MODEL_GROUP_ID_CONFIG_KEY)
|
|
345
|
+
),
|
|
346
|
+
# TODO: Keeping this to avoid potential breaking changes
|
|
347
|
+
"embeddings": json.dumps(embeddings_property, sort_keys=True),
|
|
348
|
+
"request_timeout": str(llm_property.get(TIMEOUT_CONFIG_KEY)),
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if DEPLOYMENT_CONFIG_KEY in llm_property:
|
|
352
|
+
attributes["llm_engine"] = str(llm_property.get(DEPLOYMENT_CONFIG_KEY))
|
|
353
|
+
|
|
354
|
+
return attributes
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def extract_attrs_for_llm_based_command_generator(
|
|
358
|
+
self: "LLMBasedCommandGenerator",
|
|
359
|
+
prompt: str,
|
|
360
|
+
) -> Dict[str, Any]:
|
|
361
|
+
from rasa.dialogue_understanding.generator.constants import DEFAULT_LLM_CONFIG
|
|
362
|
+
from rasa.dialogue_understanding.generator.flow_retrieval import (
|
|
363
|
+
DEFAULT_EMBEDDINGS_CONFIG,
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
attributes = extract_llm_config(
|
|
367
|
+
self,
|
|
368
|
+
default_llm_config=DEFAULT_LLM_CONFIG,
|
|
369
|
+
default_embeddings_config=DEFAULT_EMBEDDINGS_CONFIG,
|
|
370
|
+
)
|
|
371
|
+
|
|
372
|
+
return extend_attributes_with_prompt_tokens_length(self, attributes, prompt)
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
def extract_attrs_for_contextual_response_rephraser(
|
|
376
|
+
self: Any,
|
|
377
|
+
prompt: str,
|
|
378
|
+
) -> Dict[str, Any]:
|
|
379
|
+
from rasa.core.nlg.contextual_response_rephraser import DEFAULT_LLM_CONFIG
|
|
380
|
+
|
|
381
|
+
attributes = extract_llm_config(
|
|
382
|
+
self,
|
|
383
|
+
default_llm_config=DEFAULT_LLM_CONFIG,
|
|
384
|
+
# rephraser is not using embeddings
|
|
385
|
+
default_embeddings_config={},
|
|
386
|
+
)
|
|
387
|
+
|
|
388
|
+
return extend_attributes_with_prompt_tokens_length(self, attributes, prompt)
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
def extract_attrs_for_create_history(
|
|
392
|
+
self: Any,
|
|
393
|
+
tracker: DialogueStateTracker,
|
|
394
|
+
) -> Dict[str, Any]:
|
|
395
|
+
from rasa.core.nlg.contextual_response_rephraser import DEFAULT_LLM_CONFIG
|
|
396
|
+
|
|
397
|
+
return extract_llm_config(
|
|
398
|
+
self,
|
|
399
|
+
default_llm_config=DEFAULT_LLM_CONFIG,
|
|
400
|
+
# rephraser is not using embeddings
|
|
401
|
+
default_embeddings_config={},
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
def extract_attrs_for_generate(
|
|
406
|
+
self: Any,
|
|
407
|
+
utter_action: Text,
|
|
408
|
+
tracker: DialogueStateTracker,
|
|
409
|
+
output_channel: Text,
|
|
410
|
+
**kwargs: Any,
|
|
411
|
+
) -> Optional[Dict[Text, Any]]:
|
|
412
|
+
return {
|
|
413
|
+
"class_name": self.__class__.__name__,
|
|
414
|
+
"utter": utter_action,
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
def extract_attrs_for_performing_health_check(
|
|
419
|
+
custom_config: Optional[Dict[str, Any]],
|
|
420
|
+
default_config: Dict[str, Any],
|
|
421
|
+
log_source_method: str,
|
|
422
|
+
log_source_component: str,
|
|
423
|
+
) -> Dict[str, Any]:
|
|
424
|
+
from rasa.shared.utils.health_check.health_check import is_api_health_check_enabled
|
|
425
|
+
|
|
426
|
+
attrs = {
|
|
427
|
+
"api_health_check_enabled": is_api_health_check_enabled(),
|
|
428
|
+
"health_check_trigger_component": log_source_component,
|
|
429
|
+
"health_check_trigger_method": log_source_method,
|
|
430
|
+
}
|
|
431
|
+
if is_api_health_check_enabled():
|
|
432
|
+
attrs["config"] = json.dumps(
|
|
433
|
+
combine_custom_and_default_config(custom_config, default_config)
|
|
434
|
+
)
|
|
435
|
+
return attrs
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
def extract_attrs_for_execute_commands(
|
|
439
|
+
tracker: DialogueStateTracker,
|
|
440
|
+
all_flows: FlowsList,
|
|
441
|
+
execution_context: ExecutionContext,
|
|
442
|
+
story_graph: Optional[StoryGraph] = None,
|
|
443
|
+
) -> Dict[str, Any]:
|
|
444
|
+
return {
|
|
445
|
+
"number_of_events": len(tracker.events),
|
|
446
|
+
"sender_id": tracker.sender_id,
|
|
447
|
+
"module_name": "command_processor",
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
def extract_attrs_for_validate_state_of_commands(
|
|
452
|
+
commands: List[Command],
|
|
453
|
+
) -> Dict[str, Any]:
|
|
454
|
+
commands_list = []
|
|
455
|
+
|
|
456
|
+
for command in commands:
|
|
457
|
+
command_type = command.command()
|
|
458
|
+
command_as_dict = command.as_dict()
|
|
459
|
+
|
|
460
|
+
if command_type == SET_SLOT_COMMAND:
|
|
461
|
+
command_as_dict.pop("value", None)
|
|
462
|
+
|
|
463
|
+
if command_type == "correct slot":
|
|
464
|
+
corrected_slots = command_as_dict.get("corrected_slots", [])
|
|
465
|
+
updated_corrected_slots = []
|
|
466
|
+
for corrected_slot in corrected_slots:
|
|
467
|
+
corrected_slot.pop("value", None)
|
|
468
|
+
updated_corrected_slots.append(corrected_slot)
|
|
469
|
+
|
|
470
|
+
command_as_dict["corrected_slots"] = updated_corrected_slots
|
|
471
|
+
|
|
472
|
+
commands_list.append(command_as_dict)
|
|
473
|
+
|
|
474
|
+
return {
|
|
475
|
+
"cleaned_up_commands": str(commands_list),
|
|
476
|
+
"module_name": "command_processor",
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
def extract_attrs_for_clean_up_commands(
|
|
481
|
+
commands: List[Command],
|
|
482
|
+
tracker: DialogueStateTracker,
|
|
483
|
+
all_flows: FlowsList,
|
|
484
|
+
execution_context: ExecutionContext,
|
|
485
|
+
story_graph: Optional[StoryGraph] = None,
|
|
486
|
+
) -> Dict[str, Any]:
|
|
487
|
+
commands_list = []
|
|
488
|
+
|
|
489
|
+
for command in commands:
|
|
490
|
+
command_type = command.command()
|
|
491
|
+
command_as_dict = command.as_dict()
|
|
492
|
+
|
|
493
|
+
if command_type == SET_SLOT_COMMAND:
|
|
494
|
+
command_as_dict.pop("value", None)
|
|
495
|
+
|
|
496
|
+
commands_list.append(command_as_dict)
|
|
497
|
+
|
|
498
|
+
current_context = extract_current_context_attribute(tracker.stack)
|
|
499
|
+
|
|
500
|
+
return {
|
|
501
|
+
"commands": str(commands_list),
|
|
502
|
+
"module_name": "command_processor",
|
|
503
|
+
"current_context": json.dumps(current_context),
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
def extract_attrs_for_remove_duplicated_set_slots(
|
|
508
|
+
events: List[Event],
|
|
509
|
+
) -> Dict[str, Any]:
|
|
510
|
+
resulting_events = []
|
|
511
|
+
|
|
512
|
+
for event in events:
|
|
513
|
+
event_as_dict = event.as_dict()
|
|
514
|
+
|
|
515
|
+
if event_as_dict.get("event") == "stack":
|
|
516
|
+
update = event_as_dict.pop("update", "")
|
|
517
|
+
if update:
|
|
518
|
+
update = json.loads(update)
|
|
519
|
+
for update_dict in update:
|
|
520
|
+
value = update_dict.pop("value", {})
|
|
521
|
+
value.pop("corrected_slots", None)
|
|
522
|
+
update_dict["value"] = json.dumps(value)
|
|
523
|
+
event_as_dict["update"] = str([update_dict])
|
|
524
|
+
break
|
|
525
|
+
|
|
526
|
+
elif event_as_dict.get("event") == "slot":
|
|
527
|
+
event_as_dict.pop("value", None)
|
|
528
|
+
|
|
529
|
+
resulting_events.append(event_as_dict)
|
|
530
|
+
|
|
531
|
+
return {
|
|
532
|
+
"resulting_events": str(resulting_events),
|
|
533
|
+
"module_name": "command_processor",
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
def extract_attrs_for_check_commands_against_startable_flows(
|
|
538
|
+
self: "CommandGenerator", commands: List[Command], startable_flows: FlowsList
|
|
539
|
+
) -> Dict[str, Any]:
|
|
540
|
+
commands_list = []
|
|
541
|
+
|
|
542
|
+
for command in commands:
|
|
543
|
+
command_as_dict = command.as_dict()
|
|
544
|
+
command_type = command.command()
|
|
545
|
+
|
|
546
|
+
if command_type == SET_SLOT_COMMAND:
|
|
547
|
+
slot_value = command_as_dict.pop("value", None)
|
|
548
|
+
command_as_dict["is_slot_value_missing_or_none"] = slot_value is None
|
|
549
|
+
|
|
550
|
+
commands_list.append(command_as_dict)
|
|
551
|
+
|
|
552
|
+
startable_flow_ids = [flow.id for flow in startable_flows.underlying_flows]
|
|
553
|
+
|
|
554
|
+
return {
|
|
555
|
+
"commands": json.dumps(commands_list),
|
|
556
|
+
"startable_flow_ids": json.dumps(startable_flow_ids),
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
def extract_attrs_for_advance_flows(
|
|
561
|
+
tracker: DialogueStateTracker, available_actions: List[str], flows: FlowsList
|
|
562
|
+
) -> Dict[str, Any]:
|
|
563
|
+
from rasa.tracing.instrumentation.instrumentation import FLOW_EXECUTOR_MODULE_NAME
|
|
564
|
+
|
|
565
|
+
current_context = extract_current_context_attribute(tracker.stack)
|
|
566
|
+
|
|
567
|
+
return {
|
|
568
|
+
"module_name": FLOW_EXECUTOR_MODULE_NAME,
|
|
569
|
+
"available_actions": json.dumps(available_actions),
|
|
570
|
+
"current_context": json.dumps(current_context),
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
def extract_attrs_for_run_step(
|
|
575
|
+
step: FlowStep,
|
|
576
|
+
flow: Flow,
|
|
577
|
+
stack: DialogueStack,
|
|
578
|
+
tracker: DialogueStateTracker,
|
|
579
|
+
available_actions: List[str],
|
|
580
|
+
flows: FlowsList,
|
|
581
|
+
) -> Dict[str, Any]:
|
|
582
|
+
current_context = extract_current_context_attribute(stack)
|
|
583
|
+
|
|
584
|
+
return {
|
|
585
|
+
"step_custom_id": step.custom_id if step.custom_id else "None",
|
|
586
|
+
"step_description": step.description if step.description else "None",
|
|
587
|
+
"current_flow_id": flow.id,
|
|
588
|
+
"current_context": json.dumps(current_context),
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
def extract_attrs_for_policy_prediction(
|
|
593
|
+
self: Any,
|
|
594
|
+
probabilities: List[float],
|
|
595
|
+
events: Optional[List[Event]] = None,
|
|
596
|
+
optional_events: Optional[List[Event]] = None,
|
|
597
|
+
is_end_to_end_prediction: bool = False,
|
|
598
|
+
is_no_user_prediction: bool = False,
|
|
599
|
+
diagnostic_data: Optional[Dict[Text, Any]] = None,
|
|
600
|
+
action_metadata: Optional[Dict[Text, Any]] = None,
|
|
601
|
+
) -> Dict[str, Any]:
|
|
602
|
+
# diagnostic_data can contain ndarray type values which need to be converted
|
|
603
|
+
# into a list since the returning values have to be JSON serializable.
|
|
604
|
+
if isinstance(diagnostic_data, dict):
|
|
605
|
+
diagnostic_data = {
|
|
606
|
+
key: value.tolist() if isinstance(value, ndarray) else value
|
|
607
|
+
for key, value in diagnostic_data.items()
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
return {
|
|
611
|
+
"priority": self.priority,
|
|
612
|
+
"events": [event.__class__.__name__ for event in events] if events else "None",
|
|
613
|
+
"optional_events": [event.__class__.__name__ for event in optional_events]
|
|
614
|
+
if optional_events
|
|
615
|
+
else "None",
|
|
616
|
+
"is_end_to_end_prediction": is_end_to_end_prediction,
|
|
617
|
+
"is_no_user_prediction": is_no_user_prediction,
|
|
618
|
+
"diagnostic_data": json.dumps(diagnostic_data),
|
|
619
|
+
"action_metadata": json.dumps(action_metadata),
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
def extract_attrs_for_intentless_policy_prediction_result(
|
|
624
|
+
self: "IntentlessPolicy",
|
|
625
|
+
action_name: Optional[Text],
|
|
626
|
+
domain: Domain,
|
|
627
|
+
score: Optional[float] = 1.0,
|
|
628
|
+
) -> Dict[str, Any]:
|
|
629
|
+
return {
|
|
630
|
+
"action_name": action_name if action_name else "null",
|
|
631
|
+
"score": score if score else 0.0,
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
|
|
635
|
+
def extract_attrs_for_intentless_policy_find_closest_response(
|
|
636
|
+
self: "IntentlessPolicy",
|
|
637
|
+
tracker: DialogueStateTracker,
|
|
638
|
+
) -> Dict[str, Any]:
|
|
639
|
+
return {
|
|
640
|
+
"current_context": json.dumps(tracker.stack.current_context()),
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
def extract_attrs_for_intentless_policy_generate_llm_answer(
|
|
645
|
+
self: "IntentlessPolicy", llm: "BaseLLM", prompt: str
|
|
646
|
+
) -> Dict[str, Any]:
|
|
647
|
+
from rasa.core.policies.intentless_policy import (
|
|
648
|
+
DEFAULT_EMBEDDINGS_CONFIG,
|
|
649
|
+
DEFAULT_LLM_CONFIG,
|
|
650
|
+
)
|
|
651
|
+
|
|
652
|
+
attributes = extract_llm_config(
|
|
653
|
+
self,
|
|
654
|
+
default_llm_config=DEFAULT_LLM_CONFIG,
|
|
655
|
+
default_embeddings_config=DEFAULT_EMBEDDINGS_CONFIG,
|
|
656
|
+
)
|
|
657
|
+
|
|
658
|
+
return extend_attributes_with_prompt_tokens_length(self, attributes, prompt)
|
|
659
|
+
|
|
660
|
+
|
|
661
|
+
def extract_attrs_for_enterprise_search_generate_llm_answer(
|
|
662
|
+
self: "EnterpriseSearchPolicy", llm: "BaseLLM", prompt: str
|
|
663
|
+
) -> Dict[str, Any]:
|
|
664
|
+
from rasa.core.policies.enterprise_search_policy import (
|
|
665
|
+
DEFAULT_EMBEDDINGS_CONFIG,
|
|
666
|
+
DEFAULT_LLM_CONFIG,
|
|
667
|
+
)
|
|
668
|
+
|
|
669
|
+
attributes = extract_llm_config(
|
|
670
|
+
self,
|
|
671
|
+
default_llm_config=DEFAULT_LLM_CONFIG,
|
|
672
|
+
default_embeddings_config=DEFAULT_EMBEDDINGS_CONFIG,
|
|
673
|
+
)
|
|
674
|
+
|
|
675
|
+
return extend_attributes_with_prompt_tokens_length(self, attributes, prompt)
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
def extract_current_context_attribute(stack: DialogueStack) -> Dict[str, Any]:
|
|
679
|
+
"""Utility function to extract the current context from the dialogue stack."""
|
|
680
|
+
current_context = stack.current_context()
|
|
681
|
+
|
|
682
|
+
if "corrected_slots" in current_context:
|
|
683
|
+
current_context["corrected_slots"] = list(
|
|
684
|
+
current_context["corrected_slots"].keys()
|
|
685
|
+
)
|
|
686
|
+
|
|
687
|
+
return current_context
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
def compute_prompt_tokens_length(
|
|
691
|
+
model_type: str, model_name: str, prompt: str
|
|
692
|
+
) -> Optional[int]:
|
|
693
|
+
"""Utility function to compute the length of the prompt tokens for OpenAI models."""
|
|
694
|
+
if model_type != "openai":
|
|
695
|
+
logger.warning(
|
|
696
|
+
"Tracing prompt tokens is only supported for OpenAI models. Skipping."
|
|
697
|
+
)
|
|
698
|
+
return None
|
|
699
|
+
|
|
700
|
+
if model_name in ["gpt-3.5-turbo", "gpt-4"]:
|
|
701
|
+
logger.debug(
|
|
702
|
+
f"Model {model_name} may update over time. "
|
|
703
|
+
f"Returning num tokens assuming model '{model_name}-0613.'"
|
|
704
|
+
)
|
|
705
|
+
model_name = f"{model_name}-0613"
|
|
706
|
+
|
|
707
|
+
encoding = tiktoken.encoding_for_model(model_name)
|
|
708
|
+
return len(encoding.encode(prompt))
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
def extend_attributes_with_prompt_tokens_length(
|
|
712
|
+
self: Any,
|
|
713
|
+
attributes: Dict[str, Any],
|
|
714
|
+
prompt: str,
|
|
715
|
+
) -> Dict[str, Any]:
|
|
716
|
+
if not self.trace_prompt_tokens:
|
|
717
|
+
return attributes
|
|
718
|
+
|
|
719
|
+
len_prompt_tokens = compute_prompt_tokens_length(
|
|
720
|
+
model_type=attributes["llm_type"],
|
|
721
|
+
model_name=attributes["llm_model"],
|
|
722
|
+
prompt=prompt,
|
|
723
|
+
)
|
|
724
|
+
|
|
725
|
+
attributes[PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME] = str(len_prompt_tokens)
|
|
726
|
+
|
|
727
|
+
return attributes
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
def extract_attrs_for_custom_action_executor_run(
|
|
731
|
+
self: Union[
|
|
732
|
+
HTTPCustomActionExecutor, GRPCCustomActionExecutor, DirectCustomActionExecutor
|
|
733
|
+
],
|
|
734
|
+
tracker: DialogueStateTracker,
|
|
735
|
+
domain: Domain,
|
|
736
|
+
include_domain: bool = False,
|
|
737
|
+
) -> Dict[str, Any]:
|
|
738
|
+
actions_module, url = None, None
|
|
739
|
+
if hasattr(self, "action_endpoint"):
|
|
740
|
+
url = self.action_endpoint.url
|
|
741
|
+
actions_module = self.action_endpoint.actions_module
|
|
742
|
+
|
|
743
|
+
attrs: Dict[str, Any] = {
|
|
744
|
+
"class_name": self.__class__.__name__,
|
|
745
|
+
"action_name": self.action_name if hasattr(self, "action_name") else "None",
|
|
746
|
+
"sender_id": tracker.sender_id,
|
|
747
|
+
"url": str(url),
|
|
748
|
+
"actions_module": str(actions_module),
|
|
749
|
+
}
|
|
750
|
+
return attrs
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
def extract_attrs_for_grpc_custom_action_executor_request(
|
|
754
|
+
self: GRPCCustomActionExecutor,
|
|
755
|
+
request: action_webhook_pb2.WebhookRequest,
|
|
756
|
+
) -> Dict[str, Any]:
|
|
757
|
+
attrs: Dict[str, Any] = {"url": self.action_endpoint.url}
|
|
758
|
+
|
|
759
|
+
attrs.update(
|
|
760
|
+
{
|
|
761
|
+
REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME: request.ByteSize(),
|
|
762
|
+
}
|
|
763
|
+
)
|
|
764
|
+
|
|
765
|
+
return attrs
|