@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,733 @@
|
|
|
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 { metrics } from "@opentelemetry/api";
|
|
11
|
+
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
|
|
12
|
+
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
|
|
13
|
+
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
14
|
+
import { gcpDetector } from "@opentelemetry/resource-detector-gcp";
|
|
15
|
+
import {
|
|
16
|
+
defaultResource,
|
|
17
|
+
detectResources,
|
|
18
|
+
emptyResource,
|
|
19
|
+
envDetector,
|
|
20
|
+
resourceFromAttributes
|
|
21
|
+
} from "@opentelemetry/resources";
|
|
22
|
+
import {
|
|
23
|
+
BatchLogRecordProcessor
|
|
24
|
+
} from "@opentelemetry/sdk-logs";
|
|
25
|
+
import {
|
|
26
|
+
MeterProvider,
|
|
27
|
+
PeriodicExportingMetricReader
|
|
28
|
+
} from "@opentelemetry/sdk-metrics";
|
|
29
|
+
import {
|
|
30
|
+
BatchSpanProcessor
|
|
31
|
+
} from "@opentelemetry/sdk-trace-base";
|
|
32
|
+
import { GoogleAuth } from "google-auth-library";
|
|
33
|
+
import { randomUUID } from "node:crypto";
|
|
34
|
+
import * as fs from "node:fs";
|
|
35
|
+
import { logger } from "../../utils/logger.js";
|
|
36
|
+
import { version } from "../../version.js";
|
|
37
|
+
import {
|
|
38
|
+
agentRuntimeRequestHooks
|
|
39
|
+
} from "./agent_runtime.js";
|
|
40
|
+
import {
|
|
41
|
+
MIN_EXPORT_INTERVAL_MS,
|
|
42
|
+
RequestDrivenMetricReader
|
|
43
|
+
} from "./request_driven_metric_reader.js";
|
|
44
|
+
const CLOUD_PLATFORM_SCOPE = "https://www.googleapis.com/auth/cloud-platform";
|
|
45
|
+
const DEFAULT_TELEMETRY_TRACES_ENDPOINT = "https://telemetry.googleapis.com/v1/traces";
|
|
46
|
+
const DEFAULT_MTLS_TELEMETRY_TRACES_ENDPOINT = "https://telemetry.mtls.googleapis.com/v1/traces";
|
|
47
|
+
const DEFAULT_TELEMETRY_METRICS_ENDPOINT = "https://telemetry.googleapis.com/v1/metrics";
|
|
48
|
+
const DEFAULT_MTLS_TELEMETRY_METRICS_ENDPOINT = "https://telemetry.mtls.googleapis.com/v1/metrics";
|
|
49
|
+
const DEFAULT_TELEMETRY_LOGS_ENDPOINT = "https://telemetry.googleapis.com/v1/logs";
|
|
50
|
+
const DEFAULT_MTLS_TELEMETRY_LOGS_ENDPOINT = "https://telemetry.mtls.googleapis.com/v1/logs";
|
|
51
|
+
const GCP_PROJECT_ERROR_MESSAGE = "Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";
|
|
52
|
+
const GCP_DEFAULT_LOG_NAME = "GCP_DEFAULT_LOG_NAME";
|
|
53
|
+
const ADK_OTEL = "adk-otel";
|
|
54
|
+
const DEFAULT_AGENT_ENGINE_LOG_NAME = "aiplatform.googleapis.com/reasoning_engine_stdout";
|
|
55
|
+
const GCP_LOG_NAME = "gcp.log_name";
|
|
56
|
+
const EVENT_NAME = "event.name";
|
|
57
|
+
const GCP_RESOURCE_TYPE = "gcp.resource_type";
|
|
58
|
+
const LOCATION = "location";
|
|
59
|
+
const REASONING_ENGINE_ID = "reasoning_engine_id";
|
|
60
|
+
const RESOURCE_CONTAINER = "resource_container";
|
|
61
|
+
const SERVICE_VERSION = "service.version";
|
|
62
|
+
const POD_NAME_HASHES = /-[a-z0-9]+-[a-z0-9]{5}$/;
|
|
63
|
+
const K8S_NAMESPACE_PATH = "/var/run/secrets/kubernetes.io/serviceaccount/namespace";
|
|
64
|
+
const PROJECT_CACHE_SIZE = 32;
|
|
65
|
+
const projectCache = /* @__PURE__ */ new Map();
|
|
66
|
+
function clearProjectCache() {
|
|
67
|
+
projectCache.clear();
|
|
68
|
+
}
|
|
69
|
+
__name(clearProjectCache, "clearProjectCache");
|
|
70
|
+
function normalizeHeaders(headers) {
|
|
71
|
+
if (!headers) {
|
|
72
|
+
return {};
|
|
73
|
+
}
|
|
74
|
+
if (typeof headers.forEach === "function") {
|
|
75
|
+
const result = {};
|
|
76
|
+
headers.forEach((value, key) => {
|
|
77
|
+
result[key] = value;
|
|
78
|
+
});
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
return { ...headers };
|
|
82
|
+
}
|
|
83
|
+
__name(normalizeHeaders, "normalizeHeaders");
|
|
84
|
+
function useClientCertEffective() {
|
|
85
|
+
var _a;
|
|
86
|
+
const useClientCertStr = ((_a = process.env.GOOGLE_API_USE_CLIENT_CERTIFICATE) != null ? _a : "false").toLowerCase();
|
|
87
|
+
if (useClientCertStr !== "true" && useClientCertStr !== "false") {
|
|
88
|
+
logger.warn(
|
|
89
|
+
"Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`"
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
return useClientCertStr === "true";
|
|
93
|
+
}
|
|
94
|
+
__name(useClientCertEffective, "useClientCertEffective");
|
|
95
|
+
function getTelemetryEndpoint(defaultEndpoint, mtlsEndpoint) {
|
|
96
|
+
var _a;
|
|
97
|
+
const useMtlsEndpointStr = ((_a = process.env.GOOGLE_API_USE_MTLS_ENDPOINT) != null ? _a : "auto").toLowerCase();
|
|
98
|
+
let useMtlsEndpoint = "auto";
|
|
99
|
+
if (useMtlsEndpointStr === "auto" || useMtlsEndpointStr === "always" || useMtlsEndpointStr === "never") {
|
|
100
|
+
useMtlsEndpoint = useMtlsEndpointStr;
|
|
101
|
+
} else {
|
|
102
|
+
logger.warn(
|
|
103
|
+
'Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be one of ["auto", "always", "never"]. Defaulting to auto.'
|
|
104
|
+
);
|
|
105
|
+
useMtlsEndpoint = "auto";
|
|
106
|
+
}
|
|
107
|
+
if (useMtlsEndpoint === "always") {
|
|
108
|
+
return mtlsEndpoint;
|
|
109
|
+
}
|
|
110
|
+
if (useMtlsEndpoint === "never") {
|
|
111
|
+
return defaultEndpoint;
|
|
112
|
+
}
|
|
113
|
+
if (useClientCertEffective()) {
|
|
114
|
+
return mtlsEndpoint;
|
|
115
|
+
}
|
|
116
|
+
return defaultEndpoint;
|
|
117
|
+
}
|
|
118
|
+
__name(getTelemetryEndpoint, "getTelemetryEndpoint");
|
|
119
|
+
function getAgentEngineUserAgentHeader() {
|
|
120
|
+
if (!process.env.GOOGLE_CLOUD_AGENT_ENGINE_ENABLE_TELEMETRY) {
|
|
121
|
+
return {};
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
"User-Agent": `Vertex-Agent-Engine/${version}`
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
__name(getAgentEngineUserAgentHeader, "getAgentEngineUserAgentHeader");
|
|
128
|
+
const _AuthenticatedTraceExporter = class _AuthenticatedTraceExporter {
|
|
129
|
+
constructor(auth, endpoint, userAgentHeaders = {}) {
|
|
130
|
+
this.currentHeaders = {};
|
|
131
|
+
this.warnedAuthFailure = false;
|
|
132
|
+
this.auth = auth;
|
|
133
|
+
this.endpoint = endpoint;
|
|
134
|
+
this.userAgentHeaders = userAgentHeaders;
|
|
135
|
+
this.delegate = new OTLPTraceExporter({
|
|
136
|
+
url: endpoint,
|
|
137
|
+
headers: /* @__PURE__ */ __name(async () => this.currentHeaders, "headers")
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Exports spans to Google Cloud.
|
|
142
|
+
*
|
|
143
|
+
* @param spans Spans to export.
|
|
144
|
+
* @param resultCallback Callback called with the export result.
|
|
145
|
+
*/
|
|
146
|
+
export(spans, resultCallback) {
|
|
147
|
+
void this.exportAsync(spans, resultCallback);
|
|
148
|
+
}
|
|
149
|
+
async exportAsync(spans, resultCallback) {
|
|
150
|
+
try {
|
|
151
|
+
const authHeaders = await this.auth.getRequestHeaders(this.endpoint);
|
|
152
|
+
this.currentHeaders = {
|
|
153
|
+
...normalizeHeaders(authHeaders),
|
|
154
|
+
...this.userAgentHeaders
|
|
155
|
+
};
|
|
156
|
+
} catch (error) {
|
|
157
|
+
if (!this.warnedAuthFailure) {
|
|
158
|
+
this.warnedAuthFailure = true;
|
|
159
|
+
logger.warn(
|
|
160
|
+
"Failed to obtain Google Cloud credentials for telemetry export.",
|
|
161
|
+
{ error }
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
resultCallback({
|
|
165
|
+
code: 1,
|
|
166
|
+
error: error instanceof Error ? error : new Error(String(error))
|
|
167
|
+
});
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
this.delegate.export(spans, resultCallback);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Shuts down the trace exporter.
|
|
174
|
+
*/
|
|
175
|
+
shutdown() {
|
|
176
|
+
return this.delegate.shutdown();
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Flushes pending traces.
|
|
180
|
+
*/
|
|
181
|
+
forceFlush() {
|
|
182
|
+
return this.delegate.forceFlush();
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
__name(_AuthenticatedTraceExporter, "AuthenticatedTraceExporter");
|
|
186
|
+
let AuthenticatedTraceExporter = _AuthenticatedTraceExporter;
|
|
187
|
+
const _AuthenticatedMetricExporter = class _AuthenticatedMetricExporter {
|
|
188
|
+
constructor(auth, endpoint, userAgentHeaders = {}) {
|
|
189
|
+
this.currentHeaders = {};
|
|
190
|
+
this.warnedAuthFailure = false;
|
|
191
|
+
this.auth = auth;
|
|
192
|
+
this.endpoint = endpoint;
|
|
193
|
+
this.userAgentHeaders = userAgentHeaders;
|
|
194
|
+
this.delegate = new OTLPMetricExporter({
|
|
195
|
+
url: endpoint,
|
|
196
|
+
headers: /* @__PURE__ */ __name(async () => this.currentHeaders, "headers")
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Exports metrics to Google Cloud.
|
|
201
|
+
*
|
|
202
|
+
* @param metrics Metrics to export.
|
|
203
|
+
* @param resultCallback Callback called with the export result.
|
|
204
|
+
*/
|
|
205
|
+
export(metrics2, resultCallback) {
|
|
206
|
+
void this.exportAsync(metrics2, resultCallback);
|
|
207
|
+
}
|
|
208
|
+
async exportAsync(metrics2, resultCallback) {
|
|
209
|
+
try {
|
|
210
|
+
const authHeaders = await this.auth.getRequestHeaders(this.endpoint);
|
|
211
|
+
this.currentHeaders = {
|
|
212
|
+
...normalizeHeaders(authHeaders),
|
|
213
|
+
...this.userAgentHeaders
|
|
214
|
+
};
|
|
215
|
+
} catch (error) {
|
|
216
|
+
if (!this.warnedAuthFailure) {
|
|
217
|
+
this.warnedAuthFailure = true;
|
|
218
|
+
logger.warn(
|
|
219
|
+
"Failed to obtain Google Cloud credentials for telemetry export.",
|
|
220
|
+
{ error }
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
resultCallback({
|
|
224
|
+
code: 1,
|
|
225
|
+
error: error instanceof Error ? error : new Error(String(error))
|
|
226
|
+
});
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
this.delegate.export(metrics2, resultCallback);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Shuts down the metric exporter.
|
|
233
|
+
*/
|
|
234
|
+
shutdown() {
|
|
235
|
+
return this.delegate.shutdown();
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Flushes pending metrics.
|
|
239
|
+
*/
|
|
240
|
+
forceFlush() {
|
|
241
|
+
return this.delegate.forceFlush();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Selects aggregation temporality for instrument type.
|
|
245
|
+
*
|
|
246
|
+
* @param instrumentType Instrument type.
|
|
247
|
+
*/
|
|
248
|
+
selectAggregationTemporality(instrumentType) {
|
|
249
|
+
return this.delegate.selectAggregationTemporality(instrumentType);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
__name(_AuthenticatedMetricExporter, "AuthenticatedMetricExporter");
|
|
253
|
+
let AuthenticatedMetricExporter = _AuthenticatedMetricExporter;
|
|
254
|
+
const _AuthenticatedLogExporter = class _AuthenticatedLogExporter {
|
|
255
|
+
constructor(auth, endpoint, userAgentHeaders = {}) {
|
|
256
|
+
this.currentHeaders = {};
|
|
257
|
+
this.warnedAuthFailure = false;
|
|
258
|
+
this.auth = auth;
|
|
259
|
+
this.endpoint = endpoint;
|
|
260
|
+
this.userAgentHeaders = userAgentHeaders;
|
|
261
|
+
this.delegate = new OTLPLogExporter({
|
|
262
|
+
url: endpoint,
|
|
263
|
+
headers: /* @__PURE__ */ __name(async () => this.currentHeaders, "headers")
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Exports log records to Google Cloud.
|
|
268
|
+
*
|
|
269
|
+
* @param logs Log records to export.
|
|
270
|
+
* @param resultCallback Callback called with the export result.
|
|
271
|
+
*/
|
|
272
|
+
export(logs, resultCallback) {
|
|
273
|
+
void this.exportAsync(logs, resultCallback);
|
|
274
|
+
}
|
|
275
|
+
async exportAsync(logs, resultCallback) {
|
|
276
|
+
try {
|
|
277
|
+
const authHeaders = await this.auth.getRequestHeaders(this.endpoint);
|
|
278
|
+
this.currentHeaders = {
|
|
279
|
+
...normalizeHeaders(authHeaders),
|
|
280
|
+
...this.userAgentHeaders
|
|
281
|
+
};
|
|
282
|
+
} catch (error) {
|
|
283
|
+
if (!this.warnedAuthFailure) {
|
|
284
|
+
this.warnedAuthFailure = true;
|
|
285
|
+
logger.warn(
|
|
286
|
+
"Failed to obtain Google Cloud credentials for telemetry export.",
|
|
287
|
+
{ error }
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
resultCallback({
|
|
291
|
+
code: 1,
|
|
292
|
+
error: error instanceof Error ? error : new Error(String(error))
|
|
293
|
+
});
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
this.delegate.export(logs, resultCallback);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Shuts down the log exporter.
|
|
300
|
+
*/
|
|
301
|
+
shutdown() {
|
|
302
|
+
return this.delegate.shutdown();
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Flushes pending log records.
|
|
306
|
+
*/
|
|
307
|
+
forceFlush() {
|
|
308
|
+
return this.delegate.forceFlush();
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
__name(_AuthenticatedLogExporter, "AuthenticatedLogExporter");
|
|
312
|
+
let AuthenticatedLogExporter = _AuthenticatedLogExporter;
|
|
313
|
+
function agentEngineLogResource(projectId) {
|
|
314
|
+
const agentEngineId = process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID;
|
|
315
|
+
if (!agentEngineId) {
|
|
316
|
+
return emptyResource();
|
|
317
|
+
}
|
|
318
|
+
const location = process.env.GOOGLE_CLOUD_AGENT_ENGINE_LOCATION || process.env.GOOGLE_CLOUD_LOCATION || "";
|
|
319
|
+
return resourceFromAttributes({
|
|
320
|
+
[GCP_RESOURCE_TYPE]: "aiplatform.googleapis.com/ReasoningEngine",
|
|
321
|
+
[LOCATION]: location,
|
|
322
|
+
[REASONING_ENGINE_ID]: agentEngineId,
|
|
323
|
+
[RESOURCE_CONTAINER]: `projects/${projectId}`
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
__name(agentEngineLogResource, "agentEngineLogResource");
|
|
327
|
+
const _GCPBatchLogRecordProcessor = class _GCPBatchLogRecordProcessor extends BatchLogRecordProcessor {
|
|
328
|
+
constructor(exporterOrOptions, projectId) {
|
|
329
|
+
var _a, _b;
|
|
330
|
+
const options = "export" in exporterOrOptions ? { exporter: exporterOrOptions } : exporterOrOptions;
|
|
331
|
+
super(options);
|
|
332
|
+
const effectiveProjectId = (_a = projectId != null ? projectId : "projectId" in exporterOrOptions ? exporterOrOptions.projectId : void 0) != null ? _a : "";
|
|
333
|
+
this.logResource = agentEngineLogResource(effectiveProjectId);
|
|
334
|
+
const defaultLogNameEnv = (_b = process.env[GCP_DEFAULT_LOG_NAME]) == null ? void 0 : _b.trim();
|
|
335
|
+
this.defaultLogName = defaultLogNameEnv && defaultLogNameEnv.length > 0 ? defaultLogNameEnv : process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID ? DEFAULT_AGENT_ENGINE_LOG_NAME : ADK_OTEL;
|
|
336
|
+
}
|
|
337
|
+
onEmit(logRecord) {
|
|
338
|
+
var _a, _b, _c, _d;
|
|
339
|
+
const attributes = { ...logRecord.attributes };
|
|
340
|
+
if (logRecord.eventName) {
|
|
341
|
+
attributes[EVENT_NAME] = (_a = attributes[EVENT_NAME]) != null ? _a : logRecord.eventName;
|
|
342
|
+
}
|
|
343
|
+
attributes[GCP_LOG_NAME] = (_b = attributes[GCP_LOG_NAME]) != null ? _b : this.defaultLogName;
|
|
344
|
+
const baseResource = (_c = logRecord.resource) != null ? _c : emptyResource();
|
|
345
|
+
const mergedResource = baseResource.merge(this.logResource);
|
|
346
|
+
const serviceVersion = mergedResource.attributes[SERVICE_VERSION];
|
|
347
|
+
if (serviceVersion !== void 0) {
|
|
348
|
+
attributes[SERVICE_VERSION] = (_d = attributes[SERVICE_VERSION]) != null ? _d : serviceVersion;
|
|
349
|
+
}
|
|
350
|
+
const emitted = Object.create(
|
|
351
|
+
Object.getPrototypeOf(logRecord),
|
|
352
|
+
{
|
|
353
|
+
...Object.getOwnPropertyDescriptors(logRecord),
|
|
354
|
+
resource: {
|
|
355
|
+
value: mergedResource,
|
|
356
|
+
writable: true,
|
|
357
|
+
enumerable: true,
|
|
358
|
+
configurable: true
|
|
359
|
+
},
|
|
360
|
+
attributes: {
|
|
361
|
+
value: attributes,
|
|
362
|
+
writable: true,
|
|
363
|
+
enumerable: true,
|
|
364
|
+
configurable: true
|
|
365
|
+
},
|
|
366
|
+
...process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID && logRecord.eventName ? {
|
|
367
|
+
eventName: {
|
|
368
|
+
value: void 0,
|
|
369
|
+
writable: true,
|
|
370
|
+
enumerable: true,
|
|
371
|
+
configurable: true
|
|
372
|
+
},
|
|
373
|
+
_eventName: {
|
|
374
|
+
value: void 0,
|
|
375
|
+
writable: true,
|
|
376
|
+
enumerable: false,
|
|
377
|
+
configurable: true
|
|
378
|
+
}
|
|
379
|
+
} : {}
|
|
380
|
+
}
|
|
381
|
+
);
|
|
382
|
+
super.onEmit(emitted);
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
__name(_GCPBatchLogRecordProcessor, "GCPBatchLogRecordProcessor");
|
|
386
|
+
let GCPBatchLogRecordProcessor = _GCPBatchLogRecordProcessor;
|
|
387
|
+
async function fetchProject(project, auth) {
|
|
388
|
+
var _a;
|
|
389
|
+
if (!project) {
|
|
390
|
+
return { id: "", number: "" };
|
|
391
|
+
}
|
|
392
|
+
const cached = projectCache.get(project);
|
|
393
|
+
if (cached) {
|
|
394
|
+
return cached;
|
|
395
|
+
}
|
|
396
|
+
const isDigits = /^\d+$/.test(project);
|
|
397
|
+
const known = {
|
|
398
|
+
id: isDigits ? "" : project,
|
|
399
|
+
number: ""
|
|
400
|
+
};
|
|
401
|
+
try {
|
|
402
|
+
const authClient = auth != null ? auth : new GoogleAuth({
|
|
403
|
+
scopes: [CLOUD_PLATFORM_SCOPE]
|
|
404
|
+
});
|
|
405
|
+
const url = `https://cloudresourcemanager.googleapis.com/v3/projects/${encodeURIComponent(project)}`;
|
|
406
|
+
const response = await authClient.request({
|
|
407
|
+
url
|
|
408
|
+
});
|
|
409
|
+
const data = response.data;
|
|
410
|
+
const projectNumber = (data == null ? void 0 : data.name) ? data.name.replace(/^projects\//, "") : "";
|
|
411
|
+
const projectId = (_a = data == null ? void 0 : data.projectId) != null ? _a : isDigits ? "" : project;
|
|
412
|
+
const resolved = {
|
|
413
|
+
id: projectId,
|
|
414
|
+
number: projectNumber
|
|
415
|
+
};
|
|
416
|
+
if (projectCache.size >= PROJECT_CACHE_SIZE) {
|
|
417
|
+
const firstKey = projectCache.keys().next().value;
|
|
418
|
+
if (firstKey !== void 0) {
|
|
419
|
+
projectCache.delete(firstKey);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
projectCache.set(project, resolved);
|
|
423
|
+
return resolved;
|
|
424
|
+
} catch (error) {
|
|
425
|
+
logger.warn(
|
|
426
|
+
"Failed to look up the project's other identifier. Your traces and logs may not be associated, and the agent URN may be incomplete. To fix this, ensure the Cloud Resource Manager API is enabled with the 'resourcemanager.projects.get' permission.",
|
|
427
|
+
{ error }
|
|
428
|
+
);
|
|
429
|
+
return known;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
__name(fetchProject, "fetchProject");
|
|
433
|
+
async function getGcpProjectId(auth) {
|
|
434
|
+
if (process.env.GOOGLE_CLOUD_PROJECT) {
|
|
435
|
+
return process.env.GOOGLE_CLOUD_PROJECT;
|
|
436
|
+
}
|
|
437
|
+
try {
|
|
438
|
+
const authClient = auth != null ? auth : new GoogleAuth({
|
|
439
|
+
scopes: [CLOUD_PLATFORM_SCOPE]
|
|
440
|
+
});
|
|
441
|
+
const projectId = await authClient.getProjectId();
|
|
442
|
+
return projectId || void 0;
|
|
443
|
+
} catch {
|
|
444
|
+
return void 0;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
__name(getGcpProjectId, "getGcpProjectId");
|
|
448
|
+
function k8sNamespace() {
|
|
449
|
+
try {
|
|
450
|
+
return fs.readFileSync(K8S_NAMESPACE_PATH, "utf8").trim();
|
|
451
|
+
} catch {
|
|
452
|
+
return "";
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
__name(k8sNamespace, "k8sNamespace");
|
|
456
|
+
function k8sDeployment() {
|
|
457
|
+
var _a;
|
|
458
|
+
const hostname = (_a = process.env.HOSTNAME) != null ? _a : "";
|
|
459
|
+
if (POD_NAME_HASHES.test(hostname)) {
|
|
460
|
+
return hostname.replace(POD_NAME_HASHES, "");
|
|
461
|
+
}
|
|
462
|
+
return "";
|
|
463
|
+
}
|
|
464
|
+
__name(k8sDeployment, "k8sDeployment");
|
|
465
|
+
function urnAgentRuntimeSegment() {
|
|
466
|
+
const agentEngineId = process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID;
|
|
467
|
+
if (!agentEngineId) {
|
|
468
|
+
logger.warn(
|
|
469
|
+
"The Agent Runtime instance ID is unknown, so no agent URN is set."
|
|
470
|
+
);
|
|
471
|
+
return "";
|
|
472
|
+
}
|
|
473
|
+
return `aiplatform:reasoningEngines:${agentEngineId}`;
|
|
474
|
+
}
|
|
475
|
+
__name(urnAgentRuntimeSegment, "urnAgentRuntimeSegment");
|
|
476
|
+
function urnGkeSegment(attributes) {
|
|
477
|
+
const cluster = attributes["k8s.cluster.name"] || "";
|
|
478
|
+
const namespace = attributes["k8s.namespace.name"] || k8sNamespace();
|
|
479
|
+
const deployment = attributes["k8s.deployment.name"] || k8sDeployment();
|
|
480
|
+
if (!cluster) {
|
|
481
|
+
logger.warn(
|
|
482
|
+
"The GKE cluster is unknown, so no agent URN is set. Set k8s.cluster.name in OTEL_RESOURCE_ATTRIBUTES to state it."
|
|
483
|
+
);
|
|
484
|
+
}
|
|
485
|
+
if (!namespace) {
|
|
486
|
+
logger.warn(
|
|
487
|
+
"The GKE namespace is unknown, so no agent URN is set. Set k8s.namespace.name in OTEL_RESOURCE_ATTRIBUTES to state it."
|
|
488
|
+
);
|
|
489
|
+
}
|
|
490
|
+
if (!deployment) {
|
|
491
|
+
logger.warn(
|
|
492
|
+
"The GKE Deployment is unknown, so no agent URN is set. Set k8s.deployment.name in OTEL_RESOURCE_ATTRIBUTES to state it."
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
if (!cluster || !namespace || !deployment) {
|
|
496
|
+
return "";
|
|
497
|
+
}
|
|
498
|
+
return `container:clusters:${cluster}:k8s:namespaces:${namespace}:apps:deployments:${deployment}`;
|
|
499
|
+
}
|
|
500
|
+
__name(urnGkeSegment, "urnGkeSegment");
|
|
501
|
+
function urnCloudRunSegment(attributes) {
|
|
502
|
+
const service = attributes["faas.name"] || "";
|
|
503
|
+
if (!service) {
|
|
504
|
+
logger.warn(
|
|
505
|
+
"The Cloud Run service name is unknown, so no agent URN is set."
|
|
506
|
+
);
|
|
507
|
+
return "";
|
|
508
|
+
}
|
|
509
|
+
return `run:services:${service}`;
|
|
510
|
+
}
|
|
511
|
+
__name(urnCloudRunSegment, "urnCloudRunSegment");
|
|
512
|
+
function urnWorkloadSegment(attributes) {
|
|
513
|
+
const platform = attributes["cloud.platform"];
|
|
514
|
+
if (platform === "gcp.agent_engine") {
|
|
515
|
+
return urnAgentRuntimeSegment();
|
|
516
|
+
}
|
|
517
|
+
if (platform === "gcp_kubernetes_engine") {
|
|
518
|
+
return urnGkeSegment(attributes);
|
|
519
|
+
}
|
|
520
|
+
if (platform === "gcp_cloud_run") {
|
|
521
|
+
return urnCloudRunSegment(attributes);
|
|
522
|
+
}
|
|
523
|
+
return null;
|
|
524
|
+
}
|
|
525
|
+
__name(urnWorkloadSegment, "urnWorkloadSegment");
|
|
526
|
+
function urnLocationSegment(attributes) {
|
|
527
|
+
const zone = attributes["cloud.availability_zone"];
|
|
528
|
+
if (zone) {
|
|
529
|
+
return `zones:${zone}`;
|
|
530
|
+
}
|
|
531
|
+
const region = attributes["cloud.region"];
|
|
532
|
+
if (region) {
|
|
533
|
+
return `locations:${region}`;
|
|
534
|
+
}
|
|
535
|
+
return "";
|
|
536
|
+
}
|
|
537
|
+
__name(urnLocationSegment, "urnLocationSegment");
|
|
538
|
+
async function getUrnEnrichedResource(resource, fallbackProjectId) {
|
|
539
|
+
const attributes = resource.attributes;
|
|
540
|
+
if (attributes["gen_ai.main_agent.id"]) {
|
|
541
|
+
return emptyResource();
|
|
542
|
+
}
|
|
543
|
+
const workload = urnWorkloadSegment(attributes);
|
|
544
|
+
if (!workload) {
|
|
545
|
+
return emptyResource();
|
|
546
|
+
}
|
|
547
|
+
const projectId = attributes["cloud.account.id"] || fallbackProjectId;
|
|
548
|
+
if (!projectId) {
|
|
549
|
+
logger.warn("The project ID is unknown, so no agent URN is set.");
|
|
550
|
+
return emptyResource();
|
|
551
|
+
}
|
|
552
|
+
const projectInfo = await fetchProject(projectId);
|
|
553
|
+
if (!projectInfo.number) {
|
|
554
|
+
logger.warn(
|
|
555
|
+
`The number of project '${projectId}' is unknown, so no agent URN is set.`
|
|
556
|
+
);
|
|
557
|
+
return emptyResource();
|
|
558
|
+
}
|
|
559
|
+
const location = urnLocationSegment(attributes);
|
|
560
|
+
if (!location) {
|
|
561
|
+
logger.warn(
|
|
562
|
+
"Neither a zone nor a region could be detected, so no agent URN is set."
|
|
563
|
+
);
|
|
564
|
+
return emptyResource();
|
|
565
|
+
}
|
|
566
|
+
const urn = [
|
|
567
|
+
"urn:agent",
|
|
568
|
+
`projects-${projectInfo.number}`,
|
|
569
|
+
`projects:${projectInfo.number}`,
|
|
570
|
+
location,
|
|
571
|
+
workload
|
|
572
|
+
].join(":");
|
|
573
|
+
return resourceFromAttributes({ "gen_ai.main_agent.id": urn });
|
|
574
|
+
}
|
|
575
|
+
__name(getUrnEnrichedResource, "getUrnEnrichedResource");
|
|
576
|
+
async function getGcpResource(projectId) {
|
|
577
|
+
var _a, _b;
|
|
578
|
+
let resolvedProjectId = projectId;
|
|
579
|
+
if (!resolvedProjectId) {
|
|
580
|
+
resolvedProjectId = await getGcpProjectId();
|
|
581
|
+
}
|
|
582
|
+
const instanceId = `${randomUUID().replace(/-/g, "")}-${process.pid}`;
|
|
583
|
+
const commonAttributes = {
|
|
584
|
+
"service.instance.id": instanceId
|
|
585
|
+
};
|
|
586
|
+
if (resolvedProjectId) {
|
|
587
|
+
commonAttributes["gcp.project_id"] = resolvedProjectId;
|
|
588
|
+
commonAttributes["cloud.account.id"] = resolvedProjectId;
|
|
589
|
+
} else {
|
|
590
|
+
logger.warn(
|
|
591
|
+
"No project could be determined, so telemetry will not name one. Set GOOGLE_CLOUD_PROJECT, or pass a project explicitly, if it should."
|
|
592
|
+
);
|
|
593
|
+
}
|
|
594
|
+
let resource = resourceFromAttributes(commonAttributes);
|
|
595
|
+
const agentEngineId = process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID;
|
|
596
|
+
if (agentEngineId) {
|
|
597
|
+
const location = process.env.GOOGLE_CLOUD_AGENT_ENGINE_LOCATION || process.env.GOOGLE_CLOUD_LOCATION || "";
|
|
598
|
+
if (!location) {
|
|
599
|
+
logger.warn(
|
|
600
|
+
"On Agent Runtime with no location set, so this deployment cannot be named. Set GOOGLE_CLOUD_AGENT_ENGINE_LOCATION or GOOGLE_CLOUD_LOCATION."
|
|
601
|
+
);
|
|
602
|
+
}
|
|
603
|
+
const aeAttributes = {
|
|
604
|
+
"cloud.provider": "gcp",
|
|
605
|
+
"cloud.platform": "gcp.agent_engine",
|
|
606
|
+
"service.name": agentEngineId,
|
|
607
|
+
"service.version": (_a = process.env.GOOGLE_CLOUD_AGENT_ENGINE_RUNTIME_REVISION_ID) != null ? _a : "",
|
|
608
|
+
"cloud.region": location
|
|
609
|
+
};
|
|
610
|
+
if (resolvedProjectId && location) {
|
|
611
|
+
aeAttributes["cloud.resource_id"] = `//aiplatform.googleapis.com/projects/${resolvedProjectId}/locations/${location}/reasoningEngines/${agentEngineId}`;
|
|
612
|
+
}
|
|
613
|
+
resource = resource.merge(
|
|
614
|
+
defaultResource().merge(resourceFromAttributes(aeAttributes))
|
|
615
|
+
);
|
|
616
|
+
}
|
|
617
|
+
const otelDetected = detectResources({ detectors: [envDetector] });
|
|
618
|
+
resource = resource.merge(otelDetected);
|
|
619
|
+
if (!agentEngineId) {
|
|
620
|
+
try {
|
|
621
|
+
const gcpDetected = detectResources({ detectors: [gcpDetector] });
|
|
622
|
+
if (gcpDetected.asyncAttributesPending) {
|
|
623
|
+
await ((_b = gcpDetected.waitForAsyncAttributes) == null ? void 0 : _b.call(gcpDetected));
|
|
624
|
+
}
|
|
625
|
+
resource = resource.merge(gcpDetected);
|
|
626
|
+
} catch (error) {
|
|
627
|
+
logger.warn(
|
|
628
|
+
"Could not detect GCP resource attributes. GCE, GKE or CloudRun related resource attributes may be missing.",
|
|
629
|
+
{ error }
|
|
630
|
+
);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
const urnResource = await getUrnEnrichedResource(resource, resolvedProjectId);
|
|
634
|
+
resource = resource.merge(urnResource);
|
|
635
|
+
return resource;
|
|
636
|
+
}
|
|
637
|
+
__name(getGcpResource, "getGcpResource");
|
|
638
|
+
function createMetricReader(exporter) {
|
|
639
|
+
if (process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID) {
|
|
640
|
+
if (!(metrics.getMeterProvider() instanceof MeterProvider)) {
|
|
641
|
+
return new RequestDrivenMetricReader({ exporter });
|
|
642
|
+
}
|
|
643
|
+
logger.warn(
|
|
644
|
+
"A MeterProvider is already installed; skipping request-driven metric export. On Agent Runtime metrics may be dropped between requests."
|
|
645
|
+
);
|
|
646
|
+
}
|
|
647
|
+
return new PeriodicExportingMetricReader({
|
|
648
|
+
exporter,
|
|
649
|
+
exportIntervalMillis: MIN_EXPORT_INTERVAL_MS
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
__name(createMetricReader, "createMetricReader");
|
|
653
|
+
async function getGcpExporters(config = {}) {
|
|
654
|
+
const {
|
|
655
|
+
enableTracing = false,
|
|
656
|
+
enableMetrics = false,
|
|
657
|
+
enableLogging = false,
|
|
658
|
+
auth: providedAuth
|
|
659
|
+
} = config;
|
|
660
|
+
const auth = providedAuth != null ? providedAuth : new GoogleAuth({
|
|
661
|
+
scopes: [CLOUD_PLATFORM_SCOPE]
|
|
662
|
+
});
|
|
663
|
+
let projectId = config.projectId;
|
|
664
|
+
if (!projectId) {
|
|
665
|
+
projectId = await getGcpProjectId(auth);
|
|
666
|
+
}
|
|
667
|
+
if (process.env.GOOGLE_CLOUD_AGENT_ENGINE_ID && projectId) {
|
|
668
|
+
const projectInfo = await fetchProject(projectId, auth);
|
|
669
|
+
projectId = projectInfo.id || projectId;
|
|
670
|
+
}
|
|
671
|
+
if (!projectId) {
|
|
672
|
+
logger.warn(GCP_PROJECT_ERROR_MESSAGE);
|
|
673
|
+
return {};
|
|
674
|
+
}
|
|
675
|
+
const userAgentHeaders = getAgentEngineUserAgentHeader();
|
|
676
|
+
const spanProcessors = enableTracing ? [
|
|
677
|
+
new BatchSpanProcessor(
|
|
678
|
+
new AuthenticatedTraceExporter(
|
|
679
|
+
auth,
|
|
680
|
+
getTelemetryEndpoint(
|
|
681
|
+
DEFAULT_TELEMETRY_TRACES_ENDPOINT,
|
|
682
|
+
DEFAULT_MTLS_TELEMETRY_TRACES_ENDPOINT
|
|
683
|
+
),
|
|
684
|
+
userAgentHeaders
|
|
685
|
+
)
|
|
686
|
+
)
|
|
687
|
+
] : [];
|
|
688
|
+
const metricReaders = enableMetrics ? [
|
|
689
|
+
createMetricReader(
|
|
690
|
+
new AuthenticatedMetricExporter(
|
|
691
|
+
auth,
|
|
692
|
+
getTelemetryEndpoint(
|
|
693
|
+
DEFAULT_TELEMETRY_METRICS_ENDPOINT,
|
|
694
|
+
DEFAULT_MTLS_TELEMETRY_METRICS_ENDPOINT
|
|
695
|
+
),
|
|
696
|
+
userAgentHeaders
|
|
697
|
+
)
|
|
698
|
+
)
|
|
699
|
+
] : [];
|
|
700
|
+
const logRecordProcessors = enableLogging ? [
|
|
701
|
+
new GCPBatchLogRecordProcessor(
|
|
702
|
+
new AuthenticatedLogExporter(
|
|
703
|
+
auth,
|
|
704
|
+
getTelemetryEndpoint(
|
|
705
|
+
DEFAULT_TELEMETRY_LOGS_ENDPOINT,
|
|
706
|
+
DEFAULT_MTLS_TELEMETRY_LOGS_ENDPOINT
|
|
707
|
+
),
|
|
708
|
+
userAgentHeaders
|
|
709
|
+
),
|
|
710
|
+
projectId
|
|
711
|
+
)
|
|
712
|
+
] : [];
|
|
713
|
+
return {
|
|
714
|
+
spanProcessors,
|
|
715
|
+
metricReaders,
|
|
716
|
+
logRecordProcessors
|
|
717
|
+
};
|
|
718
|
+
}
|
|
719
|
+
__name(getGcpExporters, "getGcpExporters");
|
|
720
|
+
export {
|
|
721
|
+
AuthenticatedLogExporter,
|
|
722
|
+
AuthenticatedMetricExporter,
|
|
723
|
+
AuthenticatedTraceExporter,
|
|
724
|
+
GCPBatchLogRecordProcessor,
|
|
725
|
+
agentRuntimeRequestHooks,
|
|
726
|
+
clearProjectCache,
|
|
727
|
+
fetchProject,
|
|
728
|
+
getAgentEngineUserAgentHeader,
|
|
729
|
+
getGcpExporters,
|
|
730
|
+
getGcpProjectId,
|
|
731
|
+
getGcpResource,
|
|
732
|
+
getTelemetryEndpoint
|
|
733
|
+
};
|