rasa-pro 3.14.0a20__py3-none-any.whl → 3.14.0a23__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/__main__.py +15 -3
- rasa/agents/__init__.py +0 -0
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +211 -0
- rasa/agents/constants.py +43 -0
- rasa/agents/core/__init__.py +0 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +81 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/__init__.py +0 -0
- rasa/agents/protocol/a2a/a2a_agent.py +879 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +726 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
- rasa/agents/schemas/__init__.py +13 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +65 -0
- rasa/agents/schemas/agent_tool_schema.py +186 -0
- rasa/agents/templates/__init__.py +0 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
- rasa/agents/utils.py +206 -0
- rasa/agents/validation.py +485 -0
- rasa/api.py +24 -9
- rasa/builder/config.py +6 -2
- rasa/builder/guardrails/{lakera.py → clients.py} +55 -5
- rasa/builder/guardrails/constants.py +3 -0
- rasa/builder/guardrails/models.py +45 -10
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/utils.py +42 -276
- rasa/builder/llm_service.py +32 -5
- rasa/builder/models.py +1 -0
- rasa/builder/project_generator.py +6 -1
- rasa/builder/service.py +16 -13
- rasa/builder/training_service.py +18 -24
- rasa/builder/validation_service.py +1 -1
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +10 -8
- rasa/cli/dialogue_understanding_test.py +10 -7
- rasa/cli/e2e_test.py +9 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +8 -4
- rasa/cli/interactive.py +5 -4
- rasa/cli/llm_fine_tuning.py +11 -6
- rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +1 -1
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +1 -1
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +1 -1
- rasa/cli/project_templates/finance/domain/general/_shared.yml +0 -14
- rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +3 -6
- rasa/cli/project_templates/finance/domain/general/welcome.yml +29 -1
- rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/transfers/transfer_money.yml +56 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +1 -1
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +1 -1
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +1 -1
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +1 -1
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +12 -10
- rasa/cli/scaffold.py +4 -4
- rasa/cli/shell.py +9 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +41 -28
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +223 -0
- rasa/cli/validation/config_path_validation.py +257 -0
- rasa/cli/x.py +8 -4
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +51 -10
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +9 -2
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +19 -2
- rasa/core/available_agents.py +229 -0
- rasa/core/brokers/kafka.py +1 -1
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/development_inspector.py +3 -3
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-35222594.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-a0efbfd3.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-0584c0f2.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-39f40dbe.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-1ad755f3.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-b0f4f0fe.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-9039bff9.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-65c9b127.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4f08b38e.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-e95c362a.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-703c3015.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-699328ea.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-04cf4b05.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-ee94449e.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-940162b4.js → index-3862675e-7610671a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-c79c2866.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-84489d30.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-a9aa9858.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-eb73cf26.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-b3399f9a.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-b095bf1a.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-07644b66.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-573a3f9c.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d457e1e1.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-9d26e1a2.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-3a9cde10.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-4f3e8cec.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-e617e5bf.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-eab30d2f.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-09994be2.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-b7110364.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-3ebc92ad.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-7d13d2f2.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-488385e1.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +18 -18
- rasa/core/channels/inspector/src/App.tsx +29 -4
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +7 -4
- 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/inspector/yarn.lock +336 -189
- rasa/core/channels/studio_chat.py +6 -6
- rasa/core/channels/telegram.py +4 -9
- rasa/core/channels/voice_stream/browser_audio.py +2 -0
- rasa/core/channels/voice_stream/genesys.py +1 -1
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +5 -1
- rasa/core/channels/voice_stream/voice_channel.py +3 -0
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
- rasa/core/config/configuration.py +260 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +5 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +88 -3
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +2 -1
- rasa/core/lock_store.py +6 -4
- rasa/core/nlg/generator.py +1 -1
- rasa/core/policies/enterprise_search_policy.py +5 -3
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +632 -0
- rasa/core/policies/flows/flow_executor.py +137 -76
- rasa/core/policies/flows/mcp_tool_executor.py +298 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/ted_policy.py +20 -12
- rasa/core/policies/unexpected_intent_policy.py +6 -0
- rasa/core/processor.py +68 -44
- rasa/core/redis_connection_factory.py +78 -20
- rasa/core/run.py +37 -8
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/sql_tracker_store.py +1 -1
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +20 -18
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +22 -23
- 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 +21 -2
- rasa/dialogue_understanding/commands/clarify_command.py +20 -2
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
- 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/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 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- 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 +136 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +98 -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 +8 -3
- rasa/e2e_test/e2e_test_runner.py +13 -3
- rasa/engine/caching.py +2 -2
- rasa/engine/constants.py +1 -1
- rasa/engine/loader.py +12 -0
- rasa/engine/recipes/default_components.py +138 -49
- rasa/engine/recipes/default_recipe.py +108 -11
- rasa/engine/runner/dask.py +8 -5
- rasa/engine/validation.py +19 -6
- rasa/graph_components/validators/default_recipe_validator.py +86 -28
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_training.py +60 -47
- rasa/nlu/classifiers/diet_classifier.py +198 -98
- rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
- rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
- rasa/nlu/extractors/crf_entity_extractor.py +9 -10
- rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
- rasa/nlu/selectors/response_selector.py +10 -2
- rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
- rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
- rasa/nlu/utils/mitie_utils.py +3 -0
- rasa/nlu/utils/spacy_utils.py +3 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_manager.py +12 -3
- rasa/server.py +15 -3
- rasa/shared/agents/__init__.py +0 -0
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +105 -0
- rasa/shared/agents/auth/agent_auth_manager.py +92 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +167 -0
- rasa/shared/agents/auth/constants.py +12 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +8 -0
- rasa/shared/core/constants.py +16 -1
- rasa/shared/core/domain.py +0 -7
- rasa/shared/core/events.py +327 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow.py +1 -1
- rasa/shared/core/flows/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +49 -5
- rasa/shared/core/flows/steps/collect.py +98 -13
- rasa/shared/core/flows/validation.py +372 -8
- rasa/shared/core/flows/yaml_flows_io.py +3 -2
- rasa/shared/core/slots.py +2 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/exceptions.py +16 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +9 -3
- rasa/shared/providers/llm/_base_litellm_client.py +41 -9
- 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/common.py +24 -0
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +39 -16
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +247 -0
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +3 -6
- rasa/telemetry.py +69 -5
- rasa/tracing/config.py +45 -12
- rasa/tracing/constants.py +14 -0
- rasa/tracing/instrumentation/attribute_extractors.py +142 -9
- rasa/tracing/instrumentation/instrumentation.py +626 -21
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/tracing/instrumentation/metrics.py +32 -0
- rasa/tracing/metric_instrument_provider.py +68 -0
- rasa/utils/common.py +92 -1
- rasa/utils/endpoints.py +11 -2
- rasa/utils/log_utils.py +96 -5
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/pypred.py +38 -0
- rasa/utils/tensorflow/__init__.py +7 -0
- rasa/utils/tensorflow/callback.py +136 -101
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +21 -11
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +56 -8
- rasa/utils/tensorflow/rasa_layers.py +8 -6
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +54 -24
- rasa/validator.py +17 -13
- rasa/version.py +1 -1
- {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/METADATA +48 -42
- {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/RECORD +323 -251
- rasa/builder/scrape_rasa_docs.py +0 -97
- rasa/cli/project_templates/finance/data/general/agent_details.yml +0 -6
- rasa/cli/project_templates/finance/domain/_system/patterns/pattern_session_start.yml +0 -11
- rasa/cli/project_templates/finance/domain/general/agent_details.yml +0 -31
- rasa/core/channels/inspector/dist/assets/channel-8e08bed9.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-78c82dea.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b08f601.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-c941dcb3.js +0 -1336
- {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/entry_points.txt +0 -0
|
@@ -35,8 +35,6 @@ class DirectCustomActionExecutor(CustomActionExecutor):
|
|
|
35
35
|
self.action_name = action_name
|
|
36
36
|
self.action_endpoint = action_endpoint
|
|
37
37
|
self.action_executor = self._create_action_executor()
|
|
38
|
-
self.register_actions_from_a_module()
|
|
39
|
-
self.action_executor.reload()
|
|
40
38
|
|
|
41
39
|
@staticmethod
|
|
42
40
|
@lru_cache(maxsize=1)
|
|
@@ -88,12 +86,21 @@ class DirectCustomActionExecutor(CustomActionExecutor):
|
|
|
88
86
|
|
|
89
87
|
Returns:
|
|
90
88
|
The response from the execution of the custom action.
|
|
89
|
+
|
|
90
|
+
Raises:
|
|
91
|
+
RasaException: If the actions module specified does not exist.
|
|
91
92
|
"""
|
|
92
93
|
structlogger.debug(
|
|
93
94
|
"action.direct_custom_action_executor.run",
|
|
94
95
|
action_name=self.action_name,
|
|
95
96
|
)
|
|
96
97
|
|
|
98
|
+
# Register actions module if not already registered.
|
|
99
|
+
# This is done here instead of __init__ to allow proper
|
|
100
|
+
# exception handling and avoid hanging conversations.
|
|
101
|
+
self.register_actions_from_a_module()
|
|
102
|
+
self.action_executor.reload()
|
|
103
|
+
|
|
97
104
|
tracker_state = tracker.current_state(EventVerbosity.ALL)
|
|
98
105
|
action_call = {
|
|
99
106
|
"next_action": self.action_name,
|
|
@@ -152,7 +152,7 @@ class GRPCCustomActionExecutor(CustomActionExecutor):
|
|
|
152
152
|
structlogger.error(
|
|
153
153
|
"rasa.core.actions.grpc_custom_action_executor.domain_not_found",
|
|
154
154
|
event_info=(
|
|
155
|
-
f"Failed to execute custom action '{self.
|
|
155
|
+
f"Failed to execute custom action '{self.action_name}'. "
|
|
156
156
|
f"Could not find domain. {resource_not_found_error.message}"
|
|
157
157
|
),
|
|
158
158
|
)
|
rasa/core/agent.py
CHANGED
|
@@ -12,9 +12,11 @@ import aiohttp
|
|
|
12
12
|
from aiohttp import ClientError
|
|
13
13
|
|
|
14
14
|
import rasa.shared.utils.io
|
|
15
|
+
from rasa.agents.utils import initialize_agents
|
|
15
16
|
from rasa.core import jobs
|
|
16
|
-
from rasa.core.
|
|
17
|
+
from rasa.core.available_agents import AvailableAgents
|
|
17
18
|
from rasa.core.channels.channel import OutputChannel, UserMessage
|
|
19
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
18
20
|
from rasa.core.constants import DEFAULT_REQUEST_TIMEOUT
|
|
19
21
|
from rasa.core.exceptions import AgentNotReady
|
|
20
22
|
from rasa.core.http_interpreter import RasaNLUHttpInterpreter
|
|
@@ -34,7 +36,7 @@ from rasa.privacy.privacy_manager import BackgroundPrivacyManager
|
|
|
34
36
|
from rasa.shared.constants import DEFAULT_SENDER_ID
|
|
35
37
|
from rasa.shared.core.domain import Domain
|
|
36
38
|
from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
|
|
37
|
-
from rasa.shared.exceptions import RasaException
|
|
39
|
+
from rasa.shared.exceptions import AgentInitializationException, RasaException
|
|
38
40
|
from rasa.telemetry import track_privacy_enabled
|
|
39
41
|
from rasa.utils.common import TempDirectoryPath, get_temp_dir_name
|
|
40
42
|
from rasa.utils.endpoints import EndpointConfig
|
|
@@ -202,6 +204,7 @@ async def load_agent(
|
|
|
202
204
|
model_server: Optional[EndpointConfig] = None,
|
|
203
205
|
remote_storage: Optional[StorageType] = None,
|
|
204
206
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
207
|
+
sub_agents: Optional[AvailableAgents] = None,
|
|
205
208
|
loop: Optional[AbstractEventLoop] = None,
|
|
206
209
|
) -> Agent:
|
|
207
210
|
"""Loads agent from server, remote storage or disk.
|
|
@@ -211,6 +214,7 @@ async def load_agent(
|
|
|
211
214
|
model_server: Configuration for a potential server which serves the model.
|
|
212
215
|
remote_storage: Remote storage to use for loading the model.
|
|
213
216
|
endpoints: Endpoint configuration.
|
|
217
|
+
sub_agents: Sub-agents configuration.
|
|
214
218
|
loop: Optional async loop to pass to broker creation.
|
|
215
219
|
|
|
216
220
|
Returns:
|
|
@@ -281,8 +285,19 @@ async def load_agent(
|
|
|
281
285
|
"No valid configuration given to load agent. "
|
|
282
286
|
"Agent loaded with no model!"
|
|
283
287
|
)
|
|
288
|
+
|
|
289
|
+
if agent.processor and sub_agents:
|
|
290
|
+
flows = await agent.processor.get_flows()
|
|
291
|
+
# CLI commands that accept --sub-agents
|
|
292
|
+
# all route through this entry point.
|
|
293
|
+
# With all required data available,
|
|
294
|
+
# this is the best spot to initialize the subagents.
|
|
295
|
+
await initialize_agents(flows, sub_agents)
|
|
296
|
+
|
|
284
297
|
return agent
|
|
285
298
|
|
|
299
|
+
except AgentInitializationException as e:
|
|
300
|
+
raise e
|
|
286
301
|
except Exception as e:
|
|
287
302
|
logger.error(f"Could not load model due to {e}.", exc_info=True)
|
|
288
303
|
return agent
|
|
@@ -322,6 +337,7 @@ class Agent:
|
|
|
322
337
|
remote_storage: Optional[StorageType] = None,
|
|
323
338
|
http_interpreter: Optional[RasaNLUHttpInterpreter] = None,
|
|
324
339
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
340
|
+
sub_agents: Optional[AvailableAgents] = None,
|
|
325
341
|
privacy_manager: Optional[BackgroundPrivacyManager] = None,
|
|
326
342
|
):
|
|
327
343
|
"""Initializes an `Agent`."""
|
|
@@ -334,6 +350,7 @@ class Agent:
|
|
|
334
350
|
self.action_endpoint = action_endpoint
|
|
335
351
|
self.http_interpreter = http_interpreter
|
|
336
352
|
self.endpoints = endpoints
|
|
353
|
+
self.sub_agents = sub_agents
|
|
337
354
|
|
|
338
355
|
self._set_fingerprint(fingerprint)
|
|
339
356
|
self.model_server = model_server
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from enum import Enum
|
|
5
|
+
from typing import Any, Dict, List, Optional
|
|
6
|
+
|
|
7
|
+
import structlog
|
|
8
|
+
from pydantic import BaseModel, Field, model_validator
|
|
9
|
+
from ruamel import yaml as yaml
|
|
10
|
+
|
|
11
|
+
from rasa.exceptions import ValidationError
|
|
12
|
+
from rasa.utils.singleton import Singleton
|
|
13
|
+
|
|
14
|
+
DEFAULT_AGENTS_CONFIG_FOLDER = "sub_agents"
|
|
15
|
+
|
|
16
|
+
structlogger = structlog.get_logger()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ProtocolConfig(str, Enum):
|
|
20
|
+
"""Supported protocols for agents."""
|
|
21
|
+
|
|
22
|
+
RASA = "RASA"
|
|
23
|
+
A2A = "A2A"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AgentInfo(BaseModel):
|
|
27
|
+
"""Configuration for an agent."""
|
|
28
|
+
|
|
29
|
+
name: str = Field(..., description="Agent name")
|
|
30
|
+
protocol: ProtocolConfig = Field(
|
|
31
|
+
default=ProtocolConfig.RASA,
|
|
32
|
+
description="Protocol used to communicate with the agent.",
|
|
33
|
+
)
|
|
34
|
+
description: str = Field(..., description="Agent description")
|
|
35
|
+
|
|
36
|
+
@model_validator(mode="before")
|
|
37
|
+
@classmethod
|
|
38
|
+
def validate_protocol(cls, values: Any) -> Any:
|
|
39
|
+
"""Validate and normalize protocol values to support lowercase input."""
|
|
40
|
+
if isinstance(values, dict) and "protocol" in values:
|
|
41
|
+
protocol_value = values["protocol"]
|
|
42
|
+
if isinstance(protocol_value, str):
|
|
43
|
+
# Map lowercase protocol names to uppercase enum values
|
|
44
|
+
protocol_mapping = {
|
|
45
|
+
"rasa": ProtocolConfig.RASA,
|
|
46
|
+
"a2a": ProtocolConfig.A2A,
|
|
47
|
+
"RASA": ProtocolConfig.RASA,
|
|
48
|
+
"A2A": ProtocolConfig.A2A,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if protocol_value.lower() in protocol_mapping:
|
|
52
|
+
values["protocol"] = protocol_mapping[protocol_value.lower()]
|
|
53
|
+
else:
|
|
54
|
+
# If it's not a recognized protocol, let Pydantic handle the
|
|
55
|
+
# validation
|
|
56
|
+
# This will raise a proper validation error
|
|
57
|
+
pass
|
|
58
|
+
|
|
59
|
+
return values
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class AgentConfiguration(BaseModel):
|
|
63
|
+
llm: Optional[Dict[str, Any]] = None
|
|
64
|
+
prompt_template: Optional[str] = None
|
|
65
|
+
module: Optional[str] = None
|
|
66
|
+
timeout: Optional[int] = None # timeout in seconds
|
|
67
|
+
max_retries: Optional[int] = None
|
|
68
|
+
agent_card: Optional[str] = None
|
|
69
|
+
auth: Optional[Dict[str, Any]] = None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class AgentConnections(BaseModel):
|
|
73
|
+
mcp_servers: Optional[List[AgentMCPServerConfig]] = None
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class AgentMCPServerConfig(BaseModel):
|
|
77
|
+
name: str # Reference to MCPServerConfig
|
|
78
|
+
url: Optional[str] = None
|
|
79
|
+
type: Optional[str] = None
|
|
80
|
+
include_tools: Optional[List[str]] = None
|
|
81
|
+
exclude_tools: Optional[List[str]] = None
|
|
82
|
+
# Additional parameters for the MCP server
|
|
83
|
+
additional_params: Optional[Dict[str, Any]] = None
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class AgentConfig(BaseModel):
|
|
87
|
+
agent: AgentInfo
|
|
88
|
+
configuration: Optional[AgentConfiguration] = None
|
|
89
|
+
connections: Optional[AgentConnections] = None
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class AvailableAgents(metaclass=Singleton):
|
|
93
|
+
"""Collection of configured agents."""
|
|
94
|
+
|
|
95
|
+
_instance = None
|
|
96
|
+
|
|
97
|
+
def __init__(self, agents: Optional[Dict[str, AgentConfig]] = None) -> None:
|
|
98
|
+
"""Create an `AvailableAgents` object."""
|
|
99
|
+
self.agents = agents or {}
|
|
100
|
+
|
|
101
|
+
@classmethod
|
|
102
|
+
def _read_agent_folder(cls, agent_folder: str) -> AvailableAgents:
|
|
103
|
+
"""Read the different agents from the given folder."""
|
|
104
|
+
agents: Dict[str, AgentConfig] = {}
|
|
105
|
+
|
|
106
|
+
if not os.path.isdir(agent_folder):
|
|
107
|
+
if agent_folder != DEFAULT_AGENTS_CONFIG_FOLDER:
|
|
108
|
+
# User explicitly specified a folder, it should exist
|
|
109
|
+
structlogger.error(
|
|
110
|
+
f"The specified agents config folder '{agent_folder}' does not "
|
|
111
|
+
f"exist or is not a directory."
|
|
112
|
+
)
|
|
113
|
+
raise ValueError(
|
|
114
|
+
f"The specified agents config folder '{agent_folder}' does not "
|
|
115
|
+
f"exist or is not a directory."
|
|
116
|
+
)
|
|
117
|
+
else:
|
|
118
|
+
# We are using the default folder, it may not be created yet
|
|
119
|
+
# Init with an empty agents in this case
|
|
120
|
+
structlogger.info(
|
|
121
|
+
f"Default agents config folder '{agent_folder}' does not exist. "
|
|
122
|
+
f"Agent configurations won't be loaded."
|
|
123
|
+
)
|
|
124
|
+
return cls(agents)
|
|
125
|
+
|
|
126
|
+
# First, load all agent configs into a temporary list for validation
|
|
127
|
+
agent_configs: List[AgentConfig] = []
|
|
128
|
+
for agent_name in os.listdir(agent_folder):
|
|
129
|
+
config_path = os.path.join(agent_folder, agent_name, "config.yml")
|
|
130
|
+
if not os.path.isfile(config_path):
|
|
131
|
+
continue
|
|
132
|
+
try:
|
|
133
|
+
agent_config = cls._read_agent_config(config_path)
|
|
134
|
+
if not isinstance(agent_config, AgentConfig):
|
|
135
|
+
raise ValueError(f"Invalid agent config type for {agent_name}")
|
|
136
|
+
agent_configs.append(agent_config)
|
|
137
|
+
except Exception as e:
|
|
138
|
+
raise ValidationError(
|
|
139
|
+
code="agent.load_failed",
|
|
140
|
+
event_info=f"Failed to load agent '{agent_name}': {e}",
|
|
141
|
+
details={
|
|
142
|
+
"agent_name": agent_name,
|
|
143
|
+
"agent_folder": agent_folder,
|
|
144
|
+
"error": str(e),
|
|
145
|
+
},
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
# Validate agent names are unique before adding to dictionary
|
|
149
|
+
from rasa.agents.validation import validate_agent_names_unique
|
|
150
|
+
|
|
151
|
+
validate_agent_names_unique(agent_configs)
|
|
152
|
+
|
|
153
|
+
for agent_config in agent_configs:
|
|
154
|
+
agents[agent_config.agent.name] = agent_config
|
|
155
|
+
|
|
156
|
+
return cls(agents)
|
|
157
|
+
|
|
158
|
+
@staticmethod
|
|
159
|
+
def _read_agent_config(config_path: str) -> AgentConfig:
|
|
160
|
+
"""Read the agent config from a yaml file into Pydantic models.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
config_path: Path to the config file.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
The parsed AgentConfig.
|
|
167
|
+
|
|
168
|
+
Raises:
|
|
169
|
+
yaml.YAMLError: If the YAML file is invalid.
|
|
170
|
+
ValueError: If the data structure is invalid for Pydantic models.
|
|
171
|
+
"""
|
|
172
|
+
with open(config_path, "r") as f:
|
|
173
|
+
data = yaml.safe_load(f)
|
|
174
|
+
|
|
175
|
+
# Create the agent config (this will trigger Pydantic validation)
|
|
176
|
+
agent_config = AgentConfig(
|
|
177
|
+
agent=AgentInfo(**data.get("agent", {})),
|
|
178
|
+
configuration=AgentConfiguration(**data.get("configuration", {}))
|
|
179
|
+
if data.get("configuration")
|
|
180
|
+
else None,
|
|
181
|
+
connections=AgentConnections(**data.get("connections", {}))
|
|
182
|
+
if data.get("connections")
|
|
183
|
+
else None,
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
return agent_config
|
|
187
|
+
|
|
188
|
+
@classmethod
|
|
189
|
+
def get_instance(
|
|
190
|
+
cls, agent_folder: Optional[str] = DEFAULT_AGENTS_CONFIG_FOLDER
|
|
191
|
+
) -> AvailableAgents:
|
|
192
|
+
"""Get the singleton instance of `AvailableAgents`."""
|
|
193
|
+
if cls._instance is None:
|
|
194
|
+
cls._instance = cls._read_agent_folder(agent_folder)
|
|
195
|
+
|
|
196
|
+
return cls._instance
|
|
197
|
+
|
|
198
|
+
@classmethod
|
|
199
|
+
def reset_instance(cls) -> None:
|
|
200
|
+
cls._instance = None
|
|
201
|
+
# Also clear the metaclass singleton instances
|
|
202
|
+
if hasattr(type(cls), "_instances"):
|
|
203
|
+
type(cls)._instances.clear()
|
|
204
|
+
|
|
205
|
+
def as_json_list(self) -> List[Dict[str, Any]]:
|
|
206
|
+
"""Convert the available agents to a JSON-serializable list."""
|
|
207
|
+
return [
|
|
208
|
+
{
|
|
209
|
+
"name": agent_name,
|
|
210
|
+
"agent": agent_config.agent.model_dump(),
|
|
211
|
+
"configuration": agent_config.configuration.model_dump()
|
|
212
|
+
if agent_config.configuration
|
|
213
|
+
else None,
|
|
214
|
+
"connections": agent_config.connections.model_dump()
|
|
215
|
+
if agent_config.connections
|
|
216
|
+
else None,
|
|
217
|
+
}
|
|
218
|
+
for agent_name, agent_config in self.agents.items()
|
|
219
|
+
]
|
|
220
|
+
|
|
221
|
+
@classmethod
|
|
222
|
+
def get_agent_config(cls, agent_id: str) -> Optional[AgentConfig]:
|
|
223
|
+
instance = cls.get_instance()
|
|
224
|
+
return instance.agents.get(agent_id)
|
|
225
|
+
|
|
226
|
+
@classmethod
|
|
227
|
+
def has_agents(cls) -> bool:
|
|
228
|
+
instance = cls.get_instance()
|
|
229
|
+
return len(instance.agents) > 0
|
rasa/core/brokers/kafka.py
CHANGED
|
@@ -246,7 +246,7 @@ class KafkaEventBroker(EventBroker):
|
|
|
246
246
|
if self.iam_credentials_provider is None:
|
|
247
247
|
return None, None
|
|
248
248
|
|
|
249
|
-
temp_credentials = self.iam_credentials_provider.
|
|
249
|
+
temp_credentials = self.iam_credentials_provider.get_temporary_credentials()
|
|
250
250
|
return temp_credentials.auth_token, temp_credentials.expiration
|
|
251
251
|
|
|
252
252
|
def _get_kafka_config(self) -> Dict[Text, Any]:
|
rasa/core/channels/__init__.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# ruff: noqa: I001
|
|
2
|
-
from typing import Text, Dict, List, Type
|
|
2
|
+
from typing import Text, Dict, List, Type, Optional
|
|
3
3
|
|
|
4
4
|
from rasa.core.channels.channel import ( # noqa: F401
|
|
5
5
|
InputChannel,
|
|
@@ -15,54 +15,101 @@ from rasa.core.channels.socketio import SocketIOInput
|
|
|
15
15
|
from rasa.core.channels.botframework import BotFrameworkInput
|
|
16
16
|
from rasa.core.channels.callback import CallbackInput
|
|
17
17
|
from rasa.core.channels.console import CmdlineInput
|
|
18
|
-
from rasa.core.channels.facebook import FacebookInput
|
|
19
18
|
from rasa.core.channels.mattermost import MattermostInput
|
|
20
19
|
from rasa.core.channels.rasa_chat import RasaChatInput
|
|
21
20
|
from rasa.core.channels.rest import RestInput
|
|
22
21
|
from rasa.core.channels.rocketchat import RocketChatInput
|
|
23
|
-
from rasa.core.channels.slack import SlackInput
|
|
24
|
-
from rasa.core.channels.telegram import TelegramInput
|
|
25
|
-
from rasa.core.channels.twilio import TwilioInput
|
|
26
|
-
from rasa.core.channels.voice_ready.twilio_voice import TwilioVoiceInput
|
|
27
22
|
from rasa.core.channels.voice_ready.jambonz import JambonzVoiceReadyInput
|
|
28
23
|
from rasa.core.channels.voice_ready.audiocodes import AudiocodesInput
|
|
29
24
|
from rasa.core.channels.voice_stream.browser_audio import BrowserAudioInputChannel
|
|
30
|
-
from rasa.core.channels.webexteams import WebexTeamsInput
|
|
31
25
|
from rasa.core.channels.hangouts import HangoutsInput
|
|
32
|
-
from rasa.core.channels.vier_cvg import CVGInput
|
|
33
|
-
from rasa.core.channels.voice_stream.twilio_media_streams import (
|
|
34
|
-
TwilioMediaStreamsInputChannel,
|
|
35
|
-
)
|
|
36
26
|
from rasa.core.channels.voice_stream.genesys import GenesysInputChannel
|
|
37
27
|
from rasa.core.channels.studio_chat import StudioChatInput
|
|
38
28
|
from rasa.core.channels.voice_stream.audiocodes import AudiocodesVoiceInputChannel
|
|
39
29
|
from rasa.core.channels.voice_stream.jambonz import JambonzStreamInputChannel
|
|
40
30
|
|
|
31
|
+
# Type annotations for channels with optional dependencies
|
|
32
|
+
FacebookInput: Optional[Type[InputChannel]]
|
|
33
|
+
SlackInput: Optional[Type[InputChannel]]
|
|
34
|
+
TelegramInput: Optional[Type[InputChannel]]
|
|
35
|
+
TwilioInput: Optional[Type[InputChannel]]
|
|
36
|
+
TwilioVoiceInput: Optional[Type[InputChannel]]
|
|
37
|
+
TwilioMediaStreamsInputChannel: Optional[Type[InputChannel]]
|
|
38
|
+
WebexTeamsInput: Optional[Type[InputChannel]]
|
|
39
|
+
CVGInput: Optional[Type[InputChannel]]
|
|
40
|
+
|
|
41
|
+
# Channels with optional dependencies - import with try-except
|
|
42
|
+
try:
|
|
43
|
+
from rasa.core.channels.facebook import FacebookInput
|
|
44
|
+
except ImportError:
|
|
45
|
+
FacebookInput = None
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
from rasa.core.channels.slack import SlackInput
|
|
49
|
+
except ImportError:
|
|
50
|
+
SlackInput = None
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
from rasa.core.channels.telegram import TelegramInput
|
|
54
|
+
except ImportError:
|
|
55
|
+
TelegramInput = None
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
from rasa.core.channels.twilio import TwilioInput
|
|
59
|
+
except ImportError:
|
|
60
|
+
TwilioInput = None
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
from rasa.core.channels.voice_ready.twilio_voice import TwilioVoiceInput
|
|
64
|
+
except ImportError:
|
|
65
|
+
TwilioVoiceInput = None
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
from rasa.core.channels.voice_stream.twilio_media_streams import (
|
|
69
|
+
TwilioMediaStreamsInputChannel,
|
|
70
|
+
)
|
|
71
|
+
except ImportError:
|
|
72
|
+
TwilioMediaStreamsInputChannel = None
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
from rasa.core.channels.webexteams import WebexTeamsInput
|
|
76
|
+
except ImportError:
|
|
77
|
+
WebexTeamsInput = None
|
|
78
|
+
|
|
79
|
+
try:
|
|
80
|
+
from rasa.core.channels.vier_cvg import CVGInput
|
|
81
|
+
except ImportError:
|
|
82
|
+
CVGInput = None
|
|
83
|
+
|
|
41
84
|
input_channel_classes: List[Type[InputChannel]] = [
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
85
|
+
c
|
|
86
|
+
for c in [
|
|
87
|
+
CmdlineInput,
|
|
88
|
+
FacebookInput,
|
|
89
|
+
SlackInput,
|
|
90
|
+
TelegramInput,
|
|
91
|
+
MattermostInput,
|
|
92
|
+
TwilioInput,
|
|
93
|
+
TwilioVoiceInput,
|
|
94
|
+
RasaChatInput,
|
|
95
|
+
BotFrameworkInput,
|
|
96
|
+
RocketChatInput,
|
|
97
|
+
CallbackInput,
|
|
98
|
+
RestInput,
|
|
99
|
+
SocketIOInput,
|
|
100
|
+
WebexTeamsInput,
|
|
101
|
+
HangoutsInput,
|
|
102
|
+
AudiocodesInput,
|
|
103
|
+
CVGInput,
|
|
104
|
+
JambonzVoiceReadyInput,
|
|
105
|
+
TwilioMediaStreamsInputChannel,
|
|
106
|
+
BrowserAudioInputChannel,
|
|
107
|
+
GenesysInputChannel,
|
|
108
|
+
StudioChatInput,
|
|
109
|
+
AudiocodesVoiceInputChannel,
|
|
110
|
+
JambonzStreamInputChannel,
|
|
111
|
+
]
|
|
112
|
+
if c is not None
|
|
66
113
|
]
|
|
67
114
|
|
|
68
115
|
# Mapping from an input channel name to its class to allow name based lookup.
|
|
@@ -70,17 +70,17 @@ class DevelopmentInspectorPlugin:
|
|
|
70
70
|
self.tasks.append(task)
|
|
71
71
|
self._cleanup_completed_tasks()
|
|
72
72
|
|
|
73
|
-
@hookimpl
|
|
73
|
+
@hookimpl
|
|
74
74
|
def after_new_user_message(self, tracker: DialogueStateTracker) -> None:
|
|
75
75
|
"""Broadcasts tracker updates after a new user message."""
|
|
76
76
|
self._create_broadcast_task(tracker)
|
|
77
77
|
|
|
78
|
-
@hookimpl
|
|
78
|
+
@hookimpl
|
|
79
79
|
def after_action_executed(self, tracker: DialogueStateTracker) -> None:
|
|
80
80
|
"""Broadcasts tracker updates after an action is executed."""
|
|
81
81
|
self._create_broadcast_task(tracker)
|
|
82
82
|
|
|
83
|
-
@hookimpl
|
|
83
|
+
@hookimpl
|
|
84
84
|
def after_server_stop(self) -> None:
|
|
85
85
|
"""Cancels all remaining tasks when the server stops."""
|
|
86
86
|
self._cancel_tasks()
|
|
@@ -7,8 +7,8 @@ A rapid prototyping tool for enterprise developer personas working in Rasa Pro b
|
|
|
7
7
|
### Prerequisites
|
|
8
8
|
|
|
9
9
|
- **Node.js**: Version **greater than 18.x.x and less than 20.x.x**.
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
- [How to install Node.js](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs)
|
|
11
|
+
- Recommended: Use [nvm](https://github.com/nvm-sh/nvm) for version management.
|
|
12
12
|
- `yarn` version 1.x - Check how to install `yarn` [here](https://classic.yarnpkg.com/lang/en/docs/install/).
|
|
13
13
|
- a running version of `rasa`
|
|
14
14
|
- a running action server (optional)
|
|
@@ -20,9 +20,11 @@ A rapid prototyping tool for enterprise developer personas working in Rasa Pro b
|
|
|
20
20
|
### Running the stack
|
|
21
21
|
|
|
22
22
|
- install a local version of the rasa-pro package
|
|
23
|
-
- run `yarn build:watch` in the `/inspector` folder (this will watch over the React project and re-build it when
|
|
23
|
+
- run `yarn build:watch` in the `/inspector` folder (this will watch over the React project and re-build it when
|
|
24
|
+
necessary)
|
|
24
25
|
- run `rasa inspect`
|
|
25
|
-
- head to [http://localhost:5005/webhooks/socketio/inspect.html](http://localhost:5005/webhooks/socketio/inspect.html) -
|
|
26
|
+
- head to [http://localhost:5005/webhooks/socketio/inspect.html](http://localhost:5005/webhooks/socketio/inspect.html) -
|
|
27
|
+
The page needs to be manually refreshed at every build
|
|
26
28
|
- engage with the assistant
|
|
27
29
|
|
|
28
30
|
### Building the project
|
|
@@ -35,26 +37,36 @@ It is important to know that _without_ it, the page that will be served can:
|
|
|
35
37
|
|
|
36
38
|
## Updating the Chat Widget
|
|
37
39
|
|
|
38
|
-
If updates or modifications need to be made to the chat widget, you’ll need to work within
|
|
40
|
+
If updates or modifications need to be made to the chat widget, you’ll need to work within
|
|
41
|
+
the [rasa-x](https://github.com/RasaHQ/rasa-x) repository.
|
|
39
42
|
|
|
40
|
-
This is because the code within the [rasa-private](https://github.com/RasaHQ/rasa-private) repo for the chat widget is
|
|
43
|
+
This is because the code within the [rasa-private](https://github.com/RasaHQ/rasa-private) repo for the chat widget is
|
|
44
|
+
minified in
|
|
45
|
+
the [rasa-chat.js](https://github.com/RasaHQ/rasa-private/blob/main/rasa/core/channels/inspector/assets/rasa-chat.js)
|
|
46
|
+
file, and direct edits cannot be effectively made there.
|
|
41
47
|
|
|
42
48
|
### Step-by-Step Guide
|
|
43
49
|
|
|
44
50
|
1. **Make updates in [rasa-x](https://github.com/RasaHQ/rasa-x) repository:**
|
|
45
51
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
52
|
+
- Make the necessary code changes.
|
|
53
|
+
- Update the **npm** package version. This is done in
|
|
54
|
+
the [src/rasa-chat/package.json](https://github.com/RasaHQ/rasa-x/blob/main/src/rasa-chat/package.json) file.
|
|
55
|
+
- Merge the changes to the lastest version branch or to the `main` branch.
|
|
49
56
|
|
|
50
57
|
2. **Trigger the release GitHub action:**
|
|
51
58
|
|
|
52
|
-
|
|
59
|
+
- Navigate to
|
|
60
|
+
the [publish-rasa-chat](https://github.com/RasaHQ/rasa-x/blob/main/.github/workflows/publish-rasa-chat.yml) GitHub
|
|
61
|
+
action within the [rasa-x](https://github.com/RasaHQ/rasa-x) repo and initiate the workflow.
|
|
53
62
|
|
|
54
63
|
3. **Monitor Deployment to npm:**
|
|
55
64
|
|
|
56
|
-
|
|
65
|
+
- After the GitHub action successfully runs, the updated package will be deployed to npm. Confirm the deployment by
|
|
66
|
+
visiting the package page on npm at [@rasahq/rasa-chat](https://www.npmjs.com/package/@rasahq/rasa-chat/).
|
|
57
67
|
|
|
58
68
|
4. **Update the [rasa-private](https://github.com/RasaHQ/rasa-private) Repository:**
|
|
59
|
-
|
|
60
|
-
|
|
69
|
+
- Download or copy the minified JavaScript from the `widget.js` file in the newly published npm package.
|
|
70
|
+
- Replace the content in
|
|
71
|
+
the [rasa-chat.js](https://github.com/RasaHQ/rasa-private/blob/main/rasa/core/channels/inspector/assets/rasa-chat.js)
|
|
72
|
+
file with this new code to incorporate the updates.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{w as ln,c as H}from"./path-53f90ab3.js";import{aw as an,ax as V,ay as D,az as rn,aA as y,V as on,aB as K,aC as _,aD as un,aE as t,aF as sn,aG as tn,aH as fn}from"./index-
|
|
1
|
+
import{w as ln,c as H}from"./path-53f90ab3.js";import{aw as an,ax as V,ay as D,az as rn,aA as y,V as on,aB as K,aC as _,aD as un,aE as t,aF as sn,aG as tn,aH as fn}from"./index-74e01d94.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function xn(l,h,z,E,v,A,I,a){var B=z-l,i=E-h,n=I-v,m=a-A,r=m*B-n*i;if(!(r*r<y))return r=(n*(h-A)-m*(l-v))/r,[l+r*B,h+r*i]}function W(l,h,z,E,v,A,I){var a=l-z,B=h-E,i=(I?A:-A)/K(a*a+B*B),n=i*B,m=-i*a,r=l+n,s=h+m,f=z+n,c=E+m,O=(r+f)/2,o=(s+c)/2,p=f-r,g=c-s,R=p*p+g*g,T=v-A,w=r*c-f*s,C=(g<0?-1:1)*K(fn(0,T*T*R-w*w)),F=(w*g-p*C)/R,G=(-w*p-g*C)/R,P=(w*g+p*C)/R,x=(-w*p+g*C)/R,d=F-O,e=G-o,u=P-O,S=x-o;return d*d+e*e>u*u+S*S&&(F=P,G=x),{cx:F,cy:G,x01:-n,y01:-m,x11:F*(v/T-1),y11:G*(v/T-1)}}function vn(){var l=cn,h=yn,z=H(0),E=null,v=gn,A=mn,I=pn,a=null,B=ln(i);function i(){var n,m,r=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-rn,c=A.apply(this,arguments)-rn,O=un(c-f),o=c>f;if(a||(a=n=B()),s<r&&(m=s,s=r,r=m),!(s>y))a.moveTo(0,0);else if(O>on-y)a.moveTo(s*V(f),s*D(f)),a.arc(0,0,s,f,c,!o),r>y&&(a.moveTo(r*V(c),r*D(c)),a.arc(0,0,r,c,f,o));else{var p=f,g=c,R=f,T=c,w=O,C=O,F=I.apply(this,arguments)/2,G=F>y&&(E?+E.apply(this,arguments):K(r*r+s*s)),P=_(un(s-r)/2,+z.apply(this,arguments)),x=P,d=P,e,u;if(G>y){var S=sn(G/r*D(F)),L=sn(G/s*D(F));(w-=S*2)>y?(S*=o?1:-1,R+=S,T-=S):(w=0,R=T=(f+c)/2),(C-=L*2)>y?(L*=o?1:-1,p+=L,g-=L):(C=0,p=g=(f+c)/2)}var j=s*V(p),J=s*D(p),M=r*V(T),N=r*D(T);if(P>y){var Q=s*V(g),U=s*D(g),X=r*V(R),Y=r*D(R),q;if(O<an)if(q=xn(j,J,X,Y,Q,U,M,N)){var Z=j-q[0],$=J-q[1],k=Q-q[0],b=U-q[1],nn=1/D(tn((Z*k+$*b)/(K(Z*Z+$*$)*K(k*k+b*b)))/2),en=K(q[0]*q[0]+q[1]*q[1]);x=_(P,(r-en)/(nn-1)),d=_(P,(s-en)/(nn+1))}else x=d=0}C>y?d>y?(e=W(X,Y,j,J,s,d,o),u=W(Q,U,M,N,s,d,o),a.moveTo(e.cx+e.x01,e.cy+e.y01),d<P?a.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(u.y01,u.x01),!o):(a.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(e.y11,e.x11),!o),a.arc(0,0,s,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),!o),a.arc(u.cx,u.cy,d,t(u.y11,u.x11),t(u.y01,u.x01),!o))):(a.moveTo(j,J),a.arc(0,0,s,p,g,!o)):a.moveTo(j,J),!(r>y)||!(w>y)?a.lineTo(M,N):x>y?(e=W(M,N,Q,U,r,-x,o),u=W(j,J,X,Y,r,-x,o),a.lineTo(e.cx+e.x01,e.cy+e.y01),x<P?a.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(u.y01,u.x01),!o):(a.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(e.y11,e.x11),!o),a.arc(0,0,r,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),o),a.arc(u.cx,u.cy,x,t(u.y11,u.x11),t(u.y01,u.x01),!o))):a.arc(0,0,r,T,R,o)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,m=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[V(m)*n,D(m)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:H(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:H(+n),i):h},i.cornerRadius=function(n){return arguments.length?(z=typeof n=="function"?n:H(+n),i):z},i.padRadius=function(n){return arguments.length?(E=n==null?null:typeof n=="function"?n:H(+n),i):E},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:H(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:H(+n),i):A},i.padAngle=function(n){return arguments.length?(I=typeof n=="function"?n:H(+n),i):I},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{vn as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as he,_ as se,h as H,i as Ee,l as S,E as ye,B as we,j as De,o as ve}from"./index-
|
|
1
|
+
import{c as he,_ as se,h as H,i as Ee,l as S,E as ye,B as we,j as De,o as ve}from"./index-74e01d94.js";import{c as Ne}from"./clone-8f9083bb.js";import{i as ke,c as Ie,b as Oe,d as Te,a as ge,p as ze}from"./edges-e0da2a9e-58676240.js";import{G as Ce}from"./graph-0a6f8466.js";import{o as Ae}from"./ordinal-ba9b4969.js";import{s as Re}from"./Tableau10-1b767f5e.js";import{c as Be}from"./channel-bf9cbb34.js";import"./createText-2e5e7dd3-088372e2.js";import"./line-a8aa457c.js";import"./array-9f3ba611.js";import"./path-53f90ab3.js";import"./init-77b53fdd.js";var le,oe,ee=function(){var e=function(D,o,s,i){for(s=s||{},i=D.length;i--;s[D[i]]=o);return s},a=[1,7],d=[1,13],c=[1,14],n=[1,15],g=[1,19],l=[1,16],f=[1,17],b=[1,18],p=[8,30],x=[8,21,28,29,30,31,32,40,44,47],E=[1,23],T=[1,24],v=[8,15,16,21,28,29,30,31,32,40,44,47],N=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],L={trace:function(){},yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:function(o,s,i,u,h,t,m){var r=t.length-1;switch(h){case 4:u.getLogger().debug("Rule: separator (NL) ");break;case 5:u.getLogger().debug("Rule: separator (Space) ");break;case 6:u.getLogger().debug("Rule: separator (EOF) ");break;case 7:u.getLogger().debug("Rule: hierarchy: ",t[r-1]),u.setHierarchy(t[r-1]);break;case 8:u.getLogger().debug("Stop NL ");break;case 9:u.getLogger().debug("Stop EOF ");break;case 10:u.getLogger().debug("Stop NL2 ");break;case 11:u.getLogger().debug("Stop EOF2 ");break;case 12:u.getLogger().debug("Rule: statement: ",t[r]),typeof t[r].length=="number"?this.$=t[r]:this.$=[t[r]];break;case 13:u.getLogger().debug("Rule: statement #2: ",t[r-1]),this.$=[t[r-1]].concat(t[r]);break;case 14:u.getLogger().debug("Rule: link: ",t[r],o),this.$={edgeTypeStr:t[r],label:""};break;case 15:u.getLogger().debug("Rule: LABEL link: ",t[r-3],t[r-1],t[r]),this.$={edgeTypeStr:t[r],label:t[r-1]};break;case 18:const R=parseInt(t[r]),Y=u.generateId();this.$={id:Y,type:"space",label:"",width:R,children:[]};break;case 23:u.getLogger().debug("Rule: (nodeStatement link node) ",t[r-2],t[r-1],t[r]," typestr: ",t[r-1].edgeTypeStr);const F=u.edgeStrToEdgeData(t[r-1].edgeTypeStr);this.$=[{id:t[r-2].id,label:t[r-2].label,type:t[r-2].type,directions:t[r-2].directions},{id:t[r-2].id+"-"+t[r].id,start:t[r-2].id,end:t[r].id,label:t[r-1].label,type:"edge",directions:t[r].directions,arrowTypeEnd:F,arrowTypeStart:"arrow_open"},{id:t[r].id,label:t[r].label,type:u.typeStr2Type(t[r].typeStr),directions:t[r].directions}];break;case 24:u.getLogger().debug("Rule: nodeStatement (abc88 node size) ",t[r-1],t[r]),this.$={id:t[r-1].id,label:t[r-1].label,type:u.typeStr2Type(t[r-1].typeStr),directions:t[r-1].directions,widthInColumns:parseInt(t[r],10)};break;case 25:u.getLogger().debug("Rule: nodeStatement (node) ",t[r]),this.$={id:t[r].id,label:t[r].label,type:u.typeStr2Type(t[r].typeStr),directions:t[r].directions,widthInColumns:1};break;case 26:u.getLogger().debug("APA123",this?this:"na"),u.getLogger().debug("COLUMNS: ",t[r]),this.$={type:"column-setting",columns:t[r]==="auto"?-1:parseInt(t[r])};break;case 27:u.getLogger().debug("Rule: id-block statement : ",t[r-2],t[r-1]),u.generateId(),this.$={...t[r-2],type:"composite",children:t[r-1]};break;case 28:u.getLogger().debug("Rule: blockStatement : ",t[r-2],t[r-1],t[r]);const C=u.generateId();this.$={id:C,type:"composite",label:"",children:t[r-1]};break;case 29:u.getLogger().debug("Rule: node (NODE_ID separator): ",t[r]),this.$={id:t[r]};break;case 30:u.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",t[r-1],t[r]),this.$={id:t[r-1],label:t[r].label,typeStr:t[r].typeStr,directions:t[r].directions};break;case 31:u.getLogger().debug("Rule: dirList: ",t[r]),this.$=[t[r]];break;case 32:u.getLogger().debug("Rule: dirList: ",t[r-1],t[r]),this.$=[t[r-1]].concat(t[r]);break;case 33:u.getLogger().debug("Rule: nodeShapeNLabel: ",t[r-2],t[r-1],t[r]),this.$={typeStr:t[r-2]+t[r],label:t[r-1]};break;case 34:u.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",t[r-3],t[r-2]," #3:",t[r-1],t[r]),this.$={typeStr:t[r-3]+t[r],label:t[r-2],directions:t[r-1]};break;case 35:case 36:this.$={type:"classDef",id:t[r-1].trim(),css:t[r].trim()};break;case 37:this.$={type:"applyClass",id:t[r-1].trim(),styleClass:t[r].trim()};break;case 38:this.$={type:"applyStyles",id:t[r-1].trim(),stylesStr:t[r].trim()};break}},table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:d,29:c,31:n,32:g,40:l,44:f,47:b},{8:[1,20]},e(p,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:a,28:d,29:c,31:n,32:g,40:l,44:f,47:b}),e(x,[2,16],{14:22,15:E,16:T}),e(x,[2,17]),e(x,[2,18]),e(x,[2,19]),e(x,[2,20]),e(x,[2,21]),e(x,[2,22]),e(v,[2,25],{27:[1,25]}),e(x,[2,26]),{19:26,26:12,32:g},{11:27,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:d,29:c,31:n,32:g,40:l,44:f,47:b},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},e(N,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},e(p,[2,13]),{26:35,32:g},{32:[2,14]},{17:[1,36]},e(v,[2,24]),{11:37,13:4,14:22,15:E,16:T,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:d,29:c,31:n,32:g,40:l,44:f,47:b},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},e(N,[2,30]),{18:[1,43]},{18:[1,44]},e(v,[2,23]),{18:[1,45]},{30:[1,46]},e(x,[2,28]),e(x,[2,35]),e(x,[2,36]),e(x,[2,37]),e(x,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},e(x,[2,27]),e(N,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},e(N,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:function(o,s){if(s.recoverable)this.trace(o);else{var i=new Error(o);throw i.hash=s,i}},parse:function(o){var s=this,i=[0],u=[],h=[null],t=[],m=this.table,r="",R=0,Y=0,F=2,C=1,Le=t.slice.call(arguments,1),w=Object.create(this.lexer),K={yy:{}};for(var Z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Z)&&(K.yy[Z]=this.yy[Z]);w.setInput(o,K.yy),K.yy.lexer=w,K.yy.parser=this,typeof w.yylloc>"u"&&(w.yylloc={});var J=w.yylloc;t.push(J);var me=w.options&&w.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _e(){var P;return P=u.pop()||w.lex()||C,typeof P!="number"&&(P instanceof Array&&(u=P,P=u.pop()),P=s.symbols_[P]||P),P}for(var I,M,z,Q,W={},X,B,ae,G;;){if(M=i[i.length-1],this.defaultActions[M]?z=this.defaultActions[M]:((I===null||typeof I>"u")&&(I=_e()),z=m[M]&&m[M][I]),typeof z>"u"||!z.length||!z[0]){var $="";G=[];for(X in m[M])this.terminals_[X]&&X>F&&G.push("'"+this.terminals_[X]+"'");w.showPosition?$="Parse error on line "+(R+1)+`:
|
|
2
2
|
`+w.showPosition()+`
|
|
3
3
|
Expecting `+G.join(", ")+", got '"+(this.terminals_[I]||I)+"'":$="Parse error on line "+(R+1)+": Unexpected "+(I==C?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError($,{text:w.match,token:this.terminals_[I]||I,line:w.yylineno,loc:J,expected:G})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+I);switch(z[0]){case 1:i.push(I),h.push(w.yytext),t.push(w.yylloc),i.push(z[1]),I=null,Y=w.yyleng,r=w.yytext,R=w.yylineno,J=w.yylloc;break;case 2:if(B=this.productions_[z[1]][1],W.$=h[h.length-B],W._$={first_line:t[t.length-(B||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(B||1)].first_column,last_column:t[t.length-1].last_column},me&&(W._$.range=[t[t.length-(B||1)].range[0],t[t.length-1].range[1]]),Q=this.performAction.apply(W,[r,Y,R,K.yy,z[1],h,t].concat(Le)),typeof Q<"u")return Q;B&&(i=i.slice(0,-1*B*2),h=h.slice(0,-1*B),t=t.slice(0,-1*B)),i.push(this.productions_[z[1]][0]),h.push(W.$),t.push(W._$),ae=m[i[i.length-2]][i[i.length-1]],i.push(ae);break;case 3:return!0}}return!0}},A=function(){var D={EOF:1,parseError:function(s,i){if(this.yy.parser)this.yy.parser.parseError(s,i);else throw new Error(s)},setInput:function(o,s){return this.yy=s||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var s=o.match(/(?:\r\n?|\n).*/g);return s?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},unput:function(o){var s=o.length,i=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-s),this.offset-=s;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var h=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===u.length?this.yylloc.first_column:0)+u[u.length-i.length].length-i[0].length:this.yylloc.first_column-s},this.options.ranges&&(this.yylloc.range=[h[0],h[0]+this.yyleng-s]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(o){this.unput(this.match.slice(o))},pastInput:function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var o=this.pastInput(),s=new Array(o.length+1).join("-");return o+this.upcomingInput()+`
|