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
|
@@ -219,6 +219,11 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
|
|
|
219
219
|
if self.vector_store is not None:
|
|
220
220
|
with self._model_storage.write_to(self._resource) as model_path:
|
|
221
221
|
self.vector_store.save_local(model_path)
|
|
222
|
+
else:
|
|
223
|
+
structlogger.warning(
|
|
224
|
+
"flow_retrieval.persist_vector_store.not_initialized",
|
|
225
|
+
event_info="Vector store is None, not persisted.",
|
|
226
|
+
)
|
|
222
227
|
|
|
223
228
|
def _persist_config(self) -> None:
|
|
224
229
|
with self._model_storage.write_to(self._resource) as path:
|
|
@@ -244,16 +249,6 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
|
|
|
244
249
|
)
|
|
245
250
|
|
|
246
251
|
flows_to_embedd = flows.exclude_link_only_flows()
|
|
247
|
-
|
|
248
|
-
if not flows_to_embedd:
|
|
249
|
-
structlogger.debug(
|
|
250
|
-
"flow_retrieval.populate_vector_store.no_flows_to_embed",
|
|
251
|
-
event_info=(
|
|
252
|
-
"No flows to embed in the vector store, skipping population."
|
|
253
|
-
),
|
|
254
|
-
)
|
|
255
|
-
return
|
|
256
|
-
|
|
257
252
|
embeddings = self._create_embedder(self.config)
|
|
258
253
|
documents = self._generate_flow_documents(flows_to_embedd, domain)
|
|
259
254
|
try:
|
|
@@ -425,6 +420,10 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
|
|
|
425
420
|
The top k documents with similarity scores.
|
|
426
421
|
"""
|
|
427
422
|
if self.vector_store is None:
|
|
423
|
+
structlogger.error(
|
|
424
|
+
"flow_retrieval.query_vector_store.vector_store_not_configured",
|
|
425
|
+
event_info="Vector store is not configured",
|
|
426
|
+
)
|
|
428
427
|
return []
|
|
429
428
|
try:
|
|
430
429
|
documents_with_scores = (
|
|
@@ -7,6 +7,7 @@ from jinja2 import Environment, Template, select_autoescape
|
|
|
7
7
|
|
|
8
8
|
import rasa.dialogue_understanding.generator.utils
|
|
9
9
|
import rasa.shared.utils.io
|
|
10
|
+
from rasa.core.available_agents import AvailableAgents
|
|
10
11
|
from rasa.dialogue_understanding.commands import (
|
|
11
12
|
Command,
|
|
12
13
|
SetSlotCommand,
|
|
@@ -31,6 +32,7 @@ from rasa.engine.storage.resource import Resource
|
|
|
31
32
|
from rasa.engine.storage.storage import ModelStorage
|
|
32
33
|
from rasa.shared.core.constants import SetSlotExtractor
|
|
33
34
|
from rasa.shared.core.domain import Domain
|
|
35
|
+
from rasa.shared.core.events import AgentStarted
|
|
34
36
|
from rasa.shared.core.flows import Flow, FlowsList, FlowStep
|
|
35
37
|
from rasa.shared.core.flows.steps.collect import CollectInformationFlowStep
|
|
36
38
|
from rasa.shared.core.slot_mappings import SlotFillingManager
|
|
@@ -225,8 +227,7 @@ class LLMBasedCommandGenerator(
|
|
|
225
227
|
|
|
226
228
|
@lru_cache
|
|
227
229
|
def compile_template(self, template: str) -> Template:
|
|
228
|
-
"""
|
|
229
|
-
Compile the prompt template and register custom filters.
|
|
230
|
+
"""Compile the prompt template and register custom filters.
|
|
230
231
|
|
|
231
232
|
Compiling the template is an expensive operation,
|
|
232
233
|
so we cache the result.
|
|
@@ -361,20 +362,24 @@ class LLMBasedCommandGenerator(
|
|
|
361
362
|
)
|
|
362
363
|
|
|
363
364
|
def prepare_flows_for_template(
|
|
364
|
-
self,
|
|
365
|
+
self,
|
|
366
|
+
flows: FlowsList,
|
|
367
|
+
tracker: DialogueStateTracker,
|
|
368
|
+
add_agent_info: bool = False,
|
|
365
369
|
) -> List[Dict[str, Any]]:
|
|
366
370
|
"""Format data on available flows for insertion into the prompt template.
|
|
367
371
|
|
|
368
372
|
Args:
|
|
369
373
|
flows: The flows available to the user.
|
|
370
374
|
tracker: The tracker containing the current state of the conversation.
|
|
375
|
+
add_agent_info: Whether to add agent info to flows or not.
|
|
371
376
|
|
|
372
377
|
Returns:
|
|
373
378
|
The inputs for the prompt template.
|
|
374
379
|
"""
|
|
375
|
-
result = []
|
|
380
|
+
result: List[Dict[str, Any]] = []
|
|
376
381
|
for flow in flows.user_flows:
|
|
377
|
-
slots_with_info = [
|
|
382
|
+
slots_with_info: List[Dict[str, Any]] = [
|
|
378
383
|
{
|
|
379
384
|
"name": q.collect,
|
|
380
385
|
"description": q.description,
|
|
@@ -383,13 +388,46 @@ class LLMBasedCommandGenerator(
|
|
|
383
388
|
for q in flow.get_collect_steps()
|
|
384
389
|
if self.is_extractable(q, tracker)
|
|
385
390
|
]
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
391
|
+
|
|
392
|
+
agent_info: List[Dict[str, Any]] = []
|
|
393
|
+
if add_agent_info:
|
|
394
|
+
# add information about agents that have been started for this flow
|
|
395
|
+
agent_events = [
|
|
396
|
+
event
|
|
397
|
+
for event in tracker.events
|
|
398
|
+
if isinstance(event, AgentStarted) and event.flow_id == flow.id
|
|
399
|
+
]
|
|
400
|
+
available_agents = [
|
|
401
|
+
AvailableAgents.get_agent_config(event.agent_id)
|
|
402
|
+
for event in agent_events
|
|
403
|
+
]
|
|
404
|
+
if available_agents:
|
|
405
|
+
agent_info = [
|
|
406
|
+
{
|
|
407
|
+
"name": available_agent.agent.name,
|
|
408
|
+
"description": available_agent.agent.description,
|
|
409
|
+
}
|
|
410
|
+
for available_agent in available_agents
|
|
411
|
+
if available_agent is not None
|
|
412
|
+
]
|
|
413
|
+
|
|
414
|
+
if agent_info:
|
|
415
|
+
result.append(
|
|
416
|
+
{
|
|
417
|
+
"name": flow.id,
|
|
418
|
+
"description": flow.description,
|
|
419
|
+
"slots": slots_with_info,
|
|
420
|
+
"agent_info": agent_info,
|
|
421
|
+
}
|
|
422
|
+
)
|
|
423
|
+
else:
|
|
424
|
+
result.append(
|
|
425
|
+
{
|
|
426
|
+
"name": flow.id,
|
|
427
|
+
"description": flow.description,
|
|
428
|
+
"slots": slots_with_info,
|
|
429
|
+
}
|
|
430
|
+
)
|
|
393
431
|
return result
|
|
394
432
|
|
|
395
433
|
@staticmethod
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Any, Dict, List, Optional, Text, Union
|
|
2
2
|
|
|
3
3
|
import structlog
|
|
4
|
-
from deprecated import deprecated # type: ignore[import]
|
|
4
|
+
from deprecated import deprecated # type: ignore[import-untyped]
|
|
5
5
|
|
|
6
6
|
from rasa.dialogue_understanding.generator.single_step.single_step_llm_command_generator import ( # noqa: E501
|
|
7
7
|
SingleStepLLMCommandGenerator,
|
|
@@ -2,7 +2,7 @@ import importlib.resources
|
|
|
2
2
|
from typing import Any, Dict, List, Optional, Text, Tuple, Union
|
|
3
3
|
|
|
4
4
|
import structlog
|
|
5
|
-
from deprecated import deprecated # type: ignore[import]
|
|
5
|
+
from deprecated import deprecated # type: ignore[import-untyped]
|
|
6
6
|
from jinja2 import Template
|
|
7
7
|
|
|
8
8
|
import rasa.shared.utils.io
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
## Task Description
|
|
2
|
+
Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests.
|
|
3
|
+
|
|
4
|
+
--
|
|
5
|
+
|
|
6
|
+
## Available Actions:
|
|
7
|
+
* `start flow flow_name`: Starting a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
|
|
8
|
+
* `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
|
|
9
|
+
* `cancel flow`: Cancelling the current flow.
|
|
10
|
+
* `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: Disambiguate which flow should be started when user input is ambiguous by listing the potential flows as options. For example, `disambiguate flows list_contacts add_contact remove_contact ...` if the user just wrote "contacts".
|
|
11
|
+
* `provide info`: Responding to the user's questions by supplying relevant information, such as answering FAQs or explaining services.
|
|
12
|
+
* `offtopic reply`: Responding to casual or social user messages that are unrelated to any flows, engaging in friendly conversation and addressing off-topic remarks.
|
|
13
|
+
* `hand over`: Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one.
|
|
14
|
+
* `repeat message`: Repeating the last bot message.
|
|
15
|
+
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
|
|
16
|
+
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
|
|
17
|
+
|
|
18
|
+
--
|
|
19
|
+
|
|
20
|
+
## General Tips
|
|
21
|
+
* Do not fill slots with abstract values or placeholders.
|
|
22
|
+
* For categorical slots try to match the user message with allowed slot values. Use "other" if you cannot match it.
|
|
23
|
+
* Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
|
|
24
|
+
* Always refer to the slot description to determine what information should be extracted and how it should be formatted.
|
|
25
|
+
* For text slots, extract values exactly as provided by the user unless the slot description specifies otherwise. Preserve formatting and avoid rewording, truncation, or making assumptions.
|
|
26
|
+
* Only use information provided by the user.
|
|
27
|
+
* Use clarification in ambiguous cases.
|
|
28
|
+
* Multiple flows can be started. If a user wants to digress into a second flow, you do not need to cancel the current flow.
|
|
29
|
+
* Do not cancel the flow unless the user explicitly requests it.
|
|
30
|
+
* Strictly adhere to the provided action format.
|
|
31
|
+
* Focus on the last message and take it one step at a time.
|
|
32
|
+
* Use the previous conversation steps only to aid understanding.
|
|
33
|
+
|
|
34
|
+
--
|
|
35
|
+
|
|
36
|
+
## Available Flows and Slots
|
|
37
|
+
Use the following structured data:
|
|
38
|
+
```json
|
|
39
|
+
{"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
--
|
|
43
|
+
|
|
44
|
+
## Current State
|
|
45
|
+
{% if current_flow != None %}Use the following structured data:
|
|
46
|
+
```json
|
|
47
|
+
{"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
|
|
48
|
+
```{% else %}
|
|
49
|
+
You are currently not inside any flow.{% endif %}
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Conversation History
|
|
54
|
+
{{ current_conversation }}
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Task
|
|
59
|
+
Create an action list with one action per line in response to the user's last message: """{{ user_message }}""".
|
|
60
|
+
|
|
61
|
+
Your action list:
|
|
@@ -6,7 +6,7 @@ Your task is to analyze the current conversation context and generate a list of
|
|
|
6
6
|
## Available Flows and Slots
|
|
7
7
|
Use the following structured data:
|
|
8
8
|
```json
|
|
9
|
-
{"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":
|
|
9
|
+
{"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
---
|
|
@@ -19,6 +19,9 @@ Use the following structured data:
|
|
|
19
19
|
* `provide info`: Responding to the user's questions by supplying relevant information, such as answering FAQs or explaining services.
|
|
20
20
|
* `offtopic reply`: Responding to casual or social user messages that are unrelated to any flows, engaging in friendly conversation and addressing off-topic remarks.
|
|
21
21
|
* `hand over`: Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one.
|
|
22
|
+
* `repeat message`: Repeating the last bot message.
|
|
23
|
+
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
|
|
24
|
+
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
|
|
22
25
|
|
|
23
26
|
---
|
|
24
27
|
|
|
@@ -38,9 +41,10 @@ Use the following structured data:
|
|
|
38
41
|
---
|
|
39
42
|
|
|
40
43
|
## Current State
|
|
41
|
-
{% if current_flow != None %}
|
|
44
|
+
{% if current_flow != None %}
|
|
45
|
+
Use the following structured data:
|
|
42
46
|
```json
|
|
43
|
-
{"active_flow":"{{ current_flow }}","current_step":{"requested_slot":"{{ current_slot }}","requested_slot_description":
|
|
47
|
+
{"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
|
|
44
48
|
```{% else %}
|
|
45
49
|
You are currently not inside any flow.{% endif %}
|
|
46
50
|
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
## Task Description
|
|
2
|
+
Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to off-topic and knowledge requests.
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Available Actions:
|
|
7
|
+
* `start flow flow_name`: Start a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
|
|
8
|
+
* `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
|
|
9
|
+
* `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: When a message could refer to multiple flows, list the possible flows as options to clarify. Example: `disambiguate flows list_contacts add_contact remove_contact`.
|
|
10
|
+
* `search and reply`: Provide a response from the knowledge base to address the user's inquiry when no flows fit, including domain knowledge, FAQs, and all off-topic or social messages.
|
|
11
|
+
* `cancel flow`: Cancel the current flow if the user requests it.
|
|
12
|
+
* `repeat message`: Repeat the last bot message.
|
|
13
|
+
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
|
|
14
|
+
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## General Instructions
|
|
19
|
+
### Start Flow
|
|
20
|
+
* Only start a flow if the user's message is clear and fully addressed by that flow's description and purpose.
|
|
21
|
+
* Pay close attention to exact wording and scope in the flow description — do not assume or “stretch” the intended use of a flow.
|
|
22
|
+
### Set Slot
|
|
23
|
+
* Do not fill slots with abstract values or placeholders.
|
|
24
|
+
* For categorical slots, try to match the user message with allowed slot values. Use "other" if you cannot match it.
|
|
25
|
+
* Set the boolean slots based on the user's response. Map positive responses to `True`, and negative to `False`.
|
|
26
|
+
* Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
|
|
27
|
+
### Disambiguate Flows
|
|
28
|
+
* Use `disambiguate flows` when the user's message matches multiple flows and you cannot decide which flow is most appropriate.
|
|
29
|
+
* If the user message is short and not precise enough to start a flow or `search and reply`, disambiguate.
|
|
30
|
+
* If a single flow is a strong/plausible fit, prefer starting that flow directly.
|
|
31
|
+
* If a user's message unambiguously and distinctly matches multiple flows, start all relevant flows at once (rather than disambiguating).
|
|
32
|
+
### Search and Reply
|
|
33
|
+
* Only start `search and reply` if the user intent is clear.
|
|
34
|
+
* Flow Priority: If you are unsure between starting a flow or `search and reply`, always prioritize starting a flow.
|
|
35
|
+
### Cancel Flow
|
|
36
|
+
* Do not cancel any flow unless the user explicitly requests it.
|
|
37
|
+
* Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.
|
|
38
|
+
### General Tips
|
|
39
|
+
* Only use information provided by the user.
|
|
40
|
+
* Strictly adhere to the provided action format.
|
|
41
|
+
* Focus on the last message and take it one step at a time.
|
|
42
|
+
* Use the previous conversation steps only to aid understanding.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Decision Rule Table
|
|
47
|
+
| Condition | Action |
|
|
48
|
+
|-------------------------------------------------------|--------------------|
|
|
49
|
+
| Flow perfectly matches user's message | start flow |
|
|
50
|
+
| Multiple flows are equally strong, relevant matches | disambiguate flows |
|
|
51
|
+
| User's message is unclear or imprecise | disambiguate flows |
|
|
52
|
+
| No flow fits at all, but knowledge base may help | search and reply |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Available Flows and Slots
|
|
57
|
+
Use the following structured data:
|
|
58
|
+
```json
|
|
59
|
+
{"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Current State
|
|
65
|
+
{% if current_flow != None %}Use the following structured data:
|
|
66
|
+
```json
|
|
67
|
+
{"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
|
|
68
|
+
```{% else %}
|
|
69
|
+
You are currently not inside any flow.{% endif %}
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Conversation History
|
|
74
|
+
{{ current_conversation }}
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Task
|
|
79
|
+
Create an action list with one action per line in response to the user's last message: """{{ user_message }}""".
|
|
80
|
+
|
|
81
|
+
Your action list:
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
## Task Description
|
|
2
|
+
Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to off-topic and knowledge requests.
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Available Flows and Slots
|
|
7
|
+
Use the following structured data:
|
|
8
|
+
```json
|
|
9
|
+
{"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Available Actions:
|
|
15
|
+
* `start flow flow_name`: Start a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
|
|
16
|
+
* `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
|
|
17
|
+
* `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: When a message could refer to multiple flows, list the possible flows as options to clarify. Example: `disambiguate flows list_contacts add_contact remove_contact`.
|
|
18
|
+
* `search and reply`: Provide a response from the knowledge base to address the user’s inquiry when no flows fit, including domain knowledge, FAQs, and all off-topic or social messages.
|
|
19
|
+
* `cancel flow`: Cancel the current flow if the user requests it.
|
|
20
|
+
* `repeat message`: Repeat the last bot message.
|
|
21
|
+
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
|
|
22
|
+
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## General Instructions
|
|
27
|
+
### Start Flow
|
|
28
|
+
* Only start a flow if the user's message is clear and fully addressed by that flow's description and purpose.
|
|
29
|
+
* Pay close attention to exact wording and scope in the flow description — do not assume or “stretch” the intended use of a flow.
|
|
30
|
+
### Set Slot
|
|
31
|
+
* Do not fill slots with abstract values or placeholders.
|
|
32
|
+
* For categorical slots try to match the user message with allowed slot values. Use "other" if you cannot match it.
|
|
33
|
+
* Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
|
|
34
|
+
* Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
|
|
35
|
+
### Disambiguate Flows
|
|
36
|
+
* Use `disambiguate flows` when the user's message matches multiple flows and you cannot decide which flow is most appropriate.
|
|
37
|
+
* If the user message is short and not precise enough to start a flow or `search and reply`, disambiguate.
|
|
38
|
+
* If a single flow is a strong/plausible fit, prefer starting that flow directly.
|
|
39
|
+
* If a user's message unambiguously and distinctly matches multiple flows, start all relevant flows at once (rather than disambiguating).
|
|
40
|
+
### Search and Reply
|
|
41
|
+
* Only start `search and reply` if the user intent is clear.
|
|
42
|
+
* Flow Priority: If you are unsure between starting a flow or `search and reply`, always prioritize starting a flow.
|
|
43
|
+
### Cancel Flow
|
|
44
|
+
* Do not cancel any flow unless the user explicitly requests it.
|
|
45
|
+
* Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.
|
|
46
|
+
### General Tips
|
|
47
|
+
* Only use information provided by the user.
|
|
48
|
+
* Strictly adhere to the provided action format.
|
|
49
|
+
* Focus on the last message and take it one step at a time.
|
|
50
|
+
* Use the previous conversation steps only to aid understanding.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Decision Rule Table
|
|
55
|
+
| Condition | Action |
|
|
56
|
+
|-------------------------------------------------------|--------------------|
|
|
57
|
+
| Flow perfectly matches user's message | start flow |
|
|
58
|
+
| Multiple flows are equally strong, relevant matches | disambiguate flows |
|
|
59
|
+
| User's message is unclear or imprecise | disambiguate flows |
|
|
60
|
+
| No flow fits at all, but knowledge base may help | search and reply |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Current State
|
|
65
|
+
{% if current_flow != None %}Use the following structured data:
|
|
66
|
+
```json
|
|
67
|
+
{"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
|
|
68
|
+
```{% else %}
|
|
69
|
+
You are currently not inside any flow.{% endif %}
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Conversation History
|
|
74
|
+
{{ current_conversation }}
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Task
|
|
79
|
+
Create an action list with one action per line in response to the user's last message: """{{ user_message }}""".
|
|
80
|
+
|
|
81
|
+
Your action list:
|
|
@@ -45,29 +45,30 @@ DEFAULT_LLM_CONFIG = {
|
|
|
45
45
|
TIMEOUT_CONFIG_KEY: 7,
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
# TODO: only load the agent prompt template in cases where agents are actually used
|
|
48
49
|
MODEL_PROMPT_MAPPER = {
|
|
49
50
|
f"{OPENAI_PROVIDER}/{MODEL_NAME_GPT_4O_2024_11_20}": (
|
|
50
|
-
"
|
|
51
|
+
"agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2"
|
|
51
52
|
),
|
|
52
53
|
f"{AZURE_OPENAI_PROVIDER}/{MODEL_NAME_GPT_4O_2024_11_20}": (
|
|
53
|
-
"
|
|
54
|
+
"agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2"
|
|
54
55
|
),
|
|
55
56
|
f"{AWS_BEDROCK_PROVIDER}/anthropic.{MODEL_NAME_CLAUDE_3_5_SONNET_20240620}-v1:0": (
|
|
56
|
-
"
|
|
57
|
+
"agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2"
|
|
57
58
|
),
|
|
58
59
|
f"{ANTHROPIC_PROVIDER}/{MODEL_NAME_CLAUDE_3_5_SONNET_20240620}": (
|
|
59
|
-
"
|
|
60
|
+
"agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2"
|
|
60
61
|
),
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
# When model is not configured, then we use the default prompt template
|
|
64
65
|
DEFAULT_COMMAND_PROMPT_TEMPLATE_FILE_NAME = (
|
|
65
|
-
"
|
|
66
|
+
"agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2"
|
|
66
67
|
)
|
|
67
68
|
# When the configured model is not found in the model prompt mapper, then we use the
|
|
68
69
|
# fallback prompt template
|
|
69
70
|
FALLBACK_COMMAND_PROMPT_TEMPLATE_FILE_NAME = (
|
|
70
|
-
"
|
|
71
|
+
"agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2"
|
|
71
72
|
)
|
|
72
73
|
|
|
73
74
|
|
|
@@ -44,25 +44,26 @@ DEFAULT_LLM_CONFIG = {
|
|
|
44
44
|
TIMEOUT_CONFIG_KEY: 7,
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
# TODO: only load the agent prompt template in cases where agents are actually used
|
|
47
48
|
DEFAULT_COMMAND_PROMPT_TEMPLATE_FILE_NAME = (
|
|
48
|
-
"
|
|
49
|
+
"agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2"
|
|
49
50
|
)
|
|
50
51
|
FALLBACK_COMMAND_PROMPT_TEMPLATE_FILE_NAME = (
|
|
51
|
-
"
|
|
52
|
+
"agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2"
|
|
52
53
|
)
|
|
53
54
|
MODEL_PROMPT_MAPPER = {
|
|
54
55
|
f"{OPENAI_PROVIDER}/{MODEL_NAME_GPT_4O_2024_11_20}": (
|
|
55
|
-
"
|
|
56
|
+
"agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2"
|
|
56
57
|
),
|
|
57
58
|
f"{AZURE_OPENAI_PROVIDER}/{MODEL_NAME_GPT_4O_2024_11_20}": (
|
|
58
|
-
"
|
|
59
|
+
"agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2"
|
|
59
60
|
),
|
|
60
61
|
f"{AWS_BEDROCK_PROVIDER}/anthropic."
|
|
61
62
|
f"{MODEL_NAME_CLAUDE_3_5_SONNET_20240620}-v1:0": (
|
|
62
|
-
"
|
|
63
|
+
"agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2"
|
|
63
64
|
),
|
|
64
65
|
f"{ANTHROPIC_PROVIDER}/{MODEL_NAME_CLAUDE_3_5_SONNET_20240620}": (
|
|
65
|
-
"
|
|
66
|
+
"agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2"
|
|
66
67
|
),
|
|
67
68
|
}
|
|
68
69
|
|
rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py
CHANGED
|
@@ -5,6 +5,7 @@ from typing import Any, Dict, List, Literal, Optional, Text
|
|
|
5
5
|
import structlog
|
|
6
6
|
|
|
7
7
|
import rasa.shared.utils.io
|
|
8
|
+
from rasa.core.available_agents import AvailableAgents
|
|
8
9
|
from rasa.dialogue_understanding.commands import (
|
|
9
10
|
CannotHandleCommand,
|
|
10
11
|
Command,
|
|
@@ -44,6 +45,7 @@ from rasa.shared.constants import (
|
|
|
44
45
|
PROMPT_TEMPLATE_CONFIG_KEY,
|
|
45
46
|
ROUTE_TO_CALM_SLOT,
|
|
46
47
|
)
|
|
48
|
+
from rasa.shared.core.events import AgentCompleted
|
|
47
49
|
from rasa.shared.core.flows import FlowsList
|
|
48
50
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
49
51
|
from rasa.shared.exceptions import ProviderClientAPIException
|
|
@@ -396,13 +398,15 @@ class SingleStepBasedLLMCommandGenerator(LLMBasedCommandGenerator, ABC):
|
|
|
396
398
|
current_slot_allowed_values = allowed_values_for_slot(
|
|
397
399
|
tracker.slots.get(current_slot)
|
|
398
400
|
)
|
|
399
|
-
current_conversation = tracker_as_readable_transcript(
|
|
401
|
+
current_conversation = tracker_as_readable_transcript(
|
|
402
|
+
tracker, highlight_agent_turns=True
|
|
403
|
+
)
|
|
400
404
|
latest_user_message = sanitize_message_for_prompt(message.get(TEXT))
|
|
401
405
|
current_conversation += f"\nUSER: {latest_user_message}"
|
|
402
406
|
|
|
403
407
|
inputs = {
|
|
404
408
|
"available_flows": self.prepare_flows_for_template(
|
|
405
|
-
startable_flows, tracker
|
|
409
|
+
startable_flows, tracker, add_agent_info=True
|
|
406
410
|
),
|
|
407
411
|
"current_conversation": current_conversation,
|
|
408
412
|
"flow_slots": flow_slots,
|
|
@@ -412,6 +416,10 @@ class SingleStepBasedLLMCommandGenerator(LLMBasedCommandGenerator, ABC):
|
|
|
412
416
|
"current_slot_type": current_slot_type,
|
|
413
417
|
"current_slot_allowed_values": current_slot_allowed_values,
|
|
414
418
|
"user_message": latest_user_message,
|
|
419
|
+
"active_agent": self._get_active_agent(tracker, top_flow.id)
|
|
420
|
+
if top_flow
|
|
421
|
+
else None,
|
|
422
|
+
"completed_agents": self._get_completed_agents(tracker),
|
|
415
423
|
}
|
|
416
424
|
|
|
417
425
|
return self.compile_template(self.prompt_template).render(**inputs)
|
|
@@ -459,3 +467,34 @@ class SingleStepBasedLLMCommandGenerator(LLMBasedCommandGenerator, ABC):
|
|
|
459
467
|
) -> Optional[str]:
|
|
460
468
|
"""Get the prompt template from the config or the default prompt template."""
|
|
461
469
|
pass
|
|
470
|
+
|
|
471
|
+
def _get_active_agent(
|
|
472
|
+
self, tracker: DialogueStateTracker, active_flow_id: str
|
|
473
|
+
) -> Optional[Dict[str, Any]]:
|
|
474
|
+
agent_frame = tracker.stack.find_active_agent_stack_frame_for_flow(
|
|
475
|
+
active_flow_id
|
|
476
|
+
)
|
|
477
|
+
if agent_frame:
|
|
478
|
+
return self._get_agent_info(agent_frame.agent_id)
|
|
479
|
+
return None
|
|
480
|
+
|
|
481
|
+
def _get_completed_agents(
|
|
482
|
+
self, tracker: DialogueStateTracker
|
|
483
|
+
) -> List[Dict[str, Any]]:
|
|
484
|
+
completed_agents: List[Dict[str, Any]] = []
|
|
485
|
+
for event in reversed(tracker.events):
|
|
486
|
+
if isinstance(event, AgentCompleted):
|
|
487
|
+
agent_info = self._get_agent_info(event.agent_id)
|
|
488
|
+
if agent_info:
|
|
489
|
+
completed_agents.append(agent_info)
|
|
490
|
+
return completed_agents
|
|
491
|
+
|
|
492
|
+
def _get_agent_info(self, agent_id: str) -> Optional[Dict[str, Any]]:
|
|
493
|
+
agent_config = AvailableAgents.get_agent_config(agent_id)
|
|
494
|
+
if agent_config is None:
|
|
495
|
+
return None
|
|
496
|
+
|
|
497
|
+
return {
|
|
498
|
+
"name": agent_config.agent.name,
|
|
499
|
+
"description": agent_config.agent.description,
|
|
500
|
+
}
|
|
@@ -61,19 +61,6 @@ class ActionClarifyFlows(action.Action):
|
|
|
61
61
|
"""Return the flow name."""
|
|
62
62
|
return ACTION_CLARIFY_FLOWS
|
|
63
63
|
|
|
64
|
-
@staticmethod
|
|
65
|
-
def assemble_options_string(names: List[str]) -> str:
|
|
66
|
-
"""Concatenate options to a human-readable string."""
|
|
67
|
-
clarification_message = ""
|
|
68
|
-
for i, name in enumerate(names):
|
|
69
|
-
if i == 0:
|
|
70
|
-
clarification_message += name
|
|
71
|
-
elif i == len(names) - 1:
|
|
72
|
-
clarification_message += f" or {name}"
|
|
73
|
-
else:
|
|
74
|
-
clarification_message += f", {name}"
|
|
75
|
-
return clarification_message
|
|
76
|
-
|
|
77
64
|
async def run(
|
|
78
65
|
self,
|
|
79
66
|
output_channel: "OutputChannel",
|
|
@@ -83,6 +70,8 @@ class ActionClarifyFlows(action.Action):
|
|
|
83
70
|
metadata: Optional[Dict[str, Any]] = None,
|
|
84
71
|
) -> List[Event]:
|
|
85
72
|
"""Correct the slots."""
|
|
73
|
+
from rasa.dialogue_understanding.utils import assemble_options_string
|
|
74
|
+
|
|
86
75
|
stack = tracker.stack
|
|
87
76
|
if not (top := stack.top()):
|
|
88
77
|
structlogger.warning("action.clarify_flows.no_active_flow")
|
|
@@ -92,7 +81,7 @@ class ActionClarifyFlows(action.Action):
|
|
|
92
81
|
structlogger.warning("action.clarify_flows.no_clarification_frame")
|
|
93
82
|
return []
|
|
94
83
|
|
|
95
|
-
options_string =
|
|
84
|
+
options_string = assemble_options_string(top.names, conjunction="or")
|
|
96
85
|
top.clarification_options = options_string
|
|
97
86
|
# since we modified the stack frame, we need to update the stack
|
|
98
87
|
return tracker.create_stack_updated_events(stack)
|