rasa-pro 3.14.0.dev5__py3-none-any.whl → 3.14.0.dev6__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 +8 -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 +684 -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 +72 -0
- rasa/api.py +5 -0
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.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/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/constants.py +6 -0
- rasa/core/actions/action.py +56 -10
- rasa/core/agent.py +19 -1
- rasa/core/available_agents.py +199 -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-63212852.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-eecf6b13.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.js → c4Diagram-3d4e48cf-8f798a9a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-81efba3e.js → classDiagram-70f12bd4-df71a04c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.js → classDiagram-v2-f2320105-9b275968.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-31422447.js → createText-2e5e7dd3-1c669cad.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-b1553799.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-112388d6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-fdebec47.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.js → flowDiagram-66a62f08-6280ede1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-cb4d8723.js → flowchart-elk-definition-4a651766-e1dc03e5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-83f68c51.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-22f8666f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-ca9e6217.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.js → index-3862675e-c5ceb692.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-3e293924.js +1353 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-64154b83.js → infoDiagram-f8f76790-faa9999b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-c4dda8d9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-d4307784.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-0567aaa7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-c11b95cf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-0c7d3ca9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-34b433fa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-4cab816e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-8c22fa9e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-70ce9e8e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-fbcd7fc9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-45f05ea6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-beab1ea6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-2f29dbd5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-951eac83.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-897fbfdd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-d667fac1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e3205144.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.js → xychartDiagram-e933f94c-4abeb0e2.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 +11 -10
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +3 -12
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +6 -4
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +4 -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 +470 -45
- 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 +97 -4
- 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 +164 -8
- rasa/dialogue_understanding/commands/utils.py +6 -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/continue_interrupted.py +163 -1
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +52 -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 +17 -2
- 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/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 +5 -0
- rasa/shared/core/constants.py +12 -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/llm.py +28 -5
- rasa/shared/utils/mcp/server_connection.py +166 -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.dev6.dist-info}/METADATA +14 -17
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/RECORD +201 -432
- 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.dev6.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/entry_points.txt +0 -0
|
@@ -6,6 +6,8 @@ from collections import defaultdict
|
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from typing import List, Optional, Set, Text
|
|
8
8
|
|
|
9
|
+
from jinja2 import Template
|
|
10
|
+
|
|
9
11
|
from rasa.shared.constants import (
|
|
10
12
|
RASA_DEFAULT_FLOW_PATTERN_PREFIX,
|
|
11
13
|
RASA_PATTERN_CHITCHAT,
|
|
@@ -35,6 +37,7 @@ from rasa.shared.core.flows.utils import (
|
|
|
35
37
|
from rasa.shared.exceptions import RasaException
|
|
36
38
|
|
|
37
39
|
if typing.TYPE_CHECKING:
|
|
40
|
+
from rasa.shared.core.domain import Domain
|
|
38
41
|
from rasa.shared.core.flows.flows_list import FlowsList
|
|
39
42
|
|
|
40
43
|
FLOW_ID_REGEX = r"""^[a-zA-Z0-9_][a-zA-Z0-9_-]*?$"""
|
|
@@ -107,6 +110,26 @@ class DuplicatedStepIdException(RasaException):
|
|
|
107
110
|
)
|
|
108
111
|
|
|
109
112
|
|
|
113
|
+
class InvalidExitIfConditionException(RasaException):
|
|
114
|
+
"""Raised when an exit_if condition is invalid."""
|
|
115
|
+
|
|
116
|
+
def __init__(self, step_id: str, flow_id: str, condition: str, reason: str) -> None:
|
|
117
|
+
"""Initializes the exception."""
|
|
118
|
+
self.step_id = step_id
|
|
119
|
+
self.flow_id = flow_id
|
|
120
|
+
self.condition = condition
|
|
121
|
+
self.reason = reason
|
|
122
|
+
|
|
123
|
+
def __str__(self) -> str:
|
|
124
|
+
"""Return a string representation of the exception."""
|
|
125
|
+
return (
|
|
126
|
+
f"Invalid exit_if condition '{self.condition}' in step '{self.step_id}' "
|
|
127
|
+
f"of flow '{self.flow_id}': {self.reason}. "
|
|
128
|
+
f"Please ensure that exit_if conditions contain at least one slot "
|
|
129
|
+
f"reference and use only defined slots with valid predicates."
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
|
|
110
133
|
class DuplicatedFlowIdException(RasaException):
|
|
111
134
|
"""Raised when a flow is using the same id as another flow."""
|
|
112
135
|
|
|
@@ -261,7 +284,7 @@ class NoLinkAllowedInCalledFlowException(RasaException):
|
|
|
261
284
|
)
|
|
262
285
|
|
|
263
286
|
|
|
264
|
-
class
|
|
287
|
+
class UnresolvedLinkFlowException(RasaException):
|
|
265
288
|
"""Raised when a flow is called or linked from another flow but doesn't exist."""
|
|
266
289
|
|
|
267
290
|
def __init__(self, flow_id: str, calling_flow_id: str, step_id: str) -> None:
|
|
@@ -273,13 +296,37 @@ class UnresolvedFlowException(RasaException):
|
|
|
273
296
|
def __str__(self) -> str:
|
|
274
297
|
"""Return a string representation of the exception."""
|
|
275
298
|
return (
|
|
276
|
-
f"Flow '{self.flow_id}' is
|
|
299
|
+
f"Flow '{self.flow_id}' is linked from flow "
|
|
277
300
|
f"'{self.calling_flow_id}' in step '{self.step_id}', "
|
|
278
301
|
f"but it doesn't exist. "
|
|
279
302
|
f"Please make sure that a flow with id '{self.flow_id}' exists."
|
|
280
303
|
)
|
|
281
304
|
|
|
282
305
|
|
|
306
|
+
class UnresolvedCallStepException(RasaException):
|
|
307
|
+
"""Valid call step should have a reference to an existing flow or agent.
|
|
308
|
+
Raised when it does not.
|
|
309
|
+
"""
|
|
310
|
+
|
|
311
|
+
def __init__(
|
|
312
|
+
self, call_step_argument: str, calling_flow_id: str, step_id: str
|
|
313
|
+
) -> None:
|
|
314
|
+
"""Initializes the exception."""
|
|
315
|
+
self.call_step_argument = call_step_argument
|
|
316
|
+
self.calling_flow_id = calling_flow_id
|
|
317
|
+
self.step_id = step_id
|
|
318
|
+
|
|
319
|
+
def __str__(self) -> str:
|
|
320
|
+
"""Return a string representation of the exception."""
|
|
321
|
+
return (
|
|
322
|
+
f"The call step '{self.step_id}' in flow '{self.calling_flow_id}' "
|
|
323
|
+
f"is invalid: there is no flow or agent with the "
|
|
324
|
+
f"id '{self.call_step_argument}'. "
|
|
325
|
+
f"Please make sure that the call step argument is a valid flow id "
|
|
326
|
+
f"or an agent id."
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
|
|
283
330
|
class UnresolvedFlowStepIdException(RasaException):
|
|
284
331
|
"""Raised when a flow step is referenced, but its id can not be resolved."""
|
|
285
332
|
|
|
@@ -562,15 +609,88 @@ def validate_link_in_call_restriction(flows: "FlowsList") -> None:
|
|
|
562
609
|
raise NoLinkAllowedInCalledFlowException(step.id, flow.id, step.call)
|
|
563
610
|
|
|
564
611
|
|
|
565
|
-
def
|
|
566
|
-
"""Validates that all called flows exist
|
|
612
|
+
def validate_call_steps(flows: "FlowsList") -> None:
|
|
613
|
+
"""Validates that all called flows/agents exist and additional properties
|
|
614
|
+
are valid.
|
|
615
|
+
"""
|
|
567
616
|
for flow in flows.underlying_flows:
|
|
568
617
|
for step in flow.steps:
|
|
569
618
|
if not isinstance(step, CallFlowStep):
|
|
570
619
|
continue
|
|
571
620
|
|
|
572
|
-
|
|
573
|
-
|
|
621
|
+
_is_step_calling_agent = step.is_calling_agent()
|
|
622
|
+
if (
|
|
623
|
+
not _is_step_calling_agent
|
|
624
|
+
and flows.flow_by_id(step.call) is None
|
|
625
|
+
and not step.is_calling_mcp_tool()
|
|
626
|
+
):
|
|
627
|
+
raise UnresolvedCallStepException(step.call, flow.id, step.id)
|
|
628
|
+
|
|
629
|
+
if step.exit_if and not _is_step_calling_agent:
|
|
630
|
+
# exit_if is only allowed for call steps that call an agent
|
|
631
|
+
raise RasaException(
|
|
632
|
+
f"Call step '{step.id}' in flow '{flow.id}' has an 'exit_if' "
|
|
633
|
+
f"condition, but it is not calling an agent. "
|
|
634
|
+
f"'exit_if' is only allowed for call steps that call an agent."
|
|
635
|
+
)
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
def validate_exit_if_conditions(
|
|
639
|
+
flows: "FlowsList", domain: Optional["Domain"] = None
|
|
640
|
+
) -> None:
|
|
641
|
+
"""Validates that exit_if conditions are valid.
|
|
642
|
+
|
|
643
|
+
This function validates:
|
|
644
|
+
- Each condition contains at least one slot reference
|
|
645
|
+
- Only defined slots are used within the conditions
|
|
646
|
+
- The predicates are valid
|
|
647
|
+
|
|
648
|
+
Args:
|
|
649
|
+
flows: The flows to validate.
|
|
650
|
+
domain: The domain with slot definitions. If None, slot validation is skipped.
|
|
651
|
+
|
|
652
|
+
Raises:
|
|
653
|
+
InvalidExitIfConditionException: If any exit_if condition is invalid.
|
|
654
|
+
"""
|
|
655
|
+
for flow in flows.underlying_flows:
|
|
656
|
+
for step in flow.steps:
|
|
657
|
+
if not isinstance(step, CallFlowStep) or not step.exit_if:
|
|
658
|
+
continue
|
|
659
|
+
|
|
660
|
+
for condition in step.exit_if:
|
|
661
|
+
if not isinstance(condition, str):
|
|
662
|
+
raise InvalidExitIfConditionException(
|
|
663
|
+
step.id, flow.id, str(condition), "Condition must be a string"
|
|
664
|
+
)
|
|
665
|
+
|
|
666
|
+
# Check if condition contains at least one slot reference
|
|
667
|
+
slot_references = re.findall(r"\bslots\.\w+", condition)
|
|
668
|
+
if not slot_references:
|
|
669
|
+
raise InvalidExitIfConditionException(
|
|
670
|
+
step.id,
|
|
671
|
+
flow.id,
|
|
672
|
+
condition,
|
|
673
|
+
"Condition must contain at least one slot reference "
|
|
674
|
+
"(e.g., 'slots.slot_name')",
|
|
675
|
+
)
|
|
676
|
+
|
|
677
|
+
# Validate slot names if domain is provided
|
|
678
|
+
if domain:
|
|
679
|
+
domain_slots = {slot.name: slot for slot in domain.slots}
|
|
680
|
+
for slot_ref in slot_references:
|
|
681
|
+
slot_name = slot_ref.split(".")[1]
|
|
682
|
+
if slot_name not in domain_slots:
|
|
683
|
+
raise InvalidExitIfConditionException(
|
|
684
|
+
step.id,
|
|
685
|
+
flow.id,
|
|
686
|
+
condition,
|
|
687
|
+
f"Slot '{slot_name}' is not defined in the domain",
|
|
688
|
+
)
|
|
689
|
+
|
|
690
|
+
# Validate predicate syntax using pypred
|
|
691
|
+
_validate_predicate_syntax_with_pypred(
|
|
692
|
+
step.id, flow.id, condition
|
|
693
|
+
)
|
|
574
694
|
|
|
575
695
|
|
|
576
696
|
def validate_linked_flows_exists(flows: "FlowsList") -> None:
|
|
@@ -594,7 +714,7 @@ def validate_linked_flows_exists(flows: "FlowsList") -> None:
|
|
|
594
714
|
flow.is_rasa_default_flow and step.link == RASA_PATTERN_CHITCHAT
|
|
595
715
|
)
|
|
596
716
|
):
|
|
597
|
-
raise
|
|
717
|
+
raise UnresolvedLinkFlowException(step.link, flow.id, step.id)
|
|
598
718
|
|
|
599
719
|
|
|
600
720
|
def validate_patterns_are_not_called_or_linked(flows: "FlowsList") -> None:
|
|
@@ -751,3 +871,53 @@ def validate_slot_persistence_configuration(flow: Flow) -> None:
|
|
|
751
871
|
result = _is_persist_slots_valid(persist_slots, flow_slots)
|
|
752
872
|
if not result.is_valid:
|
|
753
873
|
raise InvalidPersistSlotsException(flow_id, result.invalid_slots)
|
|
874
|
+
|
|
875
|
+
|
|
876
|
+
def _validate_predicate_syntax_with_pypred(
|
|
877
|
+
step_id: str, flow_id: str, condition: str
|
|
878
|
+
) -> None:
|
|
879
|
+
"""Validates predicate syntax using pypred.
|
|
880
|
+
|
|
881
|
+
This function validates that the exit_if condition has valid predicate syntax.
|
|
882
|
+
Pypred catches syntax errors like double operators, invalid expressions, etc.
|
|
883
|
+
|
|
884
|
+
Args:
|
|
885
|
+
step_id: The ID of the step containing the condition.
|
|
886
|
+
flow_id: The ID of the flow containing the step.
|
|
887
|
+
condition: The exit_if condition string.
|
|
888
|
+
|
|
889
|
+
Raises:
|
|
890
|
+
InvalidExitIfConditionException: If pypred detects syntax errors.
|
|
891
|
+
"""
|
|
892
|
+
try:
|
|
893
|
+
from pypred import Predicate
|
|
894
|
+
|
|
895
|
+
# Create a simple test context for syntax validation.
|
|
896
|
+
# This context works with all slot types since it's only used for:
|
|
897
|
+
# 1. Template rendering: Basic structure for Jinja2 template rendering
|
|
898
|
+
# 2. Syntax validation: Pypred validates predicate syntax
|
|
899
|
+
# without actual slot values
|
|
900
|
+
test_context = {"slots": {"test_slot": "test_value"}}
|
|
901
|
+
rendered_template = Template(condition).render(test_context)
|
|
902
|
+
|
|
903
|
+
# Let pypred validate the predicate syntax
|
|
904
|
+
predicate = Predicate(rendered_template)
|
|
905
|
+
if not predicate.is_valid():
|
|
906
|
+
raise InvalidExitIfConditionException(
|
|
907
|
+
step_id,
|
|
908
|
+
flow_id,
|
|
909
|
+
condition,
|
|
910
|
+
"Invalid predicate syntax",
|
|
911
|
+
)
|
|
912
|
+
|
|
913
|
+
except ImportError:
|
|
914
|
+
# pypred not available, skip validation
|
|
915
|
+
pass
|
|
916
|
+
except Exception as e:
|
|
917
|
+
# Re-raise pypred errors as predicate syntax errors
|
|
918
|
+
raise InvalidExitIfConditionException(
|
|
919
|
+
step_id,
|
|
920
|
+
flow_id,
|
|
921
|
+
condition,
|
|
922
|
+
f"Invalid predicate syntax: {e}",
|
|
923
|
+
)
|
|
@@ -127,7 +127,7 @@ class YAMLFlowsReader:
|
|
|
127
127
|
If a schema does not have a `schema_name` set, we will use the
|
|
128
128
|
`type` instead as a fallback.
|
|
129
129
|
"""
|
|
130
|
-
return schema.get("schema_name", schema.get("type"))
|
|
130
|
+
return str(schema.get("schema_name", schema.get("type") or "unknown"))
|
|
131
131
|
|
|
132
132
|
def schema_names(schemas: List[Dict[str, Any]]) -> List[str]:
|
|
133
133
|
"""Get the names of the schemas.
|
|
@@ -262,9 +262,12 @@ class YamlFlowsWriter:
|
|
|
262
262
|
Returns:
|
|
263
263
|
The dumped YAML.
|
|
264
264
|
"""
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
265
|
+
dump = {}
|
|
266
|
+
for flow in flows:
|
|
267
|
+
dumped_flow = get_flow_as_json(flow, should_clean_json)
|
|
268
|
+
del dumped_flow["id"]
|
|
269
|
+
dump[flow.id] = dumped_flow
|
|
270
|
+
return dump_obj_as_yaml_to_string({KEY_FLOWS: dump})
|
|
268
271
|
|
|
269
272
|
@staticmethod
|
|
270
273
|
def dump(
|
|
@@ -415,24 +418,13 @@ def process_yaml_content(yaml_content: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
415
418
|
|
|
416
419
|
# Under the "flows" key certain keys cannot have metadata
|
|
417
420
|
_process_keys_recursively(
|
|
418
|
-
yaml_content["flows"],
|
|
421
|
+
yaml_content["flows"],
|
|
422
|
+
["nlu_trigger", "set_slots", "metadata", "mapping", "exit_if"],
|
|
419
423
|
)
|
|
420
424
|
|
|
421
425
|
return yaml_content
|
|
422
426
|
|
|
423
427
|
|
|
424
|
-
def get_flows_as_json(
|
|
425
|
-
flows: FlowsList, should_clean_json: bool = False
|
|
426
|
-
) -> Dict[str, Any]:
|
|
427
|
-
"""Get the flows as a JSON dictionary."""
|
|
428
|
-
dump = {}
|
|
429
|
-
for flow in flows:
|
|
430
|
-
dumped_flow = get_flow_as_json(flow, should_clean_json)
|
|
431
|
-
del dumped_flow["id"]
|
|
432
|
-
dump[flow.id] = dumped_flow
|
|
433
|
-
return dump
|
|
434
|
-
|
|
435
|
-
|
|
436
428
|
def get_flow_as_json(flow: Flow, should_clean_json: bool = False) -> Dict[str, Any]:
|
|
437
429
|
"""Clean the Flow JSON by removing default values and empty fields.
|
|
438
430
|
|
rasa/shared/core/slots.py
CHANGED
|
@@ -68,9 +68,9 @@ class SlotRejection:
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
class SlotValidation(BaseModel):
|
|
71
|
-
rejections: List[SlotRejection] = Field(alias=REJECTIONS)
|
|
71
|
+
rejections: List[SlotRejection] = Field(alias=REJECTIONS) # type: ignore[literal-required]
|
|
72
72
|
"""how the slot value is validated using predicate evaluation."""
|
|
73
|
-
refill_utter: str = Field(alias=REFILL_UTTER)
|
|
73
|
+
refill_utter: str = Field(alias=REFILL_UTTER) # type: ignore[literal-required]
|
|
74
74
|
"""The utterance that the assistant uses to ask for the slot."""
|
|
75
75
|
|
|
76
76
|
@staticmethod
|
|
@@ -273,14 +273,10 @@ class Slot(ABC):
|
|
|
273
273
|
try:
|
|
274
274
|
return rasa.shared.utils.common.class_from_module_path(type_name)
|
|
275
275
|
except (ImportError, AttributeError):
|
|
276
|
-
known_types = [
|
|
277
|
-
cls.type_name for cls in rasa.shared.utils.common.all_subclasses(Slot)
|
|
278
|
-
]
|
|
279
276
|
raise InvalidSlotTypeException(
|
|
280
277
|
f"Failed to find slot type, '{type_name}' is neither a known type nor "
|
|
281
278
|
f"user-defined. If you are creating your own slot type, make "
|
|
282
279
|
f"sure its module path is correct. "
|
|
283
|
-
f"Known types: {', '.join(known_types)} "
|
|
284
280
|
f"You can find all build in types at {DOCS_URL_SLOTS}"
|
|
285
281
|
)
|
|
286
282
|
|
rasa/shared/core/trackers.py
CHANGED
|
@@ -849,7 +849,7 @@ class DialogueStateTracker:
|
|
|
849
849
|
action_names_to_exclude: Optional[List[Text]] = None,
|
|
850
850
|
skip: int = 0,
|
|
851
851
|
event_verbosity: EventVerbosity = EventVerbosity.APPLIED,
|
|
852
|
-
) -> Optional[
|
|
852
|
+
) -> Optional[Event]:
|
|
853
853
|
"""Gets the last event of a given type which was actually applied.
|
|
854
854
|
|
|
855
855
|
Args:
|
|
@@ -889,9 +889,12 @@ class DialogueStateTracker:
|
|
|
889
889
|
Returns:
|
|
890
890
|
`True` if last executed action had name `name`, otherwise `False`.
|
|
891
891
|
"""
|
|
892
|
-
|
|
892
|
+
last_event = self.get_last_event_for(
|
|
893
893
|
ActionExecuted, action_names_to_exclude=[ACTION_LISTEN_NAME], skip=skip
|
|
894
894
|
)
|
|
895
|
+
last: Optional[ActionExecuted] = (
|
|
896
|
+
last_event if isinstance(last_event, ActionExecuted) else None
|
|
897
|
+
)
|
|
895
898
|
return last is not None and last.action_name == name
|
|
896
899
|
|
|
897
900
|
###
|
rasa/shared/exceptions.py
CHANGED
|
@@ -169,3 +169,7 @@ class ProviderClientValidationError(RasaException):
|
|
|
169
169
|
|
|
170
170
|
class FinetuningDataPreparationException(RasaException):
|
|
171
171
|
"""Raised when there is an error in data preparation for fine-tuning."""
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class AgentInitializationException(RasaException):
|
|
175
|
+
"""Raised when there is an error during the initialization of an agent."""
|
|
@@ -207,12 +207,6 @@ class TrainingDataImporter(ABC):
|
|
|
207
207
|
)
|
|
208
208
|
]
|
|
209
209
|
|
|
210
|
-
return TrainingDataImporter.wrap_in_builtins(importers)
|
|
211
|
-
|
|
212
|
-
@staticmethod
|
|
213
|
-
def wrap_in_builtins(
|
|
214
|
-
importers: List["TrainingDataImporter"],
|
|
215
|
-
) -> "TrainingDataImporter":
|
|
216
210
|
return LanguageImporter(
|
|
217
211
|
E2EImporter(
|
|
218
212
|
FlowSyncImporter(ResponsesSyncImporter(CombinedDataImporter(importers)))
|
rasa/shared/importers/rasa.py
CHANGED
|
@@ -74,7 +74,7 @@ class RasaFileImporter(TrainingDataImporter):
|
|
|
74
74
|
@cached_method
|
|
75
75
|
def get_flows(self) -> FlowsList:
|
|
76
76
|
"""Retrieves training stories / rules (see parent class for full docstring)."""
|
|
77
|
-
return utils.flows_from_paths(self._flow_files)
|
|
77
|
+
return utils.flows_from_paths(self._flow_files, self.get_domain())
|
|
78
78
|
|
|
79
79
|
@cached_method
|
|
80
80
|
def get_conversation_tests(self) -> StoryGraph:
|
rasa/shared/importers/utils.py
CHANGED
|
@@ -1,37 +1,9 @@
|
|
|
1
|
-
from typing import
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
1
|
+
from typing import Iterable, List, Optional, Text
|
|
4
2
|
|
|
5
3
|
from rasa.shared.core.domain import Domain
|
|
6
4
|
from rasa.shared.core.flows import FlowsList
|
|
7
|
-
from rasa.shared.core.flows.yaml_flows_io import KEY_FLOWS, get_flows_as_json
|
|
8
5
|
from rasa.shared.core.training_data.structures import StoryGraph
|
|
9
|
-
from rasa.shared.importers.importer import TrainingDataImporter
|
|
10
|
-
from rasa.shared.nlu.training_data.formats.rasa_yaml import RasaYAMLWriter
|
|
11
6
|
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
12
|
-
from rasa.utils.json_utils import extract_values
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class CALMUserData(BaseModel):
|
|
16
|
-
"""All pieces that will be uploaded to Rasa Studio."""
|
|
17
|
-
|
|
18
|
-
flows: Dict[str, Any] = Field(default_factory=dict)
|
|
19
|
-
domain: Dict[str, Any] = Field(default_factory=dict)
|
|
20
|
-
config: Dict[str, Any] = Field(default_factory=dict)
|
|
21
|
-
endpoints: Dict[str, Any] = Field(default_factory=dict)
|
|
22
|
-
nlu: Dict[str, Any] = Field(default_factory=dict)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
DOMAIN_KEYS = [
|
|
26
|
-
"version",
|
|
27
|
-
"actions",
|
|
28
|
-
"responses",
|
|
29
|
-
"slots",
|
|
30
|
-
"intents",
|
|
31
|
-
"entities",
|
|
32
|
-
"forms",
|
|
33
|
-
"session_config",
|
|
34
|
-
]
|
|
35
7
|
|
|
36
8
|
|
|
37
9
|
def training_data_from_paths(paths: Iterable[Text], language: Text) -> TrainingData:
|
|
@@ -51,8 +23,14 @@ def story_graph_from_paths(
|
|
|
51
23
|
return StoryGraph(story_steps)
|
|
52
24
|
|
|
53
25
|
|
|
54
|
-
def flows_from_paths(files: List[Text]) -> FlowsList:
|
|
55
|
-
"""Returns the flows from paths.
|
|
26
|
+
def flows_from_paths(files: List[Text], domain: Optional[Domain] = None) -> FlowsList:
|
|
27
|
+
"""Returns the flows from paths.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
files: List of flow file paths to load.
|
|
31
|
+
domain: Optional domain for validation. If provided, exit_if conditions
|
|
32
|
+
will be validated against defined slots.
|
|
33
|
+
"""
|
|
56
34
|
from rasa.shared.core.flows.yaml_flows_io import YAMLFlowsReader
|
|
57
35
|
|
|
58
36
|
flows = FlowsList(underlying_flows=[])
|
|
@@ -60,53 +38,5 @@ def flows_from_paths(files: List[Text]) -> FlowsList:
|
|
|
60
38
|
flows = flows.merge(
|
|
61
39
|
YAMLFlowsReader.read_from_file(file), ignore_duplicates=False
|
|
62
40
|
)
|
|
63
|
-
flows.validate()
|
|
41
|
+
flows.validate(domain)
|
|
64
42
|
return flows
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
def extract_calm_import_parts_from_importer(
|
|
68
|
-
importer: TrainingDataImporter,
|
|
69
|
-
config: Optional[Dict[str, Any]] = None,
|
|
70
|
-
endpoints: Optional[Dict[str, Any]] = None,
|
|
71
|
-
) -> CALMUserData:
|
|
72
|
-
"""Extracts CALMUserData from a TrainingDataImporter.
|
|
73
|
-
|
|
74
|
-
Args:
|
|
75
|
-
importer: The training data importer
|
|
76
|
-
data_paths: The path(s) to the training data for flows
|
|
77
|
-
config: Optional config dict, if not provided will use importer.get_config()
|
|
78
|
-
endpoints: Optional endpoints dict, defaults to empty dict
|
|
79
|
-
|
|
80
|
-
Returns:
|
|
81
|
-
CALMUserData containing flows, domain, config, endpoints, and nlu data
|
|
82
|
-
"""
|
|
83
|
-
# Extract config
|
|
84
|
-
if config is None:
|
|
85
|
-
config = importer.get_config()
|
|
86
|
-
|
|
87
|
-
# Extract domain
|
|
88
|
-
domain_from_files = importer.get_user_domain().as_dict()
|
|
89
|
-
domain = extract_values(domain_from_files, DOMAIN_KEYS)
|
|
90
|
-
|
|
91
|
-
# Extract flows
|
|
92
|
-
flows = importer.get_user_flows()
|
|
93
|
-
flows_dict = {KEY_FLOWS: get_flows_as_json(flows)}
|
|
94
|
-
|
|
95
|
-
# Extract NLU data
|
|
96
|
-
nlu_data = importer.get_nlu_data()
|
|
97
|
-
nlu_examples = nlu_data.filter_training_examples(
|
|
98
|
-
lambda ex: ex.get("intent") in nlu_data.intents
|
|
99
|
-
)
|
|
100
|
-
nlu_dict = RasaYAMLWriter().training_data_to_dict(nlu_examples)
|
|
101
|
-
|
|
102
|
-
# Use provided endpoints or default to empty dict
|
|
103
|
-
if endpoints is None:
|
|
104
|
-
endpoints = {}
|
|
105
|
-
|
|
106
|
-
return CALMUserData(
|
|
107
|
-
flows=flows_dict or {},
|
|
108
|
-
domain=domain or {},
|
|
109
|
-
config=config or {},
|
|
110
|
-
endpoints=endpoints or {},
|
|
111
|
-
nlu=nlu_dict or {},
|
|
112
|
-
)
|
rasa/shared/providers/_utils.py
CHANGED
|
@@ -1,103 +1,87 @@
|
|
|
1
1
|
from typing import Any, Dict, Optional
|
|
2
2
|
|
|
3
|
-
import boto3
|
|
4
3
|
import structlog
|
|
5
|
-
from
|
|
4
|
+
from litellm import validate_environment
|
|
6
5
|
|
|
7
6
|
from rasa.shared.constants import (
|
|
8
7
|
API_BASE_CONFIG_KEY,
|
|
9
8
|
API_VERSION_CONFIG_KEY,
|
|
10
9
|
AWS_ACCESS_KEY_ID_CONFIG_KEY,
|
|
11
|
-
|
|
10
|
+
AWS_ACCESS_KEY_ID_ENV_VAR,
|
|
12
11
|
AWS_REGION_NAME_CONFIG_KEY,
|
|
13
|
-
|
|
14
|
-
AWS_SAGEMAKER_PROVIDER,
|
|
12
|
+
AWS_REGION_NAME_ENV_VAR,
|
|
15
13
|
AWS_SECRET_ACCESS_KEY_CONFIG_KEY,
|
|
14
|
+
AWS_SECRET_ACCESS_KEY_ENV_VAR,
|
|
16
15
|
AWS_SESSION_TOKEN_CONFIG_KEY,
|
|
16
|
+
AWS_SESSION_TOKEN_ENV_VAR,
|
|
17
17
|
AZURE_API_BASE_ENV_VAR,
|
|
18
18
|
AZURE_API_VERSION_ENV_VAR,
|
|
19
19
|
DEPLOYMENT_CONFIG_KEY,
|
|
20
20
|
)
|
|
21
21
|
from rasa.shared.exceptions import ProviderClientValidationError
|
|
22
|
-
from rasa.shared.
|
|
22
|
+
from rasa.shared.providers.embedding._base_litellm_embedding_client import (
|
|
23
|
+
_VALIDATE_ENVIRONMENT_MISSING_KEYS_KEY,
|
|
24
|
+
)
|
|
23
25
|
|
|
24
26
|
structlogger = structlog.get_logger()
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
def validate_aws_setup_for_litellm_clients(
|
|
28
|
-
litellm_model_name: str, litellm_call_kwargs:
|
|
30
|
+
litellm_model_name: str, litellm_call_kwargs: dict, source_log: str
|
|
29
31
|
) -> None:
|
|
30
|
-
"""Validates the AWS setup for LiteLLM clients to ensure
|
|
32
|
+
"""Validates the AWS setup for LiteLLM clients to ensure all required
|
|
33
|
+
environment variables or corresponding call kwargs are set.
|
|
31
34
|
|
|
32
35
|
Args:
|
|
33
36
|
litellm_model_name (str): The name of the LiteLLM model being validated.
|
|
34
37
|
litellm_call_kwargs (dict): Additional keyword arguments passed to the client,
|
|
35
38
|
which may include configuration values for AWS credentials.
|
|
36
39
|
source_log (str): The source log identifier for structured logging.
|
|
37
|
-
provider (str): The provider for which the validation is being performed.
|
|
38
40
|
|
|
39
41
|
Raises:
|
|
40
42
|
ProviderClientValidationError: If any required AWS environment variable
|
|
41
43
|
or corresponding configuration key is missing.
|
|
42
44
|
"""
|
|
43
|
-
# expand environment variables if referenced in the config
|
|
44
|
-
resolved_litellm_call_kwargs: Dict = resolve_environment_variables(
|
|
45
|
-
litellm_call_kwargs
|
|
46
|
-
) # type: ignore[assignment]
|
|
47
|
-
|
|
48
|
-
# boto3 only accepts bedrock and sagemaker as valid clients
|
|
49
|
-
# therefore we need to convert the provider name if it is defined
|
|
50
|
-
# as sagemaker_chat
|
|
51
|
-
provider = (
|
|
52
|
-
AWS_SAGEMAKER_PROVIDER if provider == AWS_SAGEMAKER_CHAT_PROVIDER else provider
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
# if the AWS credentials are defined in the endpoints yaml model config,
|
|
56
|
-
# either as referenced secret env vars or direct values, we need to pass them
|
|
57
|
-
# to the boto3 client to ensure that the client can connect to the AWS service.
|
|
58
|
-
additional_kwargs: Dict[str, Any] = {}
|
|
59
|
-
if AWS_ACCESS_KEY_ID_CONFIG_KEY in resolved_litellm_call_kwargs:
|
|
60
|
-
additional_kwargs[AWS_ACCESS_KEY_ID_CONFIG_KEY] = resolved_litellm_call_kwargs[
|
|
61
|
-
AWS_ACCESS_KEY_ID_CONFIG_KEY
|
|
62
|
-
]
|
|
63
|
-
if AWS_SECRET_ACCESS_KEY_CONFIG_KEY in resolved_litellm_call_kwargs:
|
|
64
|
-
additional_kwargs[AWS_SECRET_ACCESS_KEY_CONFIG_KEY] = (
|
|
65
|
-
resolved_litellm_call_kwargs[AWS_SECRET_ACCESS_KEY_CONFIG_KEY]
|
|
66
|
-
)
|
|
67
|
-
if AWS_SESSION_TOKEN_CONFIG_KEY in resolved_litellm_call_kwargs:
|
|
68
|
-
additional_kwargs[AWS_SESSION_TOKEN_CONFIG_KEY] = resolved_litellm_call_kwargs[
|
|
69
|
-
AWS_SESSION_TOKEN_CONFIG_KEY
|
|
70
|
-
]
|
|
71
|
-
if AWS_REGION_NAME_CONFIG_KEY in resolved_litellm_call_kwargs:
|
|
72
|
-
additional_kwargs["region_name"] = resolved_litellm_call_kwargs[
|
|
73
|
-
AWS_REGION_NAME_CONFIG_KEY
|
|
74
|
-
]
|
|
75
45
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
46
|
+
# Mapping of environment variable names to their corresponding config keys
|
|
47
|
+
envs_to_args = {
|
|
48
|
+
AWS_ACCESS_KEY_ID_ENV_VAR: AWS_ACCESS_KEY_ID_CONFIG_KEY,
|
|
49
|
+
AWS_SECRET_ACCESS_KEY_ENV_VAR: AWS_SECRET_ACCESS_KEY_CONFIG_KEY,
|
|
50
|
+
AWS_REGION_NAME_ENV_VAR: AWS_REGION_NAME_CONFIG_KEY,
|
|
51
|
+
AWS_SESSION_TOKEN_ENV_VAR: AWS_SESSION_TOKEN_CONFIG_KEY,
|
|
52
|
+
}
|
|
81
53
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
54
|
+
# Validate the environment setup for the model
|
|
55
|
+
validation_info = validate_environment(litellm_model_name)
|
|
56
|
+
missing_environment_variables = validation_info.get(
|
|
57
|
+
_VALIDATE_ENVIRONMENT_MISSING_KEYS_KEY, []
|
|
58
|
+
)
|
|
59
|
+
# Filter out missing environment variables that have been set trough arguments
|
|
60
|
+
# in extra parameters
|
|
61
|
+
missing_environment_variables = [
|
|
62
|
+
missing_env_var
|
|
63
|
+
for missing_env_var in missing_environment_variables
|
|
64
|
+
if litellm_call_kwargs.get(envs_to_args.get(missing_env_var)) is None
|
|
65
|
+
]
|
|
88
66
|
|
|
89
|
-
|
|
67
|
+
if missing_environment_variables:
|
|
68
|
+
missing_environment_details = [
|
|
69
|
+
(
|
|
70
|
+
f"'{missing_env_var}' environment variable or "
|
|
71
|
+
f"'{envs_to_args.get(missing_env_var)}' config key"
|
|
72
|
+
)
|
|
73
|
+
for missing_env_var in missing_environment_variables
|
|
74
|
+
]
|
|
90
75
|
event_info = (
|
|
91
|
-
f"
|
|
92
|
-
f"
|
|
93
|
-
f"
|
|
94
|
-
f"
|
|
76
|
+
f"The following environment variables or configuration keys are "
|
|
77
|
+
f"missing: "
|
|
78
|
+
f"{', '.join(missing_environment_details)}. "
|
|
79
|
+
f"These settings are required for API calls."
|
|
95
80
|
)
|
|
96
81
|
structlogger.error(
|
|
97
|
-
f"{source_log}.
|
|
82
|
+
f"{source_log}.validate_aws_environment_variables",
|
|
98
83
|
event_info=event_info,
|
|
99
|
-
|
|
100
|
-
model_name=litellm_model_name,
|
|
84
|
+
missing_environment_variables=missing_environment_variables,
|
|
101
85
|
)
|
|
102
86
|
raise ProviderClientValidationError(event_info)
|
|
103
87
|
|
|
@@ -37,7 +37,6 @@ class DefaultLiteLLMEmbeddingClient(_BaseLiteLLMEmbeddingClient):
|
|
|
37
37
|
|
|
38
38
|
@classmethod
|
|
39
39
|
def from_config(cls, config: Dict[str, Any]) -> "DefaultLiteLLMEmbeddingClient":
|
|
40
|
-
"""Creates a DefaultLiteLLMEmbeddingClient instance from a config dict."""
|
|
41
40
|
default_config = DefaultLiteLLMClientConfig.from_dict(config)
|
|
42
41
|
return cls(
|
|
43
42
|
model=default_config.model,
|
|
@@ -122,7 +121,6 @@ class DefaultLiteLLMEmbeddingClient(_BaseLiteLLMEmbeddingClient):
|
|
|
122
121
|
self._litellm_model_name,
|
|
123
122
|
self._litellm_extra_parameters,
|
|
124
123
|
"default_litellm_embedding_client",
|
|
125
|
-
provider=self.provider,
|
|
126
124
|
)
|
|
127
125
|
else:
|
|
128
126
|
super().validate_client_setup()
|