rasa-pro 3.14.0.dev5__py3-none-any.whl → 3.14.0.dev7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +163 -0
- rasa/agents/constants.py +40 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +70 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/a2a_agent.py +662 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +685 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +290 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +484 -0
- rasa/agents/schemas/__init__.py +12 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +67 -0
- rasa/agents/schemas/agent_tool_schema.py +134 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +15 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +17 -0
- rasa/agents/utils.py +77 -0
- rasa/agents/validation.py +484 -0
- rasa/api.py +14 -6
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/dialogue_understanding_test.py +4 -0
- rasa/cli/e2e_test.py +4 -0
- rasa/cli/inspect.py +3 -0
- rasa/cli/interactive.py +2 -0
- rasa/cli/llm_fine_tuning.py +5 -0
- rasa/cli/project_templates/tutorial/config.yml +1 -2
- rasa/cli/run.py +4 -0
- rasa/cli/scaffold.py +2 -46
- rasa/cli/shell.py +3 -0
- rasa/cli/train.py +2 -0
- rasa/cli/utils.py +85 -1
- rasa/constants.py +6 -0
- rasa/core/actions/action.py +52 -10
- rasa/core/agent.py +19 -1
- rasa/core/available_agents.py +220 -0
- rasa/core/available_endpoints.py +30 -0
- rasa/core/channels/channel.py +3 -4
- rasa/core/channels/development_inspector.py +4 -4
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-cce7e0a8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-e2a49be7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.js → c4Diagram-3d4e48cf-3def7895.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-81efba3e.js → classDiagram-70f12bd4-e66fe4df.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.js → classDiagram-v2-f2320105-eb874aaa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-31422447.js → createText-2e5e7dd3-cf934643.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-8fdf9155.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-6106fb96.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-4c2bb040.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.js → flowDiagram-66a62f08-f0ff96af.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-cb4d8723.js → flowchart-elk-definition-4a651766-a21707ec.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-c165acb1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-b0564cf1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-e557e67a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.js → index-3862675e-1ce60e9e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-996fe816.js +1353 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-64154b83.js → infoDiagram-f8f76790-893569e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-c29c864f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-649a5eae.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-0e5685ed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-eaa320bd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-f35df9e6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-78339e96.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-9b5f2f14.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-d05ddb3a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-d9be5dfd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-0f1c4348.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-9ddf63b3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-bc2b81ed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-0a287936.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-e3941990.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-ce4eca24.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-d822b1a8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e144c7a7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.js → xychartDiagram-e933f94c-ab7f4e14.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +2 -2
- rasa/core/channels/inspector/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +37 -12
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +3 -2
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +3 -12
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +21 -0
- rasa/core/channels/socketio.py +51 -212
- rasa/core/channels/studio_chat.py +29 -49
- rasa/core/channels/voice_stream/genesys.py +1 -1
- rasa/core/channels/voice_stream/voice_channel.py +3 -5
- rasa/core/constants.py +4 -0
- rasa/core/policies/enterprise_search_policy.py +11 -6
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/flow_executor.py +519 -73
- rasa/core/policies/flows/mcp_tool_executor.py +277 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/unexpected_intent_policy.py +1 -0
- rasa/core/processor.py +18 -15
- rasa/core/run.py +11 -14
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +16 -16
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +21 -1
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +19 -5
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +11 -0
- rasa/dialogue_understanding/commands/clarify_command.py +10 -0
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +11 -0
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +68 -7
- rasa/dialogue_understanding/commands/utils.py +124 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +9 -10
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +61 -0
- rasa/{cli/project_templates/telco/prompts/command-generator.jinja2 → dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2} +7 -3
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +81 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +81 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +7 -6
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +7 -6
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +41 -2
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +46 -8
- rasa/dialogue_understanding/processor/command_processor.py +31 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +123 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +57 -3
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/dialogue_understanding_test/du_test_runner.py +7 -2
- rasa/e2e_test/e2e_test_runner.py +12 -2
- rasa/engine/caching.py +2 -2
- rasa/engine/recipes/default_components.py +10 -18
- rasa/engine/storage/local_model_storage.py +2 -45
- rasa/graph_components/validators/default_recipe_validator.py +134 -134
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +5 -4
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +14 -20
- rasa/model_manager/trainer_service.py +9 -12
- rasa/model_manager/utils.py +29 -1
- rasa/model_manager/warm_rasa_process.py +1 -1
- rasa/model_training.py +8 -6
- rasa/nlu/extractors/extractor.py +2 -1
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_manager.py +11 -2
- rasa/server.py +14 -2
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +8 -0
- rasa/shared/core/constants.py +11 -1
- rasa/shared/core/domain.py +11 -58
- rasa/shared/core/events.py +327 -0
- rasa/shared/core/flows/flow_step.py +1 -7
- rasa/shared/core/flows/flows_list.py +15 -5
- rasa/shared/core/flows/flows_yaml_schema.json +112 -186
- rasa/shared/core/flows/steps/call.py +53 -5
- rasa/shared/core/flows/validation.py +177 -7
- rasa/shared/core/flows/yaml_flows_io.py +9 -17
- rasa/shared/core/slots.py +2 -6
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/exceptions.py +4 -0
- rasa/shared/importers/importer.py +0 -6
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +10 -80
- rasa/shared/providers/_utils.py +44 -60
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +0 -2
- rasa/shared/providers/llm/_base_litellm_client.py +39 -7
- rasa/shared/providers/llm/default_litellm_llm_client.py +0 -2
- rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +28 -5
- rasa/shared/utils/mcp/server_connection.py +186 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/upload.py +47 -16
- rasa/telemetry.py +23 -97
- rasa/tracing/instrumentation/instrumentation.py +14 -10
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/utils/common.py +79 -0
- rasa/utils/io.py +9 -27
- rasa/utils/json_utils.py +1 -6
- rasa/utils/log_utils.py +2 -6
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/tensorflow/rasa_layers.py +1 -1
- rasa/utils/train_utils.py +15 -15
- rasa/validator.py +19 -21
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/METADATA +14 -17
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/RECORD +214 -442
- rasa/builder/README.md +0 -120
- rasa/builder/auth.py +0 -176
- rasa/builder/config.py +0 -115
- rasa/builder/copilot/constants.py +0 -25
- rasa/builder/copilot/copilot.py +0 -372
- rasa/builder/copilot/copilot_response_handler.py +0 -487
- rasa/builder/copilot/copilot_templated_message_provider.py +0 -58
- rasa/builder/copilot/exceptions.py +0 -20
- rasa/builder/copilot/models.py +0 -431
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +0 -726
- rasa/builder/copilot/telemetry.py +0 -195
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +0 -16
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +0 -26
- rasa/builder/document_retrieval/constants.py +0 -15
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +0 -64
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +0 -238
- rasa/builder/document_retrieval/models.py +0 -62
- rasa/builder/download.py +0 -140
- rasa/builder/exceptions.py +0 -55
- rasa/builder/guardrails/__init__.py +0 -1
- rasa/builder/guardrails/constants.py +0 -3
- rasa/builder/guardrails/exceptions.py +0 -4
- rasa/builder/guardrails/lakera.py +0 -206
- rasa/builder/guardrails/models.py +0 -199
- rasa/builder/guardrails/utils.py +0 -305
- rasa/builder/job_manager.py +0 -87
- rasa/builder/jobs.py +0 -234
- rasa/builder/llm_service.py +0 -246
- rasa/builder/logging_utils.py +0 -209
- rasa/builder/main.py +0 -174
- rasa/builder/models.py +0 -197
- rasa/builder/project_generator.py +0 -450
- rasa/builder/project_info.py +0 -72
- rasa/builder/scrape_rasa_docs.py +0 -97
- rasa/builder/service.py +0 -1142
- rasa/builder/shared/tracker_context.py +0 -212
- rasa/builder/skill_to_bot_prompt.jinja2 +0 -164
- rasa/builder/training_service.py +0 -132
- rasa/builder/validation_service.py +0 -93
- rasa/cli/project_templates/basic/actions/action_api.py +0 -15
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +0 -44
- rasa/cli/project_templates/basic/config.yml +0 -23
- rasa/cli/project_templates/basic/credentials.yml +0 -34
- rasa/cli/project_templates/basic/data/general/feedback.yml +0 -20
- rasa/cli/project_templates/basic/data/general/goodbye.yml +0 -6
- rasa/cli/project_templates/basic/data/general/hello.yml +0 -7
- rasa/cli/project_templates/basic/data/general/help.yml +0 -6
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +0 -16
- rasa/cli/project_templates/basic/data/general/welcome.yml +0 -9
- rasa/cli/project_templates/basic/data/system/pattern_completed.yml +0 -7
- rasa/cli/project_templates/basic/data/system/pattern_correction.yml +0 -7
- rasa/cli/project_templates/basic/data/system/pattern_search.yml +0 -8
- rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +0 -8
- rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +0 -65
- rasa/cli/project_templates/basic/docs/template.txt +0 -7
- rasa/cli/project_templates/basic/domain/general/assistant_details.yml +0 -12
- rasa/cli/project_templates/basic/domain/general/bot_identity.yml +0 -5
- rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +0 -5
- rasa/cli/project_templates/basic/domain/general/feedback.yml +0 -28
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +0 -7
- rasa/cli/project_templates/basic/domain/general/help.yml +0 -5
- rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +0 -35
- rasa/cli/project_templates/basic/domain/general/utils.yml +0 -13
- rasa/cli/project_templates/basic/domain/general/welcome.yml +0 -7
- rasa/cli/project_templates/basic/endpoints.yml +0 -73
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
- rasa/cli/project_templates/finance/actions/__init__.py +0 -46
- rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
- rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
- rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
- rasa/cli/project_templates/finance/actions/database.py +0 -277
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
- rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +0 -18
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
- rasa/cli/project_templates/finance/config.yml +0 -21
- rasa/cli/project_templates/finance/credentials.yml +0 -32
- rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
- rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
- rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
- rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
- rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
- rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
- rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
- rasa/cli/project_templates/finance/csvs/users.csv +0 -4
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +0 -10
- rasa/cli/project_templates/finance/data/cards/block_card.yml +0 -66
- rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
- rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
- rasa/cli/project_templates/finance/data/general/feedback.yml +0 -20
- rasa/cli/project_templates/finance/data/general/goodbye.yml +0 -6
- rasa/cli/project_templates/finance/data/general/hello.yml +0 -7
- rasa/cli/project_templates/finance/data/general/help.yml +0 -9
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +0 -16
- rasa/cli/project_templates/finance/data/general/welcome.yml +0 -9
- rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +0 -7
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +0 -7
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +0 -8
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +0 -8
- rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
- rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
- rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
- rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
- rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
- rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
- rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
- rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +0 -67
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +0 -11
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +0 -101
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
- rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
- rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -28
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +0 -7
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +0 -30
- rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
- rasa/cli/project_templates/finance/domain/general/welcome.yml +0 -8
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +0 -79
- rasa/cli/project_templates/finance/endpoints.yml +0 -63
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions_billing.py +0 -204
- rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +0 -48
- rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +0 -28
- rasa/cli/project_templates/telco/actions/actions_session_start.py +0 -18
- rasa/cli/project_templates/telco/config.yml +0 -25
- rasa/cli/project_templates/telco/credentials.yml +0 -33
- rasa/cli/project_templates/telco/csvs/billing.csv +0 -10
- rasa/cli/project_templates/telco/csvs/customers.csv +0 -5
- rasa/cli/project_templates/telco/data/flows/flow_global.yml +0 -5
- rasa/cli/project_templates/telco/data/flows/flow_reboot_router.yml +0 -8
- rasa/cli/project_templates/telco/data/flows/flow_reset_router.yml +0 -7
- rasa/cli/project_templates/telco/data/flows/flow_solve_internet_issue.yml +0 -73
- rasa/cli/project_templates/telco/data/flows/flow_undertand_bill.yml +0 -45
- rasa/cli/project_templates/telco/data/patterns/pattern_completed.yml +0 -7
- rasa/cli/project_templates/telco/data/patterns/pattern_human_handoff.yml +0 -6
- rasa/cli/project_templates/telco/data/patterns/pattern_search.yml +0 -7
- rasa/cli/project_templates/telco/data/patterns/pattern_session_start.yml +0 -9
- rasa/cli/project_templates/telco/docs/reset_vs_rboot_router.txt +0 -1
- rasa/cli/project_templates/telco/docs/restart_router.txt +0 -6
- rasa/cli/project_templates/telco/docs/run_speed_test.txt +0 -6
- rasa/cli/project_templates/telco/domain/domain_global.yml +0 -29
- rasa/cli/project_templates/telco/domain/domain_patterns.yml +0 -17
- rasa/cli/project_templates/telco/domain/domain_reboot_router.yml +0 -20
- rasa/cli/project_templates/telco/domain/domain_reset_router.yml +0 -11
- rasa/cli/project_templates/telco/domain/domain_run_speed_test.yml +0 -24
- rasa/cli/project_templates/telco/domain/domain_solve_internet_issue.yml +0 -74
- rasa/cli/project_templates/telco/domain/domain_undertand_bill.yml +0 -102
- rasa/cli/project_templates/telco/endpoints.yml +0 -60
- rasa/cli/project_templates/telco/tests/e2e_results_failed.yml +0 -62
- rasa/cli/project_templates/telco/tests/e2e_results_passed.yml +0 -130
- rasa/cli/project_templates/telco/tests/e2e_test_cases/billing_test_cases.yml +0 -68
- rasa/cli/project_templates/telco/tests/e2e_test_cases/global_test_cases.yml +0 -13
- rasa/cli/project_templates/telco/tests/e2e_test_cases/internet_slow_test_case.yml +0 -47
- rasa/cli/project_templates/telco/tests/e2e_test_cases/out_of_scope_test_case.yml +0 -21
- rasa/cli/project_templates/telco/tests/e2e_test_cases/patterns_test_cases.yml +0 -15
- rasa/core/channels/constants.py +0 -3
- rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +0 -1335
- rasa/utils/openapi.py +0 -144
- /rasa/{builder → agents}/__init__.py +0 -0
- /rasa/{builder/copilot → agents/core}/__init__.py +0 -0
- /rasa/{builder/copilot/prompts → agents/protocol/a2a}/__init__.py +0 -0
- /rasa/{builder/copilot/templated_messages → agents/protocol/mcp}/__init__.py +0 -0
- /rasa/{builder/document_retrieval → agents/templates}/__init__.py +0 -0
- /rasa/{cli/project_templates/finance/actions/accounts → shared/agents}/__init__.py +0 -0
- /rasa/{cli/project_templates/finance/actions/cards → shared/utils/mcp}/__init__.py +0 -0
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/entry_points.txt +0 -0
|
@@ -10,46 +10,40 @@ from rasa.core.policies.flow_policy import FlowPolicy
|
|
|
10
10
|
from rasa.core.policies.memoization import AugmentedMemoizationPolicy, MemoizationPolicy
|
|
11
11
|
from rasa.core.policies.policy import Policy, SupportedData
|
|
12
12
|
from rasa.core.policies.rule_policy import RulePolicy
|
|
13
|
-
|
|
14
|
-
from rasa.core.policies.
|
|
13
|
+
|
|
14
|
+
# from rasa.core.policies.ted_policy import TEDPolicy
|
|
15
|
+
# from rasa.core.policies.unexpected_intent_policy import UnexpecTEDIntentPolicy
|
|
15
16
|
from rasa.engine.graph import ExecutionContext, GraphComponent, GraphSchema, SchemaNode
|
|
16
17
|
from rasa.engine.storage.resource import Resource
|
|
17
18
|
from rasa.engine.storage.storage import ModelStorage
|
|
18
|
-
|
|
19
|
-
from rasa.nlu.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
|
|
20
|
+
# from rasa.nlu.classifiers.diet_classifier import DIETClassifier
|
|
21
|
+
# from rasa.nlu.extractors.crf_entity_extractor import (
|
|
22
|
+
# CRFEntityExtractor,
|
|
23
|
+
# CRFEntityExtractorOptions,
|
|
24
|
+
# )
|
|
23
25
|
from rasa.nlu.extractors.entity_synonyms import EntitySynonymMapper
|
|
24
26
|
from rasa.nlu.extractors.mitie_entity_extractor import MitieEntityExtractor
|
|
25
27
|
from rasa.nlu.extractors.regex_entity_extractor import RegexEntityExtractor
|
|
26
28
|
from rasa.nlu.featurizers.featurizer import Featurizer
|
|
27
29
|
from rasa.nlu.featurizers.sparse_featurizer.regex_featurizer import RegexFeaturizer
|
|
28
|
-
|
|
30
|
+
|
|
31
|
+
# from rasa.nlu.selectors.response_selector import ResponseSelector
|
|
29
32
|
from rasa.nlu.tokenizers.tokenizer import Tokenizer
|
|
30
33
|
from rasa.shared.constants import (
|
|
31
|
-
DEFAULT_CONFIG_PATH,
|
|
32
34
|
DOCS_URL_COMPONENTS,
|
|
33
|
-
DOCS_URL_DEFAULT_ACTIONS,
|
|
34
35
|
DOCS_URL_NLU_BASED_POLICIES,
|
|
35
|
-
DOCS_URL_RULES,
|
|
36
36
|
)
|
|
37
|
-
from rasa.shared.core.
|
|
38
|
-
ACTION_BACK_NAME,
|
|
39
|
-
ACTION_RESTART_NAME,
|
|
40
|
-
USER_INTENT_BACK,
|
|
41
|
-
USER_INTENT_RESTART,
|
|
42
|
-
)
|
|
43
|
-
from rasa.shared.core.domain import Domain, InvalidDomain
|
|
37
|
+
from rasa.shared.core.domain import Domain
|
|
44
38
|
from rasa.shared.core.training_data.structures import RuleStep, StoryGraph
|
|
45
39
|
from rasa.shared.exceptions import InvalidConfigException
|
|
46
40
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
47
41
|
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
48
42
|
|
|
49
43
|
# TODO: Can we replace this with the registered types from the regitry?
|
|
50
|
-
TRAINABLE_EXTRACTORS = [MitieEntityExtractor, CRFEntityExtractor, DIETClassifier]
|
|
44
|
+
TRAINABLE_EXTRACTORS = [MitieEntityExtractor] # , CRFEntityExtractor, DIETClassifier]
|
|
51
45
|
# TODO: replace these once the Recipe is merged (used in tests)
|
|
52
|
-
POLICY_CLASSSES = {
|
|
46
|
+
POLICY_CLASSSES = {MemoizationPolicy, RulePolicy}
|
|
53
47
|
|
|
54
48
|
|
|
55
49
|
def _types_to_str(types: Iterable[Type]) -> Text:
|
|
@@ -135,16 +129,17 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
135
129
|
"""
|
|
136
130
|
if (
|
|
137
131
|
training_data.response_examples
|
|
138
|
-
and ResponseSelector not in self._component_types
|
|
132
|
+
# and ResponseSelector not in self._component_types
|
|
139
133
|
):
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
134
|
+
pass
|
|
135
|
+
# rasa.shared.utils.io.raise_warning(
|
|
136
|
+
# f"You have defined training data with examples for training a response " # noqa: E501
|
|
137
|
+
# f"selector, but your NLU configuration does not include a response "
|
|
138
|
+
# f"selector component. "
|
|
139
|
+
# f"To train a model on your response selector data, add a "
|
|
140
|
+
# f"'{ResponseSelector.__name__}' to your configuration.",
|
|
141
|
+
# docs=DOCS_URL_COMPONENTS,
|
|
142
|
+
# )
|
|
148
143
|
|
|
149
144
|
if training_data.entity_examples and self._component_types.isdisjoint(
|
|
150
145
|
TRAINABLE_EXTRACTORS
|
|
@@ -158,21 +153,21 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
158
153
|
docs=DOCS_URL_COMPONENTS,
|
|
159
154
|
)
|
|
160
155
|
|
|
161
|
-
if training_data.entity_examples and self._component_types.isdisjoint(
|
|
162
|
-
|
|
163
|
-
):
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
156
|
+
# if training_data.entity_examples and self._component_types.isdisjoint(
|
|
157
|
+
# {DIETClassifier, CRFEntityExtractor}
|
|
158
|
+
# ):
|
|
159
|
+
# if training_data.entity_roles_groups_used():
|
|
160
|
+
# rasa.shared.utils.io.raise_warning(
|
|
161
|
+
# f"You have defined training data with entities that "
|
|
162
|
+
# f"have roles/groups, but your NLU configuration does not "
|
|
163
|
+
# f"include a '{DIETClassifier.__name__}' "
|
|
164
|
+
# f"or a '{CRFEntityExtractor.__name__}'. "
|
|
165
|
+
# f"To train entities that have roles/groups, "
|
|
166
|
+
# f"add either '{DIETClassifier.__name__}' "
|
|
167
|
+
# f"or '{CRFEntityExtractor.__name__}' to your "
|
|
168
|
+
# f"configuration.",
|
|
169
|
+
# docs=DOCS_URL_COMPONENTS,
|
|
170
|
+
# )
|
|
176
171
|
|
|
177
172
|
if training_data.regex_features and self._component_types.isdisjoint(
|
|
178
173
|
[RegexFeaturizer, RegexEntityExtractor]
|
|
@@ -202,45 +197,45 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
202
197
|
docs=DOCS_URL_COMPONENTS,
|
|
203
198
|
)
|
|
204
199
|
|
|
205
|
-
if training_data.lookup_tables:
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
200
|
+
# if training_data.lookup_tables:
|
|
201
|
+
# if self._component_types.isdisjoint([CRFEntityExtractor, DIETClassifier]):
|
|
202
|
+
# rasa.shared.utils.io.raise_warning(
|
|
203
|
+
# f"You have defined training data consisting of lookup tables, but " # noqa: E501
|
|
204
|
+
# f"your NLU configuration does not include any components "
|
|
205
|
+
# f"that uses the features created from the lookup table. "
|
|
206
|
+
# f"To make use of the features that are created with the "
|
|
207
|
+
# f"help of the lookup tables, "
|
|
208
|
+
# f"add a '{DIETClassifier.__name__}' or a "
|
|
209
|
+
# f"'{CRFEntityExtractor.__name__}' "
|
|
210
|
+
# f"with the 'pattern' feature "
|
|
211
|
+
# f"to your configuration.",
|
|
212
|
+
# docs=DOCS_URL_COMPONENTS,
|
|
213
|
+
# )
|
|
214
|
+
|
|
215
|
+
# elif CRFEntityExtractor in self._component_types:
|
|
216
|
+
# crf_schema_nodes = [
|
|
217
|
+
# schema_node
|
|
218
|
+
# for schema_node in self._graph_schema.nodes.values()
|
|
219
|
+
# if schema_node.uses == CRFEntityExtractor
|
|
220
|
+
# ]
|
|
221
|
+
# has_pattern_feature = any(
|
|
222
|
+
# CRFEntityExtractorOptions.PATTERN in feature_list
|
|
223
|
+
# for crf in crf_schema_nodes
|
|
224
|
+
# for feature_list in crf.config.get("features", [])
|
|
225
|
+
# )
|
|
226
|
+
|
|
227
|
+
# if not has_pattern_feature:
|
|
228
|
+
# rasa.shared.utils.io.raise_warning(
|
|
229
|
+
# f"You have defined training data consisting of "
|
|
230
|
+
# f"lookup tables, but your NLU configuration's "
|
|
231
|
+
# f"'{CRFEntityExtractor.__name__}' "
|
|
232
|
+
# f"does not include the "
|
|
233
|
+
# f"'pattern' feature. To featurize lookup tables, "
|
|
234
|
+
# f"add the 'pattern' feature to the "
|
|
235
|
+
# f"'{CRFEntityExtractor.__name__}' "
|
|
236
|
+
# "in your configuration.",
|
|
237
|
+
# docs=DOCS_URL_COMPONENTS,
|
|
238
|
+
# )
|
|
244
239
|
|
|
245
240
|
if (
|
|
246
241
|
training_data.entity_synonyms
|
|
@@ -392,21 +387,22 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
392
387
|
|
|
393
388
|
def _warn_if_no_policy_handles_default_intents(self) -> None:
|
|
394
389
|
"""Warns if there is no policy handling the default intents."""
|
|
395
|
-
policies_handling_default_indents = (RulePolicy, FlowPolicy)
|
|
396
|
-
|
|
397
|
-
contains_policy_handling_default_intents = any(
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
)
|
|
401
|
-
if not contains_policy_handling_default_intents:
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
390
|
+
# policies_handling_default_indents = (RulePolicy, FlowPolicy)
|
|
391
|
+
#
|
|
392
|
+
# contains_policy_handling_default_intents = any(
|
|
393
|
+
# issubclass(node.uses, policies_handling_default_indents)
|
|
394
|
+
# for node in self._policy_schema_nodes
|
|
395
|
+
# )
|
|
396
|
+
# if not contains_policy_handling_default_intents:
|
|
397
|
+
# rasa.shared.utils.io.raise_warning(
|
|
398
|
+
# f"'{RulePolicy.__name__}' is not included in the model's "
|
|
399
|
+
# f"policy configuration. Default intents such as "
|
|
400
|
+
# f"'{USER_INTENT_RESTART}' and '{USER_INTENT_BACK}' will "
|
|
401
|
+
# f"not trigger actions '{ACTION_RESTART_NAME}' and "
|
|
402
|
+
# f"'{ACTION_BACK_NAME}'.",
|
|
403
|
+
# docs=DOCS_URL_DEFAULT_ACTIONS,
|
|
404
|
+
# )
|
|
405
|
+
pass
|
|
410
406
|
|
|
411
407
|
def _raise_if_domain_contains_form_names_but_no_rule_policy_given(
|
|
412
408
|
self, domain: Domain
|
|
@@ -416,19 +412,20 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
416
412
|
Raises:
|
|
417
413
|
`InvalidConfigException` if domain and rule policies do not match
|
|
418
414
|
"""
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
)
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
415
|
+
pass
|
|
416
|
+
# contains_rule_policy = any(
|
|
417
|
+
# schema_node
|
|
418
|
+
# for schema_node in self._graph_schema.nodes.values()
|
|
419
|
+
# if issubclass(schema_node.uses, RulePolicy)
|
|
420
|
+
# )
|
|
421
|
+
|
|
422
|
+
# if domain.form_names and not contains_rule_policy:
|
|
423
|
+
# raise InvalidDomain(
|
|
424
|
+
# "You have defined a form action, but have not added the "
|
|
425
|
+
# f"'{RulePolicy.__name__}' to your policy ensemble. "
|
|
426
|
+
# f"Either remove all forms from your domain or add the "
|
|
427
|
+
# f"'{RulePolicy.__name__}' to your policy configuration."
|
|
428
|
+
# )
|
|
432
429
|
|
|
433
430
|
def _raise_if_dm1_and_calm_policies_used_at_the_same_time(self) -> None:
|
|
434
431
|
"""Validates that there exists a rule policy if forms are defined.
|
|
@@ -447,11 +444,11 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
447
444
|
|
|
448
445
|
# if we are using a flow policy, there shouldn't be any dm1 policies
|
|
449
446
|
dm1_policies = (
|
|
450
|
-
RulePolicy,
|
|
451
|
-
TEDPolicy,
|
|
447
|
+
# RulePolicy,
|
|
448
|
+
# TEDPolicy,
|
|
452
449
|
MemoizationPolicy,
|
|
453
450
|
AugmentedMemoizationPolicy,
|
|
454
|
-
UnexpecTEDIntentPolicy,
|
|
451
|
+
# UnexpecTEDIntentPolicy,
|
|
455
452
|
)
|
|
456
453
|
|
|
457
454
|
for schema_node in self._graph_schema.nodes.values():
|
|
@@ -472,10 +469,11 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
472
469
|
`InvalidDomain` if domain and rule policies do not match
|
|
473
470
|
"""
|
|
474
471
|
for schema_node in self._graph_schema.nodes.values():
|
|
475
|
-
if schema_node.uses == RulePolicy:
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
472
|
+
# if schema_node.uses == RulePolicy:
|
|
473
|
+
# RulePolicy.raise_if_incompatible_with_domain(
|
|
474
|
+
# config=schema_node.config, domain=domain
|
|
475
|
+
# )
|
|
476
|
+
pass
|
|
479
477
|
|
|
480
478
|
def _validate_policy_priorities(self) -> None:
|
|
481
479
|
"""Checks if every policy has a valid priority value.
|
|
@@ -531,20 +529,22 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
531
529
|
)
|
|
532
530
|
|
|
533
531
|
if consuming_rule_data and not contains_rule_tracker:
|
|
534
|
-
rasa.shared.utils.io.raise_warning(
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
)
|
|
532
|
+
# rasa.shared.utils.io.raise_warning(
|
|
533
|
+
# f"Found a rule-based policy in your configuration but "
|
|
534
|
+
# f"no rule-based training data. Please add rule-based "
|
|
535
|
+
# f"stories to your training data or "
|
|
536
|
+
# f"remove the rule-based policy "
|
|
537
|
+
# f"(`{RulePolicy.__name__}`) from your "
|
|
538
|
+
# f"your configuration.",
|
|
539
|
+
# docs=DOCS_URL_RULES,
|
|
540
|
+
# )
|
|
541
|
+
pass
|
|
543
542
|
elif not consuming_rule_data and contains_rule_tracker:
|
|
544
|
-
rasa.shared.utils.io.raise_warning(
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
)
|
|
543
|
+
# rasa.shared.utils.io.raise_warning(
|
|
544
|
+
# f"Found rule-based training data but no policy supporting rule-based "
|
|
545
|
+
# f"data. Please add `{RulePolicy.__name__}` "
|
|
546
|
+
# f"or another rule-supporting "
|
|
547
|
+
# f"policy to the `policies` section in `{DEFAULT_CONFIG_PATH}`.",
|
|
548
|
+
# docs=DOCS_URL_RULES,
|
|
549
|
+
# )
|
|
550
|
+
pass
|
rasa/hooks.py
CHANGED
|
@@ -19,7 +19,7 @@ hookimpl = pluggy.HookimplMarker("rasa")
|
|
|
19
19
|
logger = logging.getLogger(__name__)
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
@hookimpl
|
|
22
|
+
@hookimpl
|
|
23
23
|
def refine_cli(
|
|
24
24
|
subparsers: "SubParsersAction",
|
|
25
25
|
parent_parsers: List[argparse.ArgumentParser],
|
|
@@ -37,7 +37,7 @@ def refine_cli(
|
|
|
37
37
|
return None
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
@hookimpl
|
|
40
|
+
@hookimpl
|
|
41
41
|
def configure_commandline(cmdline_arguments: argparse.Namespace) -> Optional[Text]:
|
|
42
42
|
from rasa.cli import x as rasa_x
|
|
43
43
|
from rasa.tracing import config
|
|
@@ -59,21 +59,21 @@ def configure_commandline(cmdline_arguments: argparse.Namespace) -> Optional[Tex
|
|
|
59
59
|
return endpoints_file
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
@hookimpl
|
|
62
|
+
@hookimpl
|
|
63
63
|
def init_telemetry(endpoints_file: Optional[Text]) -> None:
|
|
64
64
|
import rasa.telemetry
|
|
65
65
|
|
|
66
66
|
rasa.telemetry.identify_endpoint_config_traits(endpoints_file)
|
|
67
67
|
|
|
68
68
|
|
|
69
|
-
@hookimpl
|
|
69
|
+
@hookimpl
|
|
70
70
|
def init_managers(endpoints_file: Optional[Text]) -> None:
|
|
71
71
|
from rasa.core.secrets_manager.factory import load_secret_manager
|
|
72
72
|
|
|
73
73
|
load_secret_manager(endpoints_file)
|
|
74
74
|
|
|
75
75
|
|
|
76
|
-
@hookimpl
|
|
76
|
+
@hookimpl
|
|
77
77
|
def create_tracker_store(
|
|
78
78
|
endpoint_config: Union["TrackerStore", "EndpointConfig"],
|
|
79
79
|
domain: "Domain",
|
rasa/llm_fine_tuning/utils.py
CHANGED
|
@@ -61,9 +61,9 @@ def patch_invoke_llm_in_generators(mock_impl: Callable) -> Generator:
|
|
|
61
61
|
try:
|
|
62
62
|
# apply the monkey-patch everywhere
|
|
63
63
|
for cls in originals:
|
|
64
|
-
cls.invoke_llm = mock_impl # type: ignore[
|
|
64
|
+
cls.invoke_llm = mock_impl # type: ignore[method-assign]
|
|
65
65
|
yield
|
|
66
66
|
finally:
|
|
67
67
|
# restore originals (even if an exception happened)
|
|
68
68
|
for cls, orig in originals.items():
|
|
69
|
-
cls.invoke_llm = orig # type: ignore[
|
|
69
|
+
cls.invoke_llm = orig # type: ignore[method-assign]
|
rasa/model_manager/model_api.py
CHANGED
|
@@ -39,9 +39,11 @@ from rasa.model_manager.trainer_service import (
|
|
|
39
39
|
update_training_status,
|
|
40
40
|
)
|
|
41
41
|
from rasa.model_manager.utils import (
|
|
42
|
+
InvalidPathException,
|
|
42
43
|
get_logs_content,
|
|
43
44
|
logs_base_path,
|
|
44
45
|
models_base_path,
|
|
46
|
+
subpath,
|
|
45
47
|
)
|
|
46
48
|
from rasa.model_manager.warm_rasa_process import (
|
|
47
49
|
initialize_warm_rasa_process,
|
|
@@ -51,7 +53,6 @@ from rasa.server import ErrorResponse
|
|
|
51
53
|
from rasa.shared.exceptions import InvalidConfigException
|
|
52
54
|
from rasa.shared.utils.yaml import dump_obj_as_yaml_to_string
|
|
53
55
|
from rasa.studio.upload import build_calm_import_parts
|
|
54
|
-
from rasa.utils.io import InvalidPathException, subpath
|
|
55
56
|
|
|
56
57
|
dotenv.load_dotenv()
|
|
57
58
|
|
|
@@ -570,10 +571,10 @@ def external_blueprint() -> Blueprint:
|
|
|
570
571
|
"""Create a blueprint for the model manager API."""
|
|
571
572
|
from rasa.core.channels.socketio import SocketBlueprint
|
|
572
573
|
|
|
573
|
-
|
|
574
|
-
bp = SocketBlueprint(
|
|
574
|
+
sio = AsyncServer(async_mode="sanic", cors_allowed_origins="*")
|
|
575
|
+
bp = SocketBlueprint(sio, "", "model_api_external")
|
|
575
576
|
|
|
576
|
-
create_bridge_server(
|
|
577
|
+
create_bridge_server(sio, running_bots)
|
|
577
578
|
|
|
578
579
|
@bp.get("/health")
|
|
579
580
|
async def health(request: Request) -> response.HTTPResponse:
|
|
@@ -15,11 +15,11 @@ from rasa.model_manager import config
|
|
|
15
15
|
from rasa.model_manager.utils import (
|
|
16
16
|
logs_path,
|
|
17
17
|
models_base_path,
|
|
18
|
+
subpath,
|
|
18
19
|
write_encoded_data_to_file,
|
|
19
20
|
)
|
|
20
21
|
from rasa.model_manager.warm_rasa_process import start_rasa_process
|
|
21
22
|
from rasa.studio.prompts import handle_prompts
|
|
22
|
-
from rasa.utils.io import subpath
|
|
23
23
|
|
|
24
24
|
structlogger = structlog.get_logger()
|
|
25
25
|
|
|
@@ -19,7 +19,7 @@ socket_proxy_clients = {}
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
async def socketio_websocket_traffic_wrapper(
|
|
22
|
-
|
|
22
|
+
sio: AsyncServer,
|
|
23
23
|
running_bots: Dict[str, BotSession],
|
|
24
24
|
sid: str,
|
|
25
25
|
auth: Optional[Dict],
|
|
@@ -55,9 +55,7 @@ async def socketio_websocket_traffic_wrapper(
|
|
|
55
55
|
structlogger.error("model_runner.bot_not_alive", deployment_id=deployment_id)
|
|
56
56
|
raise ConnectionRefusedError("model_runner.bot_not_alive")
|
|
57
57
|
|
|
58
|
-
client = await create_bridge_client(
|
|
59
|
-
sio_server, bot.internal_url, sid, deployment_id
|
|
60
|
-
)
|
|
58
|
+
client = await create_bridge_client(sio, bot.internal_url, sid, deployment_id)
|
|
61
59
|
|
|
62
60
|
if client.sid is not None:
|
|
63
61
|
structlogger.debug(
|
|
@@ -72,24 +70,20 @@ async def socketio_websocket_traffic_wrapper(
|
|
|
72
70
|
raise ConnectionRefusedError("model_runner.bot_connection_failed")
|
|
73
71
|
|
|
74
72
|
|
|
75
|
-
def create_bridge_server(
|
|
76
|
-
sio_server: AsyncServer, running_bots: Dict[str, BotSession]
|
|
77
|
-
) -> None:
|
|
73
|
+
def create_bridge_server(sio: AsyncServer, running_bots: Dict[str, BotSession]) -> None:
|
|
78
74
|
"""Create handlers for the socket server side.
|
|
79
75
|
|
|
80
76
|
Forwards messages coming from the user to the bot.
|
|
81
77
|
"""
|
|
82
78
|
|
|
83
|
-
@
|
|
79
|
+
@sio.on("connect")
|
|
84
80
|
async def socketio_websocket_traffic(
|
|
85
81
|
sid: str, environ: Dict, auth: Optional[Dict]
|
|
86
82
|
) -> bool:
|
|
87
83
|
"""Bridge websockets between user chat socket and bot server."""
|
|
88
|
-
return await socketio_websocket_traffic_wrapper(
|
|
89
|
-
sio_server, running_bots, sid, auth
|
|
90
|
-
)
|
|
84
|
+
return await socketio_websocket_traffic_wrapper(sio, running_bots, sid, auth)
|
|
91
85
|
|
|
92
|
-
@
|
|
86
|
+
@sio.on("disconnect")
|
|
93
87
|
async def disconnect(sid: str) -> None:
|
|
94
88
|
"""Disconnect the bot connection."""
|
|
95
89
|
structlogger.debug("model_runner.bot_disconnect", sid=sid)
|
|
@@ -97,7 +91,7 @@ def create_bridge_server(
|
|
|
97
91
|
await socket_proxy_clients[sid].disconnect()
|
|
98
92
|
del socket_proxy_clients[sid]
|
|
99
93
|
|
|
100
|
-
@
|
|
94
|
+
@sio.on("*")
|
|
101
95
|
async def handle_message(event: str, sid: str, data: Dict[str, Any]) -> None:
|
|
102
96
|
"""Bridge messages between user and bot.
|
|
103
97
|
|
|
@@ -114,7 +108,7 @@ def create_bridge_server(
|
|
|
114
108
|
|
|
115
109
|
|
|
116
110
|
async def create_bridge_client(
|
|
117
|
-
|
|
111
|
+
sio: AsyncServer, url: str, sid: str, deployment_id: str
|
|
118
112
|
) -> AsyncClient:
|
|
119
113
|
"""Create a new socket bridge client.
|
|
120
114
|
|
|
@@ -129,36 +123,36 @@ async def create_bridge_client(
|
|
|
129
123
|
structlogger.debug(
|
|
130
124
|
"model_runner.bot_session_confirmed", deployment_id=deployment_id
|
|
131
125
|
)
|
|
132
|
-
await
|
|
126
|
+
await sio.emit("session_confirm", room=sid)
|
|
133
127
|
|
|
134
128
|
@client.event # type: ignore[misc]
|
|
135
129
|
async def bot_message(data: Dict[str, Any]) -> None:
|
|
136
130
|
structlogger.debug("model_runner.bot_message", deployment_id=deployment_id)
|
|
137
|
-
await
|
|
131
|
+
await sio.emit("bot_message", data, room=sid)
|
|
138
132
|
|
|
139
133
|
@client.event # type: ignore[misc]
|
|
140
134
|
async def error(data: Dict[str, Any]) -> None:
|
|
141
135
|
structlogger.debug(
|
|
142
136
|
"model_runner.bot_error", deployment_id=deployment_id, data=data
|
|
143
137
|
)
|
|
144
|
-
await
|
|
138
|
+
await sio.emit("error", data, room=sid)
|
|
145
139
|
|
|
146
140
|
@client.event # type: ignore[misc]
|
|
147
141
|
async def tracker(data: Dict[str, Any]) -> None:
|
|
148
|
-
await
|
|
142
|
+
await sio.emit("tracker", json.loads(data), room=sid)
|
|
149
143
|
|
|
150
144
|
@client.event # type: ignore[misc]
|
|
151
145
|
async def disconnect() -> None:
|
|
152
146
|
structlogger.debug(
|
|
153
147
|
"model_runner.bot_connection_closed", deployment_id=deployment_id
|
|
154
148
|
)
|
|
155
|
-
await
|
|
149
|
+
await sio.emit("disconnect", room=sid)
|
|
156
150
|
|
|
157
151
|
@client.event # type: ignore[misc]
|
|
158
152
|
async def connect_error() -> None:
|
|
159
153
|
structlogger.error(
|
|
160
154
|
"model_runner.bot_connection_error", deployment_id=deployment_id
|
|
161
155
|
)
|
|
162
|
-
await
|
|
156
|
+
await sio.emit("disconnect", room=sid)
|
|
163
157
|
|
|
164
158
|
return client
|
|
@@ -14,6 +14,7 @@ from rasa.model_manager.utils import (
|
|
|
14
14
|
ensure_base_directory_exists,
|
|
15
15
|
logs_path,
|
|
16
16
|
models_base_path,
|
|
17
|
+
subpath,
|
|
17
18
|
write_encoded_data_to_file,
|
|
18
19
|
)
|
|
19
20
|
from rasa.model_manager.warm_rasa_process import (
|
|
@@ -21,7 +22,6 @@ from rasa.model_manager.warm_rasa_process import (
|
|
|
21
22
|
)
|
|
22
23
|
from rasa.model_training import generate_random_model_name
|
|
23
24
|
from rasa.studio.prompts import handle_prompts
|
|
24
|
-
from rasa.utils.io import subpath
|
|
25
25
|
|
|
26
26
|
structlogger = structlog.get_logger()
|
|
27
27
|
|
|
@@ -53,15 +53,6 @@ class TrainingSession(BaseModel):
|
|
|
53
53
|
"""Check if the training is running."""
|
|
54
54
|
return self.status == TrainingSessionStatus.RUNNING
|
|
55
55
|
|
|
56
|
-
def has_just_finished(self) -> bool:
|
|
57
|
-
if not self.is_status_indicating_alive():
|
|
58
|
-
# skip if the training is not running
|
|
59
|
-
return False
|
|
60
|
-
if self.process.poll() is None:
|
|
61
|
-
# process is still running
|
|
62
|
-
return False
|
|
63
|
-
return True
|
|
64
|
-
|
|
65
56
|
def model_path(self) -> str:
|
|
66
57
|
"""Return the path to the model."""
|
|
67
58
|
return subpath(models_base_path(), f"{self.model_name}.tar.gz")
|
|
@@ -98,8 +89,14 @@ def terminate_training(training: TrainingSession) -> None:
|
|
|
98
89
|
|
|
99
90
|
|
|
100
91
|
def update_training_status(training: TrainingSession) -> None:
|
|
101
|
-
if training.
|
|
102
|
-
|
|
92
|
+
if not training.is_status_indicating_alive():
|
|
93
|
+
# skip if the training is not running
|
|
94
|
+
return
|
|
95
|
+
if training.process.poll() is None:
|
|
96
|
+
# process is still running
|
|
97
|
+
return
|
|
98
|
+
|
|
99
|
+
complete_training(training)
|
|
103
100
|
|
|
104
101
|
|
|
105
102
|
def complete_training(training: TrainingSession) -> None:
|
rasa/model_manager/utils.py
CHANGED
|
@@ -5,11 +5,15 @@ from typing import Optional
|
|
|
5
5
|
import structlog
|
|
6
6
|
|
|
7
7
|
from rasa.model_manager import config
|
|
8
|
-
from rasa.
|
|
8
|
+
from rasa.shared.exceptions import RasaException
|
|
9
9
|
|
|
10
10
|
structlogger = structlog.get_logger()
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
class InvalidPathException(RasaException):
|
|
14
|
+
"""Raised if a path is invalid - e.g. path traversal is detected."""
|
|
15
|
+
|
|
16
|
+
|
|
13
17
|
def write_encoded_data_to_file(encoded_data: bytes, file: str) -> None:
|
|
14
18
|
"""Write base64 encoded data to a file."""
|
|
15
19
|
# create the directory if it does not exist of the parent directory
|
|
@@ -49,6 +53,30 @@ def logs_path(action_id: str) -> str:
|
|
|
49
53
|
return subpath(logs_base_path(), f"{action_id}.txt")
|
|
50
54
|
|
|
51
55
|
|
|
56
|
+
def subpath(parent: str, child: str) -> str:
|
|
57
|
+
"""Return the path to the child directory of the parent directory.
|
|
58
|
+
|
|
59
|
+
Ensures, that child doesn't navigate to parent directories. Prevents
|
|
60
|
+
path traversal. Raises an InvalidPathException if the path is invalid.
|
|
61
|
+
|
|
62
|
+
Based on Snyk's directory traversal mitigation:
|
|
63
|
+
https://learn.snyk.io/lesson/directory-traversal/
|
|
64
|
+
"""
|
|
65
|
+
safe_path = os.path.abspath(os.path.join(parent, child))
|
|
66
|
+
parent = os.path.abspath(parent)
|
|
67
|
+
|
|
68
|
+
common_base = os.path.commonpath([parent, safe_path])
|
|
69
|
+
if common_base != parent:
|
|
70
|
+
raise InvalidPathException(f"Invalid path: {safe_path}")
|
|
71
|
+
|
|
72
|
+
if os.path.basename(safe_path) != child:
|
|
73
|
+
raise InvalidPathException(
|
|
74
|
+
f"Invalid path - path traversal detected: {safe_path}"
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
return safe_path
|
|
78
|
+
|
|
79
|
+
|
|
52
80
|
def get_logs_content(action_id: str) -> Optional[str]:
|
|
53
81
|
"""Return the content of the log file for a given action id."""
|
|
54
82
|
try:
|