dd-trace 5.81.0 → 5.82.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/index.d.ts +7 -0
- package/loader-hook.mjs +7 -2
- package/package.json +13 -18
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-esbuild/index.js +8 -7
- package/packages/datadog-esbuild/src/utils.js +14 -2
- package/packages/datadog-instrumentations/src/aerospike.js +3 -2
- package/packages/datadog-instrumentations/src/ai.js +2 -2
- package/packages/datadog-instrumentations/src/amqp10.js +1 -1
- package/packages/datadog-instrumentations/src/amqplib.js +4 -4
- package/packages/datadog-instrumentations/src/anthropic.js +2 -2
- package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
- package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
- package/packages/datadog-instrumentations/src/apollo.js +3 -2
- package/packages/datadog-instrumentations/src/avsc.js +1 -1
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
- package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
- package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
- package/packages/datadog-instrumentations/src/bluebird.js +1 -1
- package/packages/datadog-instrumentations/src/bullmq.js +11 -0
- package/packages/datadog-instrumentations/src/bunyan.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
- package/packages/datadog-instrumentations/src/child_process.js +2 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
- package/packages/datadog-instrumentations/src/couchbase.js +1 -1
- package/packages/datadog-instrumentations/src/crypto.js +1 -1
- package/packages/datadog-instrumentations/src/cucumber.js +12 -13
- package/packages/datadog-instrumentations/src/cypress.js +1 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
- package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
- package/packages/datadog-instrumentations/src/express.js +1 -1
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
- package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
- package/packages/datadog-instrumentations/src/google-genai.js +3 -3
- package/packages/datadog-instrumentations/src/graphql.js +1 -1
- package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
- package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/register.js +6 -4
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
- package/packages/datadog-instrumentations/src/hono.js +55 -10
- package/packages/datadog-instrumentations/src/ioredis.js +1 -1
- package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
- package/packages/datadog-instrumentations/src/jest.js +2 -2
- package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
- package/packages/datadog-instrumentations/src/knex.js +1 -1
- package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
- package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
- package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
- package/packages/datadog-instrumentations/src/lodash.js +1 -2
- package/packages/datadog-instrumentations/src/mariadb.js +1 -2
- package/packages/datadog-instrumentations/src/memcached.js +1 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mongodb.js +1 -1
- package/packages/datadog-instrumentations/src/mongoose.js +1 -1
- package/packages/datadog-instrumentations/src/mquery.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +1 -1
- package/packages/datadog-instrumentations/src/mysql2.js +1 -1
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -1
- package/packages/datadog-instrumentations/src/nyc.js +1 -1
- package/packages/datadog-instrumentations/src/openai.js +2 -2
- package/packages/datadog-instrumentations/src/opensearch.js +1 -1
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +3 -3
- package/packages/datadog-instrumentations/src/pino.js +1 -1
- package/packages/datadog-instrumentations/src/playwright.js +1 -1
- package/packages/datadog-instrumentations/src/prisma.js +52 -37
- package/packages/datadog-instrumentations/src/process.js +1 -1
- package/packages/datadog-instrumentations/src/promise-js.js +1 -1
- package/packages/datadog-instrumentations/src/promise.js +1 -1
- package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
- package/packages/datadog-instrumentations/src/q.js +1 -1
- package/packages/datadog-instrumentations/src/redis.js +1 -1
- package/packages/datadog-instrumentations/src/rhea.js +1 -1
- package/packages/datadog-instrumentations/src/selenium.js +1 -1
- package/packages/datadog-instrumentations/src/sequelize.js +1 -2
- package/packages/datadog-instrumentations/src/sharedb.js +1 -1
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/undici.js +4 -4
- package/packages/datadog-instrumentations/src/url.js +1 -1
- package/packages/datadog-instrumentations/src/vitest.js +1 -1
- package/packages/datadog-instrumentations/src/vm.js +1 -1
- package/packages/datadog-instrumentations/src/when.js +1 -1
- package/packages/datadog-instrumentations/src/winston.js +1 -1
- package/packages/datadog-instrumentations/src/ws.js +3 -2
- package/packages/datadog-plugin-amqp10/src/index.js +1 -1
- package/packages/datadog-plugin-amqplib/src/index.js +1 -1
- package/packages/datadog-plugin-anthropic/src/index.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
- package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
- package/packages/datadog-plugin-azure-event-hubs/src/producer.js +19 -5
- package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
- package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -0
- package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
- package/packages/datadog-plugin-bullmq/src/index.js +18 -0
- package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
- package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
- package/packages/datadog-plugin-express/src/index.js +1 -1
- package/packages/datadog-plugin-fastify/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
- package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
- package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
- package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
- package/packages/datadog-plugin-google-genai/src/index.js +1 -1
- package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
- package/packages/datadog-plugin-grpc/src/index.js +1 -1
- package/packages/datadog-plugin-http/src/client.js +2 -1
- package/packages/datadog-plugin-http/src/index.js +25 -5
- package/packages/datadog-plugin-http2/src/client.js +2 -2
- package/packages/datadog-plugin-http2/src/index.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
- package/packages/datadog-plugin-langchain/src/index.js +1 -1
- package/packages/datadog-plugin-moleculer/src/index.js +1 -1
- package/packages/datadog-plugin-mongodb-core/src/index.js +6 -2
- package/packages/datadog-plugin-openai/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
- package/packages/datadog-plugin-openai/src/tracing.js +2 -2
- package/packages/datadog-plugin-rhea/src/index.js +1 -1
- package/packages/datadog-plugin-ws/src/close.js +56 -3
- package/packages/datadog-plugin-ws/src/index.js +4 -0
- package/packages/datadog-plugin-ws/src/producer.js +39 -4
- package/packages/datadog-plugin-ws/src/receiver.js +39 -3
- package/packages/datadog-plugin-ws/src/server.js +13 -1
- package/packages/datadog-plugin-ws/src/util.js +107 -0
- package/packages/datadog-shimmer/src/shimmer.js +2 -2
- package/packages/dd-trace/src/aiguard/sdk.js +3 -3
- package/packages/dd-trace/src/appsec/graphql.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +5 -5
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +10 -14
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
- package/packages/dd-trace/src/appsec/index.js +8 -8
- package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
- package/packages/dd-trace/src/appsec/rasp/index.js +1 -1
- package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
- package/packages/dd-trace/src/appsec/rc-products.js +10 -0
- package/packages/dd-trace/src/appsec/recommended.json +230 -3
- package/packages/dd-trace/src/appsec/remote_config.js +177 -0
- package/packages/dd-trace/src/appsec/reporter.js +3 -3
- package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
- package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
- package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
- package/packages/dd-trace/src/appsec/waf/index.js +17 -3
- package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
- package/packages/dd-trace/src/azure_metadata.js +8 -2
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +1 -1
- package/packages/dd-trace/src/config/remote_config.js +34 -0
- package/packages/dd-trace/src/config.js +29 -28
- package/packages/dd-trace/src/config_defaults.js +2 -1
- package/packages/dd-trace/src/constants.js +5 -0
- package/packages/dd-trace/src/crashtracking/crashtracker.js +10 -1
- package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
- package/packages/dd-trace/src/datastreams/index.js +1 -1
- package/packages/dd-trace/src/datastreams/pathway.js +7 -7
- package/packages/dd-trace/src/datastreams/processor.js +2 -2
- package/packages/dd-trace/src/datastreams/writer.js +2 -2
- package/packages/dd-trace/src/debugger/config.js +1 -0
- package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
- package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
- package/packages/dd-trace/src/debugger/index.js +1 -1
- package/packages/dd-trace/src/dogstatsd.js +3 -2
- package/packages/dd-trace/src/encode/0.4.js +1 -1
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/span-stats.js +6 -1
- package/packages/dd-trace/src/exporter.js +2 -2
- package/packages/dd-trace/src/exporters/agent/index.js +1 -1
- package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +1 -1
- package/packages/dd-trace/src/exporters/common/request.js +2 -2
- package/packages/dd-trace/src/exporters/common/writer.js +1 -1
- package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
- package/packages/dd-trace/src/external-logger/src/index.js +1 -2
- package/packages/dd-trace/src/flare/index.js +1 -1
- package/packages/dd-trace/src/guardrails/index.js +6 -3
- package/packages/dd-trace/src/id.js +1 -1
- package/packages/dd-trace/src/index.js +1 -1
- package/packages/dd-trace/src/lambda/handler.js +4 -4
- package/packages/dd-trace/src/lambda/index.js +1 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
- package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
- package/packages/dd-trace/src/llmobs/constants/tags.js +7 -1
- package/packages/dd-trace/src/llmobs/index.js +8 -9
- package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
- package/packages/dd-trace/src/llmobs/plugins/openai/index.js +16 -1
- package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
- package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +15 -22
- package/packages/dd-trace/src/llmobs/span_processor.js +9 -13
- package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
- package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
- package/packages/dd-trace/src/llmobs/writers/spans.js +1 -2
- package/packages/dd-trace/src/log/index.js +1 -1
- package/packages/dd-trace/src/noop/proxy.js +2 -2
- package/packages/dd-trace/src/noop/span.js +1 -1
- package/packages/dd-trace/src/openfeature/index.js +2 -2
- package/packages/dd-trace/src/openfeature/noop.js +14 -14
- package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
- package/packages/dd-trace/src/openfeature/writers/base.js +5 -5
- package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
- package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
- package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
- package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
- package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
- package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
- package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
- package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
- package/packages/dd-trace/src/opentelemetry/span.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +3 -3
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +24 -8
- package/packages/dd-trace/src/opentracing/span.js +3 -3
- package/packages/dd-trace/src/opentracing/tracer.js +5 -5
- package/packages/dd-trace/src/payload-tagging/index.js +6 -2
- package/packages/dd-trace/src/plugin_manager.js +1 -1
- package/packages/dd-trace/src/plugins/apollo.js +1 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
- package/packages/dd-trace/src/plugins/database.js +1 -1
- package/packages/dd-trace/src/plugins/index.js +5 -1
- package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
- package/packages/dd-trace/src/plugins/outbound.js +1 -1
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +1 -1
- package/packages/dd-trace/src/plugins/util/git.js +8 -8
- package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +24 -24
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -1
- package/packages/dd-trace/src/plugins/util/web.js +8 -5
- package/packages/dd-trace/src/priority_sampler.js +15 -16
- package/packages/dd-trace/src/process-tags/index.js +31 -29
- package/packages/dd-trace/src/profiling/config.js +32 -21
- package/packages/dd-trace/src/profiling/exporter_cli.js +4 -4
- package/packages/dd-trace/src/profiling/exporters/agent.js +5 -5
- package/packages/dd-trace/src/profiling/index.js +1 -1
- package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
- package/packages/dd-trace/src/profiling/profiler.js +4 -5
- package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
- package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
- package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
- package/packages/dd-trace/src/proxy.js +12 -18
- package/packages/dd-trace/src/remote_config/index.js +541 -137
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +50 -27
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +1 -1
- package/packages/dd-trace/src/serverless.js +16 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
- package/packages/dd-trace/src/span_format.js +1 -1
- package/packages/dd-trace/src/span_processor.js +2 -2
- package/packages/dd-trace/src/span_stats.js +6 -4
- package/packages/dd-trace/src/standalone/index.js +1 -1
- package/packages/dd-trace/src/startup-log.js +3 -3
- package/packages/dd-trace/src/supported-configurations.json +3 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
- package/packages/dd-trace/src/telemetry/endpoints.js +8 -8
- package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +11 -6
- package/packages/dd-trace/src/tracer.js +3 -3
- package/packages/dd-trace/src/tracer_metadata.js +19 -15
- package/packages/dd-trace/src/remote_config/manager.js +0 -368
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const session = require('../session')
|
|
3
4
|
const { collectionSizeSym, largeCollectionSkipThresholdSym, fieldCountSym, timeBudgetSym } = require('./symbols')
|
|
4
5
|
const { LARGE_OBJECT_SKIP_THRESHOLD } = require('./constants')
|
|
5
|
-
const session = require('../session')
|
|
6
6
|
|
|
7
7
|
const LEAF_SUBTYPES = new Set(['date', 'regexp'])
|
|
8
8
|
const ITERABLE_SUBTYPES = new Set(['map', 'set', 'weakmap', 'weakset'])
|
|
@@ -13,12 +13,12 @@ module.exports = {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* @typedef {
|
|
17
|
-
* @property {
|
|
16
|
+
* @typedef {object} GetObjectOptions
|
|
17
|
+
* @property {object} maxReferenceDepth - The maximum depth of the object to traverse
|
|
18
18
|
* @property {number} maxCollectionSize - The maximum size of a collection to include in the snapshot
|
|
19
19
|
* @property {number} maxFieldCount - The maximum number of properties on an object to include in the snapshot
|
|
20
20
|
* @property {bigint} deadlineNs - The deadline in nanoseconds compared to `process.hrtime.bigint()`
|
|
21
|
-
* @property {
|
|
21
|
+
* @property {object} ctx - A context object to track the state/progress of the snapshot collection.
|
|
22
22
|
* @property {boolean} ctx.deadlineReached - Will be set to `true` if the deadline has been reached.
|
|
23
23
|
* @property {Error[]} ctx.captureErrors - An array on which errors can be pushed if an issue is detected while
|
|
24
24
|
* collecting the snapshot.
|
|
@@ -34,7 +34,7 @@ module.exports = {
|
|
|
34
34
|
* and should not be set by the caller.
|
|
35
35
|
* @param {boolean} [collection=false] - Whether the object is a collection. Only used internally by this module to
|
|
36
36
|
* track the current object type and should not be set by the caller.
|
|
37
|
-
* @returns {Promise<
|
|
37
|
+
* @returns {Promise<object[]>} The properties of the object
|
|
38
38
|
*/
|
|
39
39
|
async function collectObjectProperties (objectId, opts, depth = 0, collection = false) {
|
|
40
40
|
const { result, privateProperties } = await session.post('Runtime.getProperties', {
|
|
@@ -16,7 +16,7 @@ module.exports = {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* @typedef {
|
|
19
|
+
* @typedef {object} GetLocalStateForCallFrameOptions
|
|
20
20
|
* @property {number} [maxReferenceDepth] - The maximum depth of the object to traverse. Defaults to
|
|
21
21
|
* {@link DEFAULT_MAX_REFERENCE_DEPTH}.
|
|
22
22
|
* @property {number} [maxCollectionSize] - The maximum size of a collection to include in the snapshot. Defaults to
|
|
@@ -34,7 +34,7 @@ module.exports = {
|
|
|
34
34
|
*
|
|
35
35
|
* @param {import('inspector').Debugger.CallFrame} callFrame - The call frame to get the local state for
|
|
36
36
|
* @param {GetLocalStateForCallFrameOptions} [opts] - The options for the snapshot
|
|
37
|
-
* @returns {Promise<
|
|
37
|
+
* @returns {Promise<object>} The local state for the call frame
|
|
38
38
|
*/
|
|
39
39
|
async function getLocalStateForCallFrame (
|
|
40
40
|
callFrame,
|
|
@@ -24,7 +24,7 @@ module.exports = {
|
|
|
24
24
|
* Find the script to inspect based on a partial or absolute path. Handles both Windows and POSIX paths.
|
|
25
25
|
*
|
|
26
26
|
* @param {string} path - Partial or absolute path to match against loaded scripts
|
|
27
|
-
* @returns {
|
|
27
|
+
* @returns {object | null} - Object containing `url`, `scriptId`, `sourceMapURL`, and `source` - or null if no match
|
|
28
28
|
*/
|
|
29
29
|
findScriptFromPartialPath (path) {
|
|
30
30
|
if (!path) return null // This shouldn't happen, but better safe than sorry
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const TTLSet = require('../../../../../vendor/dist/ttl-set')
|
|
4
|
-
const config = require('./config')
|
|
5
|
-
const JSONBuffer = require('./json-buffer')
|
|
6
4
|
const request = require('../../exporters/common/request')
|
|
7
5
|
const FormData = require('../../exporters/common/form-data')
|
|
6
|
+
const config = require('./config')
|
|
7
|
+
const JSONBuffer = require('./json-buffer')
|
|
8
8
|
const log = require('./log')
|
|
9
9
|
|
|
10
10
|
module.exports = {
|
|
@@ -4,8 +4,8 @@ const { readFile } = require('fs')
|
|
|
4
4
|
const { types } = require('util')
|
|
5
5
|
const { join } = require('path')
|
|
6
6
|
const { Worker, MessageChannel, threadId: parentThreadId } = require('worker_threads')
|
|
7
|
-
const getDebuggerConfig = require('./config')
|
|
8
7
|
const log = require('../log')
|
|
8
|
+
const getDebuggerConfig = require('./config')
|
|
9
9
|
|
|
10
10
|
let worker = null
|
|
11
11
|
let configChannel = null
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const lookup = require('dns').lookup // cache to avoid instrumentation
|
|
4
|
-
const request = require('./exporters/common/request')
|
|
5
4
|
const dgram = require('dgram')
|
|
6
5
|
const isIP = require('net').isIP
|
|
7
|
-
const log = require('./log')
|
|
8
6
|
const { URL, format } = require('url')
|
|
7
|
+
|
|
8
|
+
const request = require('./exporters/common/request')
|
|
9
|
+
const log = require('./log')
|
|
9
10
|
const Histogram = require('./histogram')
|
|
10
11
|
const defaults = require('./config_defaults')
|
|
11
12
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { truncateSpan, normalizeSpan } = require('./tags-processors')
|
|
4
3
|
const { MsgpackChunk, MsgpackEncoder } = require('../msgpack')
|
|
5
4
|
const log = require('../log')
|
|
6
5
|
const { isTrue } = require('../util')
|
|
7
6
|
const { memoize } = require('../log/utils')
|
|
8
7
|
const { getEnvironmentVariable } = require('../config-helper')
|
|
8
|
+
const { truncateSpan, normalizeSpan } = require('./tags-processors')
|
|
9
9
|
|
|
10
10
|
const SOFT_LIMIT = 8 * 1024 * 1024 // 8MB
|
|
11
11
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
-
const { truncateSpan, normalizeSpan } = require('./tags-processors')
|
|
3
|
-
const { AgentEncoder } = require('./0.4')
|
|
4
2
|
const { version: ddTraceVersion } = require('../../../../package.json')
|
|
5
3
|
const { ITR_CORRELATION_ID } = require('../../src/plugins/util/test')
|
|
6
4
|
const id = require('../../src/id')
|
|
@@ -9,6 +7,8 @@ const {
|
|
|
9
7
|
TELEMETRY_ENDPOINT_PAYLOAD_SERIALIZATION_MS,
|
|
10
8
|
TELEMETRY_ENDPOINT_PAYLOAD_EVENTS_COUNT
|
|
11
9
|
} = require('../ci-visibility/telemetry')
|
|
10
|
+
const { AgentEncoder } = require('./0.4')
|
|
11
|
+
const { truncateSpan, normalizeSpan } = require('./tags-processors')
|
|
12
12
|
|
|
13
13
|
const ENCODING_VERSION = 1
|
|
14
14
|
const ALLOWED_CONTENT_TYPES = new Set(['test_session_end', 'test_module_end', 'test_suite_end', 'test'])
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
-
const { AgentEncoder } = require('./0.4')
|
|
3
2
|
const { MsgpackChunk } = require('../msgpack')
|
|
4
3
|
|
|
5
4
|
const {
|
|
@@ -8,6 +7,7 @@ const {
|
|
|
8
7
|
TELEMETRY_ENDPOINT_PAYLOAD_EVENTS_COUNT
|
|
9
8
|
} = require('../ci-visibility/telemetry')
|
|
10
9
|
const FormData = require('../exporters/common/form-data')
|
|
10
|
+
const { AgentEncoder } = require('./0.4')
|
|
11
11
|
|
|
12
12
|
const COVERAGE_PAYLOAD_VERSION = 2
|
|
13
13
|
const COVERAGE_KEYS_LENGTH = 2
|
|
@@ -95,7 +95,7 @@ class SpanStatsEncoder extends AgentEncoder {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
_encode (bytes, stats) {
|
|
98
|
-
this._encodeMapPrefix(bytes, 8)
|
|
98
|
+
this._encodeMapPrefix(bytes, stats.ProcessTags ? 9 : 8)
|
|
99
99
|
|
|
100
100
|
this._encodeString(bytes, 'Hostname')
|
|
101
101
|
this._encodeString(bytes, stats.Hostname)
|
|
@@ -123,6 +123,11 @@ class SpanStatsEncoder extends AgentEncoder {
|
|
|
123
123
|
|
|
124
124
|
this._encodeString(bytes, 'Sequence')
|
|
125
125
|
this._encodeLong(bytes, stats.Sequence)
|
|
126
|
+
|
|
127
|
+
if (stats.ProcessTags) {
|
|
128
|
+
this._encodeString(bytes, 'ProcessTags')
|
|
129
|
+
this._encodeString(bytes, stats.ProcessTags)
|
|
130
|
+
}
|
|
126
131
|
}
|
|
127
132
|
}
|
|
128
133
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const exporters = require('../../../ext/exporters')
|
|
4
3
|
const fs = require('fs')
|
|
5
|
-
const
|
|
4
|
+
const exporters = require('../../../ext/exporters')
|
|
6
5
|
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
6
|
+
const constants = require('./constants')
|
|
7
7
|
|
|
8
8
|
module.exports = function getExporter (name) {
|
|
9
9
|
switch (name) {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
const { URL, format } = require('url')
|
|
4
4
|
|
|
5
|
-
const request = require('./request')
|
|
6
5
|
const defaults = require('../../config_defaults')
|
|
7
6
|
const { incrementCountMetric, TELEMETRY_EVENTS_ENQUEUED_FOR_SERIALIZATION } = require('../../ci-visibility/telemetry')
|
|
7
|
+
const request = require('./request')
|
|
8
8
|
|
|
9
9
|
function fetchAgentInfo (url, callback) {
|
|
10
10
|
request('', {
|
|
@@ -8,11 +8,11 @@ const http = require('http')
|
|
|
8
8
|
const https = require('https')
|
|
9
9
|
const zlib = require('zlib')
|
|
10
10
|
|
|
11
|
+
const { storage } = require('../../../../datadog-core')
|
|
12
|
+
const log = require('../../log')
|
|
11
13
|
const { urlToHttpOptions } = require('./url-to-http-options-polyfill')
|
|
12
14
|
const docker = require('./docker')
|
|
13
15
|
const { httpAgent, httpsAgent } = require('./agents')
|
|
14
|
-
const { storage } = require('../../../../datadog-core')
|
|
15
|
-
const log = require('../../log')
|
|
16
16
|
|
|
17
17
|
const maxActiveRequests = 8
|
|
18
18
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const tracerLogger = require('../../log')// path to require tracer logger
|
|
4
|
-
|
|
5
3
|
const https = require('https')
|
|
4
|
+
const tracerLogger = require('../../log')// path to require tracer logger
|
|
6
5
|
|
|
7
6
|
class ExternalLogger {
|
|
8
7
|
// Note: these attribute names match the corresponding entry in the JSON payload.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
const log = require('../log')
|
|
4
4
|
const startupLog = require('../startup-log')
|
|
5
|
-
const FlareFile = require('./file')
|
|
6
5
|
const { LogChannel } = require('../log/channels')
|
|
7
6
|
const request = require('../exporters/common/request')
|
|
8
7
|
const FormData = require('../exporters/common/form-data')
|
|
8
|
+
const FlareFile = require('./file')
|
|
9
9
|
|
|
10
10
|
const MAX_LOG_SIZE = 12 * 1024 * 1024 // 12MB soft limit
|
|
11
11
|
const TIMEOUT = 20 * 1000 * 60
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
var path = require('path')
|
|
4
4
|
var Module = require('module')
|
|
5
|
+
|
|
6
|
+
var nodeVersion = require('../../../../version')
|
|
5
7
|
var isTrue = require('./util').isTrue
|
|
6
8
|
var log = require('./log')
|
|
7
9
|
var telemetry = require('./telemetry')
|
|
8
|
-
var nodeVersion = require('../../../../version')
|
|
9
10
|
|
|
10
11
|
var NODE_MAJOR = nodeVersion.NODE_MAJOR
|
|
11
12
|
|
|
@@ -14,7 +15,9 @@ function guard (fn) {
|
|
|
14
15
|
var clobberBailout = false
|
|
15
16
|
var forced = isTrue(process.env.DD_INJECT_FORCE)
|
|
16
17
|
var engines = require('../../../../package.json').engines
|
|
17
|
-
var
|
|
18
|
+
var versions = engines.node.match(/^>=(\d+) <(\d+)$/)
|
|
19
|
+
var minMajor = versions[1]
|
|
20
|
+
var nextMajor = versions[2]
|
|
18
21
|
var version = process.versions.node
|
|
19
22
|
|
|
20
23
|
if (process.env.DD_INJECTION_ENABLED) {
|
|
@@ -40,7 +43,7 @@ function guard (fn) {
|
|
|
40
43
|
|
|
41
44
|
// If the runtime doesn't match the engines field in package.json, then we
|
|
42
45
|
// should not initialize the tracer.
|
|
43
|
-
if (!clobberBailout && NODE_MAJOR < minMajor) {
|
|
46
|
+
if (!clobberBailout && (NODE_MAJOR < minMajor || NODE_MAJOR >= nextMajor)) {
|
|
44
47
|
initBailout = true
|
|
45
48
|
telemetry([
|
|
46
49
|
{ name: 'abort', tags: ['reason:incompatible_runtime'] },
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { isFalse } = require('./util')
|
|
4
3
|
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
4
|
+
const { isFalse } = require('./util')
|
|
5
5
|
|
|
6
6
|
// Global `jest` is only present in Jest workers.
|
|
7
7
|
const inJestWorker = typeof jest !== 'undefined'
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
const log = require('../log')
|
|
4
4
|
const { channel } = require('../../../datadog-instrumentations/src/helpers/instrument')
|
|
5
5
|
const { ERROR_MESSAGE, ERROR_TYPE } = require('../constants')
|
|
6
|
-
const { ImpendingTimeout } = require('./runtime/errors')
|
|
7
6
|
const { getEnvironmentVariable } = require('../config-helper')
|
|
7
|
+
const { ImpendingTimeout } = require('./runtime/errors')
|
|
8
8
|
|
|
9
9
|
const globalTracer = global._ddtrace
|
|
10
10
|
const tracer = globalTracer._tracer
|
|
@@ -21,7 +21,7 @@ let __lambdaTimeout
|
|
|
21
21
|
* Publishes to the `apm:aws:lambda:timeout` channel when
|
|
22
22
|
* the AWS Lambda run time is about to end.
|
|
23
23
|
*
|
|
24
|
-
* @param {
|
|
24
|
+
* @param {object} context AWS Lambda context object.
|
|
25
25
|
*/
|
|
26
26
|
function checkTimeout (context) {
|
|
27
27
|
const remainingTimeInMillis = context.getRemainingTimeInMillis()
|
|
@@ -63,7 +63,7 @@ function crashFlush () {
|
|
|
63
63
|
/**
|
|
64
64
|
* Extracts the context from the given Lambda handler arguments.
|
|
65
65
|
*
|
|
66
|
-
* @param {
|
|
66
|
+
* @param {unknown[]} args any amount of arguments
|
|
67
67
|
* @returns the context, if extraction was succesful.
|
|
68
68
|
*/
|
|
69
69
|
function extractContext (args) {
|
|
@@ -80,7 +80,7 @@ function extractContext (args) {
|
|
|
80
80
|
/**
|
|
81
81
|
* Patches your AWS Lambda handler function to add some tracing support.
|
|
82
82
|
*
|
|
83
|
-
* @param {
|
|
83
|
+
* @param {Function} lambdaHandler a Lambda handler function.
|
|
84
84
|
*/
|
|
85
85
|
exports.datadog = function datadog (lambdaHandler) {
|
|
86
86
|
return (...args) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { registerLambdaHook } = require('./runtime/ritm')
|
|
4
3
|
const { getEnvironmentVariable } = require('../config-helper')
|
|
4
|
+
const { registerLambdaHook } = require('./runtime/ritm')
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* It is safe to do it this way, since customers will never be expected to disable
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
const path = require('path')
|
|
4
4
|
|
|
5
|
-
const { _extractModuleNameAndHandlerPath, _extractModuleRootAndHandler, _getLambdaFilePaths } = require('./ritm')
|
|
6
5
|
const { datadog } = require('../handler')
|
|
7
6
|
const { addHook } = require('../../../../datadog-instrumentations/src/helpers/instrument')
|
|
8
7
|
const shimmer = require('../../../../datadog-shimmer')
|
|
9
8
|
const { getEnvironmentVariable } = require('../../config-helper')
|
|
9
|
+
const { _extractModuleNameAndHandlerPath, _extractModuleRootAndHandler, _getLambdaFilePaths } = require('./ritm')
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Patches a Datadog Lambda module by calling `patchDatadogLambdaHandler`
|
|
13
13
|
* with the handler name `datadog`.
|
|
14
14
|
*
|
|
15
|
-
* @param {
|
|
15
|
+
* @param {object} datadogLambdaModule node module to be patched.
|
|
16
16
|
* @returns a Datadog Lambda module with the `datadog` function from
|
|
17
17
|
* `datadog-lambda-js` patched.
|
|
18
18
|
*/
|
|
@@ -27,7 +27,7 @@ const patchDatadogLambdaModule = (datadogLambdaModule) => {
|
|
|
27
27
|
* Datadog instrumentation by getting the Lambda handler from its
|
|
28
28
|
* arguments.
|
|
29
29
|
*
|
|
30
|
-
* @param {
|
|
30
|
+
* @param {Function} datadogHandler the Datadog Lambda handler to destructure.
|
|
31
31
|
* @returns the datadogHandler with its arguments patched.
|
|
32
32
|
*/
|
|
33
33
|
function patchDatadogLambdaHandler (datadogHandler) {
|
|
@@ -51,7 +51,7 @@ const patchLambdaModule = (handlerPath) => (lambdaModule) => {
|
|
|
51
51
|
/**
|
|
52
52
|
* Patches a Lambda handler in order to do Datadog instrumentation.
|
|
53
53
|
*
|
|
54
|
-
* @param {
|
|
54
|
+
* @param {Function} lambdaHandler the Lambda handler to be patched.
|
|
55
55
|
* @returns a function which patches the given Lambda handler.
|
|
56
56
|
*/
|
|
57
57
|
function patchLambdaHandler (lambdaHandler) {
|
|
@@ -61,7 +61,7 @@ function _extractModuleNameAndHandlerPath (handler) {
|
|
|
61
61
|
/**
|
|
62
62
|
* Returns all possible paths of the files to be patched when required.
|
|
63
63
|
*
|
|
64
|
-
* @param {
|
|
64
|
+
* @param {string} lambdaStylePath the path comprised of the `LAMBDA_TASK_ROOT`,
|
|
65
65
|
* the root of the module of the Lambda handler, and the module name.
|
|
66
66
|
* @returns the lambdaStylePath with appropiate extensions for the hook.
|
|
67
67
|
*/
|
|
@@ -36,5 +36,11 @@ module.exports = {
|
|
|
36
36
|
CACHE_WRITE_INPUT_TOKENS_METRIC_KEY: 'cache_write_input_tokens',
|
|
37
37
|
REASONING_OUTPUT_TOKENS_METRIC_KEY: 'reasoning_output_tokens',
|
|
38
38
|
|
|
39
|
-
DROPPED_IO_COLLECTION_ERROR: 'dropped_io'
|
|
39
|
+
DROPPED_IO_COLLECTION_ERROR: 'dropped_io',
|
|
40
|
+
|
|
41
|
+
PROMPT_TRACKING_INSTRUMENTATION_METHOD: 'prompt_tracking_instrumentation_method',
|
|
42
|
+
PROMPT_MULTIMODAL: 'prompt_multimodal',
|
|
43
|
+
INSTRUMENTATION_METHOD_AUTO: 'auto',
|
|
44
|
+
INSTRUMENTATION_METHOD_ANNOTATED: 'annotated',
|
|
45
|
+
INSTRUMENTATION_METHOD_UNKNOWN: 'unknown'
|
|
40
46
|
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const util = require('node:util')
|
|
4
|
+
|
|
5
|
+
const { channel } = require('dc-polyfill')
|
|
6
|
+
|
|
3
7
|
const log = require('../log')
|
|
4
8
|
const {
|
|
5
9
|
ML_APP,
|
|
@@ -7,24 +11,19 @@ const {
|
|
|
7
11
|
PROPAGATED_PARENT_ID_KEY
|
|
8
12
|
} = require('./constants/tags')
|
|
9
13
|
const { storage } = require('./storage')
|
|
10
|
-
|
|
11
14
|
const telemetry = require('./telemetry')
|
|
12
15
|
const LLMObsSpanProcessor = require('./span_processor')
|
|
16
|
+
const LLMObsEvalMetricsWriter = require('./writers/evaluations')
|
|
17
|
+
const LLMObsTagger = require('./tagger')
|
|
18
|
+
const LLMObsSpanWriter = require('./writers/spans')
|
|
19
|
+
const { setAgentStrategy } = require('./writers/util')
|
|
13
20
|
|
|
14
|
-
const { channel } = require('dc-polyfill')
|
|
15
21
|
const spanFinishCh = channel('dd-trace:span:finish')
|
|
16
22
|
const evalMetricAppendCh = channel('llmobs:eval-metric:append')
|
|
17
23
|
const flushCh = channel('llmobs:writers:flush')
|
|
18
24
|
const injectCh = channel('dd-trace:span:inject')
|
|
19
25
|
const registerUserSpanProcessorCh = channel('llmobs:register-processor')
|
|
20
26
|
|
|
21
|
-
const LLMObsEvalMetricsWriter = require('./writers/evaluations')
|
|
22
|
-
const LLMObsTagger = require('./tagger')
|
|
23
|
-
const LLMObsSpanWriter = require('./writers/spans')
|
|
24
|
-
const { setAgentStrategy } = require('./writers/util')
|
|
25
|
-
|
|
26
|
-
const util = require('node:util')
|
|
27
|
-
|
|
28
27
|
/**
|
|
29
28
|
* Setting writers and processor globally when LLMObs is enabled
|
|
30
29
|
* We're setting these in this module instead of on the SDK.
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { channel } = require('dc-polyfill')
|
|
3
4
|
const BaseLLMObsPlugin = require('../base')
|
|
4
5
|
const { getModelProvider } = require('../../../../../datadog-plugin-ai/src/utils')
|
|
5
6
|
|
|
6
|
-
const { channel } = require('dc-polyfill')
|
|
7
|
-
|
|
8
7
|
const toolCreationCh = channel('dd-trace:vercel-ai:tool')
|
|
9
8
|
const setAttributesCh = channel('dd-trace:vercel-ai:span:setAttributes')
|
|
10
9
|
|
|
@@ -21,6 +20,38 @@ const {
|
|
|
21
20
|
getLlmObsSpanName
|
|
22
21
|
} = require('./util')
|
|
23
22
|
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {Record<string, unknown> & { description?: string, id?: string }} AvailableToolArgs
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {string | number | boolean | null | undefined | string[] | number[] | boolean[]} TagValue
|
|
29
|
+
* @typedef {Record<string, TagValue>} SpanTags
|
|
30
|
+
*
|
|
31
|
+
* @typedef {{ name?: string, description?: string }} ToolForModel
|
|
32
|
+
*
|
|
33
|
+
* @typedef {{ type: 'text' | 'reasoning' | 'redacted-reasoning', text?: string, data?: string }} TextPart
|
|
34
|
+
* @typedef {{ type: 'tool-call', toolName: string, toolCallId: string, args?: unknown, input?: unknown }} ToolCallPart
|
|
35
|
+
* @typedef {(
|
|
36
|
+
* { type: 'tool-result', toolCallId: string, output?: { type: string, value?: unknown }, result?: unknown } &
|
|
37
|
+
* Record<string, unknown>
|
|
38
|
+
* )} ToolResultPart
|
|
39
|
+
*
|
|
40
|
+
* @typedef {{
|
|
41
|
+
* role: 'system',
|
|
42
|
+
* content: string
|
|
43
|
+
* } | {
|
|
44
|
+
* role: 'user',
|
|
45
|
+
* content: TextPart[]
|
|
46
|
+
* } | {
|
|
47
|
+
* role: 'assistant',
|
|
48
|
+
* content: Array<TextPart | ToolCallPart>
|
|
49
|
+
* } | {
|
|
50
|
+
* role: 'tool',
|
|
51
|
+
* content: ToolResultPart[]
|
|
52
|
+
* }} AiSdkMessage
|
|
53
|
+
*/
|
|
54
|
+
|
|
24
55
|
const SPAN_NAME_TO_KIND_MAPPING = {
|
|
25
56
|
// embeddings
|
|
26
57
|
embed: 'workflow',
|
|
@@ -47,7 +78,7 @@ class VercelAILLMObsPlugin extends BaseLLMObsPlugin {
|
|
|
47
78
|
/**
|
|
48
79
|
* The available tools within the runtime scope of this integration.
|
|
49
80
|
* This essentially acts as a global registry for all tools made through the Vercel AI SDK.
|
|
50
|
-
* @type {Set<
|
|
81
|
+
* @type {Set<AvailableToolArgs>}
|
|
51
82
|
*/
|
|
52
83
|
#availableTools
|
|
53
84
|
|
|
@@ -80,7 +111,7 @@ class VercelAILLMObsPlugin extends BaseLLMObsPlugin {
|
|
|
80
111
|
* We use the tool description as the next best identifier for a tool.
|
|
81
112
|
*
|
|
82
113
|
* @param {string} toolName
|
|
83
|
-
* @param {string} toolDescription
|
|
114
|
+
* @param {string | undefined} toolDescription
|
|
84
115
|
* @returns {string | undefined}
|
|
85
116
|
*/
|
|
86
117
|
findToolName (toolName, toolDescription) {
|
|
@@ -223,7 +254,7 @@ class VercelAILLMObsPlugin extends BaseLLMObsPlugin {
|
|
|
223
254
|
|
|
224
255
|
/**
|
|
225
256
|
* @param {import('../../../opentracing/span')} span
|
|
226
|
-
* @param {
|
|
257
|
+
* @param {SpanTags} tags
|
|
227
258
|
*/
|
|
228
259
|
setLLMOperationTags (span, tags) {
|
|
229
260
|
const toolsForModel = tags['ai.prompt.tools']?.map(getJsonStringValue)
|
|
@@ -290,8 +321,8 @@ class VercelAILLMObsPlugin extends BaseLLMObsPlugin {
|
|
|
290
321
|
* it is possible to have multiple tool call results in a single message that we
|
|
291
322
|
* need to split into multiple messages.
|
|
292
323
|
*
|
|
293
|
-
* @param {
|
|
294
|
-
* @param {
|
|
324
|
+
* @param {AiSdkMessage} message
|
|
325
|
+
* @param {ToolForModel[] | null | undefined} toolsForModel
|
|
295
326
|
* @returns {Array<{role: string, content: string, toolId?: string,
|
|
296
327
|
* toolCalls?: Array<{arguments: string, name: string, toolId: string, type: string}>}>}
|
|
297
328
|
*/
|
|
@@ -10,16 +10,35 @@ const MODEL_METADATA_KEYS = new Set([
|
|
|
10
10
|
'stop_sequences'
|
|
11
11
|
])
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {import('../../../opentracing/span')} Span
|
|
15
|
+
*
|
|
16
|
+
* @typedef {string | number | boolean | null | undefined | string[] | number[] | boolean[]} TagValue
|
|
17
|
+
* @typedef {Record<string, TagValue>} SpanTags
|
|
18
|
+
*
|
|
19
|
+
* @typedef {{ span?: Span }} CurrentStore
|
|
20
|
+
* @typedef {{ currentStore?: CurrentStore, attributes?: SpanTags }} AiPluginContext
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {{
|
|
25
|
+
* type: string,
|
|
26
|
+
* value?: unknown
|
|
27
|
+
* }} ToolCallOutput
|
|
28
|
+
*
|
|
29
|
+
* @typedef {{ output?: ToolCallOutput, result?: unknown } & Record<string, unknown>} ToolCallResultContent
|
|
30
|
+
*/
|
|
31
|
+
|
|
13
32
|
/**
|
|
14
33
|
* Get the span tags from the context (either the attributes or the span tags).
|
|
15
34
|
*
|
|
16
|
-
* @param {
|
|
17
|
-
* @returns {
|
|
35
|
+
* @param {AiPluginContext} ctx
|
|
36
|
+
* @returns {SpanTags}
|
|
18
37
|
*/
|
|
19
38
|
function getSpanTags (ctx) {
|
|
20
39
|
const span = ctx.currentStore?.span
|
|
21
40
|
const carrier = ctx.attributes ?? span?.context()._tags ?? {}
|
|
22
|
-
return carrier
|
|
41
|
+
return /** @type {SpanTags} */ (carrier)
|
|
23
42
|
}
|
|
24
43
|
|
|
25
44
|
/**
|
|
@@ -88,10 +107,11 @@ function getJsonStringValue (str, defaultValue) {
|
|
|
88
107
|
|
|
89
108
|
/**
|
|
90
109
|
* Get the model metadata from the span tags (top_p, top_k, temperature, etc.)
|
|
91
|
-
* @param {
|
|
92
|
-
* @returns {Record<string,
|
|
110
|
+
* @param {SpanTags} tags
|
|
111
|
+
* @returns {Record<string, unknown> | null}
|
|
93
112
|
*/
|
|
94
113
|
function getModelMetadata (tags) {
|
|
114
|
+
/** @type {Record<string, unknown>} */
|
|
95
115
|
const modelMetadata = {}
|
|
96
116
|
for (const metadata of MODEL_METADATA_KEYS) {
|
|
97
117
|
const metadataTagKey = `gen_ai.request.${metadata}`
|
|
@@ -106,10 +126,11 @@ function getModelMetadata (tags) {
|
|
|
106
126
|
|
|
107
127
|
/**
|
|
108
128
|
* Get the generation metadata from the span tags (maxSteps, maxRetries, etc.)
|
|
109
|
-
* @param {
|
|
110
|
-
* @returns {Record<string,
|
|
129
|
+
* @param {SpanTags} tags
|
|
130
|
+
* @returns {Record<string, unknown> | null}
|
|
111
131
|
*/
|
|
112
132
|
function getGenerationMetadata (tags) {
|
|
133
|
+
/** @type {Record<string, unknown>} */
|
|
113
134
|
const metadata = {}
|
|
114
135
|
|
|
115
136
|
for (const tag of Object.keys(tags)) {
|
|
@@ -131,7 +152,7 @@ function getGenerationMetadata (tags) {
|
|
|
131
152
|
* If the tool name is a parsable number, or is not found, null is returned.
|
|
132
153
|
* Older versions of the ai sdk would tag the tool name as its index in the tools array.
|
|
133
154
|
*
|
|
134
|
-
* @param {
|
|
155
|
+
* @param {SpanTags} tags
|
|
135
156
|
* @returns {string | null}
|
|
136
157
|
*/
|
|
137
158
|
function getToolNameFromTags (tags) {
|
|
@@ -147,7 +168,7 @@ function getToolNameFromTags (tags) {
|
|
|
147
168
|
/**
|
|
148
169
|
* Get the content of a tool call result.
|
|
149
170
|
* Version 5 of the ai sdk sets this tag as `content.output`, with a `
|
|
150
|
-
* @param {
|
|
171
|
+
* @param {{ output?: { type: string, value: unknown }, result?: unknown }} content
|
|
151
172
|
* @returns {string}
|
|
152
173
|
*/
|
|
153
174
|
function getToolCallResultContent (content) {
|