rasa-pro 3.11.4__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 +137 -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/Tableau10-1b767f5e.js +1 -0
- rasa/core/channels/inspector/dist/assets/arc-9f1365dc.js +1 -0
- rasa/core/channels/inspector/dist/assets/blockDiagram-38ab4fdb-e0f81b12.js +118 -0
- rasa/core/channels/inspector/dist/assets/c4Diagram-3d4e48cf-9deaee1c.js +10 -0
- rasa/core/channels/inspector/dist/assets/channel-44956714.js +1 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-70f12bd4-20450a96.js +2 -0
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-f2320105-749d2abf.js +2 -0
- rasa/core/channels/inspector/dist/assets/clone-a9475142.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-62fc7601-89c73b31.js → createText-2e5e7dd3-bef0b38c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/edges-e0da2a9e-943801a7.js +4 -0
- rasa/core/channels/inspector/dist/assets/{erDiagram-9d236eb7-907e0440.js → erDiagram-9861fffd-d523a948.js} +4 -4
- rasa/core/channels/inspector/dist/assets/flowDb-956e92f1-54e4cf19.js +10 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-66a62f08-48bfbbe8.js +4 -0
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-43fa749a.js +1 -0
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-4a651766-17c30827.js +139 -0
- rasa/core/channels/inspector/dist/assets/ganttDiagram-c361ad54-43086f2d.js +257 -0
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-72cf32ee-5c8b693e.js +70 -0
- rasa/core/channels/inspector/dist/assets/graph-41a90d26.js +1 -0
- rasa/core/channels/inspector/dist/assets/index-3862675e-b43eeae9.js +1 -0
- rasa/core/channels/inspector/dist/assets/{index-e793d777.js → index-e8affe45.js} +201 -196
- rasa/core/channels/inspector/dist/assets/{infoDiagram-736b4530-8ceba4db.js → infoDiagram-f8f76790-0b20676b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-df861f2b-960d3809.js → journeyDiagram-49397b02-39bce7b5.js} +4 -4
- rasa/core/channels/inspector/dist/assets/katex-498eb57e.js +261 -0
- rasa/core/channels/inspector/dist/assets/layout-dc8eeea4.js +1 -0
- rasa/core/channels/inspector/dist/assets/{line-eeccc4e2.js → line-c4d2e756.js} +1 -1
- rasa/core/channels/inspector/dist/assets/linear-86f6f2d9.js +1 -0
- rasa/core/channels/inspector/dist/assets/mindmap-definition-fc14e90a-4216f771.js +312 -0
- rasa/core/channels/inspector/dist/assets/{pieDiagram-dbbf0591-dc9b5e1b.js → pieDiagram-8a3498a8-1a0cfa96.js} +7 -7
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-4d7f4fd6-a08cba6d.js → quadrantDiagram-120e2f19-f91e67cf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-6fc4c22a-87242b9e.js → requirementDiagram-deff3bca-d4046bed.js} +2 -2
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-04a897e0-2cf6d1d7.js +8 -0
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-704730f1-751ac4f5.js +122 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-587899a1-f734f4d4.js +1 -0
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-d93cdb3a-91c65710.js +1 -0
- rasa/core/channels/inspector/dist/assets/{styles-9c745c82-cef936a6.js → styles-6aaf32cf-e0cff7be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/styles-9a916d00-c8029e5d.js +160 -0
- rasa/core/channels/inspector/dist/assets/styles-c10674c1-114f312a.js +116 -0
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-08f97a94-b7b9dc00.js +1 -0
- rasa/core/channels/inspector/dist/assets/{timeline-definition-5b62e21b-0d39bdb2.js → timeline-definition-85554ec2-9536d189.js} +3 -3
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-2b33534f-a03fa445.js → xychartDiagram-e933f94c-bf3b0f36.js} +3 -3
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +11 -3
- 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 +94 -99
- 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 +51 -32
- 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 +6 -3
- 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.4.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/arc-632a63ec.js +0 -1
- rasa/core/channels/inspector/dist/assets/c4Diagram-d0fbc5ce-081e0df4.js +0 -10
- rasa/core/channels/inspector/dist/assets/classDiagram-936ed81e-3df0afc2.js +0 -2
- rasa/core/channels/inspector/dist/assets/classDiagram-v2-c3cb15f1-8c5ed31e.js +0 -2
- rasa/core/channels/inspector/dist/assets/edges-f2ad444c-4fc48c3e.js +0 -4
- rasa/core/channels/inspector/dist/assets/flowDb-1972c806-9ec53a3c.js +0 -6
- rasa/core/channels/inspector/dist/assets/flowDiagram-7ea5b25a-41da787a.js +0 -4
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-855bc5b3-8bea338b.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowchart-elk-definition-abe16c3d-ce370633.js +0 -139
- rasa/core/channels/inspector/dist/assets/ganttDiagram-9b5ea136-90a36523.js +0 -266
- rasa/core/channels/inspector/dist/assets/gitGraphDiagram-99d0ae7c-41e1aa3f.js +0 -70
- rasa/core/channels/inspector/dist/assets/index-2c4b9a3b-e6f2af62.js +0 -1
- rasa/core/channels/inspector/dist/assets/layout-498807d8.js +0 -1
- rasa/core/channels/inspector/dist/assets/linear-8a078617.js +0 -1
- rasa/core/channels/inspector/dist/assets/mindmap-definition-beec6740-396d17dd.js +0 -109
- rasa/core/channels/inspector/dist/assets/sankeyDiagram-8f13d901-53f6f391.js +0 -8
- rasa/core/channels/inspector/dist/assets/sequenceDiagram-b655622a-715c9c20.js +0 -122
- rasa/core/channels/inspector/dist/assets/stateDiagram-59f0c015-2e8fb31f.js +0 -1
- rasa/core/channels/inspector/dist/assets/stateDiagram-v2-2b26beab-7e2d2aa0.js +0 -1
- rasa/core/channels/inspector/dist/assets/styles-080da4f6-4420cea6.js +0 -110
- rasa/core/channels/inspector/dist/assets/styles-3dcbcfbf-28676cf4.js +0 -159
- rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-151251e9.js +0 -1
- rasa_pro-3.11.4.dist-info/RECORD +0 -779
- /rasa/dialogue_understanding/generator/{single_step → prompt_templates}/command_prompt_template.jinja2 +0 -0
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.11.4.dist-info → rasa_pro-3.12.0.dist-info}/entry_points.txt +0 -0
|
@@ -2,6 +2,7 @@ import importlib.resources
|
|
|
2
2
|
import json
|
|
3
3
|
import re
|
|
4
4
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text
|
|
5
|
+
|
|
5
6
|
import dotenv
|
|
6
7
|
import structlog
|
|
7
8
|
from jinja2 import Template
|
|
@@ -16,8 +17,8 @@ from rasa.core.constants import (
|
|
|
16
17
|
)
|
|
17
18
|
from rasa.core.information_retrieval import (
|
|
18
19
|
InformationRetrieval,
|
|
19
|
-
SearchResult,
|
|
20
20
|
InformationRetrievalException,
|
|
21
|
+
SearchResult,
|
|
21
22
|
create_from_endpoint_config,
|
|
22
23
|
)
|
|
23
24
|
from rasa.core.information_retrieval.faiss import FAISS_Store
|
|
@@ -34,9 +35,9 @@ from rasa.dialogue_understanding.patterns.internal_error import (
|
|
|
34
35
|
)
|
|
35
36
|
from rasa.dialogue_understanding.stack.frames import (
|
|
36
37
|
DialogueStackFrame,
|
|
38
|
+
PatternFlowStackFrame,
|
|
37
39
|
SearchStackFrame,
|
|
38
40
|
)
|
|
39
|
-
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
40
41
|
from rasa.engine.graph import ExecutionContext
|
|
41
42
|
from rasa.engine.recipes.default_recipe import DefaultV1Recipe
|
|
42
43
|
from rasa.engine.storage.resource import Resource
|
|
@@ -46,12 +47,12 @@ from rasa.graph_components.providers.responses_provider import Responses
|
|
|
46
47
|
from rasa.shared.constants import (
|
|
47
48
|
EMBEDDINGS_CONFIG_KEY,
|
|
48
49
|
MODEL_CONFIG_KEY,
|
|
50
|
+
MODEL_GROUP_ID_CONFIG_KEY,
|
|
51
|
+
MODEL_NAME_CONFIG_KEY,
|
|
52
|
+
OPENAI_PROVIDER,
|
|
49
53
|
PROMPT_CONFIG_KEY,
|
|
50
54
|
PROVIDER_CONFIG_KEY,
|
|
51
|
-
OPENAI_PROVIDER,
|
|
52
55
|
TIMEOUT_CONFIG_KEY,
|
|
53
|
-
MODEL_NAME_CONFIG_KEY,
|
|
54
|
-
MODEL_GROUP_ID_CONFIG_KEY,
|
|
55
56
|
)
|
|
56
57
|
from rasa.shared.core.constants import (
|
|
57
58
|
ACTION_CANCEL_FLOW,
|
|
@@ -59,15 +60,23 @@ from rasa.shared.core.constants import (
|
|
|
59
60
|
DEFAULT_SLOT_NAMES,
|
|
60
61
|
)
|
|
61
62
|
from rasa.shared.core.domain import Domain
|
|
62
|
-
from rasa.shared.core.events import Event, UserUttered
|
|
63
|
+
from rasa.shared.core.events import BotUttered, Event, UserUttered
|
|
63
64
|
from rasa.shared.core.generator import TrackerWithCachedStates
|
|
64
65
|
from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
|
|
65
|
-
from rasa.shared.exceptions import
|
|
66
|
+
from rasa.shared.exceptions import FileIOException, RasaException
|
|
67
|
+
from rasa.shared.nlu.constants import (
|
|
68
|
+
KEY_COMPONENT_NAME,
|
|
69
|
+
KEY_LLM_RESPONSE_METADATA,
|
|
70
|
+
KEY_PROMPT_NAME,
|
|
71
|
+
KEY_USER_PROMPT,
|
|
72
|
+
PROMPTS,
|
|
73
|
+
)
|
|
66
74
|
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
67
75
|
from rasa.shared.providers.embedding._langchain_embedding_client_adapter import (
|
|
68
76
|
_LangchainEmbeddingClientAdapter,
|
|
69
77
|
)
|
|
70
78
|
from rasa.shared.providers.llm.llm_client import LLMClient
|
|
79
|
+
from rasa.shared.providers.llm.llm_response import LLMResponse, measure_llm_latency
|
|
71
80
|
from rasa.shared.utils.cli import print_error_and_exit
|
|
72
81
|
from rasa.shared.utils.health_check.embeddings_health_check_mixin import (
|
|
73
82
|
EmbeddingsHealthCheckMixin,
|
|
@@ -80,9 +89,9 @@ from rasa.shared.utils.llm import (
|
|
|
80
89
|
embedder_factory,
|
|
81
90
|
get_prompt_template,
|
|
82
91
|
llm_factory,
|
|
92
|
+
resolve_model_client_config,
|
|
83
93
|
sanitize_message_for_prompt,
|
|
84
94
|
tracker_as_readable_transcript,
|
|
85
|
-
resolve_model_client_config,
|
|
86
95
|
)
|
|
87
96
|
from rasa.telemetry import (
|
|
88
97
|
track_enterprise_search_policy_predict,
|
|
@@ -92,6 +101,7 @@ from rasa.telemetry import (
|
|
|
92
101
|
|
|
93
102
|
if TYPE_CHECKING:
|
|
94
103
|
from langchain.schema.embeddings import Embeddings
|
|
104
|
+
|
|
95
105
|
from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
|
|
96
106
|
|
|
97
107
|
from rasa.utils.log_utils import log_llm
|
|
@@ -272,6 +282,43 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
272
282
|
# Wrap the embedding client in the adapter
|
|
273
283
|
return _LangchainEmbeddingClientAdapter(client)
|
|
274
284
|
|
|
285
|
+
@classmethod
|
|
286
|
+
def _add_prompt_and_llm_response_to_latest_message(
|
|
287
|
+
cls,
|
|
288
|
+
tracker: DialogueStateTracker,
|
|
289
|
+
prompt_name: str,
|
|
290
|
+
user_prompt: str,
|
|
291
|
+
llm_response: Optional[LLMResponse] = None,
|
|
292
|
+
) -> None:
|
|
293
|
+
"""Stores the prompt and LLMResponse metadata in the tracker.
|
|
294
|
+
|
|
295
|
+
Args:
|
|
296
|
+
tracker: The DialogueStateTracker containing the current conversation state.
|
|
297
|
+
prompt_name: A name identifying prompt usage.
|
|
298
|
+
user_prompt: The user prompt that was sent to the LLM.
|
|
299
|
+
llm_response: The response object from the LLM (None if no response).
|
|
300
|
+
"""
|
|
301
|
+
from rasa.dialogue_understanding.utils import record_commands_and_prompts
|
|
302
|
+
|
|
303
|
+
if not record_commands_and_prompts:
|
|
304
|
+
return
|
|
305
|
+
|
|
306
|
+
if not tracker.latest_message:
|
|
307
|
+
return
|
|
308
|
+
|
|
309
|
+
parse_data = tracker.latest_message.parse_data
|
|
310
|
+
if PROMPTS not in parse_data:
|
|
311
|
+
parse_data[PROMPTS] = [] # type: ignore[literal-required]
|
|
312
|
+
|
|
313
|
+
prompt_data: Dict[Text, Any] = {
|
|
314
|
+
KEY_COMPONENT_NAME: cls.__name__,
|
|
315
|
+
KEY_PROMPT_NAME: prompt_name,
|
|
316
|
+
KEY_USER_PROMPT: user_prompt,
|
|
317
|
+
KEY_LLM_RESPONSE_METADATA: llm_response.to_dict() if llm_response else None,
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
parse_data[PROMPTS].append(prompt_data) # type: ignore[literal-required]
|
|
321
|
+
|
|
275
322
|
def train( # type: ignore[override]
|
|
276
323
|
self,
|
|
277
324
|
training_trackers: List[TrackerWithCachedStates],
|
|
@@ -498,13 +545,27 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
498
545
|
|
|
499
546
|
if self.use_llm:
|
|
500
547
|
prompt = self._render_prompt(tracker, documents.results)
|
|
501
|
-
|
|
548
|
+
llm_response = await self._generate_llm_answer(llm, prompt)
|
|
549
|
+
llm_response = LLMResponse.ensure_llm_response(llm_response)
|
|
550
|
+
|
|
551
|
+
self._add_prompt_and_llm_response_to_latest_message(
|
|
552
|
+
tracker=tracker,
|
|
553
|
+
prompt_name="enterprise_search_prompt",
|
|
554
|
+
user_prompt=prompt,
|
|
555
|
+
llm_response=llm_response,
|
|
556
|
+
)
|
|
557
|
+
|
|
558
|
+
if llm_response is None or not llm_response.choices:
|
|
559
|
+
logger.debug(f"{logger_key}.no_llm_response")
|
|
560
|
+
response = None
|
|
561
|
+
else:
|
|
562
|
+
llm_answer = llm_response.choices[0]
|
|
502
563
|
|
|
503
|
-
|
|
504
|
-
|
|
564
|
+
if self.citation_enabled:
|
|
565
|
+
llm_answer = self.post_process_citations(llm_answer)
|
|
505
566
|
|
|
506
|
-
|
|
507
|
-
|
|
567
|
+
logger.debug(f"{logger_key}.llm_answer", llm_answer=llm_answer)
|
|
568
|
+
response = llm_answer
|
|
508
569
|
else:
|
|
509
570
|
response = documents.results[0].metadata.get("answer", None)
|
|
510
571
|
if not response:
|
|
@@ -516,7 +577,6 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
516
577
|
"enterprise_search_policy.predict_action_probabilities.no_llm",
|
|
517
578
|
search_results=documents,
|
|
518
579
|
)
|
|
519
|
-
|
|
520
580
|
if response is None:
|
|
521
581
|
return self._create_prediction_internal_error(domain, tracker)
|
|
522
582
|
|
|
@@ -579,12 +639,21 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
579
639
|
)
|
|
580
640
|
return prompt
|
|
581
641
|
|
|
642
|
+
@measure_llm_latency
|
|
582
643
|
async def _generate_llm_answer(
|
|
583
644
|
self, llm: LLMClient, prompt: Text
|
|
584
|
-
) -> Optional[
|
|
645
|
+
) -> Optional[LLMResponse]:
|
|
646
|
+
"""Fetches an LLM completion for the provided prompt.
|
|
647
|
+
|
|
648
|
+
Args:
|
|
649
|
+
llm: The LLM client used to get the completion.
|
|
650
|
+
prompt: The prompt text to send to the model.
|
|
651
|
+
|
|
652
|
+
Returns:
|
|
653
|
+
An LLMResponse object, or None if the call fails.
|
|
654
|
+
"""
|
|
585
655
|
try:
|
|
586
|
-
|
|
587
|
-
llm_answer = llm_response.choices[0]
|
|
656
|
+
return await llm.acompletion(prompt)
|
|
588
657
|
except Exception as e:
|
|
589
658
|
# unfortunately, langchain does not wrap LLM exceptions which means
|
|
590
659
|
# we have to catch all exceptions here
|
|
@@ -592,9 +661,7 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
592
661
|
"enterprise_search_policy._generate_llm_answer.llm_error",
|
|
593
662
|
error=e,
|
|
594
663
|
)
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
return llm_answer
|
|
664
|
+
return None
|
|
598
665
|
|
|
599
666
|
def _create_prediction(
|
|
600
667
|
self,
|
|
@@ -692,7 +759,6 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
692
759
|
**kwargs: Any,
|
|
693
760
|
) -> "EnterpriseSearchPolicy":
|
|
694
761
|
"""Loads a trained policy (see parent class for full docstring)."""
|
|
695
|
-
|
|
696
762
|
# Perform health checks for both LLM and embeddings client configs
|
|
697
763
|
cls._perform_health_checks(config, "enterprise_search_policy.load")
|
|
698
764
|
|
|
@@ -4,7 +4,7 @@ If the answer is not known or cannot be determined from the provided documents o
|
|
|
4
4
|
Use the following documents to answer the question:
|
|
5
5
|
{% for doc in docs %}
|
|
6
6
|
{{ loop.cycle("*")}}. {{ doc.metadata }}
|
|
7
|
-
{{ doc.
|
|
7
|
+
{{ doc.text }}
|
|
8
8
|
{% endfor %}
|
|
9
9
|
|
|
10
10
|
{% if citation_enabled %}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any, Dict,
|
|
4
|
-
|
|
3
|
+
from typing import Any, Dict, List, Optional, Text
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
5
6
|
|
|
7
|
+
from rasa.core.constants import (
|
|
8
|
+
FLOW_POLICY_PRIORITY,
|
|
9
|
+
POLICY_MAX_HISTORY,
|
|
10
|
+
POLICY_PRIORITY,
|
|
11
|
+
)
|
|
12
|
+
from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
|
|
13
|
+
from rasa.core.policies.flows import flow_executor
|
|
6
14
|
from rasa.core.policies.flows.flow_exceptions import FlowCircuitBreakerTrippedException
|
|
15
|
+
from rasa.core.policies.policy import Policy, PolicyPrediction
|
|
7
16
|
from rasa.dialogue_understanding.patterns.internal_error import (
|
|
8
17
|
InternalErrorPatternFlowStackFrame,
|
|
9
18
|
)
|
|
@@ -14,27 +23,17 @@ from rasa.dialogue_understanding.stack.frames import (
|
|
|
14
23
|
from rasa.dialogue_understanding.stack.utils import (
|
|
15
24
|
end_top_user_flow,
|
|
16
25
|
)
|
|
17
|
-
|
|
18
|
-
from rasa.core.constants import (
|
|
19
|
-
FLOW_POLICY_PRIORITY,
|
|
20
|
-
POLICY_MAX_HISTORY,
|
|
21
|
-
POLICY_PRIORITY,
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
from rasa.shared.core.events import Event
|
|
25
|
-
from rasa.shared.core.flows import FlowsList
|
|
26
|
-
from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
|
|
27
|
-
from rasa.core.policies.policy import Policy, PolicyPrediction
|
|
28
26
|
from rasa.engine.graph import ExecutionContext
|
|
29
27
|
from rasa.engine.recipes.default_recipe import DefaultV1Recipe
|
|
30
28
|
from rasa.engine.storage.resource import Resource
|
|
31
29
|
from rasa.engine.storage.storage import ModelStorage
|
|
32
30
|
from rasa.shared.core.domain import Domain
|
|
31
|
+
from rasa.shared.core.events import Event
|
|
32
|
+
from rasa.shared.core.flows import FlowsList
|
|
33
33
|
from rasa.shared.core.generator import TrackerWithCachedStates
|
|
34
34
|
from rasa.shared.core.trackers import (
|
|
35
35
|
DialogueStateTracker,
|
|
36
36
|
)
|
|
37
|
-
import structlog
|
|
38
37
|
|
|
39
38
|
structlogger = structlog.get_logger()
|
|
40
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any, Dict,
|
|
3
|
+
from typing import Any, Dict, List, Optional, Text
|
|
4
4
|
|
|
5
5
|
import structlog
|
|
6
6
|
from jinja2 import Template
|
|
@@ -9,20 +9,21 @@ from structlog.contextvars import (
|
|
|
9
9
|
bound_contextvars,
|
|
10
10
|
)
|
|
11
11
|
|
|
12
|
-
from rasa.core.constants import
|
|
12
|
+
from rasa.core.constants import ACTIVE_FLOW_METADATA_KEY, STEP_ID_METADATA_KEY
|
|
13
13
|
from rasa.core.policies.flows.flow_exceptions import (
|
|
14
14
|
FlowCircuitBreakerTrippedException,
|
|
15
15
|
FlowException,
|
|
16
16
|
NoNextStepInFlowException,
|
|
17
17
|
)
|
|
18
18
|
from rasa.core.policies.flows.flow_step_result import (
|
|
19
|
-
FlowActionPrediction,
|
|
20
19
|
ContinueFlowWithNextStep,
|
|
20
|
+
FlowActionPrediction,
|
|
21
21
|
FlowStepResult,
|
|
22
22
|
PauseFlowReturnPrediction,
|
|
23
23
|
)
|
|
24
24
|
from rasa.dialogue_understanding.commands import CancelFlowCommand
|
|
25
25
|
from rasa.dialogue_understanding.patterns.cancel import CancelPatternFlowStackFrame
|
|
26
|
+
from rasa.dialogue_understanding.patterns.clarify import ClarifyPatternFlowStackFrame
|
|
26
27
|
from rasa.dialogue_understanding.patterns.collect_information import (
|
|
27
28
|
CollectInformationPatternFlowStackFrame,
|
|
28
29
|
)
|
|
@@ -50,9 +51,12 @@ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
|
50
51
|
)
|
|
51
52
|
from rasa.dialogue_understanding.stack.utils import (
|
|
52
53
|
top_user_flow_frame,
|
|
54
|
+
user_flows_on_the_stack,
|
|
53
55
|
)
|
|
54
56
|
from rasa.shared.constants import RASA_PATTERN_HUMAN_HANDOFF
|
|
55
|
-
from rasa.shared.core.constants import
|
|
57
|
+
from rasa.shared.core.constants import (
|
|
58
|
+
ACTION_LISTEN_NAME,
|
|
59
|
+
)
|
|
56
60
|
from rasa.shared.core.events import (
|
|
57
61
|
Event,
|
|
58
62
|
FlowCompleted,
|
|
@@ -67,22 +71,22 @@ from rasa.shared.core.flows.flow import (
|
|
|
67
71
|
FlowStep,
|
|
68
72
|
)
|
|
69
73
|
from rasa.shared.core.flows.flow_step_links import (
|
|
70
|
-
StaticFlowStepLink,
|
|
71
|
-
IfFlowStepLink,
|
|
72
74
|
ElseFlowStepLink,
|
|
75
|
+
IfFlowStepLink,
|
|
76
|
+
StaticFlowStepLink,
|
|
73
77
|
)
|
|
74
78
|
from rasa.shared.core.flows.steps import (
|
|
75
79
|
ActionFlowStep,
|
|
76
|
-
SetSlotsFlowStep,
|
|
77
|
-
LinkFlowStep,
|
|
78
|
-
ContinueFlowStep,
|
|
79
|
-
EndFlowStep,
|
|
80
80
|
CallFlowStep,
|
|
81
81
|
CollectInformationFlowStep,
|
|
82
|
+
ContinueFlowStep,
|
|
83
|
+
EndFlowStep,
|
|
84
|
+
LinkFlowStep,
|
|
82
85
|
NoOperationFlowStep,
|
|
86
|
+
SetSlotsFlowStep,
|
|
83
87
|
)
|
|
84
|
-
from rasa.shared.core.flows.steps.
|
|
85
|
-
from rasa.shared.core.slots import Slot
|
|
88
|
+
from rasa.shared.core.flows.steps.constants import START_STEP
|
|
89
|
+
from rasa.shared.core.slots import Slot, SlotRejection
|
|
86
90
|
from rasa.shared.core.trackers import (
|
|
87
91
|
DialogueStateTracker,
|
|
88
92
|
)
|
|
@@ -238,7 +242,10 @@ def events_for_collect_step_execution(
|
|
|
238
242
|
|
|
239
243
|
|
|
240
244
|
def trigger_pattern_continue_interrupted(
|
|
241
|
-
current_frame: DialogueStackFrame,
|
|
245
|
+
current_frame: DialogueStackFrame,
|
|
246
|
+
stack: DialogueStack,
|
|
247
|
+
flows: FlowsList,
|
|
248
|
+
tracker: DialogueStateTracker,
|
|
242
249
|
) -> List[Event]:
|
|
243
250
|
"""Trigger the pattern to continue an interrupted flow if needed."""
|
|
244
251
|
events: List[Event] = []
|
|
@@ -261,7 +268,9 @@ def trigger_pattern_continue_interrupted(
|
|
|
261
268
|
):
|
|
262
269
|
stack.push(
|
|
263
270
|
ContinueInterruptedPatternFlowStackFrame(
|
|
264
|
-
previous_flow_name=interrupted_user_flow.readable_name(
|
|
271
|
+
previous_flow_name=interrupted_user_flow.readable_name(
|
|
272
|
+
language=tracker.current_language
|
|
273
|
+
),
|
|
265
274
|
)
|
|
266
275
|
)
|
|
267
276
|
events.append(
|
|
@@ -271,6 +280,33 @@ def trigger_pattern_continue_interrupted(
|
|
|
271
280
|
return events
|
|
272
281
|
|
|
273
282
|
|
|
283
|
+
def trigger_pattern_clarification(
|
|
284
|
+
current_frame: DialogueStackFrame, stack: DialogueStack, flows: FlowsList
|
|
285
|
+
) -> None:
|
|
286
|
+
"""Trigger the pattern to clarify which topic to continue if needed."""
|
|
287
|
+
if not isinstance(current_frame, UserFlowStackFrame):
|
|
288
|
+
return None
|
|
289
|
+
|
|
290
|
+
if current_frame.frame_type in [
|
|
291
|
+
FlowStackFrameType.CALL,
|
|
292
|
+
FlowStackFrameType.INTERRUPT,
|
|
293
|
+
]:
|
|
294
|
+
# we want to return to the flow that called
|
|
295
|
+
# the current flow or the flow that was interrupted
|
|
296
|
+
# by the current flow
|
|
297
|
+
return None
|
|
298
|
+
|
|
299
|
+
pending_flows = [
|
|
300
|
+
flows.flow_by_id(frame.flow_id)
|
|
301
|
+
for frame in stack.frames
|
|
302
|
+
if isinstance(frame, UserFlowStackFrame)
|
|
303
|
+
and frame.flow_id != current_frame.flow_id
|
|
304
|
+
]
|
|
305
|
+
|
|
306
|
+
flow_names = [flow.readable_name() for flow in pending_flows if flow is not None]
|
|
307
|
+
stack.push(ClarifyPatternFlowStackFrame(names=flow_names))
|
|
308
|
+
|
|
309
|
+
|
|
274
310
|
def trigger_pattern_completed(
|
|
275
311
|
current_frame: DialogueStackFrame, stack: DialogueStack, flows: FlowsList
|
|
276
312
|
) -> None:
|
|
@@ -282,6 +318,9 @@ def trigger_pattern_completed(
|
|
|
282
318
|
or isinstance(current_frame, SearchPatternFlowStackFrame)
|
|
283
319
|
):
|
|
284
320
|
completed_flow = current_frame.flow(flows)
|
|
321
|
+
if not completed_flow.run_pattern_completed:
|
|
322
|
+
return
|
|
323
|
+
|
|
285
324
|
completed_flow_name = completed_flow.readable_name() if completed_flow else None
|
|
286
325
|
stack.push(
|
|
287
326
|
CompletedPatternFlowStackFrame(
|
|
@@ -316,7 +355,7 @@ def reset_scoped_slots(
|
|
|
316
355
|
def _reset_slot(slot_name: Text, dialogue_tracker: DialogueStateTracker) -> None:
|
|
317
356
|
slot = dialogue_tracker.slots.get(slot_name, None)
|
|
318
357
|
initial_value = slot.initial_value if slot else None
|
|
319
|
-
events.append(SlotSet(slot_name, initial_value))
|
|
358
|
+
events.append(SlotSet(slot_name, initial_value, metadata={"reset": True}))
|
|
320
359
|
|
|
321
360
|
if (
|
|
322
361
|
isinstance(current_frame, UserFlowStackFrame)
|
|
@@ -448,6 +487,7 @@ def advance_flows_until_next_action(
|
|
|
448
487
|
tracker,
|
|
449
488
|
available_actions,
|
|
450
489
|
flows,
|
|
490
|
+
previous_step_id,
|
|
451
491
|
)
|
|
452
492
|
new_events = step_result.events
|
|
453
493
|
if (
|
|
@@ -464,6 +504,9 @@ def advance_flows_until_next_action(
|
|
|
464
504
|
new_events.insert(
|
|
465
505
|
idx, FlowCompleted(active_frame.flow_id, previous_step_id)
|
|
466
506
|
)
|
|
507
|
+
attach_stack_metadata_to_events(
|
|
508
|
+
next_step.id, current_flow.id, new_events
|
|
509
|
+
)
|
|
467
510
|
tracker.update_stack(step_stack)
|
|
468
511
|
tracker.update_with_events(new_events)
|
|
469
512
|
|
|
@@ -535,36 +578,15 @@ def cancel_flow_and_push_internal_error(stack: DialogueStack, flow_name: str) ->
|
|
|
535
578
|
stack.push(InternalErrorPatternFlowStackFrame())
|
|
536
579
|
|
|
537
580
|
|
|
538
|
-
def
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
If invalid, trigger pattern_internal_error and return False.
|
|
548
|
-
"""
|
|
549
|
-
slot = tracker.slots.get(step.collect, None)
|
|
550
|
-
slot_mappings = slot.mappings if slot else []
|
|
551
|
-
for mapping in slot_mappings:
|
|
552
|
-
if (
|
|
553
|
-
mapping.get("type") == SlotMappingType.CUSTOM.value
|
|
554
|
-
and mapping.get("action") is None
|
|
555
|
-
):
|
|
556
|
-
# this is a slot that must be filled by a custom action
|
|
557
|
-
# check if collect_action exists
|
|
558
|
-
if step.collect_action not in available_actions:
|
|
559
|
-
structlogger.error(
|
|
560
|
-
"flow.step.run.collect_action_not_found_for_custom_slot_mapping",
|
|
561
|
-
action=step.collect_action,
|
|
562
|
-
collect=step.collect,
|
|
563
|
-
)
|
|
564
|
-
cancel_flow_and_push_internal_error(stack, flow_name)
|
|
565
|
-
return False
|
|
566
|
-
|
|
567
|
-
return True
|
|
581
|
+
def attach_stack_metadata_to_events(
|
|
582
|
+
step_id: str,
|
|
583
|
+
flow_id: str,
|
|
584
|
+
events: List[Event],
|
|
585
|
+
) -> None:
|
|
586
|
+
"""Attach the stack metadata to the events."""
|
|
587
|
+
for event in events:
|
|
588
|
+
event.metadata[STEP_ID_METADATA_KEY] = step_id
|
|
589
|
+
event.metadata[ACTIVE_FLOW_METADATA_KEY] = flow_id
|
|
568
590
|
|
|
569
591
|
|
|
570
592
|
def run_step(
|
|
@@ -574,6 +596,7 @@ def run_step(
|
|
|
574
596
|
tracker: DialogueStateTracker,
|
|
575
597
|
available_actions: List[str],
|
|
576
598
|
flows: FlowsList,
|
|
599
|
+
previous_step_id: str,
|
|
577
600
|
) -> FlowStepResult:
|
|
578
601
|
"""Run a single step of a flow.
|
|
579
602
|
|
|
@@ -591,12 +614,19 @@ def run_step(
|
|
|
591
614
|
tracker: The tracker to run the step on.
|
|
592
615
|
available_actions: The actions that are available in the domain.
|
|
593
616
|
flows: All flows.
|
|
617
|
+
previous_step_id: The ID of the previous step.
|
|
594
618
|
|
|
595
619
|
Returns:
|
|
596
620
|
A result of running the step describing where to transition to.
|
|
597
621
|
"""
|
|
598
622
|
initial_events: List[Event] = []
|
|
599
|
-
if
|
|
623
|
+
if previous_step_id == START_STEP:
|
|
624
|
+
# if the previous step id is the start step, we need to add a flow
|
|
625
|
+
# started event to the initial events.
|
|
626
|
+
# we can't use the current step to check this, as the current step is the
|
|
627
|
+
# first step in the flow -> other steps might link to this flow, so the
|
|
628
|
+
# only reliable way to check if we are starting a new flow is checking for
|
|
629
|
+
# the START_STEP meta step
|
|
600
630
|
initial_events.append(FlowStarted(flow.id, metadata=stack.current_context()))
|
|
601
631
|
|
|
602
632
|
if isinstance(step, CollectInformationFlowStep):
|
|
@@ -645,7 +675,15 @@ def _run_end_step(
|
|
|
645
675
|
structlogger.debug("flow.step.run.flow_end")
|
|
646
676
|
current_frame = stack.pop()
|
|
647
677
|
trigger_pattern_completed(current_frame, stack, flows)
|
|
648
|
-
resumed_events =
|
|
678
|
+
resumed_events = []
|
|
679
|
+
if len(user_flows_on_the_stack(stack)) > 1:
|
|
680
|
+
# if there are more user flows on the stack,
|
|
681
|
+
# we need to trigger the pattern clarify
|
|
682
|
+
trigger_pattern_clarification(current_frame, stack, flows)
|
|
683
|
+
else:
|
|
684
|
+
resumed_events = trigger_pattern_continue_interrupted(
|
|
685
|
+
current_frame, stack, flows, tracker
|
|
686
|
+
)
|
|
649
687
|
reset_events: List[Event] = reset_scoped_slots(current_frame, flow, tracker)
|
|
650
688
|
return ContinueFlowWithNextStep(
|
|
651
689
|
events=initial_events + reset_events + resumed_events, has_flow_ended=True
|
|
@@ -736,14 +774,6 @@ def _run_collect_information_step(
|
|
|
736
774
|
# if we return any other FlowStepResult, the assistant will stay silent
|
|
737
775
|
# instead of triggering the internal error pattern
|
|
738
776
|
return ContinueFlowWithNextStep(events=initial_events)
|
|
739
|
-
is_mapping_valid = validate_custom_slot_mappings(
|
|
740
|
-
step, stack, tracker, available_actions, flow_name
|
|
741
|
-
)
|
|
742
|
-
|
|
743
|
-
if not is_mapping_valid:
|
|
744
|
-
# if we return any other FlowStepResult, the assistant will stay silent
|
|
745
|
-
# instead of triggering the internal error pattern
|
|
746
|
-
return ContinueFlowWithNextStep(events=initial_events)
|
|
747
777
|
|
|
748
778
|
structlogger.debug("flow.step.run.collect")
|
|
749
779
|
trigger_pattern_ask_collect_information(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import importlib.resources
|
|
2
2
|
import math
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
|
-
from typing import Any, Dict, List, Optional, Set,
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Text, Tuple
|
|
5
5
|
|
|
6
6
|
import structlog
|
|
7
7
|
import tiktoken
|
|
@@ -30,19 +30,18 @@ from rasa.engine.storage.storage import ModelStorage
|
|
|
30
30
|
from rasa.graph_components.providers.forms_provider import Forms
|
|
31
31
|
from rasa.graph_components.providers.responses_provider import Responses
|
|
32
32
|
from rasa.shared.constants import (
|
|
33
|
-
REQUIRED_SLOTS_KEY,
|
|
34
33
|
EMBEDDINGS_CONFIG_KEY,
|
|
35
34
|
LLM_CONFIG_KEY,
|
|
36
35
|
MODEL_CONFIG_KEY,
|
|
36
|
+
MODEL_GROUP_ID_CONFIG_KEY,
|
|
37
37
|
MODEL_NAME_CONFIG_KEY,
|
|
38
|
+
OPENAI_PROVIDER,
|
|
38
39
|
PROMPT_CONFIG_KEY,
|
|
39
40
|
PROVIDER_CONFIG_KEY,
|
|
40
|
-
|
|
41
|
+
REQUIRED_SLOTS_KEY,
|
|
41
42
|
TIMEOUT_CONFIG_KEY,
|
|
42
|
-
MODEL_GROUP_ID_CONFIG_KEY,
|
|
43
43
|
)
|
|
44
|
-
from rasa.shared.core.constants import ACTION_LISTEN_NAME
|
|
45
|
-
from rasa.shared.core.constants import ACTION_TRIGGER_CHITCHAT
|
|
44
|
+
from rasa.shared.core.constants import ACTION_LISTEN_NAME, ACTION_TRIGGER_CHITCHAT
|
|
46
45
|
from rasa.shared.core.domain import KEY_RESPONSES_TEXT, Domain
|
|
47
46
|
from rasa.shared.core.events import (
|
|
48
47
|
ActionExecuted,
|
|
@@ -75,9 +74,9 @@ from rasa.shared.utils.llm import (
|
|
|
75
74
|
embedder_factory,
|
|
76
75
|
get_prompt_template,
|
|
77
76
|
llm_factory,
|
|
77
|
+
resolve_model_client_config,
|
|
78
78
|
sanitize_message_for_prompt,
|
|
79
79
|
tracker_as_readable_transcript,
|
|
80
|
-
resolve_model_client_config,
|
|
81
80
|
)
|
|
82
81
|
from rasa.utils.log_utils import log_llm
|
|
83
82
|
from rasa.utils.ml_utils import (
|
|
@@ -1,39 +1,41 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
import copy
|
|
3
|
-
import zlib
|
|
4
2
|
|
|
5
3
|
import base64
|
|
4
|
+
import copy
|
|
6
5
|
import json
|
|
7
6
|
import logging
|
|
8
|
-
import
|
|
7
|
+
import zlib
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Any, Dict, List, Optional, Text
|
|
9
10
|
|
|
11
|
+
import structlog
|
|
10
12
|
from tqdm import tqdm
|
|
11
|
-
from typing import Optional, Any, Dict, List, Text
|
|
12
|
-
from pathlib import Path
|
|
13
13
|
|
|
14
|
-
import rasa.utils.io
|
|
15
14
|
import rasa.shared.utils.io
|
|
15
|
+
import rasa.utils.io
|
|
16
|
+
from rasa.core.constants import (
|
|
17
|
+
DEFAULT_MAX_HISTORY,
|
|
18
|
+
MEMOIZATION_POLICY_PRIORITY,
|
|
19
|
+
POLICY_MAX_HISTORY,
|
|
20
|
+
POLICY_PRIORITY,
|
|
21
|
+
)
|
|
22
|
+
from rasa.core.featurizers.tracker_featurizers import (
|
|
23
|
+
FEATURIZER_FILE,
|
|
24
|
+
MaxHistoryTrackerFeaturizer,
|
|
25
|
+
TrackerFeaturizer,
|
|
26
|
+
)
|
|
27
|
+
from rasa.core.policies.policy import Policy, PolicyPrediction, SupportedData
|
|
16
28
|
from rasa.engine.graph import ExecutionContext
|
|
17
29
|
from rasa.engine.recipes.default_recipe import DefaultV1Recipe
|
|
18
30
|
from rasa.engine.storage.resource import Resource
|
|
19
31
|
from rasa.engine.storage.storage import ModelStorage
|
|
20
|
-
from rasa.shared.core.
|
|
32
|
+
from rasa.shared.core.constants import ACTION_LISTEN_NAME
|
|
33
|
+
from rasa.shared.core.domain import Domain, State
|
|
21
34
|
from rasa.shared.core.events import ActionExecuted
|
|
22
|
-
from rasa.core.featurizers.tracker_featurizers import TrackerFeaturizer
|
|
23
|
-
from rasa.core.featurizers.tracker_featurizers import MaxHistoryTrackerFeaturizer
|
|
24
|
-
from rasa.core.featurizers.tracker_featurizers import FEATURIZER_FILE
|
|
25
|
-
from rasa.shared.exceptions import FileIOException
|
|
26
|
-
from rasa.core.policies.policy import PolicyPrediction, Policy, SupportedData
|
|
27
|
-
from rasa.shared.core.trackers import DialogueStateTracker
|
|
28
35
|
from rasa.shared.core.generator import TrackerWithCachedStates
|
|
36
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
37
|
+
from rasa.shared.exceptions import FileIOException
|
|
29
38
|
from rasa.shared.utils.io import is_logging_disabled
|
|
30
|
-
from rasa.core.constants import (
|
|
31
|
-
MEMOIZATION_POLICY_PRIORITY,
|
|
32
|
-
DEFAULT_MAX_HISTORY,
|
|
33
|
-
POLICY_MAX_HISTORY,
|
|
34
|
-
POLICY_PRIORITY,
|
|
35
|
-
)
|
|
36
|
-
from rasa.shared.core.constants import ACTION_LISTEN_NAME
|
|
37
39
|
|
|
38
40
|
logger = logging.getLogger(__name__)
|
|
39
41
|
structlogger = structlog.get_logger()
|