rasa-pro 3.12.18.dev1__py3-none-any.whl → 3.13.0a1.dev2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/__init__.py +0 -6
- rasa/__main__.py +3 -4
- rasa/api.py +1 -1
- rasa/builder/create_openai_vector_store.py +69 -0
- rasa/builder/llm-helper-schema.json +69 -0
- rasa/builder/prompt_to_bot.py +650 -0
- rasa/builder/scrape_rasa_docs.py +97 -0
- rasa/builder/skill_to_bot_prompt.jinja +158 -0
- rasa/cli/dialogue_understanding_test.py +1 -1
- rasa/cli/e2e_test.py +1 -1
- rasa/cli/evaluate.py +2 -2
- rasa/cli/export.py +3 -3
- rasa/cli/llm_fine_tuning.py +1 -1
- rasa/cli/project_templates/default/config.yml +5 -32
- rasa/cli/project_templates/{calm → default}/e2e_tests/cancelations/user_cancels_during_a_correction.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/cancelations/user_changes_mind_on_a_whim.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/corrections/user_corrects_contact_handle.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/corrections/user_corrects_contact_name.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_adds_contact_to_their_list.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_lists_contacts.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_removes_contact.yml +1 -1
- rasa/cli/project_templates/{calm → default}/e2e_tests/happy_paths/user_removes_contact_from_list.yml +1 -1
- rasa/cli/project_templates/default/endpoints.yml +18 -2
- rasa/cli/project_templates/defaults.py +133 -0
- rasa/cli/run.py +1 -1
- rasa/cli/scaffold.py +2 -3
- rasa/cli/studio/download.py +1 -1
- rasa/cli/studio/link.py +53 -0
- rasa/cli/studio/pull.py +78 -0
- rasa/cli/studio/push.py +78 -0
- rasa/cli/studio/studio.py +12 -0
- rasa/cli/studio/upload.py +5 -3
- rasa/cli/train.py +1 -1
- rasa/cli/utils.py +1 -1
- rasa/cli/x.py +1 -1
- rasa/constants.py +2 -0
- rasa/core/__init__.py +0 -16
- rasa/core/actions/action.py +42 -31
- rasa/core/actions/action_repeat_bot_messages.py +18 -22
- rasa/core/actions/action_run_slot_rejections.py +1 -2
- rasa/core/agent.py +18 -3
- rasa/core/available_endpoints.py +146 -0
- rasa/core/brokers/kafka.py +4 -0
- rasa/core/brokers/pika.py +5 -2
- rasa/core/brokers/sql.py +1 -1
- rasa/core/channels/botframework.py +2 -2
- rasa/core/channels/channel.py +2 -2
- rasa/core/channels/development_inspector.py +1 -1
- rasa/core/channels/facebook.py +1 -4
- rasa/core/channels/hangouts.py +8 -5
- rasa/core/channels/inspector/.eslintrc.cjs +12 -6
- rasa/core/channels/inspector/.prettierrc +5 -0
- rasa/core/channels/inspector/README.md +11 -5
- rasa/core/channels/inspector/dist/assets/{arc-9f75cc3b.js → arc-02053cc1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-7f34db23.js → blockDiagram-38ab4fdb-008b6289.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-948bab2c.js → c4Diagram-3d4e48cf-fb2597be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-078dada8.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-53b0dd0e.js → classDiagram-70f12bd4-7f847e00.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-fdf789e7.js → classDiagram-v2-f2320105-ba1d689b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-5b4516de.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-87c4ece5.js → createText-2e5e7dd3-dd8e67c4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-5a8b0749.js → edges-e0da2a9e-10784939.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-66da90e2.js → erDiagram-9861fffd-24947ae6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-10044f05.js → flowDb-956e92f1-a9ced505.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f338f66a.js → flowDiagram-66a62f08-afda9c7c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-f9613071.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-b13140aa.js → flowchart-elk-definition-4a651766-6ef530b8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-f2b4a55a.js → ganttDiagram-c361ad54-0c7dd39a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-dedc298d.js → gitGraphDiagram-72cf32ee-b57239d6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-4ede11ff.js → graph-9ed57cec.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-65549d37.js → index-3862675e-233090de.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3a23e736.js → index-72184470.js} +123 -123
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-65439671.js → infoDiagram-f8f76790-aa116649.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-56d03d98.js → journeyDiagram-49397b02-e51877cc.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-dd48f7f4.js → layout-3ca3798c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-1569ad2c.js → line-26ee10d3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-48bf4935.js → linear-aedded32.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-688504c1.js → mindmap-definition-fc14e90a-d8957261.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78b6d7e6.js → pieDiagram-8a3498a8-d771f885.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-048b84b3.js → quadrantDiagram-120e2f19-09fdf50c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-dd67f107.js → requirementDiagram-deff3bca-9f0af02e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-8128436e.js → sankeyDiagram-04a897e0-84415b37.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-1a0d1461.js → sequenceDiagram-704730f1-8dec4055.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-46d388ed.js → stateDiagram-587899a1-c5431d07.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-ea42951a.js → stateDiagram-v2-d93cdb3a-274e77d9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-7427ed0c.js → styles-6aaf32cf-e364a1d7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-ff5e5a16.js → styles-9a916d00-0dae36f6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-7b3680cf.js → styles-c10674c1-c4641675.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-f860f2ad.js → svgDrawCommon-08f97a94-831fe9a1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-2eebf0c8.js → timeline-definition-85554ec2-c3304b3a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-5d7f4e96.js → xychartDiagram-e933f94c-da799369.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +3 -1
- rasa/core/channels/inspector/src/App.tsx +91 -90
- rasa/core/channels/inspector/src/components/Chat.tsx +45 -41
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +40 -40
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +57 -57
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +36 -27
- rasa/core/channels/inspector/src/components/ExpandIcon.tsx +4 -4
- rasa/core/channels/inspector/src/components/FullscreenButton.tsx +7 -7
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +28 -12
- rasa/core/channels/inspector/src/components/NoActiveFlow.tsx +9 -9
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +5 -5
- rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +55 -60
- rasa/core/channels/inspector/src/components/SaraDiagrams.tsx +5 -5
- rasa/core/channels/inspector/src/components/Slots.tsx +22 -22
- rasa/core/channels/inspector/src/components/Welcome.tsx +28 -31
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +245 -0
- rasa/core/channels/inspector/src/helpers/audio/microphone-processor.js +12 -0
- rasa/core/channels/inspector/src/helpers/audio/playback-processor.js +36 -0
- rasa/core/channels/inspector/src/helpers/conversation.ts +7 -7
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +181 -181
- rasa/core/channels/inspector/src/helpers/formatters.ts +111 -111
- rasa/core/channels/inspector/src/helpers/utils.ts +78 -61
- rasa/core/channels/inspector/src/main.tsx +8 -8
- rasa/core/channels/inspector/src/theme/Button/Button.ts +8 -8
- rasa/core/channels/inspector/src/theme/Heading/Heading.ts +7 -7
- rasa/core/channels/inspector/src/theme/Input/Input.ts +9 -9
- rasa/core/channels/inspector/src/theme/Link/Link.ts +6 -6
- rasa/core/channels/inspector/src/theme/Modal/Modal.ts +13 -13
- rasa/core/channels/inspector/src/theme/Table/Table.tsx +10 -10
- rasa/core/channels/inspector/src/theme/Tooltip/Tooltip.ts +5 -5
- rasa/core/channels/inspector/src/theme/base/breakpoints.ts +7 -7
- rasa/core/channels/inspector/src/theme/base/colors.ts +64 -64
- rasa/core/channels/inspector/src/theme/base/fonts/fontFaces.css +21 -18
- rasa/core/channels/inspector/src/theme/base/radii.ts +8 -8
- rasa/core/channels/inspector/src/theme/base/shadows.ts +5 -5
- rasa/core/channels/inspector/src/theme/base/sizes.ts +5 -5
- rasa/core/channels/inspector/src/theme/base/space.ts +12 -12
- rasa/core/channels/inspector/src/theme/base/styles.ts +5 -5
- rasa/core/channels/inspector/src/theme/base/typography.ts +12 -12
- rasa/core/channels/inspector/src/theme/base/zIndices.ts +3 -3
- rasa/core/channels/inspector/src/theme/index.ts +38 -38
- rasa/core/channels/inspector/src/types.ts +56 -50
- rasa/core/channels/inspector/yarn.lock +5 -0
- rasa/core/channels/mattermost.py +1 -1
- rasa/core/channels/rasa_chat.py +2 -4
- rasa/core/channels/rest.py +5 -4
- rasa/core/channels/socketio.py +56 -41
- rasa/core/channels/studio_chat.py +337 -71
- rasa/core/channels/vier_cvg.py +1 -2
- rasa/core/channels/voice_ready/audiocodes.py +4 -11
- rasa/core/channels/voice_stream/audiocodes.py +8 -5
- rasa/core/channels/voice_stream/browser_audio.py +1 -1
- rasa/core/channels/voice_stream/genesys.py +2 -2
- rasa/core/channels/voice_stream/tts/__init__.py +8 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +10 -5
- rasa/core/channels/voice_stream/voice_channel.py +65 -23
- rasa/core/concurrent_lock_store.py +24 -10
- rasa/core/evaluation/marker_tracker_loader.py +1 -1
- rasa/core/exporter.py +1 -1
- rasa/core/http_interpreter.py +3 -7
- rasa/core/information_retrieval/faiss.py +18 -11
- rasa/core/information_retrieval/ingestion/__init__.py +0 -0
- rasa/core/information_retrieval/ingestion/faq_parser.py +158 -0
- rasa/core/jobs.py +2 -1
- rasa/core/lock_store.py +151 -60
- rasa/core/nlg/contextual_response_rephraser.py +17 -7
- rasa/core/nlg/generator.py +5 -22
- rasa/core/nlg/interpolator.py +2 -3
- rasa/core/nlg/response.py +6 -43
- rasa/core/nlg/summarize.py +1 -1
- rasa/core/nlg/translate.py +0 -8
- rasa/core/policies/enterprise_search_policy.py +262 -62
- rasa/core/policies/enterprise_search_prompt_with_relevancy_check_and_citation_template.jinja2 +63 -0
- rasa/core/policies/flow_policy.py +1 -1
- rasa/core/policies/flows/flow_executor.py +96 -17
- rasa/core/policies/intentless_policy.py +57 -20
- rasa/core/processor.py +114 -54
- rasa/core/run.py +33 -11
- rasa/core/tracker_stores/__init__.py +0 -0
- rasa/core/{auth_retry_tracker_store.py → tracker_stores/auth_retry_tracker_store.py} +5 -1
- rasa/core/tracker_stores/dynamo_tracker_store.py +218 -0
- rasa/core/tracker_stores/mongo_tracker_store.py +206 -0
- rasa/core/tracker_stores/redis_tracker_store.py +219 -0
- rasa/core/tracker_stores/sql_tracker_store.py +555 -0
- rasa/core/tracker_stores/tracker_store.py +805 -0
- rasa/core/training/interactive.py +1 -1
- rasa/core/utils.py +24 -95
- rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -1
- rasa/dialogue_understanding/coexistence/llm_based_router.py +10 -6
- rasa/dialogue_understanding/commands/can_not_handle_command.py +2 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +5 -1
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +2 -0
- rasa/dialogue_understanding/commands/clarify_command.py +4 -0
- rasa/dialogue_understanding/commands/command_syntax_manager.py +1 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +1 -3
- rasa/dialogue_understanding/commands/human_handoff_command.py +2 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +2 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +2 -0
- rasa/dialogue_understanding/commands/set_slot_command.py +10 -0
- rasa/dialogue_understanding/commands/skip_question_command.py +2 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +4 -0
- rasa/dialogue_understanding/commands/utils.py +26 -2
- rasa/dialogue_understanding/generator/__init__.py +7 -1
- rasa/dialogue_understanding/generator/command_generator.py +4 -2
- rasa/dialogue_understanding/generator/command_parser.py +2 -2
- rasa/dialogue_understanding/generator/command_parser_validator.py +63 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +5 -17
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -3
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +4 -44
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +2 -2
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +78 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +26 -474
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +147 -0
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +477 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +11 -64
- rasa/dialogue_understanding/patterns/cancel.py +1 -2
- rasa/dialogue_understanding/patterns/clarify.py +1 -1
- rasa/dialogue_understanding/patterns/correction.py +2 -2
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +37 -25
- rasa/dialogue_understanding/patterns/domain_for_patterns.py +190 -0
- rasa/dialogue_understanding/processor/command_processor.py +6 -7
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +17 -4
- rasa/dialogue_understanding/stack/utils.py +3 -1
- rasa/dialogue_understanding/utils.py +68 -12
- rasa/dialogue_understanding_test/command_metric_calculation.py +7 -40
- rasa/dialogue_understanding_test/command_metrics.py +38 -0
- rasa/dialogue_understanding_test/du_test_case.py +58 -25
- rasa/dialogue_understanding_test/du_test_result.py +228 -132
- rasa/dialogue_understanding_test/du_test_runner.py +11 -2
- rasa/dialogue_understanding_test/io.py +35 -8
- rasa/e2e_test/e2e_test_runner.py +1 -1
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +2 -2
- rasa/engine/recipes/default_recipe.py +1 -1
- rasa/engine/validation.py +3 -2
- rasa/hooks.py +2 -85
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +1 -5
- rasa/llm_fine_tuning/utils.py +2 -4
- rasa/model_manager/model_api.py +90 -2
- rasa/model_manager/socket_bridge.py +0 -7
- rasa/model_manager/trainer_service.py +15 -12
- rasa/plugin.py +2 -15
- rasa/privacy/__init__.py +0 -0
- rasa/privacy/constants.py +83 -0
- rasa/privacy/event_broker_utils.py +77 -0
- rasa/privacy/privacy_config.py +281 -0
- rasa/privacy/privacy_config_schema.json +86 -0
- rasa/privacy/privacy_filter.py +340 -0
- rasa/privacy/privacy_manager.py +576 -0
- rasa/server.py +23 -2
- rasa/shared/constants.py +13 -4
- rasa/shared/core/command_payload_reader.py +1 -5
- rasa/shared/core/constants.py +4 -3
- rasa/shared/core/domain.py +172 -11
- rasa/shared/core/events.py +100 -6
- rasa/shared/core/flows/flow.py +35 -8
- rasa/shared/core/flows/flow_step.py +26 -4
- rasa/shared/core/flows/flow_step_links.py +15 -0
- rasa/shared/core/flows/flow_step_sequence.py +6 -0
- rasa/shared/core/flows/flows_yaml_schema.json +3 -0
- rasa/shared/core/flows/nlu_trigger.py +13 -0
- rasa/shared/core/flows/steps/action.py +7 -4
- rasa/shared/core/flows/steps/call.py +11 -4
- rasa/shared/core/flows/steps/collect.py +71 -6
- rasa/shared/core/flows/steps/internal.py +6 -1
- rasa/shared/core/flows/steps/link.py +7 -4
- rasa/shared/core/flows/steps/no_operation.py +7 -4
- rasa/shared/core/flows/steps/set_slots.py +8 -4
- rasa/shared/core/flows/validation.py +16 -3
- rasa/shared/core/flows/yaml_flows_io.py +106 -5
- rasa/shared/core/slots.py +33 -1
- rasa/shared/core/trackers.py +4 -10
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +1 -4
- rasa/shared/importers/importer.py +14 -0
- rasa/shared/importers/static.py +63 -0
- rasa/shared/providers/constants.py +0 -9
- rasa/shared/providers/llm/_base_litellm_client.py +4 -14
- rasa/shared/providers/llm/default_litellm_llm_client.py +2 -2
- rasa/shared/providers/llm/litellm_router_llm_client.py +7 -17
- rasa/shared/providers/llm/llm_client.py +15 -24
- rasa/shared/providers/llm/self_hosted_llm_client.py +2 -10
- rasa/shared/utils/common.py +43 -1
- rasa/shared/utils/llm.py +155 -3
- rasa/shared/utils/yaml.py +32 -0
- rasa/studio/data_handler.py +3 -3
- rasa/studio/download/__init__.py +0 -0
- rasa/studio/download/domains.py +49 -0
- rasa/studio/download/download.py +416 -0
- rasa/studio/download/flows.py +351 -0
- rasa/studio/link.py +200 -0
- rasa/studio/pull.py +94 -0
- rasa/studio/push.py +131 -0
- rasa/studio/results_logger.py +6 -1
- rasa/studio/upload.py +185 -71
- rasa/telemetry.py +83 -26
- rasa/tracing/config.py +4 -5
- rasa/tracing/constants.py +19 -1
- rasa/tracing/instrumentation/attribute_extractors.py +49 -11
- rasa/tracing/instrumentation/instrumentation.py +54 -3
- rasa/tracing/instrumentation/metrics.py +98 -15
- rasa/tracing/metric_instrument_provider.py +75 -3
- rasa/utils/common.py +37 -27
- rasa/utils/endpoints.py +22 -1
- rasa/utils/licensing.py +2 -3
- rasa/utils/log_utils.py +1 -45
- rasa/validator.py +9 -11
- rasa/version.py +1 -1
- {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/METADATA +12 -14
- {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/RECORD +318 -294
- rasa/anonymization/__init__.py +0 -2
- rasa/anonymization/anonymisation_rule_yaml_reader.py +0 -91
- rasa/anonymization/anonymization_pipeline.py +0 -286
- rasa/anonymization/anonymization_rule_executor.py +0 -266
- rasa/anonymization/anonymization_rule_orchestrator.py +0 -119
- rasa/anonymization/schemas/config.yml +0 -47
- rasa/anonymization/utils.py +0 -118
- rasa/cli/project_templates/calm/config.yml +0 -10
- rasa/cli/project_templates/calm/credentials.yml +0 -33
- rasa/cli/project_templates/calm/endpoints.yml +0 -58
- rasa/cli/project_templates/default/actions/actions.py +0 -27
- rasa/cli/project_templates/default/data/nlu.yml +0 -91
- rasa/cli/project_templates/default/data/rules.yml +0 -13
- rasa/cli/project_templates/default/data/stories.yml +0 -30
- rasa/cli/project_templates/default/domain.yml +0 -34
- rasa/cli/project_templates/default/tests/test_stories.yml +0 -91
- rasa/core/channels/inspector/dist/assets/channel-dfa68278.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-edb7f119.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-65e7c670.js +0 -1
- rasa/core/channels/inspector/src/helpers/audiostream.ts +0 -191
- rasa/core/tracker_store.py +0 -1792
- rasa/monkey_patches.py +0 -91
- rasa/studio/download.py +0 -489
- /rasa/{cli/project_templates/calm/actions → builder}/__init__.py +0 -0
- /rasa/cli/project_templates/{calm → default}/actions/action_template.py +0 -0
- /rasa/cli/project_templates/{calm → default}/actions/add_contact.py +0 -0
- /rasa/cli/project_templates/{calm → default}/actions/db.py +0 -0
- /rasa/cli/project_templates/{calm → default}/actions/list_contacts.py +0 -0
- /rasa/cli/project_templates/{calm → default}/actions/remove_contact.py +0 -0
- /rasa/cli/project_templates/{calm → default}/data/flows/add_contact.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/data/flows/list_contacts.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/data/flows/remove_contact.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/db/contacts.json +0 -0
- /rasa/cli/project_templates/{calm → default}/domain/add_contact.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/domain/list_contacts.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/domain/remove_contact.yml +0 -0
- /rasa/cli/project_templates/{calm → default}/domain/shared.yml +0 -0
- {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/NOTICE +0 -0
- {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/WHEEL +0 -0
- {rasa_pro-3.12.18.dev1.dist-info → rasa_pro-3.13.0a1.dev2.dist-info}/entry_points.txt +0 -0
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
from contextlib import contextmanager
|
|
2
2
|
from typing import Any, Dict, Generator, List, Optional, Text
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
import structlog
|
|
5
|
+
|
|
6
|
+
from rasa.dialogue_understanding.commands import Command, NoopCommand, SetSlotCommand
|
|
5
7
|
from rasa.dialogue_understanding.constants import (
|
|
6
8
|
RASA_RECORD_COMMANDS_AND_PROMPTS_ENV_VAR_NAME,
|
|
7
9
|
)
|
|
@@ -16,7 +18,6 @@ from rasa.shared.nlu.constants import (
|
|
|
16
18
|
KEY_USER_PROMPT,
|
|
17
19
|
PREDICTED_COMMANDS,
|
|
18
20
|
PROMPTS,
|
|
19
|
-
SET_SLOT_COMMAND,
|
|
20
21
|
)
|
|
21
22
|
from rasa.shared.nlu.training_data.message import Message
|
|
22
23
|
from rasa.shared.providers.llm.llm_response import LLMResponse
|
|
@@ -26,6 +27,8 @@ record_commands_and_prompts = get_bool_env_variable(
|
|
|
26
27
|
RASA_RECORD_COMMANDS_AND_PROMPTS_ENV_VAR_NAME, False
|
|
27
28
|
)
|
|
28
29
|
|
|
30
|
+
structlogger = structlog.get_logger()
|
|
31
|
+
|
|
29
32
|
|
|
30
33
|
@contextmanager
|
|
31
34
|
def set_record_commands_and_prompts() -> Generator:
|
|
@@ -144,21 +147,74 @@ def _handle_via_nlu_in_coexistence(
|
|
|
144
147
|
if not tracker:
|
|
145
148
|
return False
|
|
146
149
|
|
|
150
|
+
commands = message.get(COMMANDS, [])
|
|
151
|
+
|
|
152
|
+
# If coexistence routing slot is not active, this setup doesn't
|
|
153
|
+
# support dual routing -> default to CALM
|
|
147
154
|
if not tracker.has_coexistence_routing_slot:
|
|
155
|
+
structlogger.debug(
|
|
156
|
+
"utils.handle_via_nlu_in_coexistence"
|
|
157
|
+
".tracker_missing_route_session_to_calm_slot",
|
|
158
|
+
event_info=(
|
|
159
|
+
f"Tracker doesn't have the '{ROUTE_TO_CALM_SLOT}' slot."
|
|
160
|
+
f"Routing to CALM."
|
|
161
|
+
),
|
|
162
|
+
route_session_to_calm=commands,
|
|
163
|
+
)
|
|
148
164
|
return False
|
|
149
165
|
|
|
166
|
+
# Check if the routing decision is stored in the tracker slot
|
|
167
|
+
# If slot is true -> route to CALM
|
|
168
|
+
# If slot is false -> route to DM1
|
|
150
169
|
value = tracker.get_slot(ROUTE_TO_CALM_SLOT)
|
|
151
170
|
if value is not None:
|
|
171
|
+
structlogger.debug(
|
|
172
|
+
"utils.handle_via_nlu_in_coexistence"
|
|
173
|
+
".tracker_route_session_to_calm_slot_value",
|
|
174
|
+
event_info=(
|
|
175
|
+
f"Tracker slot '{ROUTE_TO_CALM_SLOT}' set to '{value}'. "
|
|
176
|
+
f"Routing to "
|
|
177
|
+
f"{'CALM' if value else 'NLU system'}."
|
|
178
|
+
),
|
|
179
|
+
route_session_to_calm_value_in_tracker=value,
|
|
180
|
+
)
|
|
152
181
|
return not value
|
|
153
182
|
|
|
154
|
-
# routing
|
|
155
|
-
#
|
|
156
|
-
if
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
183
|
+
# Non-sticky routing to DM1 is only allowed if NoopCommand is the sole predicted
|
|
184
|
+
# command. In that case, route to DM1
|
|
185
|
+
if len(commands) == 1 and commands[0].get("command") == NoopCommand.command():
|
|
186
|
+
structlogger.debug(
|
|
187
|
+
"utils.handle_via_nlu_in_coexistence.noop_command_detected",
|
|
188
|
+
event_info="NoopCommand found. Routing to NLU system non-sticky.",
|
|
189
|
+
commands=commands,
|
|
190
|
+
)
|
|
191
|
+
return True
|
|
192
|
+
|
|
193
|
+
# If the slot was reset (e.g. new session), try to infer routing from
|
|
194
|
+
# attached commands. Look for a SetSlotCommand targeting the ROUTE_TO_CALM_SLOT
|
|
195
|
+
for command in message.get(COMMANDS, []):
|
|
196
|
+
# If slot is true -> route to CALM
|
|
197
|
+
# If slot is false -> route to DM1
|
|
198
|
+
if (
|
|
199
|
+
command.get("command") == SetSlotCommand.command()
|
|
200
|
+
and command.get("name") == ROUTE_TO_CALM_SLOT
|
|
201
|
+
):
|
|
202
|
+
structlogger.debug(
|
|
203
|
+
"utils.handle_via_nlu_in_coexistence.set_slot_command_detected",
|
|
204
|
+
event_info=(
|
|
205
|
+
f"SetSlotCommand setting the '{ROUTE_TO_CALM_SLOT}' to "
|
|
206
|
+
f"'{command.get('value')}'. "
|
|
207
|
+
f"Routing to "
|
|
208
|
+
f"{'CALM' if command.get('value') else 'NLU system'}."
|
|
209
|
+
),
|
|
210
|
+
commands=commands,
|
|
211
|
+
)
|
|
212
|
+
return not command.get("value")
|
|
213
|
+
|
|
214
|
+
# If no routing info is available -> default to CALM
|
|
215
|
+
structlogger.debug(
|
|
216
|
+
"utils.handle_via_nlu_in_coexistence.no_routing_info_available",
|
|
217
|
+
event_info="No routing info available. Routing to CALM.",
|
|
218
|
+
commands=commands,
|
|
219
|
+
)
|
|
164
220
|
return False
|
|
@@ -1,54 +1,21 @@
|
|
|
1
|
+
import typing
|
|
1
2
|
from collections import defaultdict
|
|
2
3
|
from typing import Dict, List
|
|
3
4
|
|
|
4
|
-
from pydantic import BaseModel
|
|
5
|
-
|
|
6
5
|
from rasa.dialogue_understanding.commands import Command
|
|
7
6
|
from rasa.dialogue_understanding_test.command_comparison import (
|
|
8
7
|
is_command_present_in_list,
|
|
9
8
|
)
|
|
10
|
-
from rasa.dialogue_understanding_test.
|
|
11
|
-
DialogueUnderstandingTestResult,
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class CommandMetrics(BaseModel):
|
|
16
|
-
tp: int
|
|
17
|
-
fp: int
|
|
18
|
-
fn: int
|
|
19
|
-
total_count: int
|
|
20
|
-
|
|
21
|
-
@staticmethod
|
|
22
|
-
def _safe_divide(numerator: float, denominator: float) -> float:
|
|
23
|
-
"""Safely perform division, returning 0.0 if the denominator is zero."""
|
|
24
|
-
return numerator / denominator if denominator > 0 else 0.0
|
|
9
|
+
from rasa.dialogue_understanding_test.command_metrics import CommandMetrics
|
|
25
10
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return self._safe_divide(self.tp, self.tp + self.fn)
|
|
31
|
-
|
|
32
|
-
def get_f1_score(self) -> float:
|
|
33
|
-
precision = self.get_precision()
|
|
34
|
-
recall = self.get_recall()
|
|
35
|
-
|
|
36
|
-
return self._safe_divide(2 * precision * recall, precision + recall)
|
|
37
|
-
|
|
38
|
-
def as_dict(self) -> Dict[str, float]:
|
|
39
|
-
return {
|
|
40
|
-
"tp": self.tp,
|
|
41
|
-
"fp": self.fp,
|
|
42
|
-
"fn": self.fn,
|
|
43
|
-
"precision": self.get_precision(),
|
|
44
|
-
"recall": self.get_recall(),
|
|
45
|
-
"f1_score": self.get_f1_score(),
|
|
46
|
-
"total_count": self.total_count,
|
|
47
|
-
}
|
|
11
|
+
if typing.TYPE_CHECKING:
|
|
12
|
+
from rasa.dialogue_understanding_test.du_test_result import (
|
|
13
|
+
DialogueUnderstandingTestResult,
|
|
14
|
+
)
|
|
48
15
|
|
|
49
16
|
|
|
50
17
|
def calculate_command_metrics(
|
|
51
|
-
test_results: List[DialogueUnderstandingTestResult],
|
|
18
|
+
test_results: List["DialogueUnderstandingTestResult"],
|
|
52
19
|
) -> Dict[str, CommandMetrics]:
|
|
53
20
|
"""Calculate the command metrics for the test result."""
|
|
54
21
|
metrics: Dict[str, CommandMetrics] = defaultdict(
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from typing import Dict
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class CommandMetrics(BaseModel):
|
|
7
|
+
tp: int
|
|
8
|
+
fp: int
|
|
9
|
+
fn: int
|
|
10
|
+
total_count: int
|
|
11
|
+
|
|
12
|
+
@staticmethod
|
|
13
|
+
def _safe_divide(numerator: float, denominator: float) -> float:
|
|
14
|
+
"""Safely perform division, returning 0.0 if the denominator is zero."""
|
|
15
|
+
return numerator / denominator if denominator > 0 else 0.0
|
|
16
|
+
|
|
17
|
+
def get_precision(self) -> float:
|
|
18
|
+
return self._safe_divide(self.tp, self.tp + self.fp)
|
|
19
|
+
|
|
20
|
+
def get_recall(self) -> float:
|
|
21
|
+
return self._safe_divide(self.tp, self.tp + self.fn)
|
|
22
|
+
|
|
23
|
+
def get_f1_score(self) -> float:
|
|
24
|
+
precision = self.get_precision()
|
|
25
|
+
recall = self.get_recall()
|
|
26
|
+
|
|
27
|
+
return self._safe_divide(2 * precision * recall, precision + recall)
|
|
28
|
+
|
|
29
|
+
def as_dict(self) -> Dict[str, float]:
|
|
30
|
+
return {
|
|
31
|
+
"tp": self.tp,
|
|
32
|
+
"fp": self.fp,
|
|
33
|
+
"fn": self.fn,
|
|
34
|
+
"precision": self.get_precision(),
|
|
35
|
+
"recall": self.get_recall(),
|
|
36
|
+
"f1_score": self.get_f1_score(),
|
|
37
|
+
"total_count": self.total_count,
|
|
38
|
+
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
from collections import defaultdict
|
|
1
2
|
from typing import Any, Dict, Iterator, List, Optional, Tuple
|
|
2
3
|
|
|
3
4
|
from pydantic import BaseModel, Field
|
|
4
5
|
|
|
6
|
+
from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
|
|
7
|
+
from rasa.core.policies.enterprise_search_policy import EnterpriseSearchPolicy
|
|
8
|
+
from rasa.core.policies.intentless_policy import IntentlessPolicy
|
|
5
9
|
from rasa.dialogue_understanding.commands.prompt_command import PromptCommand
|
|
6
10
|
from rasa.dialogue_understanding.generator.command_parser import parse_commands
|
|
7
11
|
from rasa.dialogue_understanding_test.command_comparison import are_command_lists_equal
|
|
@@ -69,6 +73,8 @@ class DialogueUnderstandingOutput(BaseModel):
|
|
|
69
73
|
commands: Dict[str, List[PromptCommand]]
|
|
70
74
|
# List of prompts
|
|
71
75
|
prompts: Optional[List[Dict[str, Any]]] = None
|
|
76
|
+
# Latency of the full message roundtrip
|
|
77
|
+
latency: Optional[float] = None
|
|
72
78
|
|
|
73
79
|
class Config:
|
|
74
80
|
"""Skip validation for PromptCommand protocol as pydantic does not know how to
|
|
@@ -88,27 +94,41 @@ class DialogueUnderstandingOutput(BaseModel):
|
|
|
88
94
|
def get_component_names_that_predicted_commands_or_have_llm_response(
|
|
89
95
|
self,
|
|
90
96
|
) -> List[str]:
|
|
91
|
-
"""Get all component names
|
|
97
|
+
"""Get all relevant component names.
|
|
98
|
+
|
|
99
|
+
Components are relevant if they have predicted commands or received a
|
|
92
100
|
non-empty response from LLM.
|
|
93
101
|
"""
|
|
102
|
+
# Exclude components that are not related to Dialogue Understanding
|
|
103
|
+
component_names_to_exclude = [
|
|
104
|
+
EnterpriseSearchPolicy.__name__,
|
|
105
|
+
IntentlessPolicy.__name__,
|
|
106
|
+
ContextualResponseRephraser.__name__,
|
|
107
|
+
]
|
|
108
|
+
|
|
94
109
|
component_names_that_predicted_commands = (
|
|
95
110
|
[
|
|
96
111
|
component_name
|
|
97
112
|
for component_name, predicted_commands in self.commands.items()
|
|
98
113
|
if predicted_commands
|
|
114
|
+
and component_name not in component_names_to_exclude
|
|
99
115
|
]
|
|
100
116
|
if self.commands
|
|
101
117
|
else []
|
|
102
118
|
)
|
|
119
|
+
|
|
103
120
|
components_with_prompts = (
|
|
104
121
|
[
|
|
105
122
|
str(prompt.get(KEY_COMPONENT_NAME, None))
|
|
106
123
|
for prompt in self.prompts
|
|
107
124
|
if prompt.get(KEY_LLM_RESPONSE_METADATA, None)
|
|
125
|
+
and prompt.get(KEY_COMPONENT_NAME, None)
|
|
126
|
+
not in component_names_to_exclude
|
|
108
127
|
]
|
|
109
128
|
if self.prompts
|
|
110
129
|
else []
|
|
111
130
|
)
|
|
131
|
+
|
|
112
132
|
return list(
|
|
113
133
|
set(component_names_that_predicted_commands + components_with_prompts)
|
|
114
134
|
)
|
|
@@ -298,41 +318,54 @@ class DialogueUnderstandingTestStep(BaseModel):
|
|
|
298
318
|
|
|
299
319
|
return ""
|
|
300
320
|
|
|
301
|
-
def get_latencies(self) -> List[float]:
|
|
321
|
+
def get_latencies(self) -> Dict[str, List[float]]:
|
|
302
322
|
if self.dialogue_understanding_output is None:
|
|
303
|
-
return
|
|
323
|
+
return {}
|
|
304
324
|
|
|
305
|
-
|
|
325
|
+
component_name_to_prompt_info = (
|
|
326
|
+
self.dialogue_understanding_output.get_component_name_to_prompt_info()
|
|
327
|
+
)
|
|
306
328
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
for
|
|
310
|
-
|
|
311
|
-
]
|
|
329
|
+
latencies = defaultdict(list)
|
|
330
|
+
for component_name, prompt_info_list in component_name_to_prompt_info.items():
|
|
331
|
+
for prompt_info in prompt_info_list:
|
|
332
|
+
latencies[component_name].append(prompt_info.get(KEY_LATENCY, 0.0))
|
|
312
333
|
|
|
313
|
-
|
|
334
|
+
return latencies
|
|
335
|
+
|
|
336
|
+
def get_completion_tokens(self) -> Dict[str, List[float]]:
|
|
314
337
|
if self.dialogue_understanding_output is None:
|
|
315
|
-
return
|
|
338
|
+
return {}
|
|
316
339
|
|
|
317
|
-
|
|
340
|
+
component_name_to_prompt_info = (
|
|
341
|
+
self.dialogue_understanding_output.get_component_name_to_prompt_info()
|
|
342
|
+
)
|
|
318
343
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
for
|
|
322
|
-
|
|
323
|
-
|
|
344
|
+
completion_tokens = defaultdict(list)
|
|
345
|
+
for component_name, prompt_info_list in component_name_to_prompt_info.items():
|
|
346
|
+
for prompt_info in prompt_info_list:
|
|
347
|
+
completion_tokens[component_name].append(
|
|
348
|
+
prompt_info.get(KEY_COMPLETION_TOKENS, 0.0)
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
return completion_tokens
|
|
324
352
|
|
|
325
|
-
def get_prompt_tokens(self) -> List[
|
|
353
|
+
def get_prompt_tokens(self) -> Dict[str, List[float]]:
|
|
326
354
|
if self.dialogue_understanding_output is None:
|
|
327
|
-
return
|
|
355
|
+
return {}
|
|
328
356
|
|
|
329
|
-
|
|
357
|
+
component_name_to_prompt_info = (
|
|
358
|
+
self.dialogue_understanding_output.get_component_name_to_prompt_info()
|
|
359
|
+
)
|
|
330
360
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
for
|
|
334
|
-
|
|
335
|
-
|
|
361
|
+
prompt_tokens = defaultdict(list)
|
|
362
|
+
for component_name, prompt_info_list in component_name_to_prompt_info.items():
|
|
363
|
+
for prompt_info in prompt_info_list:
|
|
364
|
+
prompt_tokens[component_name].append(
|
|
365
|
+
prompt_info.get(KEY_PROMPT_TOKENS, 0.0)
|
|
366
|
+
)
|
|
367
|
+
|
|
368
|
+
return prompt_tokens
|
|
336
369
|
|
|
337
370
|
|
|
338
371
|
class DialogueUnderstandingTestCase(BaseModel):
|