rasa-pro 3.11.5__py3-none-any.whl → 3.12.0__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 +10 -13
- rasa/__main__.py +7 -7
- rasa/anonymization/anonymisation_rule_yaml_reader.py +1 -1
- rasa/anonymization/anonymization_pipeline.py +3 -3
- rasa/anonymization/anonymization_rule_executor.py +17 -11
- rasa/anonymization/anonymization_rule_orchestrator.py +2 -3
- rasa/cli/arguments/data.py +2 -2
- rasa/cli/arguments/default_arguments.py +1 -1
- rasa/cli/arguments/evaluate.py +2 -1
- rasa/cli/arguments/interactive.py +1 -1
- rasa/cli/arguments/run.py +1 -1
- rasa/cli/arguments/test.py +7 -5
- rasa/cli/arguments/train.py +3 -3
- rasa/cli/arguments/visualize.py +2 -2
- rasa/cli/arguments/x.py +1 -0
- rasa/cli/data.py +20 -3
- rasa/cli/dialogue_understanding_test.py +386 -0
- rasa/cli/evaluate.py +1 -1
- rasa/cli/export.py +6 -6
- rasa/cli/inspect.py +20 -1
- rasa/cli/interactive.py +4 -5
- rasa/cli/llm_fine_tuning.py +51 -16
- rasa/cli/markers.py +1 -2
- rasa/cli/project_templates/calm/actions/add_contact.py +1 -1
- rasa/cli/project_templates/calm/config.yml +2 -2
- rasa/cli/project_templates/calm/domain/list_contacts.yml +1 -2
- rasa/cli/project_templates/calm/domain/remove_contact.yml +1 -2
- rasa/cli/project_templates/calm/domain/shared.yml +1 -4
- rasa/cli/project_templates/calm/endpoints.yml +2 -2
- rasa/cli/project_templates/tutorial/actions/actions.py +3 -2
- rasa/cli/shell.py +5 -6
- rasa/cli/studio/download.py +1 -2
- rasa/cli/studio/studio.py +2 -3
- rasa/cli/studio/train.py +0 -1
- rasa/cli/telemetry.py +2 -2
- rasa/cli/test.py +11 -11
- rasa/cli/train.py +3 -0
- rasa/cli/utils.py +25 -5
- rasa/constants.py +0 -1
- rasa/core/__init__.py +0 -1
- rasa/core/actions/action.py +135 -208
- rasa/core/actions/action_handle_digressions.py +164 -0
- rasa/core/actions/action_hangup.py +1 -1
- rasa/core/actions/action_repeat_bot_messages.py +2 -2
- rasa/core/actions/action_run_slot_rejections.py +18 -6
- rasa/core/actions/action_trigger_chitchat.py +1 -1
- rasa/core/actions/action_trigger_flow.py +5 -5
- rasa/core/actions/action_trigger_search.py +1 -1
- rasa/core/actions/custom_action_executor.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +1 -0
- rasa/core/actions/forms.py +22 -15
- rasa/core/actions/http_custom_action_executor.py +8 -1
- rasa/core/actions/loops.py +3 -3
- rasa/core/actions/two_stage_fallback.py +13 -13
- rasa/core/auth_retry_tracker_store.py +1 -2
- rasa/core/brokers/broker.py +2 -1
- rasa/core/brokers/file.py +1 -1
- rasa/core/brokers/kafka.py +8 -8
- rasa/core/brokers/pika.py +8 -9
- rasa/core/brokers/sql.py +4 -3
- rasa/core/channels/__init__.py +7 -0
- rasa/core/channels/botframework.py +2 -2
- rasa/core/channels/callback.py +4 -4
- rasa/core/channels/channel.py +11 -11
- rasa/core/channels/console.py +0 -1
- rasa/core/channels/development_inspector.py +80 -24
- rasa/core/channels/facebook.py +5 -5
- rasa/core/channels/hangouts.py +7 -8
- rasa/core/channels/inspector/dist/assets/{arc-f0f8bd46.js → arc-9f1365dc.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-7162c77d.js → blockDiagram-38ab4fdb-e0f81b12.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-b1d0d098.js → c4Diagram-3d4e48cf-9deaee1c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-44956714.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-807a1b27.js → classDiagram-70f12bd4-20450a96.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-5238dcdb.js → classDiagram-v2-f2320105-749d2abf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-a9475142.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-75dfaa67.js → createText-2e5e7dd3-bef0b38c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-df20501d.js → edges-e0da2a9e-943801a7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-13cf4797.js → erDiagram-9861fffd-d523a948.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-a4991264.js → flowDb-956e92f1-54e4cf19.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-ccecf773.js → flowDiagram-66a62f08-48bfbbe8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-43fa749a.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-b5801783.js → flowchart-elk-definition-4a651766-17c30827.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-161e079a.js → ganttDiagram-c361ad54-43086f2d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-f38e86a4.js → gitGraphDiagram-72cf32ee-5c8b693e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-be6ef5d8.js → graph-41a90d26.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-d9ce8994.js → index-3862675e-b43eeae9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-7794b245.js → index-e8affe45.js} +155 -155
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-5000a3dc.js → infoDiagram-f8f76790-0b20676b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-8ef0a17a.js → journeyDiagram-49397b02-39bce7b5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-d649bc98.js → layout-dc8eeea4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95add810.js → line-c4d2e756.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-f6025094.js → linear-86f6f2d9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-2e8531c4.js → mindmap-definition-fc14e90a-4216f771.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-918adfdb.js → pieDiagram-8a3498a8-1a0cfa96.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-cbd01797.js → quadrantDiagram-120e2f19-f91e67cf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6a8b877b.js → requirementDiagram-deff3bca-d4046bed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-c377c3fe.js → sankeyDiagram-04a897e0-2cf6d1d7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-ab9e9b7f.js → sequenceDiagram-704730f1-751ac4f5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-5e6ae67d.js → stateDiagram-587899a1-f734f4d4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-40643476.js → stateDiagram-v2-d93cdb3a-91c65710.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-afb8d108.js → styles-6aaf32cf-e0cff7be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-7edc9423.js → styles-9a916d00-c8029e5d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-c1d8f7e9.js → styles-c10674c1-114f312a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-f494b2ef.js → svgDrawCommon-08f97a94-b7b9dc00.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-11c7cdd0.js → timeline-definition-85554ec2-9536d189.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-3f191ec1.js → xychartDiagram-e933f94c-bf3b0f36.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +1 -0
- rasa/core/channels/inspector/src/App.tsx +15 -2
- rasa/core/channels/inspector/src/components/RasaLogo.tsx +31 -0
- rasa/core/channels/inspector/src/components/RecruitmentPanel.tsx +68 -0
- rasa/core/channels/inspector/src/components/Welcome.tsx +19 -13
- rasa/core/channels/inspector/yarn.lock +5 -0
- rasa/core/channels/mattermost.py +4 -4
- rasa/core/channels/rasa_chat.py +4 -4
- rasa/core/channels/rest.py +11 -12
- rasa/core/channels/rocketchat.py +4 -3
- rasa/core/channels/slack.py +6 -5
- rasa/core/channels/socketio.py +8 -28
- rasa/core/channels/studio_chat.py +212 -0
- rasa/core/channels/telegram.py +105 -55
- rasa/core/channels/twilio.py +3 -3
- rasa/core/channels/vier_cvg.py +2 -2
- rasa/core/channels/voice_ready/audiocodes.py +9 -9
- rasa/core/channels/voice_ready/jambonz.py +5 -5
- rasa/core/channels/voice_ready/jambonz_protocol.py +3 -4
- rasa/core/channels/voice_ready/twilio_voice.py +9 -8
- rasa/core/channels/voice_ready/utils.py +2 -2
- rasa/core/channels/voice_stream/asr/asr_engine.py +12 -6
- rasa/core/channels/voice_stream/asr/asr_event.py +5 -0
- rasa/core/channels/voice_stream/asr/azure.py +16 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +76 -19
- rasa/core/channels/voice_stream/audiocodes.py +292 -0
- rasa/core/channels/voice_stream/browser_audio.py +14 -7
- rasa/core/channels/voice_stream/call_state.py +6 -2
- rasa/core/channels/voice_stream/genesys.py +320 -0
- rasa/core/channels/voice_stream/tts/azure.py +13 -5
- rasa/core/channels/voice_stream/tts/cartesia.py +34 -14
- rasa/core/channels/voice_stream/tts/tts_cache.py +3 -2
- rasa/core/channels/voice_stream/tts/tts_engine.py +1 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +12 -8
- rasa/core/channels/voice_stream/util.py +1 -1
- rasa/core/channels/voice_stream/voice_channel.py +100 -56
- rasa/core/channels/webexteams.py +3 -4
- rasa/core/constants.py +2 -0
- rasa/core/evaluation/marker.py +7 -6
- rasa/core/evaluation/marker_base.py +15 -16
- rasa/core/evaluation/marker_stats.py +3 -4
- rasa/core/evaluation/marker_tracker_loader.py +5 -4
- rasa/core/exporter.py +4 -4
- rasa/core/featurizers/precomputation.py +8 -8
- rasa/core/featurizers/single_state_featurizer.py +7 -7
- rasa/core/featurizers/tracker_featurizers.py +13 -13
- rasa/core/http_interpreter.py +3 -4
- rasa/core/information_retrieval/__init__.py +1 -1
- rasa/core/information_retrieval/faiss.py +4 -4
- rasa/core/information_retrieval/information_retrieval.py +2 -2
- rasa/core/information_retrieval/milvus.py +3 -3
- rasa/core/information_retrieval/qdrant.py +3 -3
- rasa/core/jobs.py +1 -0
- rasa/core/lock.py +2 -3
- rasa/core/lock_store.py +3 -3
- rasa/core/migrate.py +12 -9
- rasa/core/nlg/__init__.py +1 -1
- rasa/core/nlg/callback.py +2 -3
- rasa/core/nlg/contextual_response_rephraser.py +82 -14
- rasa/core/nlg/generator.py +85 -17
- rasa/core/nlg/interpolator.py +4 -3
- rasa/core/nlg/response.py +9 -7
- rasa/core/nlg/summarize.py +1 -0
- rasa/core/nlg/translate.py +55 -0
- rasa/core/persistor.py +3 -3
- rasa/core/policies/ensemble.py +10 -9
- rasa/core/policies/enterprise_search_policy.py +87 -21
- rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2 +1 -1
- rasa/core/policies/flow_policy.py +13 -14
- rasa/core/policies/flows/flow_executor.py +85 -55
- rasa/core/policies/intentless_policy.py +6 -7
- rasa/core/policies/memoization.py +22 -20
- rasa/core/policies/policy.py +24 -22
- rasa/core/policies/rule_policy.py +37 -36
- rasa/core/policies/ted_policy.py +87 -85
- rasa/core/policies/unexpected_intent_policy.py +77 -75
- rasa/core/processor.py +167 -74
- rasa/core/run.py +5 -4
- rasa/core/secrets_manager/endpoints.py +2 -3
- rasa/core/secrets_manager/factory.py +2 -3
- rasa/core/secrets_manager/secret_manager.py +2 -3
- rasa/core/secrets_manager/vault.py +2 -2
- rasa/core/test.py +30 -30
- rasa/core/tracker_store.py +138 -49
- rasa/core/train.py +1 -1
- rasa/core/training/__init__.py +2 -2
- rasa/core/training/converters/responses_prefix_converter.py +1 -2
- rasa/core/training/interactive.py +13 -13
- rasa/core/training/story_conflict.py +4 -5
- rasa/core/training/training.py +3 -5
- rasa/core/utils.py +5 -5
- rasa/core/visualize.py +1 -1
- rasa/dialogue_understanding/coexistence/intent_based_router.py +2 -2
- rasa/dialogue_understanding/coexistence/llm_based_router.py +5 -5
- rasa/dialogue_understanding/commands/__init__.py +22 -22
- rasa/dialogue_understanding/commands/can_not_handle_command.py +38 -1
- rasa/dialogue_understanding/commands/cancel_flow_command.py +96 -9
- rasa/dialogue_understanding/commands/change_flow_command.py +36 -2
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +36 -4
- rasa/dialogue_understanding/commands/clarify_command.py +46 -4
- rasa/dialogue_understanding/commands/command.py +3 -2
- rasa/dialogue_understanding/commands/command_syntax_manager.py +55 -0
- rasa/dialogue_understanding/commands/correct_slots_command.py +14 -5
- rasa/dialogue_understanding/commands/error_command.py +1 -1
- rasa/dialogue_understanding/commands/free_form_answer_command.py +2 -1
- rasa/dialogue_understanding/commands/handle_code_change_command.py +2 -2
- rasa/dialogue_understanding/commands/handle_digressions_command.py +144 -0
- rasa/dialogue_understanding/commands/human_handoff_command.py +34 -4
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +36 -4
- rasa/dialogue_understanding/commands/noop_command.py +2 -1
- rasa/dialogue_understanding/commands/prompt_command.py +94 -0
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +34 -4
- rasa/dialogue_understanding/commands/restart_command.py +2 -5
- rasa/dialogue_understanding/commands/session_end_command.py +3 -5
- rasa/dialogue_understanding/commands/session_start_command.py +3 -5
- rasa/dialogue_understanding/commands/set_slot_command.py +55 -16
- rasa/dialogue_understanding/commands/skip_question_command.py +34 -4
- rasa/dialogue_understanding/commands/start_flow_command.py +78 -2
- rasa/dialogue_understanding/commands/user_silence_command.py +3 -5
- rasa/dialogue_understanding/commands/utils.py +126 -43
- rasa/dialogue_understanding/constants.py +2 -0
- rasa/dialogue_understanding/generator/__init__.py +2 -0
- rasa/dialogue_understanding/generator/command_generator.py +120 -79
- rasa/dialogue_understanding/generator/command_parser.py +245 -0
- rasa/dialogue_understanding/generator/constants.py +12 -4
- rasa/dialogue_understanding/generator/flow_retrieval.py +7 -7
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +187 -59
- rasa/dialogue_understanding/generator/llm_command_generator.py +6 -3
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +106 -110
- rasa/dialogue_understanding/generator/nlu_command_adapter.py +53 -11
- rasa/dialogue_understanding/generator/prompt_templates/__init__.py +0 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +58 -0
- rasa/dialogue_understanding/generator/prompt_templates/command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +57 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +574 -0
- rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py +41 -386
- rasa/dialogue_understanding/generator/utils.py +76 -0
- rasa/dialogue_understanding/patterns/cancel.py +2 -1
- rasa/dialogue_understanding/patterns/cannot_handle.py +1 -0
- rasa/dialogue_understanding/patterns/chitchat.py +1 -1
- rasa/dialogue_understanding/patterns/clarify.py +2 -1
- rasa/dialogue_understanding/patterns/code_change.py +2 -0
- rasa/dialogue_understanding/patterns/collect_information.py +7 -4
- rasa/dialogue_understanding/patterns/completed.py +1 -1
- rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -1
- rasa/dialogue_understanding/patterns/correction.py +17 -3
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +78 -2
- rasa/dialogue_understanding/patterns/handle_digressions.py +81 -0
- rasa/dialogue_understanding/patterns/human_handoff.py +1 -1
- rasa/dialogue_understanding/patterns/internal_error.py +1 -0
- rasa/dialogue_understanding/patterns/search.py +1 -1
- rasa/dialogue_understanding/patterns/session_start.py +1 -1
- rasa/dialogue_understanding/patterns/skip_question.py +1 -0
- rasa/dialogue_understanding/patterns/user_silence.py +1 -1
- rasa/dialogue_understanding/patterns/validate_slot.py +65 -0
- rasa/dialogue_understanding/processor/command_processor.py +193 -43
- rasa/dialogue_understanding/processor/command_processor_component.py +1 -1
- rasa/dialogue_understanding/stack/dialogue_stack.py +4 -3
- rasa/dialogue_understanding/stack/frames/__init__.py +2 -2
- rasa/dialogue_understanding/stack/frames/chit_chat_frame.py +4 -1
- rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py +2 -3
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +5 -2
- rasa/dialogue_understanding/stack/frames/search_frame.py +4 -1
- rasa/dialogue_understanding/stack/utils.py +56 -10
- rasa/dialogue_understanding/utils.py +164 -0
- rasa/dialogue_understanding_test/README.md +429 -0
- rasa/dialogue_understanding_test/__init__.py +0 -0
- rasa/dialogue_understanding_test/command_comparison.py +60 -0
- rasa/dialogue_understanding_test/command_metric_calculation.py +122 -0
- rasa/dialogue_understanding_test/constants.py +22 -0
- rasa/dialogue_understanding_test/du_test_case.py +448 -0
- rasa/dialogue_understanding_test/du_test_result.py +390 -0
- rasa/dialogue_understanding_test/du_test_runner.py +322 -0
- rasa/dialogue_understanding_test/du_test_schema.yml +161 -0
- rasa/dialogue_understanding_test/io.py +443 -0
- rasa/dialogue_understanding_test/test_case_simulation/__init__.py +0 -0
- rasa/dialogue_understanding_test/test_case_simulation/exception.py +28 -0
- rasa/dialogue_understanding_test/test_case_simulation/test_case_tracker_simulator.py +336 -0
- rasa/dialogue_understanding_test/utils.py +70 -0
- rasa/dialogue_understanding_test/validation.py +77 -0
- rasa/e2e_test/aggregate_test_stats_calculator.py +1 -1
- rasa/e2e_test/assertions.py +202 -175
- rasa/e2e_test/assertions_schema.yml +6 -0
- rasa/e2e_test/constants.py +16 -1
- rasa/e2e_test/e2e_config.py +102 -41
- rasa/e2e_test/e2e_config_schema.yml +28 -10
- rasa/e2e_test/e2e_test_case.py +5 -5
- rasa/e2e_test/e2e_test_converter.py +2 -3
- rasa/e2e_test/e2e_test_coverage_report.py +6 -6
- rasa/e2e_test/e2e_test_result.py +1 -1
- rasa/e2e_test/e2e_test_runner.py +143 -38
- rasa/e2e_test/llm_judge_prompts/answer_relevance_prompt_template.jinja2 +93 -0
- rasa/e2e_test/llm_judge_prompts/groundedness_prompt_template.jinja2 +169 -0
- rasa/e2e_test/stub_custom_action.py +1 -1
- rasa/e2e_test/utils/generative_assertions.py +243 -0
- rasa/e2e_test/utils/io.py +123 -93
- rasa/e2e_test/utils/validation.py +101 -3
- rasa/engine/caching.py +5 -7
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +3 -2
- rasa/engine/language.py +182 -0
- rasa/engine/recipes/config_files/default_config.yml +4 -0
- rasa/engine/recipes/default_components.py +13 -15
- rasa/engine/recipes/default_recipe.py +65 -49
- rasa/engine/recipes/graph_recipe.py +10 -7
- rasa/engine/recipes/recipe.py +2 -2
- rasa/engine/runner/dask.py +2 -2
- rasa/engine/runner/interface.py +1 -0
- rasa/engine/storage/local_model_storage.py +6 -4
- rasa/engine/storage/resource.py +2 -1
- rasa/engine/storage/storage.py +8 -3
- rasa/engine/training/components.py +2 -1
- rasa/engine/training/fingerprinting.py +4 -2
- rasa/engine/training/graph_trainer.py +4 -4
- rasa/engine/training/hooks.py +2 -2
- rasa/engine/validation.py +36 -33
- rasa/exceptions.py +3 -2
- rasa/graph_components/converters/nlu_message_converter.py +3 -3
- rasa/graph_components/providers/domain_for_core_training_provider.py +3 -3
- rasa/graph_components/providers/domain_provider.py +3 -2
- rasa/graph_components/providers/flows_provider.py +2 -3
- rasa/graph_components/providers/forms_provider.py +4 -4
- rasa/graph_components/providers/nlu_training_data_provider.py +5 -3
- rasa/graph_components/providers/responses_provider.py +4 -4
- rasa/graph_components/providers/rule_only_provider.py +3 -2
- rasa/graph_components/providers/story_graph_provider.py +8 -8
- rasa/graph_components/providers/training_tracker_provider.py +3 -2
- rasa/graph_components/validators/default_recipe_validator.py +16 -16
- rasa/graph_components/validators/finetuning_validator.py +10 -8
- rasa/hooks.py +19 -14
- rasa/jupyter.py +2 -2
- rasa/llm_fine_tuning/annotation_module.py +4 -4
- rasa/llm_fine_tuning/conversations.py +5 -33
- rasa/llm_fine_tuning/llm_data_preparation_module.py +6 -4
- rasa/llm_fine_tuning/paraphrasing/conversation_rephraser.py +4 -4
- rasa/llm_fine_tuning/paraphrasing/rephrase_validator.py +18 -13
- rasa/llm_fine_tuning/paraphrasing_module.py +6 -2
- rasa/llm_fine_tuning/storage.py +3 -3
- rasa/llm_fine_tuning/train_test_split_module.py +27 -27
- rasa/llm_fine_tuning/utils.py +7 -0
- rasa/markers/marker.py +2 -3
- rasa/markers/marker_base.py +1 -2
- rasa/markers/upload.py +2 -2
- rasa/markers/validate.py +2 -3
- rasa/model.py +3 -5
- rasa/model_manager/config.py +1 -1
- rasa/model_manager/model_api.py +5 -4
- rasa/model_manager/runner_service.py +13 -10
- rasa/model_manager/socket_bridge.py +15 -9
- rasa/model_manager/studio_jwt_auth.py +1 -0
- rasa/model_manager/trainer_service.py +9 -7
- rasa/model_manager/utils.py +1 -1
- rasa/model_manager/warm_rasa_process.py +14 -9
- rasa/model_service.py +5 -6
- rasa/model_testing.py +13 -15
- rasa/model_training.py +29 -29
- rasa/nlu/classifiers/diet_classifier.py +72 -73
- rasa/nlu/classifiers/fallback_classifier.py +9 -8
- rasa/nlu/classifiers/keyword_intent_classifier.py +7 -6
- rasa/nlu/classifiers/logistic_regression_classifier.py +3 -3
- rasa/nlu/classifiers/mitie_intent_classifier.py +5 -4
- rasa/nlu/classifiers/regex_message_handler.py +3 -2
- rasa/nlu/classifiers/sklearn_intent_classifier.py +2 -2
- rasa/nlu/convert.py +2 -2
- rasa/nlu/emulators/dialogflow.py +3 -3
- rasa/nlu/emulators/luis.py +5 -5
- rasa/nlu/emulators/no_emulator.py +1 -0
- rasa/nlu/emulators/wit.py +4 -4
- rasa/nlu/extractors/crf_entity_extractor.py +11 -11
- rasa/nlu/extractors/duckling_entity_extractor.py +7 -6
- rasa/nlu/extractors/entity_synonyms.py +10 -9
- rasa/nlu/extractors/extractor.py +16 -16
- rasa/nlu/extractors/mitie_entity_extractor.py +10 -9
- rasa/nlu/extractors/regex_entity_extractor.py +11 -10
- rasa/nlu/extractors/spacy_entity_extractor.py +2 -2
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +15 -14
- rasa/nlu/featurizers/dense_featurizer/dense_featurizer.py +2 -1
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +10 -9
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +9 -7
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +13 -12
- rasa/nlu/featurizers/featurizer.py +5 -4
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +6 -6
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -4
- rasa/nlu/featurizers/sparse_featurizer/regex_featurizer.py +4 -4
- rasa/nlu/featurizers/sparse_featurizer/sparse_featurizer.py +2 -0
- rasa/nlu/model.py +0 -1
- rasa/nlu/selectors/response_selector.py +67 -68
- rasa/nlu/test.py +38 -38
- rasa/nlu/tokenizers/jieba_tokenizer.py +1 -2
- rasa/nlu/tokenizers/mitie_tokenizer.py +2 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -3
- rasa/nlu/tokenizers/tokenizer.py +6 -7
- rasa/nlu/tokenizers/whitespace_tokenizer.py +1 -1
- rasa/nlu/utils/bilou_utils.py +7 -7
- rasa/nlu/utils/hugging_face/registry.py +22 -22
- rasa/nlu/utils/hugging_face/transformers_pre_post_processors.py +2 -1
- rasa/nlu/utils/mitie_utils.py +2 -1
- rasa/nlu/utils/pattern_utils.py +1 -1
- rasa/nlu/utils/spacy_utils.py +3 -3
- rasa/plugin.py +12 -1
- rasa/server.py +3 -2
- rasa/shared/constants.py +45 -18
- rasa/shared/core/command_payload_reader.py +15 -7
- rasa/shared/core/constants.py +34 -4
- rasa/shared/core/conversation.py +1 -2
- rasa/shared/core/domain.py +19 -20
- rasa/shared/core/events.py +60 -39
- rasa/shared/core/flows/__init__.py +0 -1
- rasa/shared/core/flows/constants.py +11 -0
- rasa/shared/core/flows/flow.py +107 -26
- rasa/shared/core/flows/flow_step.py +4 -3
- rasa/shared/core/flows/flow_step_links.py +1 -2
- rasa/shared/core/flows/flow_step_sequence.py +1 -1
- rasa/shared/core/flows/flows_list.py +3 -3
- rasa/shared/core/flows/flows_yaml_schema.json +69 -3
- rasa/shared/core/flows/nlu_trigger.py +1 -1
- rasa/shared/core/flows/steps/__init__.py +2 -2
- rasa/shared/core/flows/steps/action.py +1 -1
- rasa/shared/core/flows/steps/call.py +1 -1
- rasa/shared/core/flows/steps/collect.py +22 -40
- rasa/shared/core/flows/steps/internal.py +1 -1
- rasa/shared/core/flows/steps/link.py +1 -1
- rasa/shared/core/flows/steps/no_operation.py +2 -2
- rasa/shared/core/flows/steps/set_slots.py +1 -1
- rasa/shared/core/flows/utils.py +44 -4
- rasa/shared/core/flows/validation.py +4 -6
- rasa/shared/core/generator.py +20 -21
- rasa/shared/core/slot_mappings.py +360 -121
- rasa/shared/core/slots.py +163 -6
- rasa/shared/core/trackers.py +108 -33
- rasa/shared/core/training_data/loading.py +1 -1
- rasa/shared/core/training_data/story_reader/story_reader.py +3 -3
- rasa/shared/core/training_data/story_reader/story_step_builder.py +4 -4
- rasa/shared/core/training_data/story_reader/yaml_story_reader.py +29 -31
- rasa/shared/core/training_data/story_writer/yaml_story_writer.py +22 -24
- rasa/shared/core/training_data/structures.py +11 -12
- rasa/shared/core/training_data/visualization.py +10 -10
- rasa/shared/data.py +6 -6
- rasa/shared/engine/caching.py +0 -1
- rasa/shared/exceptions.py +2 -2
- rasa/shared/importers/importer.py +58 -2
- rasa/shared/importers/rasa.py +5 -6
- rasa/shared/importers/utils.py +1 -1
- rasa/shared/nlu/constants.py +9 -0
- rasa/shared/nlu/training_data/entities_parser.py +6 -6
- rasa/shared/nlu/training_data/features.py +3 -3
- rasa/shared/nlu/training_data/formats/__init__.py +1 -1
- rasa/shared/nlu/training_data/formats/dialogflow.py +4 -5
- rasa/shared/nlu/training_data/formats/luis.py +7 -8
- rasa/shared/nlu/training_data/formats/rasa.py +4 -5
- rasa/shared/nlu/training_data/formats/rasa_yaml.py +17 -16
- rasa/shared/nlu/training_data/formats/readerwriter.py +8 -11
- rasa/shared/nlu/training_data/formats/wit.py +3 -4
- rasa/shared/nlu/training_data/loading.py +4 -4
- rasa/shared/nlu/training_data/lookup_tables_parser.py +1 -1
- rasa/shared/nlu/training_data/message.py +13 -14
- rasa/shared/nlu/training_data/schemas/data_schema.py +1 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +19 -11
- rasa/shared/nlu/training_data/synonyms_parser.py +3 -3
- rasa/shared/nlu/training_data/training_data.py +12 -13
- rasa/shared/nlu/training_data/util.py +11 -10
- rasa/shared/providers/_configs/azure_entra_id_config.py +541 -0
- rasa/shared/providers/_configs/azure_openai_client_config.py +150 -15
- rasa/shared/providers/_configs/client_config.py +3 -1
- rasa/shared/providers/_configs/default_litellm_client_config.py +9 -7
- rasa/shared/providers/_configs/huggingface_local_embedding_client_config.py +13 -11
- rasa/shared/providers/_configs/litellm_router_client_config.py +12 -10
- rasa/shared/providers/_configs/model_group_config.py +8 -5
- rasa/shared/providers/_configs/oauth_config.py +33 -0
- rasa/shared/providers/_configs/openai_client_config.py +14 -12
- rasa/shared/providers/_configs/rasa_llm_client_config.py +5 -3
- rasa/shared/providers/_configs/self_hosted_llm_client_config.py +12 -11
- rasa/shared/providers/_configs/utils.py +1 -0
- rasa/shared/providers/_ssl_verification_utils.py +5 -6
- rasa/shared/providers/_utils.py +5 -5
- rasa/shared/providers/constants.py +6 -0
- rasa/shared/providers/embedding/_base_litellm_embedding_client.py +1 -1
- rasa/shared/providers/embedding/azure_openai_embedding_client.py +32 -7
- rasa/shared/providers/embedding/embedding_client.py +1 -1
- rasa/shared/providers/embedding/litellm_router_embedding_client.py +5 -2
- rasa/shared/providers/llm/_base_litellm_client.py +43 -18
- rasa/shared/providers/llm/azure_openai_llm_client.py +90 -34
- rasa/shared/providers/llm/default_litellm_llm_client.py +4 -2
- rasa/shared/providers/llm/litellm_router_llm_client.py +32 -9
- rasa/shared/providers/llm/llm_client.py +24 -8
- rasa/shared/providers/llm/llm_response.py +61 -2
- rasa/shared/providers/llm/openai_llm_client.py +11 -5
- rasa/shared/providers/llm/rasa_llm_client.py +17 -14
- rasa/shared/providers/llm/self_hosted_llm_client.py +35 -15
- rasa/shared/providers/mappings.py +18 -19
- rasa/shared/providers/router/_base_litellm_router_client.py +48 -15
- rasa/shared/providers/router/router_client.py +3 -1
- rasa/shared/utils/cli.py +1 -1
- rasa/shared/utils/common.py +15 -1
- rasa/shared/utils/constants.py +3 -0
- rasa/shared/utils/health_check/embeddings_health_check_mixin.py +1 -1
- rasa/shared/utils/health_check/health_check.py +3 -3
- rasa/shared/utils/health_check/llm_health_check_mixin.py +1 -1
- rasa/shared/utils/io.py +1 -1
- rasa/shared/utils/llm.py +100 -18
- rasa/shared/utils/pykwalify_extensions.py +25 -1
- rasa/shared/utils/schemas/domain.yml +26 -1
- rasa/shared/utils/schemas/events.py +1 -1
- rasa/shared/utils/yaml.py +24 -20
- rasa/studio/auth.py +3 -3
- rasa/studio/config.py +1 -2
- rasa/studio/data_handler.py +3 -3
- rasa/studio/download.py +1 -1
- rasa/studio/results_logger.py +3 -3
- rasa/studio/upload.py +21 -5
- rasa/telemetry.py +127 -48
- rasa/tracing/config.py +5 -3
- rasa/tracing/constants.py +12 -0
- rasa/tracing/instrumentation/attribute_extractors.py +92 -14
- rasa/tracing/instrumentation/instrumentation.py +61 -5
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +1 -1
- rasa/tracing/instrumentation/metrics.py +52 -11
- rasa/tracing/metric_instrument_provider.py +54 -14
- rasa/utils/common.py +12 -24
- rasa/utils/endpoints.py +1 -1
- rasa/utils/io.py +7 -7
- rasa/utils/licensing.py +3 -4
- rasa/utils/log_utils.py +7 -6
- rasa/utils/ml_utils.py +1 -0
- rasa/utils/plotting.py +3 -3
- rasa/utils/sanic_error_handler.py +1 -1
- rasa/utils/tensorflow/callback.py +2 -2
- rasa/utils/tensorflow/crf.py +2 -2
- rasa/utils/tensorflow/data_generator.py +5 -5
- rasa/utils/tensorflow/environment.py +3 -3
- rasa/utils/tensorflow/feature_array.py +2 -3
- rasa/utils/tensorflow/layers.py +18 -12
- rasa/utils/tensorflow/layers_utils.py +2 -1
- rasa/utils/tensorflow/metrics.py +2 -2
- rasa/utils/tensorflow/model_data.py +7 -7
- rasa/utils/tensorflow/model_data_utils.py +10 -9
- rasa/utils/tensorflow/models.py +31 -32
- rasa/utils/tensorflow/rasa_layers.py +20 -19
- rasa/utils/tensorflow/types.py +2 -1
- rasa/utils/train_utils.py +23 -21
- rasa/utils/url_tools.py +1 -1
- rasa/validator.py +594 -115
- rasa/version.py +1 -1
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/METADATA +23 -26
- rasa_pro-3.12.0.dist-info/RECORD +829 -0
- rasa/core/channels/inspector/dist/assets/channel-e265ea59.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-21f8a43d.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-5c8ce12d.js +0 -1
- rasa_pro-3.11.5.dist-info/RECORD +0 -785
- /rasa/dialogue_understanding/generator/{single_step → prompt_templates}/command_prompt_template.jinja2 +0 -0
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.11.5.dist-info → rasa_pro-3.12.0.dist-info}/entry_points.txt +0 -0
rasa/telemetry.py
CHANGED
|
@@ -15,10 +15,11 @@ from collections import defaultdict
|
|
|
15
15
|
from datetime import datetime
|
|
16
16
|
from functools import wraps
|
|
17
17
|
from pathlib import Path
|
|
18
|
-
from typing import Any, Callable, Dict, List, Optional, Text
|
|
18
|
+
from typing import Any, Callable, Dict, List, Optional, Text, Tuple, Type, cast
|
|
19
19
|
|
|
20
20
|
import importlib_resources
|
|
21
21
|
import requests
|
|
22
|
+
import structlog
|
|
22
23
|
from terminaltables import SingleTable
|
|
23
24
|
|
|
24
25
|
import rasa
|
|
@@ -32,34 +33,42 @@ from rasa.constants import (
|
|
|
32
33
|
CONFIG_TELEMETRY_ENABLED,
|
|
33
34
|
CONFIG_TELEMETRY_ID,
|
|
34
35
|
)
|
|
36
|
+
from rasa.engine.storage.local_model_storage import LocalModelStorage
|
|
35
37
|
from rasa.shared.constants import (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
ASSISTANT_ID_KEY,
|
|
39
|
+
CONFIG_LANGUAGE_KEY,
|
|
40
|
+
CONFIG_PIPELINE_KEY,
|
|
41
|
+
CONFIG_POLICIES_KEY,
|
|
42
|
+
CONFIG_PREDICT_SCHEMA,
|
|
43
|
+
CONFIG_RECIPE_KEY,
|
|
44
|
+
CONFIG_TRAIN_SCHEMA,
|
|
45
|
+
DOCS_URL_TELEMETRY,
|
|
39
46
|
LLM_API_HEALTH_CHECK_DEFAULT_VALUE,
|
|
47
|
+
LLM_API_HEALTH_CHECK_ENV_VAR,
|
|
40
48
|
MODEL_GROUP_CONFIG_KEY,
|
|
49
|
+
PROMPT_CONFIG_KEY,
|
|
50
|
+
PROMPT_TEMPLATE_CONFIG_KEY,
|
|
51
|
+
UTTER_ASK_PREFIX,
|
|
41
52
|
)
|
|
42
|
-
from rasa.engine.storage.local_model_storage import LocalModelStorage
|
|
43
|
-
from rasa.shared.constants import DOCS_URL_TELEMETRY, UTTER_ASK_PREFIX
|
|
44
53
|
from rasa.shared.core.flows import Flow
|
|
45
54
|
from rasa.shared.core.flows.steps import (
|
|
55
|
+
CallFlowStep,
|
|
46
56
|
CollectInformationFlowStep,
|
|
47
|
-
SetSlotsFlowStep,
|
|
48
57
|
LinkFlowStep,
|
|
49
|
-
|
|
58
|
+
SetSlotsFlowStep,
|
|
50
59
|
)
|
|
51
60
|
from rasa.shared.exceptions import RasaException
|
|
52
61
|
from rasa.utils import common as rasa_utils
|
|
53
62
|
|
|
54
63
|
if typing.TYPE_CHECKING:
|
|
64
|
+
from rasa.core.agent import Agent
|
|
55
65
|
from rasa.core.brokers.broker import EventBroker
|
|
56
|
-
from rasa.core.tracker_store import TrackerStore
|
|
57
66
|
from rasa.core.channels.channel import InputChannel
|
|
58
|
-
from rasa.core.
|
|
59
|
-
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
60
|
-
from rasa.shared.importers.importer import TrainingDataImporter
|
|
67
|
+
from rasa.core.tracker_store import TrackerStore
|
|
61
68
|
from rasa.core.utils import AvailableEndpoints
|
|
62
|
-
from rasa.e2e_test.e2e_test_case import
|
|
69
|
+
from rasa.e2e_test.e2e_test_case import Fixture, Metadata, TestCase
|
|
70
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
71
|
+
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
63
72
|
|
|
64
73
|
logger = logging.getLogger(__name__)
|
|
65
74
|
|
|
@@ -103,6 +112,7 @@ CI_ENVIRONMENT_TELL = [
|
|
|
103
112
|
# https://rasa.com/docs/rasa-pro/telemetry/reference
|
|
104
113
|
TRAINING_STARTED_EVENT = "Training Started"
|
|
105
114
|
TRAINING_COMPLETED_EVENT = "Training Completed"
|
|
115
|
+
TRAINING_FAILED_EVENT = "Training Failed"
|
|
106
116
|
TELEMETRY_DISABLED_EVENT = "Telemetry Disabled"
|
|
107
117
|
TELEMETRY_DATA_SPLIT_EVENT = "Training Data Split"
|
|
108
118
|
TELEMETRY_DATA_VALIDATED_EVENT = "Training Data Validated"
|
|
@@ -137,6 +147,8 @@ TELEMETRY_ENTERPRISE_SEARCH_POLICY_TRAINING_COMPLETED_EVENT = (
|
|
|
137
147
|
"Enterprise Search Policy Training Completed"
|
|
138
148
|
)
|
|
139
149
|
TELEMETRY_ENTERPRISE_SEARCH_POLICY_PREDICT_EVENT = "Enterprise Search Policy Predicted"
|
|
150
|
+
TELEMETRY_VALIDATION_ERROR_LOG_EVENT = "Validation Error Logged"
|
|
151
|
+
TELEMETRY_UPLOAD_TO_STUDIO_FAILED_EVENT = "Upload to Studio Failed"
|
|
140
152
|
|
|
141
153
|
# licensing events
|
|
142
154
|
TELEMETRY_CONVERSATION_COUNT = "Conversation Count"
|
|
@@ -352,6 +364,7 @@ def _fetch_write_key(tool: Text, environment_variable: Text) -> Optional[Text]:
|
|
|
352
364
|
write key, if a key was present.
|
|
353
365
|
"""
|
|
354
366
|
import importlib_resources
|
|
367
|
+
|
|
355
368
|
from rasa import __name__ as name
|
|
356
369
|
|
|
357
370
|
if os.environ.get(environment_variable):
|
|
@@ -516,7 +529,6 @@ def _send_request(url: Text, payload: Dict[Text, Any]) -> None:
|
|
|
516
529
|
"""
|
|
517
530
|
if _is_telemetry_debug_enabled():
|
|
518
531
|
print_telemetry_payload(payload)
|
|
519
|
-
return
|
|
520
532
|
|
|
521
533
|
write_key = _get_telemetry_write_key()
|
|
522
534
|
if not write_key:
|
|
@@ -602,7 +614,7 @@ def _default_context_fields() -> Dict[Text, Any]:
|
|
|
602
614
|
Return:
|
|
603
615
|
A new context containing information about the runtime environment.
|
|
604
616
|
"""
|
|
605
|
-
from rasa.utils.licensing import
|
|
617
|
+
from rasa.utils.licensing import get_license_hash, property_of_active_license
|
|
606
618
|
|
|
607
619
|
global TELEMETRY_CONTEXT
|
|
608
620
|
|
|
@@ -962,13 +974,14 @@ def track_model_training(
|
|
|
962
974
|
training_id = uuid.uuid4().hex
|
|
963
975
|
|
|
964
976
|
tracking_data = {
|
|
965
|
-
"language": config.get(
|
|
977
|
+
"language": config.get(CONFIG_LANGUAGE_KEY),
|
|
966
978
|
"training_id": training_id,
|
|
967
979
|
"type": model_type,
|
|
968
|
-
"
|
|
969
|
-
"
|
|
970
|
-
"
|
|
971
|
-
"
|
|
980
|
+
"assistant_id": config.get(ASSISTANT_ID_KEY),
|
|
981
|
+
"pipeline": config.get(CONFIG_PIPELINE_KEY),
|
|
982
|
+
"policies": config.get(CONFIG_POLICIES_KEY),
|
|
983
|
+
"train_schema": config.get(CONFIG_TRAIN_SCHEMA),
|
|
984
|
+
"predict_schema": config.get(CONFIG_PREDICT_SCHEMA),
|
|
972
985
|
"model_groups": rasa.core.utils.AvailableEndpoints.get_instance().model_groups,
|
|
973
986
|
"api_health_check_enabled": (
|
|
974
987
|
os.getenv(
|
|
@@ -995,7 +1008,7 @@ def track_model_training(
|
|
|
995
1008
|
"num_synonyms": len(nlu_data.entity_synonyms),
|
|
996
1009
|
"num_regexes": len(nlu_data.regex_features),
|
|
997
1010
|
"is_finetuning": is_finetuning,
|
|
998
|
-
"recipe": config.get(
|
|
1011
|
+
"recipe": config.get(CONFIG_RECIPE_KEY),
|
|
999
1012
|
}
|
|
1000
1013
|
|
|
1001
1014
|
flow_statistics = _collect_flow_statistics(flows.underlying_flows)
|
|
@@ -1010,13 +1023,28 @@ def track_model_training(
|
|
|
1010
1023
|
tracking_data,
|
|
1011
1024
|
)
|
|
1012
1025
|
start = datetime.now()
|
|
1013
|
-
|
|
1026
|
+
try:
|
|
1027
|
+
yield
|
|
1028
|
+
except (Exception, SystemExit):
|
|
1029
|
+
runtime = datetime.now() - start
|
|
1030
|
+
_track(
|
|
1031
|
+
TRAINING_FAILED_EVENT,
|
|
1032
|
+
{
|
|
1033
|
+
"training_id": training_id,
|
|
1034
|
+
"assistant_id": config.get(ASSISTANT_ID_KEY),
|
|
1035
|
+
"type": model_type,
|
|
1036
|
+
"runtime": int(runtime.total_seconds()),
|
|
1037
|
+
},
|
|
1038
|
+
)
|
|
1039
|
+
raise
|
|
1040
|
+
|
|
1014
1041
|
runtime = datetime.now() - start
|
|
1015
1042
|
|
|
1016
1043
|
_track(
|
|
1017
1044
|
TRAINING_COMPLETED_EVENT,
|
|
1018
1045
|
{
|
|
1019
1046
|
"training_id": training_id,
|
|
1047
|
+
"assistant_id": config.get(ASSISTANT_ID_KEY),
|
|
1020
1048
|
"type": model_type,
|
|
1021
1049
|
"runtime": int(runtime.total_seconds()),
|
|
1022
1050
|
},
|
|
@@ -1096,28 +1124,29 @@ def _get_llm_command_generator_config(config: Dict[str, Any]) -> Optional[Dict]:
|
|
|
1096
1124
|
Includes the model name, whether a custom prompt is used, whether flow
|
|
1097
1125
|
retrieval is enabled, and flow retrieval embedding model.
|
|
1098
1126
|
"""
|
|
1099
|
-
from rasa.shared.constants import (
|
|
1100
|
-
EMBEDDINGS_CONFIG_KEY,
|
|
1101
|
-
MODEL_CONFIG_KEY,
|
|
1102
|
-
MODEL_NAME_CONFIG_KEY,
|
|
1103
|
-
)
|
|
1104
1127
|
from rasa.dialogue_understanding.generator import (
|
|
1128
|
+
CompactLLMCommandGenerator,
|
|
1129
|
+
LLMBasedCommandGenerator,
|
|
1105
1130
|
LLMCommandGenerator,
|
|
1106
|
-
SingleStepLLMCommandGenerator,
|
|
1107
1131
|
MultiStepLLMCommandGenerator,
|
|
1108
|
-
|
|
1109
|
-
from rasa.dialogue_understanding.generator.multi_step.multi_step_llm_command_generator import ( # noqa: E501
|
|
1110
|
-
HANDLE_FLOWS_KEY,
|
|
1111
|
-
FILL_SLOTS_KEY,
|
|
1132
|
+
SingleStepLLMCommandGenerator,
|
|
1112
1133
|
)
|
|
1113
1134
|
from rasa.dialogue_understanding.generator.constants import (
|
|
1114
|
-
LLM_CONFIG_KEY,
|
|
1115
|
-
DEFAULT_LLM_CONFIG,
|
|
1116
1135
|
FLOW_RETRIEVAL_KEY,
|
|
1136
|
+
LLM_CONFIG_KEY,
|
|
1117
1137
|
)
|
|
1118
1138
|
from rasa.dialogue_understanding.generator.flow_retrieval import (
|
|
1119
1139
|
DEFAULT_EMBEDDINGS_CONFIG,
|
|
1120
1140
|
)
|
|
1141
|
+
from rasa.dialogue_understanding.generator.multi_step.multi_step_llm_command_generator import ( # noqa: E501
|
|
1142
|
+
FILL_SLOTS_KEY,
|
|
1143
|
+
HANDLE_FLOWS_KEY,
|
|
1144
|
+
)
|
|
1145
|
+
from rasa.shared.constants import (
|
|
1146
|
+
EMBEDDINGS_CONFIG_KEY,
|
|
1147
|
+
MODEL_CONFIG_KEY,
|
|
1148
|
+
MODEL_NAME_CONFIG_KEY,
|
|
1149
|
+
)
|
|
1121
1150
|
|
|
1122
1151
|
def find_command_generator_component(pipeline: List) -> Optional[Dict]:
|
|
1123
1152
|
"""Finds the LLMCommandGenerator component in the pipeline."""
|
|
@@ -1126,12 +1155,19 @@ def _get_llm_command_generator_config(config: Dict[str, Any]) -> Optional[Dict]:
|
|
|
1126
1155
|
LLMCommandGenerator.__name__,
|
|
1127
1156
|
SingleStepLLMCommandGenerator.__name__,
|
|
1128
1157
|
MultiStepLLMCommandGenerator.__name__,
|
|
1158
|
+
CompactLLMCommandGenerator.__name__,
|
|
1129
1159
|
]:
|
|
1130
1160
|
return component
|
|
1131
1161
|
return None
|
|
1132
1162
|
|
|
1133
1163
|
def extract_llm_command_generator_llm_client_settings(component: Dict) -> Dict:
|
|
1134
1164
|
"""Extracts settings related to LLM command generator."""
|
|
1165
|
+
component_class_lookup = {
|
|
1166
|
+
LLMCommandGenerator.__name__: LLMCommandGenerator,
|
|
1167
|
+
SingleStepLLMCommandGenerator.__name__: SingleStepLLMCommandGenerator,
|
|
1168
|
+
MultiStepLLMCommandGenerator.__name__: MultiStepLLMCommandGenerator,
|
|
1169
|
+
CompactLLMCommandGenerator.__name__: CompactLLMCommandGenerator,
|
|
1170
|
+
}
|
|
1135
1171
|
llm_config = component.get(LLM_CONFIG_KEY, {})
|
|
1136
1172
|
# Config at this stage is not yet resolved, so read from `model_group`
|
|
1137
1173
|
llm_model_group_id = llm_config.get(MODEL_GROUP_CONFIG_KEY)
|
|
@@ -1139,7 +1175,11 @@ def _get_llm_command_generator_config(config: Dict[str, Any]) -> Optional[Dict]:
|
|
|
1139
1175
|
MODEL_NAME_CONFIG_KEY
|
|
1140
1176
|
)
|
|
1141
1177
|
if llm_model_group_id is None and llm_model_name is None:
|
|
1142
|
-
|
|
1178
|
+
component_clz = cast(
|
|
1179
|
+
Type[LLMBasedCommandGenerator],
|
|
1180
|
+
component_class_lookup[component["name"]],
|
|
1181
|
+
)
|
|
1182
|
+
llm_model_name = component_clz.get_default_llm_config()[MODEL_CONFIG_KEY]
|
|
1143
1183
|
|
|
1144
1184
|
custom_prompt_used = (
|
|
1145
1185
|
PROMPT_CONFIG_KEY in component or PROMPT_TEMPLATE_CONFIG_KEY in component
|
|
@@ -1204,7 +1244,7 @@ def _get_llm_command_generator_config(config: Dict[str, Any]) -> Optional[Dict]:
|
|
|
1204
1244
|
FLOW_RETRIEVAL_EMBEDDING_MODEL_GROUP_ID: None,
|
|
1205
1245
|
}
|
|
1206
1246
|
|
|
1207
|
-
pipeline = config.get(
|
|
1247
|
+
pipeline = config.get(CONFIG_PIPELINE_KEY, [])
|
|
1208
1248
|
if not isinstance(pipeline, list):
|
|
1209
1249
|
return command_generator_config
|
|
1210
1250
|
|
|
@@ -1315,24 +1355,28 @@ def track_server_start(
|
|
|
1315
1355
|
"""
|
|
1316
1356
|
from rasa.core.utils import AvailableEndpoints
|
|
1317
1357
|
|
|
1318
|
-
def
|
|
1358
|
+
def project_fingerprint_and_assistant_id_from_model(
|
|
1319
1359
|
_model_directory: Optional[Text],
|
|
1320
|
-
) -> Optional[Text]:
|
|
1360
|
+
) -> Tuple[Optional[Text], Optional[Text]]:
|
|
1321
1361
|
"""Gets project fingerprint from an app's loaded model."""
|
|
1322
1362
|
if not model_directory:
|
|
1323
|
-
return None
|
|
1363
|
+
return None, None
|
|
1324
1364
|
|
|
1325
1365
|
try:
|
|
1326
1366
|
model_archive = model.get_local_model(_model_directory)
|
|
1327
1367
|
metadata = LocalModelStorage.metadata_from_archive(model_archive)
|
|
1328
1368
|
|
|
1329
|
-
return metadata.project_fingerprint
|
|
1369
|
+
return metadata.project_fingerprint, metadata.assistant_id
|
|
1330
1370
|
except Exception:
|
|
1331
|
-
return None
|
|
1371
|
+
return None, None
|
|
1332
1372
|
|
|
1333
1373
|
if not endpoints:
|
|
1334
1374
|
endpoints = AvailableEndpoints()
|
|
1335
1375
|
|
|
1376
|
+
project, assistant_id = project_fingerprint_and_assistant_id_from_model(
|
|
1377
|
+
model_directory
|
|
1378
|
+
)
|
|
1379
|
+
|
|
1336
1380
|
_track(
|
|
1337
1381
|
TELEMETRY_SERVER_STARTED_EVENT,
|
|
1338
1382
|
{
|
|
@@ -1354,7 +1398,8 @@ def track_server_start(
|
|
|
1354
1398
|
"endpoints_event_broker": endpoints.event_broker.type
|
|
1355
1399
|
if endpoints.event_broker
|
|
1356
1400
|
else None,
|
|
1357
|
-
"project":
|
|
1401
|
+
"project": project,
|
|
1402
|
+
"assistant_id": assistant_id,
|
|
1358
1403
|
},
|
|
1359
1404
|
)
|
|
1360
1405
|
|
|
@@ -1372,24 +1417,30 @@ def track_project_init(path: Text) -> None:
|
|
|
1372
1417
|
|
|
1373
1418
|
|
|
1374
1419
|
@ensure_telemetry_enabled
|
|
1375
|
-
def track_shell_started(model_type: Text) -> None:
|
|
1420
|
+
def track_shell_started(model_type: Text, assistant_id: Text) -> None:
|
|
1376
1421
|
"""Track when a user starts a bot using rasa shell.
|
|
1377
1422
|
|
|
1378
1423
|
Args:
|
|
1379
1424
|
model_type: Type of the model, core / nlu or rasa.
|
|
1380
1425
|
"""
|
|
1381
|
-
_track(
|
|
1426
|
+
_track(
|
|
1427
|
+
TELEMETRY_SHELL_STARTED_EVENT,
|
|
1428
|
+
{"type": model_type, "assistant_id": assistant_id},
|
|
1429
|
+
)
|
|
1382
1430
|
|
|
1383
1431
|
|
|
1384
1432
|
@ensure_telemetry_enabled
|
|
1385
|
-
def track_inspect_started(
|
|
1433
|
+
def track_inspect_started(channel: Text, assistant_id: Text) -> None:
|
|
1386
1434
|
"""Track when a user starts a bot using rasa inspect.
|
|
1387
1435
|
|
|
1388
1436
|
Args:
|
|
1389
|
-
channel:
|
|
1390
|
-
|
|
1437
|
+
channel: Type of channel used.
|
|
1438
|
+
assistant_id: ID of the assistant being inspected.
|
|
1391
1439
|
"""
|
|
1392
|
-
_track(
|
|
1440
|
+
_track(
|
|
1441
|
+
TELEMETRY_INSPECT_STARTED_EVENT,
|
|
1442
|
+
{"type": channel, "assistant_id": assistant_id},
|
|
1443
|
+
)
|
|
1393
1444
|
|
|
1394
1445
|
|
|
1395
1446
|
@ensure_telemetry_enabled
|
|
@@ -1867,3 +1918,31 @@ def track_e2e_test_conversion_completed(file_type: str, test_case_count: int) ->
|
|
|
1867
1918
|
E2E_TEST_CONVERSION_TEST_CASE_COUNT: test_case_count,
|
|
1868
1919
|
},
|
|
1869
1920
|
)
|
|
1921
|
+
|
|
1922
|
+
|
|
1923
|
+
def track_validation_error_log(
|
|
1924
|
+
_: structlog.BoundLogger, method_name: str, event_dict: Dict
|
|
1925
|
+
) -> Dict:
|
|
1926
|
+
"""Track validation errors."""
|
|
1927
|
+
if is_telemetry_enabled() and method_name == "error":
|
|
1928
|
+
event_dict_copy = event_dict.copy()
|
|
1929
|
+
|
|
1930
|
+
_track(
|
|
1931
|
+
TELEMETRY_VALIDATION_ERROR_LOG_EVENT,
|
|
1932
|
+
{
|
|
1933
|
+
"log_level": method_name,
|
|
1934
|
+
"log_id": event_dict_copy.pop("event"),
|
|
1935
|
+
"message": event_dict_copy.pop("event_info", ""),
|
|
1936
|
+
**event_dict_copy,
|
|
1937
|
+
},
|
|
1938
|
+
)
|
|
1939
|
+
return event_dict
|
|
1940
|
+
|
|
1941
|
+
|
|
1942
|
+
@ensure_telemetry_enabled
|
|
1943
|
+
def track_upload_to_studio_failed(response_json: Dict[str, Any]) -> None:
|
|
1944
|
+
"""Track when the upload to studio fails."""
|
|
1945
|
+
_track(
|
|
1946
|
+
TELEMETRY_UPLOAD_TO_STUDIO_FAILED_EVENT,
|
|
1947
|
+
{"studio_response_json": response_json},
|
|
1948
|
+
)
|
rasa/tracing/config.py
CHANGED
|
@@ -29,9 +29,10 @@ from rasa.dialogue_understanding.commands import (
|
|
|
29
29
|
FreeFormAnswerCommand,
|
|
30
30
|
)
|
|
31
31
|
from rasa.dialogue_understanding.generator import (
|
|
32
|
+
CompactLLMCommandGenerator,
|
|
32
33
|
LLMCommandGenerator,
|
|
33
|
-
SingleStepLLMCommandGenerator,
|
|
34
34
|
MultiStepLLMCommandGenerator,
|
|
35
|
+
SingleStepLLMCommandGenerator,
|
|
35
36
|
)
|
|
36
37
|
from rasa.dialogue_understanding.generator.flow_retrieval import FlowRetrieval
|
|
37
38
|
from rasa.dialogue_understanding.generator.nlu_command_adapter import NLUCommandAdapter
|
|
@@ -40,11 +41,11 @@ from rasa.engine.training.graph_trainer import GraphTrainer
|
|
|
40
41
|
from rasa.tracing.constants import (
|
|
41
42
|
ENDPOINTS_ENDPOINT_KEY,
|
|
42
43
|
ENDPOINTS_INSECURE_KEY,
|
|
44
|
+
ENDPOINTS_METRICS_KEY,
|
|
43
45
|
ENDPOINTS_OTLP_BACKEND_TYPE,
|
|
46
|
+
ENDPOINTS_ROOT_CERTIFICATES_KEY,
|
|
44
47
|
ENDPOINTS_TRACING_KEY,
|
|
45
48
|
ENDPOINTS_TRACING_SERVICE_NAME_KEY,
|
|
46
|
-
ENDPOINTS_ROOT_CERTIFICATES_KEY,
|
|
47
|
-
ENDPOINTS_METRICS_KEY,
|
|
48
49
|
)
|
|
49
50
|
from rasa.tracing.instrumentation import instrumentation
|
|
50
51
|
from rasa.tracing.metric_instrument_provider import MetricInstrumentProvider
|
|
@@ -110,6 +111,7 @@ def configure_tracing(tracer_provider: Optional[TracerProvider]) -> None:
|
|
|
110
111
|
endpoint_config_class=EndpointConfig,
|
|
111
112
|
grpc_custom_action_executor_class=GRPCCustomActionExecutor,
|
|
112
113
|
single_step_llm_command_generator_class=SingleStepLLMCommandGenerator,
|
|
114
|
+
compact_llm_command_generator_class=CompactLLMCommandGenerator,
|
|
113
115
|
multi_step_llm_command_generator_class=MultiStepLLMCommandGenerator,
|
|
114
116
|
custom_action_executor_subclasses=custom_action_executor_subclasses,
|
|
115
117
|
flow_retrieval_class=FlowRetrieval,
|
rasa/tracing/constants.py
CHANGED
|
@@ -32,6 +32,18 @@ SINGLE_STEP_LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME = (
|
|
|
32
32
|
SINGLE_STEP_LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME = (
|
|
33
33
|
"single_step_llm_command_generator_llm_response_duration"
|
|
34
34
|
)
|
|
35
|
+
COMPACT_LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME = (
|
|
36
|
+
"compact_llm_command_generator_cpu_usage"
|
|
37
|
+
)
|
|
38
|
+
COMPACT_LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME = (
|
|
39
|
+
"compact_llm_command_generator_memory_usage"
|
|
40
|
+
)
|
|
41
|
+
COMPACT_LLM_COMMAND_GENERATOR_PROMPT_TOKEN_USAGE_METRIC_NAME = (
|
|
42
|
+
"compact_llm_command_generator_prompt_token_usage"
|
|
43
|
+
)
|
|
44
|
+
COMPACT_LLM_COMMAND_GENERATOR_LLM_RESPONSE_DURATION_METRIC_NAME = (
|
|
45
|
+
"compact_llm_command_generator_llm_response_duration"
|
|
46
|
+
)
|
|
35
47
|
MULTI_STEP_LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME = (
|
|
36
48
|
"multi_step_llm_command_generator_cpu_usage"
|
|
37
49
|
)
|
|
@@ -5,7 +5,6 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, Union
|
|
|
5
5
|
|
|
6
6
|
import tiktoken
|
|
7
7
|
from numpy import ndarray
|
|
8
|
-
from rasa.dialogue_understanding.generator.constants import FLOW_RETRIEVAL_KEY
|
|
9
8
|
from rasa_sdk.grpc_py import action_webhook_pb2
|
|
10
9
|
|
|
11
10
|
from rasa.core.actions.action import DirectCustomActionExecutor
|
|
@@ -19,34 +18,51 @@ from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephra
|
|
|
19
18
|
from rasa.core.processor import MessageProcessor
|
|
20
19
|
from rasa.core.tracker_store import TrackerStore
|
|
21
20
|
from rasa.dialogue_understanding.commands import Command
|
|
22
|
-
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
23
21
|
from rasa.dialogue_understanding.generator import LLMBasedCommandGenerator
|
|
22
|
+
from rasa.dialogue_understanding.generator.constants import FLOW_RETRIEVAL_KEY
|
|
23
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
24
|
+
from rasa.dialogue_understanding_test.du_test_result import (
|
|
25
|
+
KEY_TEST_CASES_ACCURACY,
|
|
26
|
+
KEY_USER_UTTERANCES_ACCURACY,
|
|
27
|
+
OUTPUT_COMPLETION_TOKEN_METRICS,
|
|
28
|
+
OUTPUT_LATENCY_METRICS,
|
|
29
|
+
OUTPUT_NAMES_OF_FAILED_TESTS,
|
|
30
|
+
OUTPUT_NAMES_OF_PASSED_TESTS,
|
|
31
|
+
OUTPUT_NUMBER_OF_FAILED_TESTS,
|
|
32
|
+
OUTPUT_NUMBER_OF_FAILED_USER_UTTERANCES,
|
|
33
|
+
OUTPUT_NUMBER_OF_PASSED_TESTS,
|
|
34
|
+
OUTPUT_NUMBER_OF_PASSED_USER_UTTERANCES,
|
|
35
|
+
OUTPUT_PROMPT_TOKEN_METRICS,
|
|
36
|
+
OUTPUT_TEST_CASES_ACCURACY,
|
|
37
|
+
OUTPUT_USER_UTTERANCES_ACCURACY,
|
|
38
|
+
DialogueUnderstandingTestSuiteResult,
|
|
39
|
+
)
|
|
24
40
|
from rasa.engine.graph import ExecutionContext, GraphModelConfiguration, GraphNode
|
|
25
41
|
from rasa.engine.training.graph_trainer import GraphTrainer
|
|
26
42
|
from rasa.shared.constants import (
|
|
43
|
+
CONFIG_RECIPE_KEY,
|
|
44
|
+
DEPLOYMENT_CONFIG_KEY,
|
|
27
45
|
EMBEDDINGS_CONFIG_KEY,
|
|
46
|
+
LLM_CONFIG_KEY,
|
|
28
47
|
MODEL_CONFIG_KEY,
|
|
48
|
+
MODEL_GROUP_ID_CONFIG_KEY,
|
|
49
|
+
MODELS_CONFIG_KEY,
|
|
29
50
|
PROVIDER_CONFIG_KEY,
|
|
30
51
|
TIMEOUT_CONFIG_KEY,
|
|
31
|
-
DEPLOYMENT_CONFIG_KEY,
|
|
32
|
-
MODEL_GROUP_ID_CONFIG_KEY,
|
|
33
|
-
LLM_CONFIG_KEY,
|
|
34
52
|
)
|
|
35
53
|
from rasa.shared.core.constants import REQUESTED_SLOT
|
|
36
54
|
from rasa.shared.core.domain import Domain
|
|
37
55
|
from rasa.shared.core.events import DialogueStackUpdated, Event
|
|
38
56
|
from rasa.shared.core.flows import Flow, FlowsList, FlowStep
|
|
39
57
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
58
|
+
from rasa.shared.core.training_data.structures import StoryGraph
|
|
40
59
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
41
60
|
from rasa.shared.nlu.constants import INTENT_NAME_KEY, SET_SLOT_COMMAND
|
|
42
|
-
from rasa.shared.utils.llm import
|
|
43
|
-
combine_custom_and_default_config,
|
|
44
|
-
)
|
|
61
|
+
from rasa.shared.utils.llm import combine_custom_and_default_config
|
|
45
62
|
from rasa.tracing.constants import (
|
|
46
63
|
PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME,
|
|
47
64
|
REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME,
|
|
48
65
|
)
|
|
49
|
-
from rasa.shared.core.training_data.structures import StoryGraph
|
|
50
66
|
|
|
51
67
|
if TYPE_CHECKING:
|
|
52
68
|
from langchain.llms.base import BaseLLM
|
|
@@ -255,7 +271,7 @@ def extract_attrs_for_graph_trainer(
|
|
|
255
271
|
return {
|
|
256
272
|
"training_type": model_configuration.training_type.model_type,
|
|
257
273
|
"language": model_configuration.language,
|
|
258
|
-
"recipe_name": importer.get_config().get(
|
|
274
|
+
"recipe_name": importer.get_config().get(CONFIG_RECIPE_KEY),
|
|
259
275
|
"output_filename": output_filename.name,
|
|
260
276
|
"is_finetuning": is_finetuning,
|
|
261
277
|
}
|
|
@@ -357,14 +373,13 @@ def extract_attrs_for_llm_based_command_generator(
|
|
|
357
373
|
self: "LLMBasedCommandGenerator",
|
|
358
374
|
prompt: str,
|
|
359
375
|
) -> Dict[str, Any]:
|
|
360
|
-
from rasa.dialogue_understanding.generator.constants import DEFAULT_LLM_CONFIG
|
|
361
376
|
from rasa.dialogue_understanding.generator.flow_retrieval import (
|
|
362
377
|
DEFAULT_EMBEDDINGS_CONFIG,
|
|
363
378
|
)
|
|
364
379
|
|
|
365
380
|
attributes = extract_llm_config(
|
|
366
381
|
self,
|
|
367
|
-
default_llm_config=
|
|
382
|
+
default_llm_config=self.get_default_llm_config(),
|
|
368
383
|
default_embeddings_config=DEFAULT_EMBEDDINGS_CONFIG,
|
|
369
384
|
)
|
|
370
385
|
|
|
@@ -570,6 +585,67 @@ def extract_attrs_for_advance_flows(
|
|
|
570
585
|
}
|
|
571
586
|
|
|
572
587
|
|
|
588
|
+
def extract_attrs_for_du_print_test_results(
|
|
589
|
+
test_suite_result: DialogueUnderstandingTestSuiteResult,
|
|
590
|
+
output_prompt: bool,
|
|
591
|
+
) -> Dict[str, Any]:
|
|
592
|
+
"""Extract the attributes for
|
|
593
|
+
`rasa.dialogue_understanding_test.io.print_test_results` function.
|
|
594
|
+
"""
|
|
595
|
+
from rasa.tracing.instrumentation.instrumentation import (
|
|
596
|
+
DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
|
|
597
|
+
)
|
|
598
|
+
|
|
599
|
+
attributes_dict = {
|
|
600
|
+
"module_name": DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
|
|
601
|
+
OUTPUT_TEST_CASES_ACCURACY: test_suite_result.accuracy[KEY_TEST_CASES_ACCURACY],
|
|
602
|
+
OUTPUT_USER_UTTERANCES_ACCURACY: test_suite_result.accuracy[
|
|
603
|
+
KEY_USER_UTTERANCES_ACCURACY
|
|
604
|
+
],
|
|
605
|
+
OUTPUT_NUMBER_OF_PASSED_TESTS: test_suite_result.number_of_passed_tests,
|
|
606
|
+
OUTPUT_NUMBER_OF_FAILED_TESTS: test_suite_result.number_of_failed_tests,
|
|
607
|
+
OUTPUT_NUMBER_OF_PASSED_USER_UTTERANCES: test_suite_result.number_of_passed_user_utterances, # noqa: E501
|
|
608
|
+
OUTPUT_NUMBER_OF_FAILED_USER_UTTERANCES: test_suite_result.number_of_failed_user_utterances, # noqa: E501
|
|
609
|
+
OUTPUT_NAMES_OF_PASSED_TESTS: json.dumps(
|
|
610
|
+
test_suite_result.names_of_passed_tests
|
|
611
|
+
),
|
|
612
|
+
OUTPUT_NAMES_OF_FAILED_TESTS: json.dumps(
|
|
613
|
+
test_suite_result.names_of_failed_tests
|
|
614
|
+
),
|
|
615
|
+
}
|
|
616
|
+
if test_suite_result.command_metrics:
|
|
617
|
+
for (
|
|
618
|
+
command_name,
|
|
619
|
+
command_metric,
|
|
620
|
+
) in test_suite_result.command_metrics.items():
|
|
621
|
+
# OpenTelemetry / Honeycomb doesn't support dictionaries/json values,
|
|
622
|
+
# so we need to set the values as separate attributes
|
|
623
|
+
for metric_name, value in command_metric.as_dict().items():
|
|
624
|
+
attributes_dict[f"{command_name}_{metric_name}"] = value
|
|
625
|
+
|
|
626
|
+
if test_suite_result.llm_config:
|
|
627
|
+
# check if model group syntax is used
|
|
628
|
+
if MODELS_CONFIG_KEY in test_suite_result.llm_config:
|
|
629
|
+
for idx, model_group in enumerate(
|
|
630
|
+
test_suite_result.llm_config[MODELS_CONFIG_KEY]
|
|
631
|
+
):
|
|
632
|
+
for key, value in model_group.items():
|
|
633
|
+
if value is not None:
|
|
634
|
+
attributes_dict[f"llm_config_{idx}_{key}"] = value
|
|
635
|
+
else:
|
|
636
|
+
for key, value in test_suite_result.llm_config.items():
|
|
637
|
+
attributes_dict[f"llm_config_0_{key}"] = value
|
|
638
|
+
|
|
639
|
+
for key, value in test_suite_result.latency_metrics.items():
|
|
640
|
+
attributes_dict[f"{OUTPUT_LATENCY_METRICS}_{key}"] = value
|
|
641
|
+
for key, value in test_suite_result.prompt_token_metrics.items():
|
|
642
|
+
attributes_dict[f"{OUTPUT_PROMPT_TOKEN_METRICS}_{key}"] = value
|
|
643
|
+
for key, value in test_suite_result.completion_token_metrics.items():
|
|
644
|
+
attributes_dict[f"{OUTPUT_COMPLETION_TOKEN_METRICS}_{key}"] = value
|
|
645
|
+
|
|
646
|
+
return attributes_dict
|
|
647
|
+
|
|
648
|
+
|
|
573
649
|
def extract_attrs_for_run_step(
|
|
574
650
|
step: FlowStep,
|
|
575
651
|
flow: Flow,
|
|
@@ -577,6 +653,7 @@ def extract_attrs_for_run_step(
|
|
|
577
653
|
tracker: DialogueStateTracker,
|
|
578
654
|
available_actions: List[str],
|
|
579
655
|
flows: FlowsList,
|
|
656
|
+
previous_step_id: Text,
|
|
580
657
|
) -> Dict[str, Any]:
|
|
581
658
|
current_context = extract_current_context_attribute(stack)
|
|
582
659
|
|
|
@@ -585,6 +662,7 @@ def extract_attrs_for_run_step(
|
|
|
585
662
|
"step_description": step.description if step.description else "None",
|
|
586
663
|
"current_flow_id": flow.id,
|
|
587
664
|
"current_context": json.dumps(current_context),
|
|
665
|
+
"previous_step_id": previous_step_id,
|
|
588
666
|
}
|
|
589
667
|
|
|
590
668
|
|
|
@@ -644,8 +722,8 @@ def extract_attrs_for_intentless_policy_generate_llm_answer(
|
|
|
644
722
|
self: "IntentlessPolicy", llm: "BaseLLM", prompt: str
|
|
645
723
|
) -> Dict[str, Any]:
|
|
646
724
|
from rasa.core.policies.intentless_policy import (
|
|
647
|
-
DEFAULT_LLM_CONFIG,
|
|
648
725
|
DEFAULT_EMBEDDINGS_CONFIG,
|
|
726
|
+
DEFAULT_LLM_CONFIG,
|
|
649
727
|
)
|
|
650
728
|
|
|
651
729
|
attributes = extract_llm_config(
|
|
@@ -661,8 +739,8 @@ def extract_attrs_for_enterprise_search_generate_llm_answer(
|
|
|
661
739
|
self: "EnterpriseSearchPolicy", llm: "BaseLLM", prompt: str
|
|
662
740
|
) -> Dict[str, Any]:
|
|
663
741
|
from rasa.core.policies.enterprise_search_policy import (
|
|
664
|
-
DEFAULT_LLM_CONFIG,
|
|
665
742
|
DEFAULT_EMBEDDINGS_CONFIG,
|
|
743
|
+
DEFAULT_LLM_CONFIG,
|
|
666
744
|
)
|
|
667
745
|
|
|
668
746
|
attributes = extract_llm_config(
|