rasa-pro 3.14.0.dev20250922__py3-none-any.whl → 3.14.0rc2__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/copilot/constants.py +4 -1
- rasa/builder/copilot/copilot.py +155 -79
- rasa/builder/copilot/models.py +304 -108
- rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
- 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/jobs.py +182 -12
- rasa/builder/llm_service.py +32 -5
- rasa/builder/models.py +13 -3
- rasa/builder/project_generator.py +6 -1
- rasa/builder/service.py +31 -15
- 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/domain/general/help.yml +0 -0
- 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/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 +5 -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/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/concurrent_lock_store.py +38 -21
- 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 +10 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +69 -4
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +2 -1
- rasa/core/lock_store.py +4 -0
- 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 +136 -75
- 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 +7 -2
- rasa/core/run.py +37 -8
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +4 -0
- rasa/core/tracker_stores/sql_tracker_store.py +3 -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/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/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/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 +5 -5
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/METADATA +47 -41
- {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/RECORD +299 -238
- rasa/builder/scrape_rasa_docs.py +0 -97
- 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.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/entry_points.txt +0 -0
rasa/tracing/constants.py
CHANGED
|
@@ -11,6 +11,11 @@ ENDPOINTS_OTLP_BACKEND_TYPE = "otlp"
|
|
|
11
11
|
PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME = "len_prompt_tokens"
|
|
12
12
|
REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME = "request_body_size_in_bytes"
|
|
13
13
|
|
|
14
|
+
# Tool output value truncation
|
|
15
|
+
# Truncate slot values to prevent excessive memory usage in traces
|
|
16
|
+
# while preserving enough context for debugging
|
|
17
|
+
TOOL_OUTPUT_VALUE_MAX_LENGTH = 500
|
|
18
|
+
|
|
14
19
|
# metrics constants
|
|
15
20
|
LLM_COMMAND_GENERATOR_CPU_USAGE_METRIC_NAME = "llm_command_generator_cpu_usage"
|
|
16
21
|
LLM_COMMAND_GENERATOR_MEMORY_USAGE_METRIC_NAME = "llm_command_generator_memory_usage"
|
|
@@ -88,5 +93,14 @@ CONTEXTUAL_RESPONSE_REPHRASER_LLM_RESPONSE_DURATION_METRIC_NAME = (
|
|
|
88
93
|
RASA_CLIENT_REQUEST_DURATION_METRIC_NAME = "rasa_client_request_duration"
|
|
89
94
|
RASA_CLIENT_REQUEST_BODY_SIZE_METRIC_NAME = "rasa_client_request_body_size"
|
|
90
95
|
|
|
96
|
+
# Agent and MCP tool execution duration metrics
|
|
97
|
+
AGENT_EXECUTION_DURATION_METRIC_NAME = "agent_execution_duration"
|
|
98
|
+
MCP_TOOL_EXECUTION_DURATION_METRIC_NAME = "mcp_tool_execution_duration"
|
|
99
|
+
|
|
100
|
+
# MCP Agent LLM metrics
|
|
101
|
+
MCP_AGENT_LLM_CPU_USAGE_METRIC_NAME = "mcp_agent_llm_cpu_usage"
|
|
102
|
+
MCP_AGENT_LLM_MEMORY_USAGE_METRIC_NAME = "mcp_agent_llm_memory_usage"
|
|
103
|
+
MCP_AGENT_LLM_PROMPT_TOKEN_USAGE_METRIC_NAME = "mcp_agent_llm_prompt_token_usage"
|
|
104
|
+
MCP_AGENT_LLM_RESPONSE_DURATION_METRIC_NAME = "mcp_agent_llm_response_duration"
|
|
91
105
|
LLM_BASED_COMMAND_GENERATOR_CPU_MEMORY_USAGE_UNIT_NAME = "percentage"
|
|
92
106
|
DURATION_UNIT_NAME = "ms"
|
|
@@ -3,6 +3,12 @@ import logging
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, Union
|
|
5
5
|
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from rasa.agents.protocol.a2a.a2a_agent import A2AAgent
|
|
8
|
+
from rasa.agents.protocol.mcp.mcp_base_agent import MCPBaseAgent
|
|
9
|
+
from rasa.agents.schemas import AgentInput
|
|
10
|
+
from rasa.core.agent import Agent
|
|
11
|
+
|
|
6
12
|
import tiktoken
|
|
7
13
|
from numpy import ndarray
|
|
8
14
|
from rasa_sdk.grpc_py import action_webhook_pb2
|
|
@@ -10,7 +16,8 @@ from rasa_sdk.grpc_py import action_webhook_pb2
|
|
|
10
16
|
from rasa.core.actions.action import DirectCustomActionExecutor
|
|
11
17
|
from rasa.core.actions.grpc_custom_action_executor import GRPCCustomActionExecutor
|
|
12
18
|
from rasa.core.actions.http_custom_action_executor import HTTPCustomActionExecutor
|
|
13
|
-
|
|
19
|
+
|
|
20
|
+
# Import moved inside function to avoid circular import
|
|
14
21
|
from rasa.core.brokers.broker import EventBroker
|
|
15
22
|
from rasa.core.channels import UserMessage
|
|
16
23
|
from rasa.core.lock_store import LOCK_LIFETIME, LockStore
|
|
@@ -60,10 +67,13 @@ from rasa.shared.core.constants import REQUESTED_SLOT
|
|
|
60
67
|
from rasa.shared.core.domain import Domain
|
|
61
68
|
from rasa.shared.core.events import DialogueStackUpdated, Event
|
|
62
69
|
from rasa.shared.core.flows import Flow, FlowsList, FlowStep
|
|
70
|
+
from rasa.shared.core.flows.steps import CallFlowStep
|
|
71
|
+
from rasa.shared.core.slots import Slot
|
|
63
72
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
64
73
|
from rasa.shared.core.training_data.structures import StoryGraph
|
|
65
74
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
66
75
|
from rasa.shared.nlu.constants import INTENT_NAME_KEY, SET_SLOT_COMMAND
|
|
76
|
+
from rasa.shared.utils.health_check.health_check import is_api_health_check_enabled
|
|
67
77
|
from rasa.shared.utils.llm import (
|
|
68
78
|
combine_custom_and_default_config,
|
|
69
79
|
resolve_model_client_config,
|
|
@@ -92,7 +102,7 @@ logger = logging.getLogger(__name__)
|
|
|
92
102
|
|
|
93
103
|
|
|
94
104
|
def extract_attrs_for_agent(
|
|
95
|
-
self: Agent,
|
|
105
|
+
self: "Agent",
|
|
96
106
|
message: UserMessage,
|
|
97
107
|
) -> Dict[str, Any]:
|
|
98
108
|
"""Extract the attributes for `Agent.handle_message`.
|
|
@@ -335,8 +345,12 @@ def extract_llm_config(
|
|
|
335
345
|
# ContextualResponseRephraser is not a graph component, so it's
|
|
336
346
|
# not having a full config.
|
|
337
347
|
config = {"llm": self.llm_config}
|
|
338
|
-
|
|
348
|
+
elif hasattr(self, "config"):
|
|
339
349
|
config = self.config
|
|
350
|
+
else:
|
|
351
|
+
# For MCP agents and other components without a config attribute,
|
|
352
|
+
# create a config from the available llm_config
|
|
353
|
+
config = {"llm": getattr(self, "_llm_config", None)}
|
|
340
354
|
|
|
341
355
|
llm_config = resolve_model_client_config(config.get(LLM_CONFIG_KEY))
|
|
342
356
|
llm_property = combine_custom_and_default_config(llm_config, default_llm_config)
|
|
@@ -446,8 +460,6 @@ def extract_attrs_for_performing_health_check(
|
|
|
446
460
|
log_source_method: str,
|
|
447
461
|
log_source_component: str,
|
|
448
462
|
) -> Dict[str, Any]:
|
|
449
|
-
from rasa.shared.utils.health_check.health_check import is_api_health_check_enabled
|
|
450
|
-
|
|
451
463
|
attrs = {
|
|
452
464
|
"api_health_check_enabled": is_api_health_check_enabled(),
|
|
453
465
|
"health_check_trigger_component": log_source_component,
|
|
@@ -460,6 +472,29 @@ def extract_attrs_for_performing_health_check(
|
|
|
460
472
|
return attrs
|
|
461
473
|
|
|
462
474
|
|
|
475
|
+
def extract_attrs_for_a2a_agent_perform_health_check(
|
|
476
|
+
self: "A2AAgent",
|
|
477
|
+
) -> Dict[str, Any]:
|
|
478
|
+
"""Extract attributes for A2A agent health check method."""
|
|
479
|
+
attrs = {
|
|
480
|
+
"api_health_check_enabled": is_api_health_check_enabled(),
|
|
481
|
+
"health_check_trigger_component": "A2AAgent",
|
|
482
|
+
"health_check_trigger_method": "_perform_health_check",
|
|
483
|
+
"health_check_type": "a2a_agent_connectivity",
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
# A2A agents don't have config in the same way as LLM components,
|
|
487
|
+
# but we can include basic agent info for consistency
|
|
488
|
+
if is_api_health_check_enabled():
|
|
489
|
+
attrs["agent_name"] = getattr(self, "_name", "unknown")
|
|
490
|
+
agent_url = "unknown"
|
|
491
|
+
if hasattr(self, "agent_card") and self.agent_card:
|
|
492
|
+
agent_url = str(getattr(self.agent_card, "url", "unknown"))
|
|
493
|
+
attrs["agent_url"] = agent_url
|
|
494
|
+
|
|
495
|
+
return attrs
|
|
496
|
+
|
|
497
|
+
|
|
463
498
|
def extract_attrs_for_execute_commands(
|
|
464
499
|
tracker: DialogueStateTracker,
|
|
465
500
|
all_flows: FlowsList,
|
|
@@ -585,7 +620,10 @@ def extract_attrs_for_check_commands_against_startable_flows(
|
|
|
585
620
|
|
|
586
621
|
|
|
587
622
|
def extract_attrs_for_advance_flows(
|
|
588
|
-
tracker: DialogueStateTracker,
|
|
623
|
+
tracker: DialogueStateTracker,
|
|
624
|
+
available_actions: List[str],
|
|
625
|
+
flows: FlowsList,
|
|
626
|
+
slots: List[Slot],
|
|
589
627
|
) -> Dict[str, Any]:
|
|
590
628
|
from rasa.tracing.instrumentation.instrumentation import FLOW_EXECUTOR_MODULE_NAME
|
|
591
629
|
|
|
@@ -602,8 +640,10 @@ def extract_attrs_for_du_print_test_results(
|
|
|
602
640
|
test_suite_result: DialogueUnderstandingTestSuiteResult,
|
|
603
641
|
output_prompt: bool,
|
|
604
642
|
) -> Dict[str, Any]:
|
|
605
|
-
"""Extract the attributes for
|
|
606
|
-
|
|
643
|
+
"""Extract the attributes for print_test_results function.
|
|
644
|
+
|
|
645
|
+
This function extracts tracing attributes for the dialogue understanding
|
|
646
|
+
test results printing functionality.
|
|
607
647
|
"""
|
|
608
648
|
from rasa.tracing.instrumentation.instrumentation import (
|
|
609
649
|
DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
|
|
@@ -683,6 +723,35 @@ def extract_attrs_for_du_print_test_results(
|
|
|
683
723
|
return attributes_dict
|
|
684
724
|
|
|
685
725
|
|
|
726
|
+
def extract_call_flow_step_attributes(step: "CallFlowStep") -> Dict[str, Any]:
|
|
727
|
+
"""Extract common CallFlowStep attributes for tracing.
|
|
728
|
+
|
|
729
|
+
Args:
|
|
730
|
+
step: CallFlowStep instance
|
|
731
|
+
|
|
732
|
+
Returns:
|
|
733
|
+
Dictionary of CallFlowStep attributes for tracing
|
|
734
|
+
"""
|
|
735
|
+
attrs = {
|
|
736
|
+
"step_type": "CallFlowStep",
|
|
737
|
+
"call_target": step.call,
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
# Add MCP server if present (for direct MCP tool calls)
|
|
741
|
+
if step.mcp_server:
|
|
742
|
+
attrs["mcp_server"] = step.mcp_server
|
|
743
|
+
|
|
744
|
+
# Add mapping configuration if present (for MCP tool calls)
|
|
745
|
+
if step.mapping:
|
|
746
|
+
attrs["mapping_config"] = json.dumps(step.mapping, sort_keys=True)
|
|
747
|
+
|
|
748
|
+
# Add exit conditions if present (for agent calls)
|
|
749
|
+
if step.exit_if:
|
|
750
|
+
attrs["exit_if_conditions"] = json.dumps(step.exit_if, sort_keys=True)
|
|
751
|
+
|
|
752
|
+
return attrs
|
|
753
|
+
|
|
754
|
+
|
|
686
755
|
def extract_attrs_for_run_step(
|
|
687
756
|
step: FlowStep,
|
|
688
757
|
flow: Flow,
|
|
@@ -691,10 +760,11 @@ def extract_attrs_for_run_step(
|
|
|
691
760
|
available_actions: List[str],
|
|
692
761
|
flows: FlowsList,
|
|
693
762
|
previous_step_id: Text,
|
|
763
|
+
slots: List[Slot],
|
|
694
764
|
) -> Dict[str, Any]:
|
|
695
765
|
current_context = extract_current_context_attribute(stack)
|
|
696
766
|
|
|
697
|
-
|
|
767
|
+
attrs = {
|
|
698
768
|
"step_custom_id": step.custom_id if step.custom_id else "None",
|
|
699
769
|
"step_description": step.description if step.description else "None",
|
|
700
770
|
"current_flow_id": flow.id,
|
|
@@ -702,6 +772,12 @@ def extract_attrs_for_run_step(
|
|
|
702
772
|
"previous_step_id": previous_step_id,
|
|
703
773
|
}
|
|
704
774
|
|
|
775
|
+
# Add CallFlowStep specific attributes if this is a CallFlowStep
|
|
776
|
+
if hasattr(step, "call"):
|
|
777
|
+
attrs.update(extract_call_flow_step_attributes(step))
|
|
778
|
+
|
|
779
|
+
return attrs
|
|
780
|
+
|
|
705
781
|
|
|
706
782
|
def extract_attrs_for_policy_prediction(
|
|
707
783
|
self: Any,
|
|
@@ -894,3 +970,60 @@ def extract_attrs_for_grpc_custom_action_executor_request(
|
|
|
894
970
|
)
|
|
895
971
|
|
|
896
972
|
return attrs
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
def extract_attrs_for_mcp_agent_llm_call(
|
|
976
|
+
self: "MCPBaseAgent",
|
|
977
|
+
agent_input: "AgentInput",
|
|
978
|
+
) -> Dict[str, Any]:
|
|
979
|
+
"""Extract attributes for MCP agent LLM calls.
|
|
980
|
+
|
|
981
|
+
This function extracts tracing attributes specifically for MCP agent LLM calls,
|
|
982
|
+
including LLM configuration, prompt messages, and token counts.
|
|
983
|
+
"""
|
|
984
|
+
# Extract LLM configuration using the actual resolved config from the LLM client
|
|
985
|
+
attributes = extract_llm_config(
|
|
986
|
+
self,
|
|
987
|
+
default_llm_config=self.llm_client.config,
|
|
988
|
+
default_embeddings_config={}, # MCP agents don't use embeddings
|
|
989
|
+
)
|
|
990
|
+
|
|
991
|
+
# Build messages
|
|
992
|
+
messages = self.build_messages_for_llm_request(agent_input)
|
|
993
|
+
|
|
994
|
+
attributes.update(
|
|
995
|
+
{
|
|
996
|
+
"prompt_messages_count": len(messages),
|
|
997
|
+
}
|
|
998
|
+
)
|
|
999
|
+
|
|
1000
|
+
# Count tokens directly from messages
|
|
1001
|
+
attributes = extend_attributes_with_prompt_tokens_length_for_mcp_agent(
|
|
1002
|
+
self, attributes, messages
|
|
1003
|
+
)
|
|
1004
|
+
|
|
1005
|
+
return attributes
|
|
1006
|
+
|
|
1007
|
+
|
|
1008
|
+
def extend_attributes_with_prompt_tokens_length_for_mcp_agent(
|
|
1009
|
+
self: Any,
|
|
1010
|
+
attributes: Dict[str, Any],
|
|
1011
|
+
messages: List[Dict[str, Any]],
|
|
1012
|
+
) -> Dict[str, Any]:
|
|
1013
|
+
"""Extend attributes with prompt tokens length for MCP agents."""
|
|
1014
|
+
# Count tokens for each message content and sum them up
|
|
1015
|
+
total_tokens = 0
|
|
1016
|
+
for message in messages:
|
|
1017
|
+
content = message.get("content", "")
|
|
1018
|
+
if content:
|
|
1019
|
+
message_tokens = compute_prompt_tokens_length(
|
|
1020
|
+
model_type=attributes["llm_type"],
|
|
1021
|
+
model_name=attributes["llm_model"],
|
|
1022
|
+
prompt=content,
|
|
1023
|
+
)
|
|
1024
|
+
if message_tokens is not None:
|
|
1025
|
+
total_tokens += message_tokens
|
|
1026
|
+
|
|
1027
|
+
attributes[PROMPT_TOKEN_LENGTH_ATTRIBUTE_NAME] = str(total_tokens)
|
|
1028
|
+
|
|
1029
|
+
return attributes
|