rasa-pro 3.8.16__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 +380 -0
- rasa/__init__.py +10 -0
- rasa/__main__.py +151 -0
- rasa/anonymization/__init__.py +2 -0
- rasa/anonymization/anonymisation_rule_yaml_reader.py +91 -0
- rasa/anonymization/anonymization_pipeline.py +287 -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 +117 -0
- rasa/api.py +146 -0
- rasa/cli/__init__.py +5 -0
- rasa/cli/arguments/__init__.py +0 -0
- rasa/cli/arguments/data.py +81 -0
- rasa/cli/arguments/default_arguments.py +165 -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 +204 -0
- rasa/cli/arguments/shell.py +13 -0
- rasa/cli/arguments/test.py +211 -0
- rasa/cli/arguments/train.py +263 -0
- rasa/cli/arguments/visualize.py +34 -0
- rasa/cli/arguments/x.py +30 -0
- rasa/cli/data.py +292 -0
- rasa/cli/e2e_test.py +566 -0
- rasa/cli/evaluate.py +222 -0
- rasa/cli/export.py +251 -0
- rasa/cli/inspect.py +63 -0
- rasa/cli/interactive.py +164 -0
- rasa/cli/license.py +65 -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 +12 -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 +33 -0
- rasa/cli/project_templates/calm/domain/list_contacts.yml +14 -0
- rasa/cli/project_templates/calm/domain/remove_contact.yml +31 -0
- rasa/cli/project_templates/calm/domain/shared.yml +5 -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 +45 -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.py +22 -0
- rasa/cli/project_templates/tutorial/config.yml +11 -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/domain.yml +17 -0
- rasa/cli/project_templates/tutorial/endpoints.yml +45 -0
- rasa/cli/run.py +136 -0
- rasa/cli/scaffold.py +268 -0
- rasa/cli/shell.py +141 -0
- rasa/cli/studio/__init__.py +0 -0
- rasa/cli/studio/download.py +51 -0
- rasa/cli/studio/studio.py +110 -0
- rasa/cli/studio/train.py +59 -0
- rasa/cli/studio/upload.py +85 -0
- rasa/cli/telemetry.py +90 -0
- rasa/cli/test.py +280 -0
- rasa/cli/train.py +260 -0
- rasa/cli/utils.py +453 -0
- rasa/cli/visualize.py +40 -0
- rasa/cli/x.py +205 -0
- rasa/constants.py +37 -0
- rasa/core/__init__.py +17 -0
- rasa/core/actions/__init__.py +0 -0
- rasa/core/actions/action.py +1450 -0
- rasa/core/actions/action_clean_stack.py +59 -0
- rasa/core/actions/action_run_slot_rejections.py +207 -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 +2 -0
- rasa/core/actions/forms.py +737 -0
- rasa/core/actions/loops.py +111 -0
- rasa/core/actions/two_stage_fallback.py +186 -0
- rasa/core/agent.py +557 -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 +322 -0
- rasa/core/brokers/pika.py +387 -0
- rasa/core/brokers/sql.py +86 -0
- rasa/core/channels/__init__.py +55 -0
- rasa/core/channels/audiocodes.py +463 -0
- rasa/core/channels/botframework.py +339 -0
- rasa/core/channels/callback.py +85 -0
- rasa/core/channels/channel.py +419 -0
- rasa/core/channels/console.py +243 -0
- rasa/core/channels/development_inspector.py +93 -0
- rasa/core/channels/facebook.py +422 -0
- rasa/core/channels/hangouts.py +335 -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-5623b6dc.js +1 -0
- rasa/core/channels/inspector/dist/assets/array-9f3ba611.js +1 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-685c106a.js +10 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-8cbed007.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-5889cf12.js +2 -0
- rasa/core/channels/inspector/dist/assets/createText-62fc7601-24c249d7.js +7 -0
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-7dd06a75.js +4 -0
- rasa/core/channels/inspector/dist/assets/erDiagram-9d236eb7-62c1e54c.js +51 -0
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-ce49b86f.js +6 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-4067e48f.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-85583a23.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-59fe4051.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-47e3a43b.js +266 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-5a2ac0d9.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-268a75c0.js +1040 -0
- rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-dfb8efc4.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-3ee28881.css +1 -0
- rasa/core/channels/inspector/dist/assets/infoDiagram-736b4530-b0c470f2.js +7 -0
- rasa/core/channels/inspector/dist/assets/init-77b53fdd.js +1 -0
- rasa/core/channels/inspector/dist/assets/journeyDiagram-df861f2b-2edb829a.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-b6873d69.js +1 -0
- rasa/core/channels/inspector/dist/assets/line-1efc5781.js +1 -0
- rasa/core/channels/inspector/dist/assets/linear-661e9b94.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-2d2e727f.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-9d3ea93d.js +35 -0
- rasa/core/channels/inspector/dist/assets/quadrantDiagram-4d7f4fd6-06a178a2.js +7 -0
- rasa/core/channels/inspector/dist/assets/requirementDiagram-6fc4c22a-0bfedffc.js +52 -0
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-d76d0a04.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-37bb4341.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-f52f7f57.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-4a986a20.js +1 -0
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-7dd9ae12.js +110 -0
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-46e1ca14.js +159 -0
- rasa/core/channels/inspector/dist/assets/styles-9c745c82-4a97439a.js +207 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-823917a3.js +1 -0
- rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-9ea72896.js +61 -0
- rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-b631a8b6.js +7 -0
- rasa/core/channels/inspector/dist/index.html +39 -0
- rasa/core/channels/inspector/index.html +37 -0
- rasa/core/channels/inspector/jest.config.ts +13 -0
- rasa/core/channels/inspector/package.json +48 -0
- rasa/core/channels/inspector/setupTests.ts +2 -0
- rasa/core/channels/inspector/src/App.tsx +170 -0
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +97 -0
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +187 -0
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +151 -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 +19 -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/formatters.test.ts +385 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +239 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +42 -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 +64 -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 +6156 -0
- rasa/core/channels/mattermost.py +229 -0
- rasa/core/channels/rasa_chat.py +126 -0
- rasa/core/channels/rest.py +210 -0
- rasa/core/channels/rocketchat.py +175 -0
- rasa/core/channels/slack.py +620 -0
- rasa/core/channels/socketio.py +274 -0
- rasa/core/channels/telegram.py +298 -0
- rasa/core/channels/twilio.py +169 -0
- rasa/core/channels/twilio_voice.py +367 -0
- rasa/core/channels/vier_cvg.py +374 -0
- rasa/core/channels/webexteams.py +135 -0
- rasa/core/concurrent_lock_store.py +210 -0
- rasa/core/constants.py +107 -0
- rasa/core/evaluation/__init__.py +0 -0
- rasa/core/evaluation/marker.py +267 -0
- rasa/core/evaluation/marker_base.py +925 -0
- rasa/core/evaluation/marker_stats.py +294 -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 +402 -0
- rasa/core/featurizers/tracker_featurizers.py +1172 -0
- rasa/core/http_interpreter.py +89 -0
- rasa/core/information_retrieval/__init__.py +0 -0
- rasa/core/information_retrieval/faiss.py +116 -0
- rasa/core/information_retrieval/information_retrieval.py +72 -0
- rasa/core/information_retrieval/milvus.py +59 -0
- rasa/core/information_retrieval/qdrant.py +102 -0
- rasa/core/jobs.py +63 -0
- rasa/core/lock.py +139 -0
- rasa/core/lock_store.py +344 -0
- rasa/core/migrate.py +404 -0
- rasa/core/nlg/__init__.py +3 -0
- rasa/core/nlg/callback.py +147 -0
- rasa/core/nlg/contextual_response_rephraser.py +270 -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 +69 -0
- rasa/core/policies/__init__.py +0 -0
- rasa/core/policies/ensemble.py +329 -0
- rasa/core/policies/enterprise_search_policy.py +717 -0
- rasa/core/policies/enterprise_search_prompt_template.jinja2 +62 -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 +582 -0
- rasa/core/policies/flows/flow_step_result.py +43 -0
- rasa/core/policies/intentless_policy.py +924 -0
- rasa/core/policies/intentless_prompt_template.jinja2 +22 -0
- rasa/core/policies/memoization.py +538 -0
- rasa/core/policies/policy.py +716 -0
- rasa/core/policies/rule_policy.py +1276 -0
- rasa/core/policies/ted_policy.py +2146 -0
- rasa/core/policies/unexpected_intent_policy.py +1015 -0
- rasa/core/processor.py +1331 -0
- rasa/core/run.py +315 -0
- rasa/core/secrets_manager/__init__.py +0 -0
- rasa/core/secrets_manager/constants.py +32 -0
- rasa/core/secrets_manager/endpoints.py +391 -0
- rasa/core/secrets_manager/factory.py +233 -0
- rasa/core/secrets_manager/secret_manager.py +262 -0
- rasa/core/secrets_manager/vault.py +576 -0
- rasa/core/test.py +1337 -0
- rasa/core/tracker_store.py +1664 -0
- rasa/core/train.py +107 -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 +1742 -0
- rasa/core/training/story_conflict.py +381 -0
- rasa/core/training/training.py +93 -0
- rasa/core/utils.py +344 -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 +189 -0
- rasa/dialogue_understanding/coexistence/llm_based_router.py +261 -0
- rasa/dialogue_understanding/coexistence/router_template.jinja2 +12 -0
- rasa/dialogue_understanding/commands/__init__.py +45 -0
- rasa/dialogue_understanding/commands/can_not_handle_command.py +61 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +116 -0
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +48 -0
- rasa/dialogue_understanding/commands/clarify_command.py +77 -0
- rasa/dialogue_understanding/commands/command.py +85 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +288 -0
- rasa/dialogue_understanding/commands/error_command.py +67 -0
- rasa/dialogue_understanding/commands/free_form_answer_command.py +9 -0
- rasa/dialogue_understanding/commands/handle_code_change_command.py +64 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +57 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +48 -0
- rasa/dialogue_understanding/commands/noop_command.py +45 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +125 -0
- rasa/dialogue_understanding/commands/skip_question_command.py +66 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +98 -0
- rasa/dialogue_understanding/generator/__init__.py +6 -0
- rasa/dialogue_understanding/generator/command_generator.py +257 -0
- rasa/dialogue_understanding/generator/command_prompt_template.jinja2 +57 -0
- rasa/dialogue_understanding/generator/flow_document_template.jinja2 +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +410 -0
- rasa/dialogue_understanding/generator/llm_command_generator.py +637 -0
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +157 -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 +243 -0
- rasa/dialogue_understanding/patterns/human_handoff.py +37 -0
- rasa/dialogue_understanding/patterns/internal_error.py +47 -0
- rasa/dialogue_understanding/patterns/search.py +37 -0
- rasa/dialogue_understanding/patterns/skip_question.py +38 -0
- rasa/dialogue_understanding/processor/__init__.py +0 -0
- rasa/dialogue_understanding/processor/command_processor.py +578 -0
- rasa/dialogue_understanding/processor/command_processor_component.py +39 -0
- rasa/dialogue_understanding/stack/__init__.py +0 -0
- rasa/dialogue_understanding/stack/dialogue_stack.py +178 -0
- rasa/dialogue_understanding/stack/frames/__init__.py +19 -0
- rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +27 -0
- rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +137 -0
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +157 -0
- rasa/dialogue_understanding/stack/frames/pattern_frame.py +10 -0
- rasa/dialogue_understanding/stack/frames/search_frame.py +27 -0
- rasa/dialogue_understanding/stack/utils.py +211 -0
- rasa/e2e_test/__init__.py +0 -0
- rasa/e2e_test/constants.py +10 -0
- rasa/e2e_test/e2e_test_case.py +322 -0
- rasa/e2e_test/e2e_test_result.py +34 -0
- rasa/e2e_test/e2e_test_runner.py +659 -0
- rasa/e2e_test/e2e_test_schema.yml +67 -0
- rasa/engine/__init__.py +0 -0
- rasa/engine/caching.py +464 -0
- rasa/engine/constants.py +17 -0
- rasa/engine/exceptions.py +14 -0
- rasa/engine/graph.py +625 -0
- rasa/engine/loader.py +36 -0
- rasa/engine/recipes/__init__.py +0 -0
- rasa/engine/recipes/config_files/default_config.yml +44 -0
- rasa/engine/recipes/default_components.py +99 -0
- rasa/engine/recipes/default_recipe.py +1252 -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 +256 -0
- rasa/engine/runner/interface.py +49 -0
- rasa/engine/storage/__init__.py +0 -0
- rasa/engine/storage/local_model_storage.py +248 -0
- rasa/engine/storage/resource.py +110 -0
- rasa/engine/storage/storage.py +203 -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 +839 -0
- rasa/env.py +5 -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 +43 -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 +552 -0
- rasa/graph_components/validators/finetuning_validator.py +302 -0
- rasa/hooks.py +113 -0
- rasa/jupyter.py +63 -0
- rasa/keys +1 -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_testing.py +457 -0
- rasa/model_training.py +535 -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 +1874 -0
- rasa/nlu/classifiers/fallback_classifier.py +192 -0
- rasa/nlu/classifiers/keyword_intent_classifier.py +188 -0
- rasa/nlu/classifiers/llm_intent_classifier.py +519 -0
- rasa/nlu/classifiers/logistic_regression_classifier.py +240 -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 +309 -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 +672 -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 +449 -0
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +57 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +772 -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 +840 -0
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +539 -0
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +269 -0
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +9 -0
- rasa/nlu/model.py +24 -0
- rasa/nlu/persistor.py +240 -0
- rasa/nlu/run.py +27 -0
- rasa/nlu/selectors/__init__.py +0 -0
- rasa/nlu/selectors/response_selector.py +990 -0
- rasa/nlu/test.py +1943 -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 +106 -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 +312 -0
- rasa/plugin.py +90 -0
- rasa/server.py +1536 -0
- rasa/shared/__init__.py +0 -0
- rasa/shared/constants.py +181 -0
- rasa/shared/core/__init__.py +0 -0
- rasa/shared/core/constants.py +168 -0
- rasa/shared/core/conversation.py +46 -0
- rasa/shared/core/domain.py +2106 -0
- rasa/shared/core/events.py +2507 -0
- rasa/shared/core/flows/__init__.py +7 -0
- rasa/shared/core/flows/flow.py +353 -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 +211 -0
- rasa/shared/core/flows/flows_yaml_schema.json +217 -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 +51 -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/validation.py +527 -0
- rasa/shared/core/flows/yaml_flows_io.py +278 -0
- rasa/shared/core/generator.py +907 -0
- rasa/shared/core/slot_mappings.py +235 -0
- rasa/shared/core/slots.py +647 -0
- rasa/shared/core/trackers.py +1159 -0
- rasa/shared/core/training_data/__init__.py +0 -0
- rasa/shared/core/training_data/loading.py +90 -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 +442 -0
- rasa/shared/core/training_data/structures.py +838 -0
- rasa/shared/core/training_data/visualization.html +146 -0
- rasa/shared/core/training_data/visualization.py +603 -0
- rasa/shared/data.py +192 -0
- rasa/shared/engine/__init__.py +0 -0
- rasa/shared/engine/caching.py +26 -0
- rasa/shared/exceptions.py +129 -0
- rasa/shared/importers/__init__.py +0 -0
- rasa/shared/importers/importer.py +705 -0
- rasa/shared/importers/multi_project.py +203 -0
- rasa/shared/importers/rasa.py +100 -0
- rasa/shared/importers/utils.py +34 -0
- rasa/shared/nlu/__init__.py +0 -0
- rasa/shared/nlu/constants.py +45 -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 +209 -0
- rasa/shared/nlu/training_data/features.py +374 -0
- rasa/shared/nlu/training_data/formats/__init__.py +10 -0
- rasa/shared/nlu/training_data/formats/dialogflow.py +162 -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 +605 -0
- rasa/shared/nlu/training_data/formats/readerwriter.py +245 -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 +477 -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 +732 -0
- rasa/shared/nlu/training_data/util.py +223 -0
- rasa/shared/providers/__init__.py +0 -0
- rasa/shared/providers/openai/__init__.py +0 -0
- rasa/shared/providers/openai/clients.py +43 -0
- rasa/shared/providers/openai/session_handler.py +110 -0
- rasa/shared/utils/__init__.py +0 -0
- rasa/shared/utils/cli.py +72 -0
- rasa/shared/utils/common.py +308 -0
- rasa/shared/utils/constants.py +1 -0
- rasa/shared/utils/io.py +403 -0
- rasa/shared/utils/llm.py +405 -0
- rasa/shared/utils/pykwalify_extensions.py +26 -0
- rasa/shared/utils/schemas/__init__.py +0 -0
- rasa/shared/utils/schemas/config.yml +2 -0
- rasa/shared/utils/schemas/domain.yml +142 -0
- rasa/shared/utils/schemas/events.py +212 -0
- rasa/shared/utils/schemas/model_config.yml +46 -0
- rasa/shared/utils/schemas/stories.yml +173 -0
- rasa/shared/utils/yaml.py +777 -0
- rasa/studio/__init__.py +0 -0
- rasa/studio/auth.py +252 -0
- rasa/studio/config.py +127 -0
- rasa/studio/constants.py +16 -0
- rasa/studio/data_handler.py +352 -0
- rasa/studio/download.py +350 -0
- rasa/studio/train.py +136 -0
- rasa/studio/upload.py +408 -0
- rasa/telemetry.py +1583 -0
- rasa/tracing/__init__.py +0 -0
- rasa/tracing/config.py +338 -0
- rasa/tracing/constants.py +38 -0
- rasa/tracing/instrumentation/__init__.py +0 -0
- rasa/tracing/instrumentation/attribute_extractors.py +663 -0
- rasa/tracing/instrumentation/instrumentation.py +939 -0
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +142 -0
- rasa/tracing/instrumentation/metrics.py +206 -0
- rasa/tracing/metric_instrument_provider.py +125 -0
- rasa/utils/__init__.py +0 -0
- rasa/utils/beta.py +83 -0
- rasa/utils/cli.py +27 -0
- rasa/utils/common.py +635 -0
- rasa/utils/converter.py +53 -0
- rasa/utils/endpoints.py +303 -0
- rasa/utils/io.py +326 -0
- rasa/utils/licensing.py +319 -0
- rasa/utils/log_utils.py +174 -0
- rasa/utils/mapper.py +210 -0
- rasa/utils/ml_utils.py +145 -0
- rasa/utils/plotting.py +362 -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/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 +991 -0
- rasa/utils/tensorflow/model_data_utils.py +500 -0
- rasa/utils/tensorflow/models.py +936 -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/yaml.py +54 -0
- rasa/validator.py +1035 -0
- rasa/version.py +3 -0
- rasa_pro-3.8.16.dist-info/METADATA +528 -0
- rasa_pro-3.8.16.dist-info/NOTICE +5 -0
- rasa_pro-3.8.16.dist-info/RECORD +644 -0
- rasa_pro-3.8.16.dist-info/WHEEL +4 -0
- rasa_pro-3.8.16.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
import json
|
|
3
|
+
import logging
|
|
4
|
+
from typing import Callable, List, Optional, TYPE_CHECKING, Type
|
|
5
|
+
|
|
6
|
+
from opentelemetry.trace import Tracer
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from rasa.core.policies.intentless_policy import IntentlessPolicy
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _instrument_select_response_examples(
|
|
15
|
+
tracer: Tracer, policy_class: Type["IntentlessPolicy"]
|
|
16
|
+
) -> None:
|
|
17
|
+
def tracing_select_response_examples_wrapper(fn: Callable) -> Callable:
|
|
18
|
+
@functools.wraps(fn)
|
|
19
|
+
def wrapper(
|
|
20
|
+
self: "IntentlessPolicy",
|
|
21
|
+
history: str,
|
|
22
|
+
number_of_samples: int,
|
|
23
|
+
max_number_of_tokens: int,
|
|
24
|
+
) -> List[str]:
|
|
25
|
+
with tracer.start_as_current_span(
|
|
26
|
+
f"{self.__class__.__name__}.{fn.__name__}"
|
|
27
|
+
) as span:
|
|
28
|
+
ai_response_examples = fn(
|
|
29
|
+
self, history, number_of_samples, max_number_of_tokens
|
|
30
|
+
)
|
|
31
|
+
span.set_attributes(
|
|
32
|
+
{
|
|
33
|
+
"ai_response_examples": json.dumps(ai_response_examples),
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
return ai_response_examples
|
|
37
|
+
|
|
38
|
+
return wrapper
|
|
39
|
+
|
|
40
|
+
policy_class.select_response_examples = tracing_select_response_examples_wrapper( # type: ignore[assignment] # noqa: E501
|
|
41
|
+
policy_class.select_response_examples
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
logger.debug(
|
|
45
|
+
f"Instrumented '{policy_class.__name__}.select_response_examples' method."
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _instrument_select_few_shot_conversations(
|
|
50
|
+
tracer: Tracer, policy_class: Type["IntentlessPolicy"]
|
|
51
|
+
) -> None:
|
|
52
|
+
def tracing_select_few_shot_conversations_wrapper(fn: Callable) -> Callable:
|
|
53
|
+
@functools.wraps(fn)
|
|
54
|
+
def wrapper(
|
|
55
|
+
self: "IntentlessPolicy",
|
|
56
|
+
history: str,
|
|
57
|
+
number_of_samples: int,
|
|
58
|
+
max_number_of_tokens: int,
|
|
59
|
+
) -> List[str]:
|
|
60
|
+
with tracer.start_as_current_span(
|
|
61
|
+
f"{self.__class__.__name__}.{fn.__name__}"
|
|
62
|
+
) as span:
|
|
63
|
+
conversation_samples = fn(
|
|
64
|
+
self, history, number_of_samples, max_number_of_tokens
|
|
65
|
+
)
|
|
66
|
+
span.set_attributes(
|
|
67
|
+
{
|
|
68
|
+
"conversation_samples": json.dumps(conversation_samples),
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
return conversation_samples
|
|
72
|
+
|
|
73
|
+
return wrapper
|
|
74
|
+
|
|
75
|
+
policy_class.select_few_shot_conversations = tracing_select_few_shot_conversations_wrapper( # type: ignore[assignment] # noqa: E501
|
|
76
|
+
policy_class.select_few_shot_conversations
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
logger.debug(
|
|
80
|
+
f"Instrumented '{policy_class.__name__}.select_few_shot_conversations' method."
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def _instrument_extract_ai_responses(
|
|
85
|
+
tracer: Tracer, policy_class: Type["IntentlessPolicy"]
|
|
86
|
+
) -> None:
|
|
87
|
+
def tracing_extract_ai_responses_wrapper(fn: Callable) -> Callable:
|
|
88
|
+
@functools.wraps(fn)
|
|
89
|
+
def wrapper(
|
|
90
|
+
self: "IntentlessPolicy", conversation_samples: List[str]
|
|
91
|
+
) -> List[str]:
|
|
92
|
+
with tracer.start_as_current_span(
|
|
93
|
+
f"{self.__class__.__name__}.{fn.__name__}"
|
|
94
|
+
) as span:
|
|
95
|
+
ai_responses = fn(self, conversation_samples)
|
|
96
|
+
span.set_attributes(
|
|
97
|
+
{
|
|
98
|
+
"ai_responses": json.dumps(ai_responses),
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
return ai_responses
|
|
102
|
+
|
|
103
|
+
return wrapper
|
|
104
|
+
|
|
105
|
+
policy_class.extract_ai_responses = tracing_extract_ai_responses_wrapper( # type: ignore[assignment] # noqa: E501
|
|
106
|
+
policy_class.extract_ai_responses
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
logger.debug(f"Instrumented '{policy_class.__name__}.extract_ai_responses' method.")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _instrument_generate_answer(
|
|
113
|
+
tracer: Tracer, policy_class: Type["IntentlessPolicy"]
|
|
114
|
+
) -> None:
|
|
115
|
+
def tracing_generate_answer_wrapper(fn: Callable) -> Callable:
|
|
116
|
+
@functools.wraps(fn)
|
|
117
|
+
async def wrapper(
|
|
118
|
+
self: "IntentlessPolicy",
|
|
119
|
+
response_examples: List[str],
|
|
120
|
+
conversation_samples: List[str],
|
|
121
|
+
history: str,
|
|
122
|
+
) -> Optional[str]:
|
|
123
|
+
with tracer.start_as_current_span(
|
|
124
|
+
f"{self.__class__.__name__}.{fn.__name__}"
|
|
125
|
+
) as span:
|
|
126
|
+
llm_response = await fn(
|
|
127
|
+
self, response_examples, conversation_samples, history
|
|
128
|
+
)
|
|
129
|
+
span.set_attributes(
|
|
130
|
+
{
|
|
131
|
+
"llm_response": json.dumps(llm_response),
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
return llm_response
|
|
135
|
+
|
|
136
|
+
return wrapper
|
|
137
|
+
|
|
138
|
+
policy_class.generate_answer = tracing_generate_answer_wrapper( # type: ignore[assignment] # noqa: E501
|
|
139
|
+
policy_class.generate_answer
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
logger.debug(f"Instrumented '{policy_class.__name__}.generate_answer' method.")
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
from typing import Dict, Any
|
|
2
|
+
|
|
3
|
+
import psutil
|
|
4
|
+
|
|
5
|
+
from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
|
|
6
|
+
from rasa.core.policies.enterprise_search_policy import EnterpriseSearchPolicy
|
|
7
|
+
from rasa.core.policies.intentless_policy import IntentlessPolicy
|
|
8
|
+
from rasa.dialogue_understanding.generator import LLMCommandGenerator
|
|
9
|
+
from rasa.tracing.constants import (
|
|
10
|
+
LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME,
|
|
11
|
+
LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME,
|
|
12
|
+
LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME,
|
|
13
|
+
PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME,
|
|
14
|
+
LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
15
|
+
ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
16
|
+
INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
17
|
+
CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
18
|
+
RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME,
|
|
19
|
+
RASA_CLIENT_REQUEST_DURATION_METRIC_NAME,
|
|
20
|
+
ENDPOINT_REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME,
|
|
21
|
+
)
|
|
22
|
+
from rasa.tracing.metric_instrument_provider import MetricInstrumentProvider
|
|
23
|
+
from rasa.utils.endpoints import EndpointConfig
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def record_llm_command_generator_cpu_usage(
|
|
27
|
+
metric_instrument_provider: MetricInstrumentProvider,
|
|
28
|
+
) -> None:
|
|
29
|
+
"""Record CPU usage as a percentage.
|
|
30
|
+
|
|
31
|
+
The recording is done by the opentelemetry.metrics.Histogram instrument.
|
|
32
|
+
This instrument is registered to the MetricInstrumentProvider internal singleton.
|
|
33
|
+
|
|
34
|
+
:param metric_instrument_provider: The MetricInstrumentProvider instance
|
|
35
|
+
:return: None
|
|
36
|
+
"""
|
|
37
|
+
metric_instrument = metric_instrument_provider.get_instrument(
|
|
38
|
+
LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME
|
|
39
|
+
)
|
|
40
|
+
if not metric_instrument:
|
|
41
|
+
return None
|
|
42
|
+
|
|
43
|
+
cpu_usage = psutil.cpu_percent()
|
|
44
|
+
metric_instrument.record(amount=cpu_usage)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def record_llm_command_generator_memory_usage(
|
|
48
|
+
metric_instrument_provider: MetricInstrumentProvider,
|
|
49
|
+
) -> None:
|
|
50
|
+
"""Record memory usage as a percentage.
|
|
51
|
+
|
|
52
|
+
The recording is done by the opentelemetry.metrics.Histogram instrument.
|
|
53
|
+
This instrument is registered to the MetricInstrumentProvider internal singleton.
|
|
54
|
+
|
|
55
|
+
:param metric_instrument_provider: The MetricInstrumentProvider instance
|
|
56
|
+
:return: None
|
|
57
|
+
"""
|
|
58
|
+
metric_instrument = metric_instrument_provider.get_instrument(
|
|
59
|
+
LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME
|
|
60
|
+
)
|
|
61
|
+
if not metric_instrument:
|
|
62
|
+
return None
|
|
63
|
+
|
|
64
|
+
memory_usage = psutil.virtual_memory().percent
|
|
65
|
+
metric_instrument.record(amount=memory_usage)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def record_llm_command_generator_prompt_token(
|
|
69
|
+
metric_instrument_provider: MetricInstrumentProvider,
|
|
70
|
+
attributes: Dict[str, Any],
|
|
71
|
+
) -> None:
|
|
72
|
+
"""
|
|
73
|
+
Record prompt token length.
|
|
74
|
+
|
|
75
|
+
The recording is done by the opentelemetry.metrics.Histogram instrument.
|
|
76
|
+
This instrument is registered to the MetricInstrumentProvider internal singleton.
|
|
77
|
+
|
|
78
|
+
:param metric_instrument_provider: The MetricInstrumentProvider instance
|
|
79
|
+
:param attributes: Extracted tracing attributes
|
|
80
|
+
:return: None
|
|
81
|
+
"""
|
|
82
|
+
if PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME not in attributes:
|
|
83
|
+
return None
|
|
84
|
+
|
|
85
|
+
metric_instrument = metric_instrument_provider.get_instrument(
|
|
86
|
+
LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME
|
|
87
|
+
)
|
|
88
|
+
if not metric_instrument:
|
|
89
|
+
return None
|
|
90
|
+
|
|
91
|
+
prompt_tokens_len = attributes[PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME]
|
|
92
|
+
|
|
93
|
+
try:
|
|
94
|
+
prompt_tokens_len = int(prompt_tokens_len)
|
|
95
|
+
except ValueError:
|
|
96
|
+
return None
|
|
97
|
+
|
|
98
|
+
metric_instrument.record(
|
|
99
|
+
amount=prompt_tokens_len,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def record_llm_command_generator_metrics(attributes: Dict[str, Any]) -> None:
|
|
104
|
+
"""
|
|
105
|
+
Record measurements for LLMCommandGenerator specific metrics.
|
|
106
|
+
|
|
107
|
+
The recording is done by the opentelemetry.metrics.Histogram instruments.
|
|
108
|
+
These instruments are registered to the MetricInstrumentProvider internal singleton.
|
|
109
|
+
|
|
110
|
+
:param attributes: Extracted tracing attributes
|
|
111
|
+
:return: None
|
|
112
|
+
"""
|
|
113
|
+
instrument_provider = MetricInstrumentProvider()
|
|
114
|
+
|
|
115
|
+
if not instrument_provider.instruments:
|
|
116
|
+
return None
|
|
117
|
+
|
|
118
|
+
record_llm_command_generator_cpu_usage(instrument_provider)
|
|
119
|
+
record_llm_command_generator_memory_usage(instrument_provider)
|
|
120
|
+
record_llm_command_generator_prompt_token(instrument_provider, attributes)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def record_callable_duration_metrics(
|
|
124
|
+
self: Any, start_time: int, end_time: int, **kwargs: Any
|
|
125
|
+
) -> None:
|
|
126
|
+
"""
|
|
127
|
+
Record duration of instrumented method calls invoked for the following components:
|
|
128
|
+
- LLMCommandGenerator
|
|
129
|
+
- EnterpriseSearchPolicy
|
|
130
|
+
- IntentlessPolicy
|
|
131
|
+
- ContextualResponseRephraser
|
|
132
|
+
- EndpointConfig
|
|
133
|
+
|
|
134
|
+
:param self: The instance on which the instrumented method is called on.
|
|
135
|
+
:param start_time: Start time measured by time.perf_counter_ns()
|
|
136
|
+
before the method is called.
|
|
137
|
+
:param end_time: End time measured by time.perf_counter_ns()
|
|
138
|
+
after the method is called.
|
|
139
|
+
:return: None
|
|
140
|
+
"""
|
|
141
|
+
instrument_provider = MetricInstrumentProvider()
|
|
142
|
+
if not instrument_provider.instruments:
|
|
143
|
+
return None
|
|
144
|
+
|
|
145
|
+
metric_instrument = None
|
|
146
|
+
attributes = {}
|
|
147
|
+
|
|
148
|
+
if isinstance(self, LLMCommandGenerator):
|
|
149
|
+
metric_instrument = instrument_provider.get_instrument(
|
|
150
|
+
LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
if isinstance(self, EnterpriseSearchPolicy):
|
|
154
|
+
metric_instrument = instrument_provider.get_instrument(
|
|
155
|
+
ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
if isinstance(self, IntentlessPolicy):
|
|
159
|
+
metric_instrument = instrument_provider.get_instrument(
|
|
160
|
+
INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
if isinstance(self, ContextualResponseRephraser):
|
|
164
|
+
metric_instrument = instrument_provider.get_instrument(
|
|
165
|
+
CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
if isinstance(self, EndpointConfig):
|
|
169
|
+
metric_instrument = instrument_provider.get_instrument(
|
|
170
|
+
RASA_CLIENT_REQUEST_DURATION_METRIC_NAME
|
|
171
|
+
)
|
|
172
|
+
attributes = {"url": kwargs.get("url")}
|
|
173
|
+
|
|
174
|
+
if not metric_instrument:
|
|
175
|
+
return None
|
|
176
|
+
|
|
177
|
+
timedelta_ms = (end_time - start_time) / 1000000
|
|
178
|
+
metric_instrument.record(amount=timedelta_ms, attributes=attributes)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def record_request_size_in_bytes(attributes: Dict[str, Any]) -> None:
|
|
182
|
+
"""
|
|
183
|
+
Record endpoint request size in bytes for EndpointConfig class.
|
|
184
|
+
|
|
185
|
+
The recording is done by the opentelemetry.metrics.Histogram instruments.
|
|
186
|
+
These instruments are registered to the MetricInstrumentProvider internal singleton.
|
|
187
|
+
|
|
188
|
+
:param attributes: Extracted tracing attributes
|
|
189
|
+
:return: None
|
|
190
|
+
"""
|
|
191
|
+
|
|
192
|
+
metric_instrument_provider = MetricInstrumentProvider()
|
|
193
|
+
|
|
194
|
+
if not metric_instrument_provider.instruments:
|
|
195
|
+
return None
|
|
196
|
+
|
|
197
|
+
metric_instrument = metric_instrument_provider.get_instrument(
|
|
198
|
+
RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME
|
|
199
|
+
)
|
|
200
|
+
if not metric_instrument:
|
|
201
|
+
return None
|
|
202
|
+
|
|
203
|
+
request_body_size = attributes.pop(
|
|
204
|
+
ENDPOINT_REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME, 0
|
|
205
|
+
)
|
|
206
|
+
metric_instrument.record(amount=request_body_size, attributes=attributes)
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
from typing import ClassVar, Dict, Any
|
|
2
|
+
|
|
3
|
+
from opentelemetry.metrics import get_meter_provider
|
|
4
|
+
from opentelemetry.sdk.metrics import Meter
|
|
5
|
+
|
|
6
|
+
from rasa.utils.singleton import Singleton
|
|
7
|
+
from rasa.tracing.constants import (
|
|
8
|
+
LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME,
|
|
9
|
+
LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME,
|
|
10
|
+
LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME,
|
|
11
|
+
LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
12
|
+
LLM_COMMAND_GENERATOR_CPU_MEMORY_USAGE_UNIT_NAME,
|
|
13
|
+
DURATION_UNIT_NAME,
|
|
14
|
+
ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
15
|
+
INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
16
|
+
CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
17
|
+
RASA_CLIENT_REQUEST_DURATION_METRIC_NAME,
|
|
18
|
+
RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class MetricInstrumentProvider(metaclass=Singleton):
|
|
23
|
+
"""Singleton provider class of metric instruments."""
|
|
24
|
+
|
|
25
|
+
instruments: ClassVar[Dict[str, Any]] = {}
|
|
26
|
+
|
|
27
|
+
def register_instruments(self) -> None:
|
|
28
|
+
"""Update instruments class attribute.
|
|
29
|
+
|
|
30
|
+
The registered instruments are subclasses of the
|
|
31
|
+
opentelemetry.metrics._internal.instrument.Instrument interface.
|
|
32
|
+
"""
|
|
33
|
+
meter = get_meter_provider().get_meter(__name__)
|
|
34
|
+
|
|
35
|
+
instruments = {
|
|
36
|
+
**self._create_llm_command_generator_instruments(meter),
|
|
37
|
+
**self._create_llm_response_duration_instruments(meter),
|
|
38
|
+
**self._create_client_request_instruments(meter),
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
self.instruments.update(instruments)
|
|
42
|
+
|
|
43
|
+
def get_instrument(self, name: str) -> Any:
|
|
44
|
+
"""Get the instrument mapped to the provided name."""
|
|
45
|
+
return self.instruments.get(name)
|
|
46
|
+
|
|
47
|
+
@staticmethod
|
|
48
|
+
def _create_llm_command_generator_instruments(meter: Meter) -> Dict[str, Any]:
|
|
49
|
+
llm_command_generator_cpu_usage = meter.create_histogram(
|
|
50
|
+
name=LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME,
|
|
51
|
+
description="CPU percentage for LLMCommandGenerator",
|
|
52
|
+
unit=LLM_COMMAND_GENERATOR_CPU_MEMORY_USAGE_UNIT_NAME,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
llm_command_generator_memory_usage = meter.create_histogram(
|
|
56
|
+
name=LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME,
|
|
57
|
+
description="RAM memory usage for LLMCommandGenerator",
|
|
58
|
+
unit=LLM_COMMAND_GENERATOR_CPU_MEMORY_USAGE_UNIT_NAME,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
llm_command_generator_prompt_token_usage = meter.create_histogram(
|
|
62
|
+
name=LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME,
|
|
63
|
+
description="LLMCommandGenerator prompt token length",
|
|
64
|
+
unit="1",
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
llm_response_duration_llm_command_generator = meter.create_histogram(
|
|
68
|
+
name=LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
69
|
+
description="The duration of LLMCommandGenerator's LLM call",
|
|
70
|
+
unit=DURATION_UNIT_NAME,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME: llm_command_generator_cpu_usage, # noqa: E501
|
|
75
|
+
LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME: llm_command_generator_memory_usage, # noqa: E501
|
|
76
|
+
LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME: llm_command_generator_prompt_token_usage, # noqa: E501
|
|
77
|
+
LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME: llm_response_duration_llm_command_generator, # noqa: E501
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@staticmethod
|
|
81
|
+
def _create_llm_response_duration_instruments(meter: Meter) -> Dict[str, Any]:
|
|
82
|
+
llm_response_duration_enterprise_search = meter.create_histogram(
|
|
83
|
+
name=ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
84
|
+
description="The duration of EnterpriseSearchPolicy's LLM call",
|
|
85
|
+
unit=DURATION_UNIT_NAME,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
llm_response_duration_intentless = meter.create_histogram(
|
|
89
|
+
name=INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
90
|
+
description="The duration of IntentlessPolicy's LLM call",
|
|
91
|
+
unit=DURATION_UNIT_NAME,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
llm_response_duration_contextual_nlg = meter.create_histogram(
|
|
95
|
+
name=CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME,
|
|
96
|
+
description="The duration of ContextualResponseRephraser's LLM call",
|
|
97
|
+
unit=DURATION_UNIT_NAME,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
return {
|
|
101
|
+
ENTERPRISE_SEARCH_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME: llm_response_duration_enterprise_search, # noqa: E501
|
|
102
|
+
INTENTLESS_POLICY_LLM_RESPONSE_DURATION_METRIC_NAME: llm_response_duration_intentless, # noqa: E501
|
|
103
|
+
CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME: llm_response_duration_contextual_nlg, # noqa: E501
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@staticmethod
|
|
107
|
+
def _create_client_request_instruments(
|
|
108
|
+
meter: Meter,
|
|
109
|
+
) -> Dict[str, Any]:
|
|
110
|
+
client_request_duration = meter.create_histogram(
|
|
111
|
+
name=RASA_CLIENT_REQUEST_DURATION_METRIC_NAME,
|
|
112
|
+
description="The duration of the rasa client request",
|
|
113
|
+
unit=DURATION_UNIT_NAME,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
client_request_body_size = meter.create_histogram(
|
|
117
|
+
name=RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME,
|
|
118
|
+
description="The rasa client request's body size",
|
|
119
|
+
unit="byte",
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
RASA_CLIENT_REQUEST_DURATION_METRIC_NAME: client_request_duration,
|
|
124
|
+
RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME: client_request_body_size,
|
|
125
|
+
}
|
rasa/utils/__init__.py
ADDED
|
File without changes
|
rasa/utils/beta.py
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from textwrap import dedent
|
|
3
|
+
|
|
4
|
+
from rasa.shared.exceptions import RasaException
|
|
5
|
+
from rasa.utils.common import get_bool_env_variable
|
|
6
|
+
|
|
7
|
+
logger = logging.getLogger(__name__)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class BetaNotEnabledException(SystemExit, RasaException):
|
|
11
|
+
"""Raised when a beta feature is not enabled."""
|
|
12
|
+
|
|
13
|
+
def __init__(self, feature_name: str, env_flag: str) -> None:
|
|
14
|
+
"""Initializes the exception.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
feature_name: The name of the feature.
|
|
18
|
+
env_flag: Name of the environment variable that enables the feature.
|
|
19
|
+
"""
|
|
20
|
+
self.feature_name = feature_name
|
|
21
|
+
self.env_flag = env_flag
|
|
22
|
+
super().__init__(
|
|
23
|
+
dedent(
|
|
24
|
+
f"""
|
|
25
|
+
This release, including the {feature_name} feature, is a beta release
|
|
26
|
+
provided to you only for trial and evaluation. You cannot use this
|
|
27
|
+
beta software release as part of any production environment. This
|
|
28
|
+
beta software release is not intended for processing sensitive or
|
|
29
|
+
personal data. There may be bugs or errors - we provide it “as is”,
|
|
30
|
+
without any reps and warranties. We may never commercialize some beta
|
|
31
|
+
software. Your use of the {feature_name} feature and any other
|
|
32
|
+
software or material included in this beta release is subject to
|
|
33
|
+
the Beta Software Terms (https://rasa.com/beta-terms/).
|
|
34
|
+
Please make sure you read these terms and conditions prior to
|
|
35
|
+
using this beta release.
|
|
36
|
+
|
|
37
|
+
You need to explicitly enable the {feature_name} feature, before
|
|
38
|
+
usage. Set the `{env_flag}=true` environment variable before
|
|
39
|
+
running the command again.
|
|
40
|
+
"""
|
|
41
|
+
)
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def ensure_beta_feature_is_enabled(feature_name: str, env_flag: str) -> None:
|
|
46
|
+
"""Checks if a beta feature is enabled. Raises an exception if not.
|
|
47
|
+
|
|
48
|
+
If the feature is enabled, a usage warning is printed.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
feature_name: The name of the feature.
|
|
52
|
+
env_flag: The name of the environment variable that enables the feature.
|
|
53
|
+
"""
|
|
54
|
+
if not get_bool_env_variable(env_flag, default_variable_value=False):
|
|
55
|
+
raise BetaNotEnabledException(feature_name, env_flag)
|
|
56
|
+
|
|
57
|
+
print_beta_usage_info(feature_name, env_flag)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def print_beta_usage_info(feature_name: str, env_flag: str) -> None:
|
|
61
|
+
"""Prints a usage warning about a beta feature.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
feature_name: The name of the feature.
|
|
65
|
+
env_flag: The name of the environment variable that enables the feature.
|
|
66
|
+
"""
|
|
67
|
+
logger.warning(
|
|
68
|
+
dedent(
|
|
69
|
+
f"""\
|
|
70
|
+
The {feature_name} feature is currently released in a beta version.
|
|
71
|
+
|
|
72
|
+
The feature might change in the future 🔬. Your download and use of
|
|
73
|
+
this beta release are subject to the Beta Software Terms
|
|
74
|
+
(https://rasa.com/beta-terms/).
|
|
75
|
+
It's not intended for production. Don't use it to process sensitive data.
|
|
76
|
+
If you do, it's at your own risk. It's not mandatory to download
|
|
77
|
+
or use this software release. We're looking forward to your feedback.
|
|
78
|
+
|
|
79
|
+
If you want to disable this beta feature, set the environment variable
|
|
80
|
+
`{env_flag}=false`.
|
|
81
|
+
"""
|
|
82
|
+
)
|
|
83
|
+
)
|
rasa/utils/cli.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
from typing import Text
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def remove_argument_from_parser(
|
|
6
|
+
parser: argparse.ArgumentParser, argument: Text
|
|
7
|
+
) -> None:
|
|
8
|
+
"""Remove argument from parse.
|
|
9
|
+
|
|
10
|
+
A public API for this use case doesn't exist; so we use a private one.
|
|
11
|
+
We should be able to detect breaking changes of this API through unit-testing.
|
|
12
|
+
|
|
13
|
+
Inspired by this Stackoverflow answer: https://stackoverflow.com/a/32809642
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
parser: an argument parser instance
|
|
17
|
+
argument: the argument to remove, e.g. -f or --foo
|
|
18
|
+
"""
|
|
19
|
+
for action in parser._actions:
|
|
20
|
+
for option in action.option_strings:
|
|
21
|
+
if option == argument:
|
|
22
|
+
parser._handle_conflict_resolve(
|
|
23
|
+
None, [(option, action)] # type: ignore[arg-type]
|
|
24
|
+
)
|
|
25
|
+
return
|
|
26
|
+
|
|
27
|
+
raise LookupError(f"Cannot find argument {argument}")
|