@google/adk 2.4.0 → 2.5.0
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.
- package/dist/cjs/a2a/a2a_remote_agent.js +17 -2
- package/dist/cjs/a2a/a2a_remote_agent_utils.js +8 -4
- package/dist/cjs/a2a/agent_card.js +5 -81
- package/dist/cjs/a2a/agent_to_a2a.js +7 -0
- package/dist/cjs/a2a/event_converter_utils.js +10 -3
- package/dist/cjs/agents/agent_engine_client.js +282 -55
- package/dist/cjs/agents/base_agent.js +111 -68
- package/dist/cjs/agents/functions.js +62 -85
- package/dist/cjs/agents/instructions.js +7 -6
- package/dist/cjs/agents/invocation_context.js +2 -2
- package/dist/cjs/agents/llm_agent.js +105 -95
- package/dist/cjs/agents/processors/content_processor_utils.js +42 -15
- package/dist/cjs/agents/processors/content_request_processor.js +28 -11
- package/dist/cjs/agents/processors/context_compactor_request_processor.js +5 -1
- package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
- package/dist/cjs/agents/processors/nl_planning_processor.js +2 -1
- package/dist/cjs/artifacts/file_artifact_service.js +1 -1
- package/dist/cjs/cli/cli_eval.js +884 -17
- package/dist/cjs/cli/utils/cleanup.js +84 -0
- package/dist/cjs/cli/utils/envs.js +33 -2
- package/dist/cjs/cli/utils/evals.js +75 -8
- package/dist/cjs/cli/utils/logs.js +128 -9
- package/dist/cjs/cli/utils/path_validation.js +83 -0
- package/dist/cjs/code_executors/container_code_executor.js +158 -36
- package/dist/cjs/common.js +50 -12
- package/dist/cjs/context/compaction_utils.js +19 -0
- package/dist/cjs/events/event.js +7 -3
- package/dist/cjs/features/feature_registry.js +5 -0
- package/dist/cjs/index.js +29 -14
- package/dist/cjs/models/google_llm.js +33 -2
- package/dist/cjs/models/interactions_utils.js +3 -0
- package/dist/cjs/plugins/base_plugin.js +45 -21
- package/dist/cjs/plugins/plugin_manager.js +27 -0
- package/dist/cjs/runner/runner.js +306 -189
- package/dist/cjs/sessions/base_session_service.js +1 -4
- package/dist/cjs/sessions/database_session_service.js +191 -19
- package/dist/cjs/sessions/db/operations.js +70 -1
- package/dist/cjs/sessions/db/schema.js +4 -0
- package/dist/cjs/sessions/in_memory_session_service.js +2 -2
- package/dist/cjs/sessions/vertex_ai_session_service.js +11 -3
- package/dist/cjs/skills/loader.js +29 -28
- package/dist/cjs/telemetry/api/instrumentation.js +632 -0
- package/dist/cjs/telemetry/api/internal/common/accumulators.js +169 -0
- package/dist/cjs/telemetry/api/internal/common/attributes.js +131 -0
- package/dist/cjs/telemetry/api/internal/common/config.js +159 -0
- package/dist/cjs/telemetry/api/internal/common/error.js +98 -0
- package/dist/cjs/telemetry/api/internal/common/finish_reason.js +63 -0
- package/dist/cjs/telemetry/api/internal/common/genai_messages.js +217 -0
- package/dist/cjs/telemetry/api/internal/common/http_exchange.js +169 -0
- package/dist/cjs/telemetry/api/internal/common/provider_name.js +87 -0
- package/dist/cjs/telemetry/api/internal/common/redaction.js +148 -0
- package/dist/cjs/telemetry/api/internal/common/serialization.js +58 -0
- package/dist/cjs/telemetry/api/internal/common/token_usage.js +118 -0
- package/dist/cjs/telemetry/api/internal/logs/inference.js +50 -0
- package/dist/cjs/telemetry/api/internal/logs/logger.js +46 -0
- package/dist/cjs/telemetry/api/internal/logs/mcp.js +141 -0
- package/dist/cjs/telemetry/api/internal/metrics/agent.js +128 -0
- package/dist/cjs/telemetry/api/internal/metrics/inference_start_hook.js +56 -0
- package/dist/cjs/telemetry/api/internal/metrics/meters.js +189 -0
- package/dist/cjs/telemetry/api/internal/metrics/tool.js +147 -0
- package/dist/cjs/telemetry/api/internal/metrics/workflow.js +132 -0
- package/dist/cjs/telemetry/api/internal/trace/agent.js +52 -0
- package/dist/cjs/telemetry/api/internal/trace/compaction.js +78 -0
- package/dist/cjs/telemetry/api/internal/trace/inference.js +132 -0
- package/dist/cjs/telemetry/api/internal/trace/live.js +52 -0
- package/dist/cjs/telemetry/api/internal/trace/node.js +73 -0
- package/dist/cjs/telemetry/api/internal/trace/propagation.js +67 -0
- package/dist/cjs/telemetry/api/internal/trace/tool.js +122 -0
- package/dist/cjs/telemetry/api/internal/trace/tracer.js +77 -0
- package/dist/cjs/telemetry/api/internal/trace/workflow.js +77 -0
- package/dist/cjs/telemetry/export/agent_engine.js +90 -0
- package/dist/cjs/telemetry/export/agent_runtime.js +73 -0
- package/dist/cjs/telemetry/export/google_cloud.js +763 -0
- package/dist/cjs/telemetry/export/request_driven_metric_reader.js +303 -0
- package/dist/cjs/telemetry/{setup.js → export/setup.js} +72 -5
- package/dist/cjs/tools/agent_tool.js +9 -1
- package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +22 -34
- package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +60 -20
- package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +26 -10
- package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +14 -23
- package/dist/cjs/tools/base_toolset.js +1 -1
- package/dist/cjs/tools/computer_use/base_computer.js +125 -0
- package/dist/cjs/tools/computer_use/computer_use_actions.js +502 -0
- package/dist/cjs/tools/computer_use/computer_use_tool.js +244 -0
- package/dist/cjs/tools/computer_use/computer_use_toolset.js +360 -0
- package/dist/cjs/tools/function_tool.js +15 -5
- package/dist/cjs/tools/google_api_tool/google_api_toolset.js +3 -2
- package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +3 -1
- package/dist/cjs/tools/load_artifacts_tool.js +15 -5
- package/dist/cjs/tools/load_memory_tool.js +2 -5
- package/dist/cjs/tools/mcp/mcp_session_manager.js +23 -3
- package/dist/cjs/tools/mcp/mcp_tool.js +7 -3
- package/dist/cjs/tools/mcp/mcp_toolset.js +18 -6
- package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +30 -29
- package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
- package/dist/cjs/tools/openapi_tool/rest_api_tool.js +45 -14
- package/dist/cjs/tools/skill/load_skill_resource_tool.js +7 -0
- package/dist/cjs/tools/skill/load_skill_tool.js +3 -0
- package/dist/cjs/tools/skill/run_skill_script_tool.js +12 -2
- package/dist/cjs/tools/toolbox_toolset.js +47 -28
- package/dist/cjs/utils/async_queue.js +37 -3
- package/dist/cjs/utils/client_labels.js +9 -11
- package/dist/cjs/utils/env_aware_utils.js +13 -7
- package/dist/cjs/utils/error_utils.js +40 -2
- package/dist/cjs/utils/failover_utils.js +10 -9
- package/dist/cjs/utils/gemini_schema_util.js +125 -12
- package/dist/cjs/utils/id_provider.js +63 -0
- package/dist/cjs/utils/model_name.js +15 -0
- package/dist/cjs/utils/simple_zod_to_json.js +13 -31
- package/dist/cjs/utils/ssrf_guard.js +46 -16
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/workflow/index.js +2 -0
- package/dist/cjs/workflow/node_runner.js +24 -80
- package/dist/cjs/workflow/nodes/parallel_worker.js +18 -7
- package/dist/cjs/workflow/run_llm_agent_as_node.js +19 -14
- package/dist/cjs/workflow/utils/retry_utils.js +2 -2
- package/dist/cjs/workflow/workflow.js +12 -12
- package/dist/esm/a2a/a2a_remote_agent.js +23 -3
- package/dist/esm/a2a/a2a_remote_agent_utils.js +8 -4
- package/dist/esm/a2a/agent_card.js +5 -83
- package/dist/esm/a2a/agent_to_a2a.js +7 -0
- package/dist/esm/a2a/event_converter_utils.js +10 -3
- package/dist/esm/agents/agent_engine_client.js +293 -55
- package/dist/esm/agents/base_agent.js +111 -72
- package/dist/esm/agents/functions.js +67 -89
- package/dist/esm/agents/instructions.js +7 -6
- package/dist/esm/agents/invocation_context.js +2 -2
- package/dist/esm/agents/llm_agent.js +111 -100
- package/dist/esm/agents/processors/content_processor_utils.js +42 -15
- package/dist/esm/agents/processors/content_request_processor.js +28 -11
- package/dist/esm/agents/processors/context_compactor_request_processor.js +5 -1
- package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
- package/dist/esm/agents/processors/nl_planning_processor.js +2 -1
- package/dist/esm/artifacts/file_artifact_service.js +1 -1
- package/dist/esm/cli/cli_eval.js +880 -17
- package/dist/esm/cli/utils/cleanup.js +56 -0
- package/dist/esm/cli/utils/envs.js +33 -2
- package/dist/esm/cli/utils/evals.js +74 -8
- package/dist/esm/cli/utils/logs.js +128 -9
- package/dist/esm/cli/utils/path_validation.js +45 -0
- package/dist/esm/code_executors/container_code_executor.js +158 -36
- package/dist/esm/common.js +49 -6
- package/dist/esm/context/compaction_utils.js +19 -0
- package/dist/esm/events/event.js +7 -3
- package/dist/esm/features/feature_registry.js +5 -0
- package/dist/esm/index.js +27 -15
- package/dist/esm/models/google_llm.js +33 -2
- package/dist/esm/models/interactions_utils.js +3 -0
- package/dist/esm/plugins/base_plugin.js +45 -21
- package/dist/esm/plugins/plugin_manager.js +27 -0
- package/dist/esm/runner/runner.js +310 -192
- package/dist/esm/sessions/base_session_service.js +1 -4
- package/dist/esm/sessions/database_session_service.js +191 -19
- package/dist/esm/sessions/db/operations.js +70 -1
- package/dist/esm/sessions/db/schema.js +4 -0
- package/dist/esm/sessions/in_memory_session_service.js +2 -2
- package/dist/esm/sessions/vertex_ai_session_service.js +11 -3
- package/dist/esm/skills/loader.js +29 -28
- package/dist/esm/telemetry/api/instrumentation.js +655 -0
- package/dist/esm/telemetry/api/internal/common/accumulators.js +139 -0
- package/dist/esm/telemetry/api/internal/common/attributes.js +94 -0
- package/dist/esm/telemetry/api/internal/common/config.js +128 -0
- package/dist/esm/telemetry/api/internal/common/error.js +69 -0
- package/dist/esm/telemetry/api/internal/common/finish_reason.js +35 -0
- package/dist/esm/telemetry/api/internal/common/genai_messages.js +188 -0
- package/dist/esm/telemetry/api/internal/common/http_exchange.js +142 -0
- package/dist/esm/telemetry/api/internal/common/provider_name.js +59 -0
- package/dist/esm/telemetry/api/internal/common/redaction.js +121 -0
- package/dist/esm/telemetry/api/internal/common/serialization.js +30 -0
- package/dist/esm/telemetry/api/internal/common/token_usage.js +85 -0
- package/dist/esm/telemetry/api/internal/logs/inference.js +23 -0
- package/dist/esm/telemetry/api/internal/logs/logger.js +19 -0
- package/dist/esm/telemetry/api/internal/logs/mcp.js +113 -0
- package/dist/esm/telemetry/api/internal/metrics/agent.js +107 -0
- package/dist/esm/telemetry/api/internal/metrics/inference_start_hook.js +29 -0
- package/dist/esm/telemetry/api/internal/metrics/meters.js +165 -0
- package/dist/esm/telemetry/api/internal/metrics/tool.js +119 -0
- package/dist/esm/telemetry/api/internal/metrics/workflow.js +112 -0
- package/dist/esm/telemetry/api/internal/trace/agent.js +25 -0
- package/dist/esm/telemetry/api/internal/trace/compaction.js +50 -0
- package/dist/esm/telemetry/api/internal/trace/inference.js +107 -0
- package/dist/esm/telemetry/api/internal/trace/live.js +28 -0
- package/dist/esm/telemetry/api/internal/trace/node.js +44 -0
- package/dist/esm/telemetry/api/internal/trace/propagation.js +39 -0
- package/dist/esm/telemetry/api/internal/trace/tool.js +96 -0
- package/dist/esm/telemetry/api/internal/trace/tracer.js +52 -0
- package/dist/esm/telemetry/api/internal/trace/workflow.js +54 -0
- package/dist/esm/telemetry/export/agent_engine.js +67 -0
- package/dist/esm/telemetry/export/agent_runtime.js +46 -0
- package/dist/esm/telemetry/export/google_cloud.js +733 -0
- package/dist/esm/telemetry/export/request_driven_metric_reader.js +276 -0
- package/dist/esm/telemetry/export/setup.js +160 -0
- package/dist/esm/tools/agent_tool.js +9 -1
- package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +23 -35
- package/dist/esm/tools/application_integration_tool/clients/connections_client.js +64 -21
- package/dist/esm/tools/application_integration_tool/clients/integration_client.js +26 -10
- package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +14 -23
- package/dist/esm/tools/base_toolset.js +1 -1
- package/dist/esm/tools/computer_use/base_computer.js +99 -0
- package/dist/esm/tools/computer_use/computer_use_actions.js +477 -0
- package/dist/esm/tools/computer_use/computer_use_tool.js +217 -0
- package/dist/esm/tools/computer_use/computer_use_toolset.js +344 -0
- package/dist/esm/tools/function_tool.js +15 -5
- package/dist/esm/tools/google_api_tool/google_api_toolset.js +3 -2
- package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +3 -1
- package/dist/esm/tools/load_artifacts_tool.js +15 -5
- package/dist/esm/tools/load_memory_tool.js +2 -5
- package/dist/esm/tools/mcp/mcp_session_manager.js +23 -3
- package/dist/esm/tools/mcp/mcp_tool.js +7 -3
- package/dist/esm/tools/mcp/mcp_toolset.js +18 -6
- package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +27 -26
- package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
- package/dist/esm/tools/openapi_tool/rest_api_tool.js +45 -14
- package/dist/esm/tools/skill/load_skill_resource_tool.js +7 -0
- package/dist/esm/tools/skill/load_skill_tool.js +3 -0
- package/dist/esm/tools/skill/run_skill_script_tool.js +12 -2
- package/dist/esm/tools/toolbox_toolset.js +47 -28
- package/dist/esm/utils/async_queue.js +37 -3
- package/dist/esm/utils/client_labels.js +9 -11
- package/dist/esm/utils/env_aware_utils.js +12 -7
- package/dist/esm/utils/error_utils.js +37 -1
- package/dist/esm/utils/failover_utils.js +10 -9
- package/dist/esm/utils/gemini_schema_util.js +124 -11
- package/dist/esm/utils/id_provider.js +33 -0
- package/dist/esm/utils/model_name.js +14 -0
- package/dist/esm/utils/simple_zod_to_json.js +13 -31
- package/dist/esm/utils/ssrf_guard.js +55 -15
- package/dist/esm/version.js +1 -1
- package/dist/esm/workflow/index.js +2 -1
- package/dist/esm/workflow/node_runner.js +26 -80
- package/dist/esm/workflow/nodes/parallel_worker.js +16 -6
- package/dist/esm/workflow/run_llm_agent_as_node.js +19 -14
- package/dist/esm/workflow/utils/retry_utils.js +2 -2
- package/dist/esm/workflow/workflow.js +12 -12
- package/dist/types/a2a/a2a_remote_agent.d.ts +6 -0
- package/dist/types/a2a/a2a_remote_agent_utils.d.ts +3 -2
- package/dist/types/agents/agent_engine_client.d.ts +121 -3
- package/dist/types/agents/base_agent.d.ts +2 -0
- package/dist/types/agents/processors/content_processor_utils.d.ts +9 -9
- package/dist/types/agents/run_config.d.ts +14 -0
- package/dist/types/cli/cli_eval.d.ts +172 -9
- package/dist/types/cli/utils/cleanup.d.ts +18 -0
- package/dist/types/cli/utils/envs.d.ts +13 -3
- package/dist/types/cli/utils/evals.d.ts +64 -1
- package/dist/types/cli/utils/logs.d.ts +19 -2
- package/dist/types/cli/utils/path_validation.d.ts +30 -0
- package/dist/types/code_executors/container_code_executor.d.ts +49 -8
- package/dist/types/common.d.ts +16 -9
- package/dist/types/context/compaction_utils.d.ts +13 -1
- package/dist/types/events/event.d.ts +3 -0
- package/dist/types/features/feature_registry.d.ts +1 -0
- package/dist/types/index.d.ts +9 -6
- package/dist/types/plugins/base_plugin.d.ts +50 -21
- package/dist/types/plugins/plugin_manager.d.ts +13 -0
- package/dist/types/runner/runner.d.ts +11 -0
- package/dist/types/sessions/base_session_service.d.ts +0 -2
- package/dist/types/sessions/db/operations.d.ts +2 -1
- package/dist/types/sessions/db/schema.d.ts +5 -3
- package/dist/types/telemetry/api/instrumentation.d.ts +259 -0
- package/dist/types/telemetry/api/internal/common/accumulators.d.ts +91 -0
- package/dist/types/telemetry/api/internal/common/attributes.d.ts +90 -0
- package/dist/types/telemetry/api/internal/common/config.d.ts +61 -0
- package/dist/types/telemetry/api/internal/common/error.d.ts +29 -0
- package/dist/types/telemetry/api/internal/common/finish_reason.d.ts +18 -0
- package/dist/types/telemetry/api/internal/common/genai_messages.d.ts +26 -0
- package/dist/types/telemetry/api/internal/common/http_exchange.d.ts +50 -0
- package/dist/types/telemetry/api/internal/common/provider_name.d.ts +16 -0
- package/dist/types/telemetry/api/internal/common/redaction.d.ts +14 -0
- package/dist/types/telemetry/api/internal/common/serialization.d.ts +18 -0
- package/dist/types/telemetry/api/internal/common/token_usage.d.ts +47 -0
- package/dist/types/telemetry/api/internal/logs/inference.d.ts +15 -0
- package/dist/types/telemetry/api/internal/logs/logger.d.ts +13 -0
- package/dist/types/telemetry/api/internal/logs/mcp.d.ts +31 -0
- package/dist/types/telemetry/api/internal/metrics/agent.d.ts +28 -0
- package/dist/types/telemetry/api/internal/metrics/inference_start_hook.d.ts +12 -0
- package/dist/types/telemetry/api/internal/metrics/meters.d.ts +57 -0
- package/dist/types/telemetry/api/internal/metrics/tool.d.ts +44 -0
- package/dist/types/telemetry/api/internal/metrics/workflow.d.ts +32 -0
- package/dist/types/telemetry/api/internal/trace/agent.d.ts +14 -0
- package/dist/types/telemetry/api/internal/trace/compaction.d.ts +20 -0
- package/dist/types/telemetry/api/internal/trace/inference.d.ts +31 -0
- package/dist/types/telemetry/api/internal/trace/live.d.ts +21 -0
- package/dist/types/telemetry/api/internal/trace/node.d.ts +22 -0
- package/dist/types/telemetry/api/internal/trace/propagation.d.ts +22 -0
- package/dist/types/telemetry/api/internal/trace/tool.d.ts +57 -0
- package/dist/types/telemetry/api/internal/trace/tracer.d.ts +31 -0
- package/dist/types/telemetry/api/internal/trace/workflow.d.ts +21 -0
- package/dist/types/telemetry/export/agent_engine.d.ts +23 -0
- package/dist/types/telemetry/export/agent_runtime.d.ts +40 -0
- package/dist/types/telemetry/export/google_cloud.d.ts +189 -0
- package/dist/types/telemetry/export/request_driven_metric_reader.d.ts +144 -0
- package/dist/types/telemetry/{setup.d.ts → export/setup.d.ts} +3 -0
- package/dist/types/tools/agent_tool.d.ts +1 -1
- package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +13 -4
- package/dist/types/tools/base_toolset.d.ts +1 -1
- package/dist/types/tools/computer_use/base_computer.d.ts +281 -0
- package/dist/types/tools/computer_use/computer_use_actions.d.ts +53 -0
- package/dist/types/tools/computer_use/computer_use_tool.d.ts +108 -0
- package/dist/types/tools/computer_use/computer_use_toolset.d.ts +132 -0
- package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +2 -0
- package/dist/types/tools/load_artifacts_tool.d.ts +5 -1
- package/dist/types/tools/load_memory_tool.d.ts +13 -7
- package/dist/types/tools/mcp/mcp_session_manager.d.ts +16 -0
- package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +8 -8
- package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +7 -3
- package/dist/types/tools/toolbox_toolset.d.ts +15 -20
- package/dist/types/utils/async_queue.d.ts +14 -0
- package/dist/types/utils/env_aware_utils.d.ts +11 -0
- package/dist/types/utils/error_utils.d.ts +4 -0
- package/dist/types/utils/gemini_schema_util.d.ts +27 -6
- package/dist/types/utils/id_provider.d.ts +43 -0
- package/dist/types/utils/model_name.d.ts +8 -0
- package/dist/types/utils/ssrf_guard.d.ts +2 -0
- package/dist/types/version.d.ts +1 -1
- package/dist/types/workflow/index.d.ts +1 -1
- package/dist/types/workflow/nodes/parallel_worker.d.ts +8 -1
- package/dist/web/index_web.js +86 -88
- package/dist/web/index_web.js.map +4 -4
- package/package.json +13 -15
- package/dist/cjs/telemetry/google_cloud.js +0 -116
- package/dist/cjs/telemetry/tracing.js +0 -393
- package/dist/esm/telemetry/google_cloud.js +0 -99
- package/dist/esm/telemetry/setup.js +0 -88
- package/dist/esm/telemetry/tracing.js +0 -361
- package/dist/types/telemetry/google_cloud.d.ts +0 -9
- package/dist/types/telemetry/tracing.d.ts +0 -143
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import {createRequire as topLevelCreateRequire} from 'module';
|
|
2
|
+
const require = topLevelCreateRequire(import.meta.url);
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
5
|
+
/**
|
|
6
|
+
* @license
|
|
7
|
+
* Copyright 2026 Google LLC
|
|
8
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
*/
|
|
10
|
+
var _a, _b;
|
|
11
|
+
import { context, createContextKey } from "@opentelemetry/api";
|
|
12
|
+
import {
|
|
13
|
+
MetricReader
|
|
14
|
+
} from "@opentelemetry/sdk-metrics";
|
|
15
|
+
import { formatError } from "../../utils/error_utils.js";
|
|
16
|
+
import { logger } from "../../utils/logger.js";
|
|
17
|
+
const MIN_EXPORT_INTERVAL_MS = 5e3;
|
|
18
|
+
const FLOOR_ENV_VAR = "GOOGLE_CLOUD_AGENT_ENGINE_METRICS_COLLECTION_INTERVAL_FLOOR_MS";
|
|
19
|
+
const EXPORT_INTERVAL_ENV_VAR = "OTEL_METRIC_EXPORT_INTERVAL";
|
|
20
|
+
const EXPORT_TIMEOUT_ENV_VAR = "OTEL_METRIC_EXPORT_TIMEOUT";
|
|
21
|
+
const DEFAULT_EXPORT_INTERVAL_MS = 6e4;
|
|
22
|
+
const DEFAULT_EXPORT_TIMEOUT_MS = 3e4;
|
|
23
|
+
const OVERDUE_PERIODS = 1.5;
|
|
24
|
+
const INFERENCE_START_HOOK_KEY = /* @__PURE__ */ Symbol.for(
|
|
25
|
+
"google.adk.telemetry.inferenceStartHook"
|
|
26
|
+
);
|
|
27
|
+
const SUPPRESS_TRACING_KEY = createContextKey(
|
|
28
|
+
"OpenTelemetry SDK Context Key SUPPRESS_TRACING"
|
|
29
|
+
);
|
|
30
|
+
const EXPORT_RESULT_SUCCESS = 0;
|
|
31
|
+
const REQUEST_DRIVEN_METRIC_READER_SIGNATURE_SYMBOL = /* @__PURE__ */ Symbol.for(
|
|
32
|
+
"google.adk.requestDrivenMetricReader"
|
|
33
|
+
);
|
|
34
|
+
function isRequestDrivenMetricReader(obj) {
|
|
35
|
+
return typeof obj === "object" && obj !== null && REQUEST_DRIVEN_METRIC_READER_SIGNATURE_SYMBOL in obj;
|
|
36
|
+
}
|
|
37
|
+
__name(isRequestDrivenMetricReader, "isRequestDrivenMetricReader");
|
|
38
|
+
const _RequestDrivenMetricReader = class _RequestDrivenMetricReader extends (_b = MetricReader, _a = REQUEST_DRIVEN_METRIC_READER_SIGNATURE_SYMBOL, _b) {
|
|
39
|
+
constructor({
|
|
40
|
+
exporter,
|
|
41
|
+
exportIntervalMillis,
|
|
42
|
+
exportTimeoutMillis,
|
|
43
|
+
floorMillis,
|
|
44
|
+
now = /* @__PURE__ */ __name(() => performance.now(), "now")
|
|
45
|
+
}) {
|
|
46
|
+
var _a2, _b2;
|
|
47
|
+
super({
|
|
48
|
+
aggregationSelector: (_a2 = exporter.selectAggregation) == null ? void 0 : _a2.bind(exporter),
|
|
49
|
+
aggregationTemporalitySelector: (_b2 = exporter.selectAggregationTemporality) == null ? void 0 : _b2.bind(exporter)
|
|
50
|
+
});
|
|
51
|
+
this[_a] = true;
|
|
52
|
+
this.inferenceStartHook = /* @__PURE__ */ __name(() => this.onInferenceStart(), "inferenceStartHook");
|
|
53
|
+
this.inFlight = 0;
|
|
54
|
+
this.isShutdown = false;
|
|
55
|
+
this.warnedNoRequest = false;
|
|
56
|
+
this.exporter = exporter;
|
|
57
|
+
this.now = now;
|
|
58
|
+
this.periodMillis = resolveMillis({
|
|
59
|
+
name: EXPORT_INTERVAL_ENV_VAR,
|
|
60
|
+
explicit: exportIntervalMillis,
|
|
61
|
+
fallback: DEFAULT_EXPORT_INTERVAL_MS,
|
|
62
|
+
allowZero: false
|
|
63
|
+
});
|
|
64
|
+
this.exportTimeoutMillis = resolveMillis({
|
|
65
|
+
name: EXPORT_TIMEOUT_ENV_VAR,
|
|
66
|
+
explicit: exportTimeoutMillis,
|
|
67
|
+
fallback: DEFAULT_EXPORT_TIMEOUT_MS,
|
|
68
|
+
allowZero: false
|
|
69
|
+
});
|
|
70
|
+
this.floorMillis = resolveMillis({
|
|
71
|
+
name: FLOOR_ENV_VAR,
|
|
72
|
+
explicit: floorMillis,
|
|
73
|
+
fallback: MIN_EXPORT_INTERVAL_MS,
|
|
74
|
+
allowZero: true
|
|
75
|
+
});
|
|
76
|
+
this.nextDue = this.now() + this.periodMillis;
|
|
77
|
+
}
|
|
78
|
+
/** Marks a request as started, and collects if a guidepost has passed. */
|
|
79
|
+
onRequestStart() {
|
|
80
|
+
try {
|
|
81
|
+
const now = this.now();
|
|
82
|
+
const overlap = this.inFlight >= 1;
|
|
83
|
+
if (!overlap) {
|
|
84
|
+
this.busyStart = now;
|
|
85
|
+
}
|
|
86
|
+
this.inFlight += 1;
|
|
87
|
+
if (!this.canCollect() || !overlap || now < this.nextDue) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (this.floorAllows(now)) {
|
|
91
|
+
this.startCollect(now);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
this.nextDue += this.periodMillis;
|
|
95
|
+
} catch (error) {
|
|
96
|
+
logger.warn(`Metric request-start hook failed: ${formatError(error)}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Marks a request as ended. Collects when no request is left in flight and
|
|
101
|
+
* the floor allows it, and resolves once any running collect has exported.
|
|
102
|
+
*/
|
|
103
|
+
async onRequestEnd() {
|
|
104
|
+
try {
|
|
105
|
+
const now = this.now();
|
|
106
|
+
this.inFlight = Math.max(0, this.inFlight - 1);
|
|
107
|
+
if (this.inFlight === 0 && this.canCollect() && this.floorAllows(now)) {
|
|
108
|
+
this.startCollect(now);
|
|
109
|
+
}
|
|
110
|
+
} catch (error) {
|
|
111
|
+
logger.warn(`Metric request-end hook failed: ${formatError(error)}`);
|
|
112
|
+
}
|
|
113
|
+
await this.runningCollect;
|
|
114
|
+
}
|
|
115
|
+
/** Collects at a model-call start if the busy period is overdue. */
|
|
116
|
+
onInferenceStart() {
|
|
117
|
+
try {
|
|
118
|
+
if (this.inFlight === 0) {
|
|
119
|
+
if (!this.warnedNoRequest && !this.isShutdown) {
|
|
120
|
+
this.warnedNoRequest = true;
|
|
121
|
+
logger.warn(
|
|
122
|
+
"A model call started with no active request in RequestDrivenMetricReader. Wrap each request with agentRuntimeRequestHooks(otelHooks) so metrics are collected and exported while requests hold the CPU."
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const now = this.now();
|
|
128
|
+
if (this.canCollect() && this.isOverdue(now) && this.floorAllows(now)) {
|
|
129
|
+
this.startCollect(now);
|
|
130
|
+
}
|
|
131
|
+
} catch (error) {
|
|
132
|
+
logger.warn(`Metric model-call hook failed: ${formatError(error)}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Registers the model-call start hook when a provider initializes this
|
|
137
|
+
* reader.
|
|
138
|
+
*
|
|
139
|
+
* Because the hook uses a single process-global slot where the last
|
|
140
|
+
* registered reader wins, only a single active reader is supported.
|
|
141
|
+
*/
|
|
142
|
+
onInitialized() {
|
|
143
|
+
Reflect.set(globalThis, INFERENCE_START_HOOK_KEY, this.inferenceStartHook);
|
|
144
|
+
}
|
|
145
|
+
/** Shuts down the reader, exports remaining metrics, and cleans up hooks. */
|
|
146
|
+
async onShutdown() {
|
|
147
|
+
this.isShutdown = true;
|
|
148
|
+
if (Reflect.get(globalThis, INFERENCE_START_HOOK_KEY) === this.inferenceStartHook) {
|
|
149
|
+
Reflect.deleteProperty(globalThis, INFERENCE_START_HOOK_KEY);
|
|
150
|
+
}
|
|
151
|
+
await this.runningCollect;
|
|
152
|
+
await this.runExclusive();
|
|
153
|
+
await this.exporter.shutdown();
|
|
154
|
+
}
|
|
155
|
+
/** Flushes any in-flight and pending metric exports. */
|
|
156
|
+
async onForceFlush() {
|
|
157
|
+
await this.runningCollect;
|
|
158
|
+
await this.runExclusive();
|
|
159
|
+
await this.exporter.forceFlush();
|
|
160
|
+
}
|
|
161
|
+
canCollect() {
|
|
162
|
+
return this.runningCollect === void 0 && !this.isShutdown;
|
|
163
|
+
}
|
|
164
|
+
floorAllows(now) {
|
|
165
|
+
return this.lastCollect === void 0 || now - this.lastCollect >= this.floorMillis;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Returns whether the current busy period has gone 1.5 periods without a
|
|
169
|
+
* collect. A collect from an earlier busy period does not count, so a short
|
|
170
|
+
* request after an idle gap is never overdue: collecting at its model call
|
|
171
|
+
* would set the floor and mute the drain that carries its points.
|
|
172
|
+
*/
|
|
173
|
+
isOverdue(now) {
|
|
174
|
+
var _a2;
|
|
175
|
+
if (this.busyStart === void 0) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
const since = Math.max(this.busyStart, (_a2 = this.lastCollect) != null ? _a2 : -Infinity);
|
|
179
|
+
return now - since >= OVERDUE_PERIODS * this.periodMillis;
|
|
180
|
+
}
|
|
181
|
+
/** Starts a collect, and moves the guidepost grid past `now`. */
|
|
182
|
+
startCollect(now) {
|
|
183
|
+
if (now >= this.nextDue) {
|
|
184
|
+
const missed = Math.floor((now - this.nextDue) / this.periodMillis) + 1;
|
|
185
|
+
this.nextDue += missed * this.periodMillis;
|
|
186
|
+
}
|
|
187
|
+
this.lastCollect = now;
|
|
188
|
+
void this.runExclusive();
|
|
189
|
+
}
|
|
190
|
+
/** Runs one collect and export as the running collect. Never rejects. */
|
|
191
|
+
runExclusive() {
|
|
192
|
+
const run = this.collectAndExport().finally(() => {
|
|
193
|
+
if (this.runningCollect === run) {
|
|
194
|
+
this.runningCollect = void 0;
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
this.runningCollect = run;
|
|
198
|
+
return run;
|
|
199
|
+
}
|
|
200
|
+
async collectAndExport() {
|
|
201
|
+
var _a2, _b2;
|
|
202
|
+
try {
|
|
203
|
+
const { resourceMetrics, errors } = await this.collect({
|
|
204
|
+
timeoutMillis: this.exportTimeoutMillis
|
|
205
|
+
});
|
|
206
|
+
for (const error of errors) {
|
|
207
|
+
logger.warn(`Metric collection reported: ${formatError(error)}`);
|
|
208
|
+
}
|
|
209
|
+
if (resourceMetrics.resource.asyncAttributesPending) {
|
|
210
|
+
await ((_b2 = (_a2 = resourceMetrics.resource).waitForAsyncAttributes) == null ? void 0 : _b2.call(_a2));
|
|
211
|
+
}
|
|
212
|
+
if (resourceMetrics.scopeMetrics.length === 0) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
await this.export(resourceMetrics);
|
|
216
|
+
} catch (error) {
|
|
217
|
+
logger.warn(`Request-driven metric export failed: ${formatError(error)}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async export(resourceMetrics) {
|
|
221
|
+
let timer;
|
|
222
|
+
const timedOut = new Promise((_, reject) => {
|
|
223
|
+
timer = setTimeout(() => {
|
|
224
|
+
reject(
|
|
225
|
+
new Error(
|
|
226
|
+
`Metric export timed out after ${this.exportTimeoutMillis} ms.`
|
|
227
|
+
)
|
|
228
|
+
);
|
|
229
|
+
}, this.exportTimeoutMillis);
|
|
230
|
+
});
|
|
231
|
+
const exported = new Promise((resolve) => {
|
|
232
|
+
context.with(
|
|
233
|
+
context.active().setValue(SUPPRESS_TRACING_KEY, true),
|
|
234
|
+
() => this.exporter.export(resourceMetrics, resolve)
|
|
235
|
+
);
|
|
236
|
+
});
|
|
237
|
+
try {
|
|
238
|
+
const result = await Promise.race([exported, timedOut]);
|
|
239
|
+
if (result.code !== EXPORT_RESULT_SUCCESS) {
|
|
240
|
+
throw new Error(
|
|
241
|
+
`Metric exporter reported a failure: ${formatError(result.error)}`
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
} finally {
|
|
245
|
+
clearTimeout(timer);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
__name(_RequestDrivenMetricReader, "RequestDrivenMetricReader");
|
|
250
|
+
let RequestDrivenMetricReader = _RequestDrivenMetricReader;
|
|
251
|
+
function resolveMillis({
|
|
252
|
+
name,
|
|
253
|
+
explicit,
|
|
254
|
+
fallback,
|
|
255
|
+
allowZero
|
|
256
|
+
}) {
|
|
257
|
+
const raw = explicit != null ? explicit : process.env[name];
|
|
258
|
+
if (raw === void 0) {
|
|
259
|
+
return fallback;
|
|
260
|
+
}
|
|
261
|
+
const value = typeof raw === "number" ? raw : Number(raw.trim() || NaN);
|
|
262
|
+
const inRange = allowZero ? value >= 0 : value > 0;
|
|
263
|
+
if (Number.isFinite(value) && inRange) {
|
|
264
|
+
return value;
|
|
265
|
+
}
|
|
266
|
+
logger.warn(
|
|
267
|
+
`Found invalid value for ${name}=${JSON.stringify(raw)}, using default ${fallback}.`
|
|
268
|
+
);
|
|
269
|
+
return fallback;
|
|
270
|
+
}
|
|
271
|
+
__name(resolveMillis, "resolveMillis");
|
|
272
|
+
export {
|
|
273
|
+
MIN_EXPORT_INTERVAL_MS,
|
|
274
|
+
RequestDrivenMetricReader,
|
|
275
|
+
isRequestDrivenMetricReader
|
|
276
|
+
};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import {createRequire as topLevelCreateRequire} from 'module';
|
|
2
|
+
const require = topLevelCreateRequire(import.meta.url);
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
5
|
+
/**
|
|
6
|
+
* @license
|
|
7
|
+
* Copyright 2025 Google LLC
|
|
8
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
*/
|
|
10
|
+
import {
|
|
11
|
+
createNoopMeter,
|
|
12
|
+
metrics,
|
|
13
|
+
ProxyTracerProvider,
|
|
14
|
+
trace
|
|
15
|
+
} from "@opentelemetry/api";
|
|
16
|
+
import { logs } from "@opentelemetry/api-logs";
|
|
17
|
+
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
|
|
18
|
+
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
|
|
19
|
+
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
20
|
+
import { detectResources, envDetector } from "@opentelemetry/resources";
|
|
21
|
+
import {
|
|
22
|
+
BatchLogRecordProcessor,
|
|
23
|
+
LoggerProvider
|
|
24
|
+
} from "@opentelemetry/sdk-logs";
|
|
25
|
+
import {
|
|
26
|
+
MeterProvider,
|
|
27
|
+
PeriodicExportingMetricReader
|
|
28
|
+
} from "@opentelemetry/sdk-metrics";
|
|
29
|
+
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
30
|
+
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
|
|
31
|
+
function maybeSetOtelProviders(otelHooksToSetup = [], otelResource) {
|
|
32
|
+
const tracerAlreadySet = isTracerProviderRegistered();
|
|
33
|
+
const meterAlreadySet = isMeterProviderRegistered();
|
|
34
|
+
const loggerAlreadySet = isLoggerProviderRegistered();
|
|
35
|
+
if (tracerAlreadySet && meterAlreadySet && loggerAlreadySet) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const exportersConfig = getOtelExportersConfig();
|
|
39
|
+
if (tracerAlreadySet) {
|
|
40
|
+
exportersConfig.enableTracing = false;
|
|
41
|
+
}
|
|
42
|
+
if (meterAlreadySet) {
|
|
43
|
+
exportersConfig.enableMetrics = false;
|
|
44
|
+
}
|
|
45
|
+
if (loggerAlreadySet) {
|
|
46
|
+
exportersConfig.enableLogging = false;
|
|
47
|
+
}
|
|
48
|
+
const resource = otelResource || getOtelResource();
|
|
49
|
+
const allHooks = [...otelHooksToSetup, getOtelExporters(exportersConfig)];
|
|
50
|
+
const spanProcessors = allHooks.flatMap(
|
|
51
|
+
(hooks) => hooks.spanProcessors || []
|
|
52
|
+
);
|
|
53
|
+
const metricReaders = allHooks.flatMap((hooks) => hooks.metricReaders || []);
|
|
54
|
+
const logRecordProcessors = allHooks.flatMap(
|
|
55
|
+
(hooks) => hooks.logRecordProcessors || []
|
|
56
|
+
);
|
|
57
|
+
if (!tracerAlreadySet && spanProcessors.length > 0) {
|
|
58
|
+
const tracerProvider = new NodeTracerProvider({
|
|
59
|
+
resource,
|
|
60
|
+
spanProcessors
|
|
61
|
+
});
|
|
62
|
+
tracerProvider.register();
|
|
63
|
+
}
|
|
64
|
+
if (!meterAlreadySet && metricReaders.length > 0) {
|
|
65
|
+
const meterProvider = new MeterProvider({
|
|
66
|
+
readers: metricReaders,
|
|
67
|
+
resource
|
|
68
|
+
});
|
|
69
|
+
metrics.setGlobalMeterProvider(meterProvider);
|
|
70
|
+
}
|
|
71
|
+
if (!loggerAlreadySet && logRecordProcessors.length > 0) {
|
|
72
|
+
const loggerProvider = new LoggerProvider({
|
|
73
|
+
resource,
|
|
74
|
+
processors: logRecordProcessors
|
|
75
|
+
});
|
|
76
|
+
logs.setGlobalLoggerProvider(loggerProvider);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
__name(maybeSetOtelProviders, "maybeSetOtelProviders");
|
|
80
|
+
function getOtelResource() {
|
|
81
|
+
return detectResources({
|
|
82
|
+
detectors: [envDetector]
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
__name(getOtelResource, "getOtelResource");
|
|
86
|
+
function getOtelExportersConfig() {
|
|
87
|
+
return {
|
|
88
|
+
enableTracing: !!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT),
|
|
89
|
+
enableMetrics: !!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT),
|
|
90
|
+
enableLogging: !!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT)
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
__name(getOtelExportersConfig, "getOtelExportersConfig");
|
|
94
|
+
function getOtelExporters(config = getOtelExportersConfig()) {
|
|
95
|
+
const { enableTracing, enableMetrics, enableLogging } = config;
|
|
96
|
+
return {
|
|
97
|
+
spanProcessors: enableTracing ? [new BatchSpanProcessor(new OTLPTraceExporter())] : [],
|
|
98
|
+
metricReaders: enableMetrics ? [
|
|
99
|
+
new PeriodicExportingMetricReader({
|
|
100
|
+
exporter: new OTLPMetricExporter()
|
|
101
|
+
})
|
|
102
|
+
] : [],
|
|
103
|
+
logRecordProcessors: enableLogging ? [new BatchLogRecordProcessor({ exporter: new OTLPLogExporter() })] : []
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
__name(getOtelExporters, "getOtelExporters");
|
|
107
|
+
function isTracerProviderRegistered() {
|
|
108
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
109
|
+
const provider = (_b = (_a = trace).getTracerProvider) == null ? void 0 : _b.call(_a);
|
|
110
|
+
if (!provider) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const noopDelegate = typeof ProxyTracerProvider === "function" ? (_d = (_c = new ProxyTracerProvider()) == null ? void 0 : _c.getDelegate) == null ? void 0 : _d.call(_c) : void 0;
|
|
114
|
+
const getDelegate = provider.getDelegate;
|
|
115
|
+
if (typeof getDelegate === "function") {
|
|
116
|
+
const delegate = getDelegate.call(provider);
|
|
117
|
+
if (!delegate) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
if (noopDelegate && delegate === noopDelegate) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
return ((_e = delegate.constructor) == null ? void 0 : _e.name) !== "NoopTracerProvider";
|
|
124
|
+
}
|
|
125
|
+
if (noopDelegate && provider === noopDelegate) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
return ((_f = provider.constructor) == null ? void 0 : _f.name) !== "ProxyTracerProvider" && ((_g = provider.constructor) == null ? void 0 : _g.name) !== "NoopTracerProvider";
|
|
129
|
+
}
|
|
130
|
+
__name(isTracerProviderRegistered, "isTracerProviderRegistered");
|
|
131
|
+
function isMeterProviderRegistered() {
|
|
132
|
+
var _a, _b, _c;
|
|
133
|
+
const provider = (_b = (_a = metrics).getMeterProvider) == null ? void 0 : _b.call(_a);
|
|
134
|
+
if (!provider) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
const noopMeter = typeof createNoopMeter === "function" ? createNoopMeter() : void 0;
|
|
138
|
+
if (noopMeter && typeof provider.getMeter === "function") {
|
|
139
|
+
if (provider.getMeter("adk") === noopMeter) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return ((_c = provider.constructor) == null ? void 0 : _c.name) !== "NoopMeterProvider";
|
|
144
|
+
}
|
|
145
|
+
__name(isMeterProviderRegistered, "isMeterProviderRegistered");
|
|
146
|
+
function isLoggerProviderRegistered() {
|
|
147
|
+
var _a, _b, _c, _d;
|
|
148
|
+
const provider = (_b = (_a = logs).getLoggerProvider) == null ? void 0 : _b.call(_a);
|
|
149
|
+
if (!provider) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
if (typeof provider._getDelegate === "function") {
|
|
153
|
+
return provider._delegate !== void 0;
|
|
154
|
+
}
|
|
155
|
+
return ((_c = provider.constructor) == null ? void 0 : _c.name) !== "ProxyLoggerProvider" && ((_d = provider.constructor) == null ? void 0 : _d.name) !== "NoopLoggerProvider";
|
|
156
|
+
}
|
|
157
|
+
__name(isLoggerProviderRegistered, "isLoggerProviderRegistered");
|
|
158
|
+
export {
|
|
159
|
+
maybeSetOtelProviders
|
|
160
|
+
};
|
|
@@ -9,6 +9,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
9
9
|
*/
|
|
10
10
|
var _a, _b;
|
|
11
11
|
import { Type } from "@google/genai";
|
|
12
|
+
import { isEqual } from "lodash-es";
|
|
12
13
|
import { isLlmAgent } from "../agents/llm_agent.js";
|
|
13
14
|
import { InMemoryMemoryService } from "../memory/in_memory_memory_service.js";
|
|
14
15
|
import { Runner } from "../runner/runner.js";
|
|
@@ -129,12 +130,18 @@ const _AgentTool = class _AgentTool extends (_b = BaseTool, _a = AGENT_TOOL_SIGN
|
|
|
129
130
|
memoryService: (_b2 = toolContext.invocationContext.memoryService) != null ? _b2 : new InMemoryMemoryService(),
|
|
130
131
|
credentialService: toolContext.invocationContext.credentialService
|
|
131
132
|
});
|
|
133
|
+
const parentState = toolContext.state.toRecord();
|
|
132
134
|
const session = await runner.sessionService.getOrCreateSession({
|
|
133
135
|
appName: this.agent.name,
|
|
134
136
|
userId: toolContext.invocationContext.userId,
|
|
135
137
|
sessionId: toolContext.invocationContext.session.id,
|
|
136
|
-
state:
|
|
138
|
+
state: parentState
|
|
137
139
|
});
|
|
140
|
+
const stateDelta = Object.fromEntries(
|
|
141
|
+
Object.entries(parentState).filter(
|
|
142
|
+
([key, value]) => !key.startsWith(State.TEMP_PREFIX) && !isEqual(session.state[key], value)
|
|
143
|
+
)
|
|
144
|
+
);
|
|
138
145
|
if ((_c = toolContext.abortSignal) == null ? void 0 : _c.aborted) {
|
|
139
146
|
return "";
|
|
140
147
|
}
|
|
@@ -143,6 +150,7 @@ const _AgentTool = class _AgentTool extends (_b = BaseTool, _a = AGENT_TOOL_SIGN
|
|
|
143
150
|
userId: session.userId,
|
|
144
151
|
sessionId: session.id,
|
|
145
152
|
newMessage: content,
|
|
153
|
+
stateDelta: Object.keys(stateDelta).length > 0 ? stateDelta : void 0,
|
|
146
154
|
abortSignal: toolContext.abortSignal
|
|
147
155
|
})) {
|
|
148
156
|
if ((_d = toolContext.abortSignal) == null ? void 0 : _d.aborted) {
|
|
@@ -19,6 +19,7 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
19
19
|
import {
|
|
20
20
|
AuthCredentialTypes
|
|
21
21
|
} from "../../auth/auth_credential.js";
|
|
22
|
+
import { toSnakeCaseName } from "../../utils/case_utils.js";
|
|
22
23
|
import { experimental } from "../../utils/experimental.js";
|
|
23
24
|
import {
|
|
24
25
|
isJsonObject,
|
|
@@ -26,7 +27,7 @@ import {
|
|
|
26
27
|
} from "../../utils/json_utils.js";
|
|
27
28
|
import { logger } from "../../utils/logger.js";
|
|
28
29
|
import { BaseToolset } from "../base_toolset.js";
|
|
29
|
-
import {
|
|
30
|
+
import { serviceAccountRecordToSchemeCredential } from "../openapi_tool/auth/auth_helpers.js";
|
|
30
31
|
import { OpenApiSpecParser } from "../openapi_tool/openapi_spec_parser/openapi_spec_parser.js";
|
|
31
32
|
import { OpenAPIToolset } from "../openapi_tool/openapi_toolset.js";
|
|
32
33
|
import { createRestApiTool } from "../openapi_tool/rest_api_tool.js";
|
|
@@ -117,8 +118,8 @@ let ApplicationIntegrationToolset = class extends BaseToolset {
|
|
|
117
118
|
const authCredential = buildAuthCredential(serviceAccountJson);
|
|
118
119
|
const toolsByName = /* @__PURE__ */ new Map();
|
|
119
120
|
if (integration) {
|
|
120
|
-
const
|
|
121
|
-
const spec2 = toOpenApiDocument(
|
|
121
|
+
const specRecord2 = await integrationClient.getOpenApiSpecForIntegration();
|
|
122
|
+
const spec2 = toOpenApiDocument(specRecord2);
|
|
122
123
|
for (const [path, pathItem] of Object.entries((_a = spec2.paths) != null ? _a : {})) {
|
|
123
124
|
const openApiToolset = new OpenAPIToolset({
|
|
124
125
|
specDict: { ...spec2, paths: { [removeFragment(path)]: pathItem } },
|
|
@@ -145,25 +146,30 @@ let ApplicationIntegrationToolset = class extends BaseToolset {
|
|
|
145
146
|
"Authentication schema and credentials are not used because authOverrideEnabled is not enabled in the connection."
|
|
146
147
|
);
|
|
147
148
|
}
|
|
148
|
-
const
|
|
149
|
+
const specRecord = await integrationClient.getOpenApiSpecForConnection(
|
|
149
150
|
resolvedToolName,
|
|
150
151
|
toolInstructions
|
|
151
152
|
);
|
|
152
|
-
const spec = toOpenApiDocument(
|
|
153
|
-
|
|
154
|
-
|
|
153
|
+
const spec = toOpenApiDocument(specRecord);
|
|
154
|
+
const operations = new OpenApiSpecParser({
|
|
155
|
+
preservePropertyNames: true
|
|
156
|
+
}).parse(spec);
|
|
155
157
|
for (const openApiOperation of operations) {
|
|
156
158
|
const operationObject = toJsonObject(openApiOperation.operation);
|
|
157
159
|
const operation = toStringValue(operationObject["x-operation"]);
|
|
158
160
|
const entity = toStringValue(operationObject["x-entity"]);
|
|
159
161
|
const action = toStringValue(operationObject["x-action"]);
|
|
160
|
-
const restApiTool = createRestApiTool(
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
162
|
+
const restApiTool = createRestApiTool(
|
|
163
|
+
{
|
|
164
|
+
...openApiOperation,
|
|
165
|
+
name: toSnakeCaseName(openApiOperation.name),
|
|
166
|
+
endpoint: {
|
|
167
|
+
...openApiOperation.endpoint,
|
|
168
|
+
path: removeFragment(openApiOperation.endpoint.path)
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
{ preservePropertyNames: true }
|
|
172
|
+
);
|
|
167
173
|
restApiTool.configureAuthScheme(AUTH_SCHEME);
|
|
168
174
|
restApiTool.configureAuthCredential(authCredential);
|
|
169
175
|
const tool = new IntegrationConnectorTool({
|
|
@@ -188,26 +194,8 @@ __name(ApplicationIntegrationToolset, "ApplicationIntegrationToolset");
|
|
|
188
194
|
ApplicationIntegrationToolset = __decorateClass([
|
|
189
195
|
experimental
|
|
190
196
|
], ApplicationIntegrationToolset);
|
|
191
|
-
function
|
|
192
|
-
|
|
193
|
-
const schemas = (_a = spec.components) == null ? void 0 : _a.schemas;
|
|
194
|
-
if (!schemas) {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
for (const [schemaName, schema] of Object.entries(schemas)) {
|
|
198
|
-
if (schemaName.endsWith("_Request") && isJsonObject(schema) && isJsonObject(schema.properties) && !("query" in schema.properties) && !("dynamicAuthConfig" in schema.properties)) {
|
|
199
|
-
schema.properties = {
|
|
200
|
-
...schema.properties,
|
|
201
|
-
dynamicAuthConfig: {
|
|
202
|
-
$ref: "#/components/schemas/dynamicAuthConfig"
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
__name(addDynamicAuthConfigToConnectionSchemas, "addDynamicAuthConfigToConnectionSchemas");
|
|
209
|
-
function toOpenApiDocument(specDict) {
|
|
210
|
-
return specDict;
|
|
197
|
+
function toOpenApiDocument(specRecord) {
|
|
198
|
+
return specRecord;
|
|
211
199
|
}
|
|
212
200
|
__name(toOpenApiDocument, "toOpenApiDocument");
|
|
213
201
|
function toStringValue(value) {
|
|
@@ -228,7 +216,7 @@ function buildAuthCredential(serviceAccountJson) {
|
|
|
228
216
|
if (!isJsonObject(key)) {
|
|
229
217
|
throw new Error("serviceAccountJson must hold a JSON object.");
|
|
230
218
|
}
|
|
231
|
-
const [, authCredential] =
|
|
219
|
+
const [, authCredential] = serviceAccountRecordToSchemeCredential(key, [
|
|
232
220
|
CLOUD_PLATFORM_SCOPE
|
|
233
221
|
]);
|
|
234
222
|
return authCredential;
|