ddapm-test-agent 1.38.0__tar.gz → 1.40.0__tar.gz
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.
- ddapm_test_agent-1.40.0/CLAUDE.md +304 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/PKG-INFO +11 -1
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/README.md +10 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/agent.py +77 -2
- ddapm_test_agent-1.40.0/ddapm_test_agent/llmobs_event_platform.py +997 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/vcr_proxy.py +2 -1
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/PKG-INFO +11 -1
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/SOURCES.txt +8 -0
- ddapm_test_agent-1.40.0/releasenotes/notes/add-llmobs-data-forwarding-083ec4e3ca7100b3.yaml +5 -0
- ddapm_test_agent-1.40.0/releasenotes/notes/controllable-test-agent-version-a12e61934bbce5fe.yaml +4 -0
- ddapm_test_agent-1.40.0/releasenotes/notes/ignore-transfer-encoding-header-3b22699615356f91.yaml +5 -0
- ddapm_test_agent-1.40.0/releasenotes/notes/llmobs-event-platform-api-a816ea44d81f4345.yaml +6 -0
- ddapm_test_agent-1.40.0/releasenotes/notes/llmobs-facet-filter-query-support-a3ac0c9f87d759d5.yaml +5 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/conftest.py +21 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_agent.py +15 -0
- ddapm_test_agent-1.40.0/tests/test_llmobs_event_platform.py +358 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_vcr_proxy.py +7 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.dockerignore +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.github/workflows/docker.yml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.github/workflows/main.yml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.github/workflows/publish_pypi.yml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.github/workflows/releasenote.yml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.gitignore +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/Dockerfile +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/Dockerfile.windows +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/LICENSE.BSD3 +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/LICENSE.apache2 +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/__init__.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/apmtelemetry.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/checks.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/client.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/cmd.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/context.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/fmt.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/integration.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/logs.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/metrics.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/remoteconfig.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/static/style.css +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/base.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/config.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/dashboard.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/macros.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/requests.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/session_detail.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/sessions.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/snapshot_detail.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/snapshots.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/trace_detail.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/tracer_flares.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/traces.html +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/trace.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/trace_checks.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/trace_snapshot.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/tracerflare.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/tracestats.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/tracestats_snapshot.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/web.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/dependency_links.txt +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/entry_points.txt +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/not-zip-safe +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/requires.txt +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/top_level.txt +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/pyproject.toml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/check-releasenotes +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/config.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/1.0-e192f5064e917083.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/Add-metrics.process_id-to-ignored-attributes-62b264f0ea591326.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/Add-values-handling-to-span_event-array_value-to-mirror-agent-ee7483c90c263ff4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/Checks-changed-to-opt-in-8716cac4ecdbb1c2.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/SNAPSHOT_REGEX_PLACEHOLDERS-1d2c5e2711d1953b.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/SNAPSHOT_REGEX_PLACEHOLDERS-compare-c829e7a4df4fa1f4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/Settings-endpoint-928ae5b6e8ddc625.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/Telemetry-requests-delay-2586180b286ce393.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/Use-default-value-for-null-fields-in-tracestats-55d465f489efb2ba.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/acceptV1TracePayloads-5435cff37cfb6a85.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-datadog-proxy-7e2e608c101a564b.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-distributed-trace-c35a314698a3b966.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-errors-intake-proxy-endpoint-7e0f31d72a130f1a.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-feature-flags-evp-endpoint-da7786735ac02f50.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-fmt-command-cc31769942a5fec3.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-nix-build-support-29dc8a347e3bd7c1.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-optional-json-parser-10aac54bd1cbe322.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-otel-metrics-support-a2ebeb28cae2f0ba.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-python-3.13-support-ae7b96f4a10f20f4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-rcm-endpoints-7e1f949e83e21039.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-request-forwarding-middleware-d3f325166b0f8e9e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-service-naming-checks-2b68ff51d1b5496d.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-session-to-rcm-endpoints-d97e925a04a99a65.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-span-events-306e697168373899.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-support-for-plain-text-responses-00d20bf7b335e75b.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-support-telemetry-requests-10737cd3da802ca6.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-tracer_flare-endpoint-b2c81510920974d7.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-web-ui-304c84316f2b4818.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/addAgentStateToInfo-f9a179ce88f2ab9e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/addPeerTagsToInfo-4ccc2539d22c2993.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/allow-attribute-removal-snapshots-314b744b043b97c5.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/args-88f664c83a96075d.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/change-trace-proxy-headers-f9fcbb4efc4fcb95.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/check-http-header-sensitivity-daaa9d9595ae86d6.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/clearing-sessions-now-only-removes-6b0311673d8b37aa.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/client-173dbc6655e42337.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/content_length-e1bab75580aa1dcb.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/disable-error-responses-and-collect-trace-failures-in-memory-4a199bc7be416709.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/docker-arm64-images-a4b6b2cc527327d6.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/evp-proxy-on-info-d65cd077575306ca.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/exception-messages-21ee64461020edd1.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-docker-image-tags-785d40f5bfdb8003.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-fmt-logging-6a323fd8d5d4eb28.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-getting-tested-integrations-multiple-session-tokens-4ee41d545754f87f.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-matching-319744b82d2514c1.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-missing-slim-deps-fa3b0fc0292a09b3.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-otlp-endpoint-response-type-18822a3ac85e1cb7.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-partial-chunks-0db14ce3017e6173.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-racecondition-9bd0ef15b7da60fa.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-tracerflare-request-parsing-fae18ff9997c216d.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/genai-vcr-support-b499ec54df84eaa3.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/ignore-dsm-pathway-hash-during-trace-snapshots-f0b99ea267fbad48.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/image-optimization-d614eccb59441217.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/improve-test-agent-debugging-5759413f1fc5f7fa.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/improve-test-agent-proxying-a207f0fc81b3ab2d.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/improve-trace-check-results-endpoints-6ab4132628520793.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/info-34dcd9cbcc382487.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/info-drop-p0s-c207889f590340fb.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/llmobs-eval-metric-endpoint-8b5222491969ab4f.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/llmobs-evp-proxy-1383f4b4962ac7c9.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/meta-struct-2cce08475cb05470.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/more-oai-cass-908eb5ea46bd2985.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/named-pipe-ded0ebbbeee2e7fa.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/new-process-id-tag-f0ab0daf652e05cc.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/oai-incomplete-cass-795ad19b6a226c1f.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/otlp-logs-grpc-45365879c22969aa.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/otlp-logs-support-d5a150d9f5304d7c.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/pipeline_stats_endpoint-e8ad6da735dc2647.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/profiling-endpoint-0cd209e4e5b6cfc0.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/provider-snapshot-server-f6a307acbf11d214.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/proxy-37c94e2fb428c6fc.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/python-3.12-952e06c6158af67d.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/python-support-1c447acc4607abc7.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/python310-025fbc190363de98.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/python310-docker-image-d4e329cfecf6510e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/rc-encoding-length-fix-cc011edea7f8f5b2.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/rc-get-endpoint-e502f55b7df544e2.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remoteconfig-requests-1af7abb99c61c069.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remove-agent-state-header-from-info-87f920bf4ce5785c.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remove-nix-ec1c4aca7dc002c4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remove-old-pythons-4667b182aacf0ce6.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remove-vcr-dependancy-ea09889df42b3975.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/reuse-session-1670aa569907cf68.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/sample-rate-1e06ae4cdc933b14.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/session-requests-b8057811f976220e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/session-tracerflares-400ce9b3d3838b40.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-cmds-de4a561911afee11.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-empty-maps-2cbe8cea3e7112fa.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-error-messages-de41d9e3207fa30a.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-filename-c068de1bc3e50c04.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-order-type-2d6424e380b2c88f.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-parent-id-7abb860008702e70.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/span-links-1ec76bd2b47a3880.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/span-ordering-1a7b383aa015bddc.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/span-parent-id-a4d7d63fa623361c.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/support-ant-vcr-1eff9a40caa0aba0.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/support-tracking-of-tested-integrations-ac19ccd1f8333c00.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/throttling-590bf58ecb3cc4a5.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/trace-stats-97da3a478dabfa99.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/trace-stats-snapshot-718ca37385c93e1e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/traces-endpoint-f4f9c1d94d6ceda2.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/tracestats-fixes-07152c708e73ef96.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/tracestats-post-65ce788f81862532.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/tracestats-service-2a0a178cbd21b07d.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/uds-64b11960931d8b77.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/uds-c99ea5d099e67156.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/uds-container-8138f8b1438b1a0a.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/uds-permissions-903266ac6445b873.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/v0.5-traces-cf469b0b71398d97.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/v0.7-traces-7ea3ebbed7502d01.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-aws-bedrock-proxy-3bf018b1712d5105.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-cassette-name-middleware-fix-9e47c395892a9fe7.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-cassettes-for-openai-v5-6e9d78091de1f0c2.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-cassettes-for-vercel-ai-7a8275f9c2b48bc7.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-ci-mode-99dbd2940fff8d7a.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-custom-providers-map-a43b7e2d62d02015.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-prefix-instead-of-suffix-4c56dcb5038d222e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-proxy-aws-recalculation-fix-2184c10270a7bca5.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-proxy-use-test-name-bugfix-be758294ba30ac78.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-proxy-use-test-name-e47891994c961c52.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-support-querystring-b06555fb9a7c90ae.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/version-0c32d2752f154eb9.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/wheels-68a7dc2f4b00e0c4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/windows-docker-image-1f5d5e894558bb4b.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/riotfile.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/setup.cfg +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/setup.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/test_deps.txt +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/__init__.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_multi_trace.json +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_single_trace.json +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_distributed_propagated.json +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_distributed_same_payload.json +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_missing_received.json +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_stats.json +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_stats_tracestats.json +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_apmtelemetry.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_checks.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_client.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_container.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_logs.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_metrics.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_remoteconfig.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_session.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_snapshot.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_snapshot_integration.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_trace.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_tracerflare.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_tracestats.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/trace_utils.py +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_26d618ee.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_595f439c.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_717ba0b4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_a1af2c12.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/deepseek/deepseek_chat_completions_post_afb6ccab.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_audio_transcriptions_post_173af3e5.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_audio_transcriptions_post_71305a25.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_audio_translations_post_d5b5b8d6.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_audio_translations_post_dd92a18a.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_0f1514e1.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_172294b4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_193ae44a.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_23558eed.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_2edb59ae.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_3517e44e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_36bdc0cb.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_3c045664.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_432a8e46.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_4749eff9.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_4dce8db6.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_57612363.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_649d8162.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_655a8ef2.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_66dfc80e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_67e8e833.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_6df851cc.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_7c2d1ac5.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_82a4bb3c.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_9122b1ae.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_917478d0.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_a73ecd7a.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_a925b737.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_ae4728c2.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_b29f1a87.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_ce69ed91.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_d8fb132a.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_d94d5844.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_d98ce00d.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_ebff79da.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_33681ea4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_5d2418d4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_619dee1c.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_6224acff.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_87f617af.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_98c30019.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_9bb49464.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_b24dbf7d.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_embeddings_post_0381abe4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_embeddings_post_48694087.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_embeddings_post_541bd4d0.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_content_get_60bd10ef.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_delete_3ee48409.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_get_1afefb93.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_get_68efa25d.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_post_2fcf9545.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_post_957d63ba.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_ftjob-q9CUUUsHJemGUVQ1Ecc01zcf_cancel_post_d7c16b38.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_ftjob-q9CUUUsHJemGUVQ1Ecc01zcf_events_get_557d820e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_ftjob-q9CUUUsHJemGUVQ1Ecc01zcf_get_265489e7.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_get_ebc57c6f.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_post_c3b6e4a9.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_075386c4.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_57b4f4da.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_660e9dd7.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_993e0192.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_a2f1eb43.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_ae72c45f.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_cf5af376.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_dbefb624.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_generations_post_48272841.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_generations_post_736070ea.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_variations_post_5971e285.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_variations_post_f2f62f6c.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_models_ft_gpt-4.1-mini-2025-04-14_datadog-staging__BkaILRSh_delete_c70f2992.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_models_get_e04cf04b.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_models_gpt-4_get_b13c5b23.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_moderations_post_532b3315.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_responses_post_33fb1f66.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_responses_post_5ca556ec.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_responses_post_c05c936e.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_responses_post_c61e3067.yaml +0 -0
- {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_responses_post_ee2423e6.yaml +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# dd-apm-test-agent
|
|
2
|
+
|
|
3
|
+
A test agent that emulates Datadog APM endpoints for testing client libraries. It receives traces, telemetry, metrics, and other data from tracers, providing endpoints for validation, snapshot testing, and local development.
|
|
4
|
+
|
|
5
|
+
## Quick Reference
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Activate virtual environment
|
|
9
|
+
source .venv/bin/activate
|
|
10
|
+
|
|
11
|
+
# Run the test agent
|
|
12
|
+
ddapm-test-agent --port=8126
|
|
13
|
+
|
|
14
|
+
# Run with web UI
|
|
15
|
+
ddapm-test-agent --port=8126 --web-ui-port=8080
|
|
16
|
+
|
|
17
|
+
# Run all tests
|
|
18
|
+
python -m pytest tests/ -v
|
|
19
|
+
|
|
20
|
+
# Run specific test file
|
|
21
|
+
python -m pytest tests/test_agent.py -v
|
|
22
|
+
|
|
23
|
+
# Run a single test
|
|
24
|
+
python -m pytest tests/test_agent.py::test_trace -v
|
|
25
|
+
|
|
26
|
+
# Create a release note
|
|
27
|
+
reno new <feature-name>
|
|
28
|
+
|
|
29
|
+
# Format snapshots
|
|
30
|
+
ddapm-test-agent-fmt path/to/snapshots
|
|
31
|
+
|
|
32
|
+
# Lint snapshots (check mode)
|
|
33
|
+
ddapm-test-agent-fmt --check path/to/snapshots
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Project Structure
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
ddapm_test_agent/ # Main package
|
|
40
|
+
agent.py # Core application, routes, middleware (~95KB - main entry point)
|
|
41
|
+
trace.py # Trace decoding and handling (v0.4, v0.5, v0.7 formats)
|
|
42
|
+
trace_snapshot.py # Snapshot comparison logic
|
|
43
|
+
trace_checks.py # Trace validation checks
|
|
44
|
+
checks.py # Check framework infrastructure
|
|
45
|
+
apmtelemetry.py # APM telemetry event handling
|
|
46
|
+
tracestats.py # Trace statistics handling
|
|
47
|
+
remoteconfig.py # Remote configuration server
|
|
48
|
+
logs.py # OTLP logs handling
|
|
49
|
+
metrics.py # OTLP metrics handling
|
|
50
|
+
vcr_proxy.py # VCR cassette recording/playback for 3rd party APIs
|
|
51
|
+
llmobs_event_platform.py # LLM Observability API endpoints
|
|
52
|
+
client.py # Test client utilities
|
|
53
|
+
fmt.py # Snapshot formatting CLI
|
|
54
|
+
cmd.py # CLI entry points
|
|
55
|
+
|
|
56
|
+
tests/
|
|
57
|
+
conftest.py # Pytest fixtures (agent, payloads, helpers)
|
|
58
|
+
test_agent.py # Core agent endpoint tests
|
|
59
|
+
test_snapshot.py # Snapshot functionality tests
|
|
60
|
+
test_trace.py # Trace handling tests
|
|
61
|
+
test_session.py # Session management tests
|
|
62
|
+
test_<module>.py # Module-specific tests
|
|
63
|
+
trace_utils.py # Test utilities for trace generation
|
|
64
|
+
|
|
65
|
+
releasenotes/
|
|
66
|
+
notes/ # Reno release notes (YAML)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Code Style
|
|
70
|
+
|
|
71
|
+
- **Formatter**: black (line length 120)
|
|
72
|
+
- **Import sorting**: isort (single line, google style)
|
|
73
|
+
- **Linting**: flake8
|
|
74
|
+
- **Type checking**: mypy (strict settings enabled in setup.cfg)
|
|
75
|
+
|
|
76
|
+
### Type Annotations
|
|
77
|
+
|
|
78
|
+
All functions require complete type annotations. The mypy config enforces:
|
|
79
|
+
- `disallow_incomplete_defs = true`
|
|
80
|
+
- `disallow_untyped_decorators = true`
|
|
81
|
+
- `warn_return_any = true`
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
from typing import Any, Awaitable, Callable, Dict, List, Optional
|
|
85
|
+
|
|
86
|
+
async def handle_request(self, request: Request) -> web.Response:
|
|
87
|
+
...
|
|
88
|
+
|
|
89
|
+
def decode_payload(data: bytes, content_type: str) -> List[Dict[str, Any]]:
|
|
90
|
+
...
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Import Style
|
|
94
|
+
|
|
95
|
+
Imports are single-line, alphabetically ordered within groups:
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
# Standard library
|
|
99
|
+
import asyncio
|
|
100
|
+
import json
|
|
101
|
+
import logging
|
|
102
|
+
from typing import Any
|
|
103
|
+
from typing import Dict
|
|
104
|
+
from typing import List
|
|
105
|
+
from typing import Optional
|
|
106
|
+
|
|
107
|
+
# Third party
|
|
108
|
+
from aiohttp import web
|
|
109
|
+
from aiohttp.web import Request
|
|
110
|
+
import msgpack
|
|
111
|
+
|
|
112
|
+
# Local
|
|
113
|
+
from ddapm_test_agent.trace import Span
|
|
114
|
+
from ddapm_test_agent.trace import Trace
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Testing
|
|
118
|
+
|
|
119
|
+
Tests use pytest with aiohttp's pytest plugin. The `agent` fixture provides a test client.
|
|
120
|
+
|
|
121
|
+
### Test Style
|
|
122
|
+
|
|
123
|
+
- No docstrings in simple test functions (docstrings allowed for complex parametrized tests)
|
|
124
|
+
- Concise assertions with helpful error messages
|
|
125
|
+
- Use existing fixtures from `conftest.py`
|
|
126
|
+
- Async tests for HTTP endpoints
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
async def test_trace_put_v04(
|
|
130
|
+
agent,
|
|
131
|
+
v04_reference_http_trace_payload_headers,
|
|
132
|
+
v04_reference_http_trace_payload_data,
|
|
133
|
+
):
|
|
134
|
+
resp = await agent.put(
|
|
135
|
+
"/v0.4/traces",
|
|
136
|
+
headers=v04_reference_http_trace_payload_headers,
|
|
137
|
+
data=v04_reference_http_trace_payload_data,
|
|
138
|
+
)
|
|
139
|
+
assert resp.status == 200, await resp.text()
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
async def test_info(agent):
|
|
143
|
+
resp = await agent.get("/info")
|
|
144
|
+
assert resp.status == 200
|
|
145
|
+
data = await resp.json()
|
|
146
|
+
assert "version" in data
|
|
147
|
+
assert "endpoints" in data
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Key Fixtures (from conftest.py)
|
|
151
|
+
|
|
152
|
+
- `agent` - aiohttp test client connected to the test agent
|
|
153
|
+
- `v04_reference_http_trace_payload_data` - Sample v0.4 trace payload (msgpack)
|
|
154
|
+
- `v04_reference_http_trace_payload_headers` - Headers for trace requests
|
|
155
|
+
- `do_reference_v04_http_trace` - Helper function to send trace requests
|
|
156
|
+
- `snapshot_dir` - Temporary directory for snapshot tests
|
|
157
|
+
- `testagent` - Full subprocess test agent for integration tests
|
|
158
|
+
|
|
159
|
+
### Running Tests
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# All tests
|
|
163
|
+
python -m pytest tests/ -v
|
|
164
|
+
|
|
165
|
+
# Specific file
|
|
166
|
+
python -m pytest tests/test_agent.py -v
|
|
167
|
+
|
|
168
|
+
# Single test
|
|
169
|
+
python -m pytest tests/test_snapshot.py::test_snapshot_single_trace -v
|
|
170
|
+
|
|
171
|
+
# With coverage
|
|
172
|
+
python -m pytest tests/ --cov=ddapm_test_agent
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Key Concepts
|
|
176
|
+
|
|
177
|
+
### Session Tokens
|
|
178
|
+
|
|
179
|
+
Requests can be associated with a test session using tokens:
|
|
180
|
+
- Query param: `?test_session_token=my_test`
|
|
181
|
+
- Header: `X-Datadog-Test-Session-Token: my_test`
|
|
182
|
+
|
|
183
|
+
### Trace Formats
|
|
184
|
+
|
|
185
|
+
The agent supports multiple trace formats:
|
|
186
|
+
- v0.4: Standard msgpack format (most common)
|
|
187
|
+
- v0.5: Optimized format with string interning
|
|
188
|
+
- v0.7: Latest format with additional features
|
|
189
|
+
- v1: Legacy format
|
|
190
|
+
|
|
191
|
+
### Snapshot Testing
|
|
192
|
+
|
|
193
|
+
Characterization testing for traces:
|
|
194
|
+
1. Send traces to the agent
|
|
195
|
+
2. Call `/test/session/snapshot` to generate/compare snapshots
|
|
196
|
+
3. Snapshots are normalized JSON files
|
|
197
|
+
|
|
198
|
+
### VCR Proxy
|
|
199
|
+
|
|
200
|
+
Record and replay 3rd party API calls:
|
|
201
|
+
- Endpoint: `/vcr/{provider}/...`
|
|
202
|
+
- Supports: OpenAI, Azure OpenAI, Anthropic, AWS Bedrock, etc.
|
|
203
|
+
- Cassettes stored in `vcr-cassettes/` directory
|
|
204
|
+
|
|
205
|
+
## Adding New Endpoints
|
|
206
|
+
|
|
207
|
+
1. Add handler method to appropriate module (or `agent.py` for core endpoints)
|
|
208
|
+
2. Register route in `make_app()` or module's `get_routes()` method
|
|
209
|
+
3. Add tests following existing patterns
|
|
210
|
+
4. Create release note: `reno new <feature-name>`
|
|
211
|
+
|
|
212
|
+
### Handler Pattern
|
|
213
|
+
|
|
214
|
+
```python
|
|
215
|
+
async def handle_my_endpoint(self, request: Request) -> web.Response:
|
|
216
|
+
token = _session_token(request)
|
|
217
|
+
body = await request.json()
|
|
218
|
+
|
|
219
|
+
# Process request...
|
|
220
|
+
|
|
221
|
+
return web.json_response({"status": "ok"})
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Route Registration (in agent.py)
|
|
225
|
+
|
|
226
|
+
```python
|
|
227
|
+
# In make_app() function
|
|
228
|
+
app.router.add_route("GET", "/my/endpoint", agent.handle_my_endpoint)
|
|
229
|
+
app.router.add_route("POST", "/my/endpoint", agent.handle_my_endpoint)
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Release Notes
|
|
233
|
+
|
|
234
|
+
Use reno for release notes:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
reno new my-feature-name
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Edit the generated file in `releasenotes/notes/`:
|
|
241
|
+
|
|
242
|
+
```yaml
|
|
243
|
+
---
|
|
244
|
+
features:
|
|
245
|
+
- |
|
|
246
|
+
Add new endpoint for X functionality.
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Keep release notes concise (1-3 sentences).
|
|
250
|
+
|
|
251
|
+
## Common Patterns
|
|
252
|
+
|
|
253
|
+
### Decoding Payloads
|
|
254
|
+
|
|
255
|
+
```python
|
|
256
|
+
import msgpack
|
|
257
|
+
|
|
258
|
+
# msgpack (most trace payloads)
|
|
259
|
+
data = msgpack.unpackb(await request.read(), raw=False)
|
|
260
|
+
|
|
261
|
+
# JSON
|
|
262
|
+
data = await request.json()
|
|
263
|
+
|
|
264
|
+
# With content-type detection
|
|
265
|
+
content_type = request.content_type
|
|
266
|
+
if "msgpack" in content_type:
|
|
267
|
+
data = msgpack.unpackb(await request.read(), raw=False)
|
|
268
|
+
else:
|
|
269
|
+
data = await request.json()
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Session-Aware Data Access
|
|
273
|
+
|
|
274
|
+
```python
|
|
275
|
+
def _requests_by_session(self, token: Optional[str]) -> List[Request]:
|
|
276
|
+
if token is None:
|
|
277
|
+
return self._requests
|
|
278
|
+
return [r for r in self._requests if r.get("token") == token]
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Middleware Pattern
|
|
282
|
+
|
|
283
|
+
```python
|
|
284
|
+
from aiohttp.web import middleware
|
|
285
|
+
|
|
286
|
+
@middleware
|
|
287
|
+
async def my_middleware(request: Request, handler: _Handler) -> web.Response:
|
|
288
|
+
# Pre-processing
|
|
289
|
+
response = await handler(request)
|
|
290
|
+
# Post-processing
|
|
291
|
+
return response
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## Environment Variables
|
|
295
|
+
|
|
296
|
+
Key configuration options (see README.md for full list):
|
|
297
|
+
|
|
298
|
+
- `PORT` - HTTP port (default: 8126)
|
|
299
|
+
- `SNAPSHOT_DIR` - Snapshot storage directory
|
|
300
|
+
- `SNAPSHOT_CI` - Enable CI mode (fail if snapshot missing)
|
|
301
|
+
- `ENABLED_CHECKS` - Comma-separated list of trace checks
|
|
302
|
+
- `DD_AGENT_URL` - Proxy to real Datadog agent
|
|
303
|
+
- `LOG_LEVEL` - Logging level (DEBUG, INFO, WARNING, ERROR)
|
|
304
|
+
- `VCR_CASSETTES_DIRECTORY` - VCR cassette storage path
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ddapm-test-agent
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.40.0
|
|
4
4
|
Summary: Test agent for Datadog APM client libraries
|
|
5
5
|
Home-page: https://github.com/Datadog/dd-apm-test-agent
|
|
6
6
|
Author: Kyle Verhoog
|
|
@@ -140,6 +140,16 @@ At the trace-level, proxying can also be disabled by including the `X-Datadog-Ag
|
|
|
140
140
|
is handled, regardless of whether an agent URL is set.
|
|
141
141
|
|
|
142
142
|
|
|
143
|
+
### LLM Observability Proxy
|
|
144
|
+
|
|
145
|
+
The test agent provides a mechanism to dual ship LLM Observability events to Datadog, regardless of whether the Datadog agent is running.
|
|
146
|
+
If using the Datadog agent, set the `DD_AGENT_URL` environment variable or `--agent-url` command-line argument to the URL of the Datadog agent (see [Proxy](#proxy) for more details).
|
|
147
|
+
|
|
148
|
+
If not running a Datadog agent, set the `DD_SITE` environment variable or `--dd-site` command-line argument to the site of the Datadog instance to forward events to. Additionally, set the `DD_API_KEY` environment variable or `--dd-api-key` command-line argument to the API key to use for the Datadog instance.
|
|
149
|
+
|
|
150
|
+
To disable LLM Observability event forwarding, set the `DISABLE_LLMOBS_DATA_FORWARDING` environment variable or `--disable-llmobs-data-forwarding` command-line argument to `true`.
|
|
151
|
+
|
|
152
|
+
|
|
143
153
|
### Snapshot testing
|
|
144
154
|
|
|
145
155
|
The test agent provides a form of [characterization testing](https://en.wikipedia.org/wiki/Characterization_test) which
|
|
@@ -93,6 +93,16 @@ At the trace-level, proxying can also be disabled by including the `X-Datadog-Ag
|
|
|
93
93
|
is handled, regardless of whether an agent URL is set.
|
|
94
94
|
|
|
95
95
|
|
|
96
|
+
### LLM Observability Proxy
|
|
97
|
+
|
|
98
|
+
The test agent provides a mechanism to dual ship LLM Observability events to Datadog, regardless of whether the Datadog agent is running.
|
|
99
|
+
If using the Datadog agent, set the `DD_AGENT_URL` environment variable or `--agent-url` command-line argument to the URL of the Datadog agent (see [Proxy](#proxy) for more details).
|
|
100
|
+
|
|
101
|
+
If not running a Datadog agent, set the `DD_SITE` environment variable or `--dd-site` command-line argument to the site of the Datadog instance to forward events to. Additionally, set the `DD_API_KEY` environment variable or `--dd-api-key` command-line argument to the API key to use for the Datadog instance.
|
|
102
|
+
|
|
103
|
+
To disable LLM Observability event forwarding, set the `DISABLE_LLMOBS_DATA_FORWARDING` environment variable or `--disable-llmobs-data-forwarding` command-line argument to `true`.
|
|
104
|
+
|
|
105
|
+
|
|
96
106
|
### Snapshot testing
|
|
97
107
|
|
|
98
108
|
The test agent provides a form of [characterization testing](https://en.wikipedia.org/wiki/Characterization_test) which
|
|
@@ -53,6 +53,7 @@ from .checks import CheckTrace
|
|
|
53
53
|
from .checks import Checks
|
|
54
54
|
from .checks import start_trace
|
|
55
55
|
from .integration import Integration
|
|
56
|
+
from .llmobs_event_platform import LLMObsEventPlatformAPI
|
|
56
57
|
from .logs import LOGS_ENDPOINT
|
|
57
58
|
from .logs import OTLPLogsGRPCServicer
|
|
58
59
|
from .logs import decode_logs_request
|
|
@@ -209,7 +210,7 @@ async def _prepare_and_send_request(data: bytes, request: Request, headers: Mapp
|
|
|
209
210
|
log.info("Forwarding request to agent at %r", full_agent_url)
|
|
210
211
|
log.debug(f"Using headers: {headers}")
|
|
211
212
|
|
|
212
|
-
|
|
213
|
+
client_response, body = await _forward_request(data, headers, full_agent_url)
|
|
213
214
|
return web.Response(
|
|
214
215
|
status=client_response.status,
|
|
215
216
|
headers=client_response.headers,
|
|
@@ -805,6 +806,34 @@ class Agent:
|
|
|
805
806
|
raise web.HTTPBadRequest(text=msg)
|
|
806
807
|
|
|
807
808
|
async def handle_evp_proxy_v2_api_v2_llmobs(self, request: Request) -> web.Response:
|
|
809
|
+
if request.app["disable_llmobs_data_forwarding"]:
|
|
810
|
+
return web.HTTPOk()
|
|
811
|
+
|
|
812
|
+
dd_site = request.app["dd_site"]
|
|
813
|
+
dd_api_key = request.app["dd_api_key"]
|
|
814
|
+
agent_url = request.app["agent_url"]
|
|
815
|
+
headers = request.headers.copy()
|
|
816
|
+
if agent_url:
|
|
817
|
+
url = f"{agent_url}/evp_proxy/v2/api/v2/llmobs" # use configured agent URL if provided
|
|
818
|
+
elif dd_api_key is None:
|
|
819
|
+
log.error("No DD_API_KEY set to forward LLM Observability events to Datadog. Skipping forwarding.")
|
|
820
|
+
return web.HTTPOk()
|
|
821
|
+
elif not dd_site:
|
|
822
|
+
log.error("No DD_SITE set to forward LLM Observability events to Datadog. Skipping forwarding.")
|
|
823
|
+
return web.HTTPOk()
|
|
824
|
+
else:
|
|
825
|
+
url = f"https://llmobs-intake.{dd_site}/api/v2/llmobs"
|
|
826
|
+
headers["DD-API-KEY"] = dd_api_key
|
|
827
|
+
|
|
828
|
+
async with ClientSession() as session:
|
|
829
|
+
async with session.post(url, headers=headers, data=await request.read()) as resp:
|
|
830
|
+
if not resp.ok:
|
|
831
|
+
log.warning(
|
|
832
|
+
f"Failed to forward LLM Observability events to Datadog: {resp.status} {await resp.text()}"
|
|
833
|
+
)
|
|
834
|
+
else:
|
|
835
|
+
log.info(f"Forwarded LLM Observability events to Datadog: {resp.status} {await resp.text()}")
|
|
836
|
+
|
|
808
837
|
return web.HTTPOk()
|
|
809
838
|
|
|
810
839
|
async def handle_evp_proxy_v2_llmobs_eval_metric(self, request: Request) -> web.Response:
|
|
@@ -881,9 +910,20 @@ class Agent:
|
|
|
881
910
|
return web.HTTPAccepted()
|
|
882
911
|
|
|
883
912
|
async def handle_info(self, request: Request) -> web.Response:
|
|
913
|
+
# CORS headers for cross-origin requests from Datadog UI
|
|
914
|
+
headers = {
|
|
915
|
+
"Access-Control-Allow-Origin": "*",
|
|
916
|
+
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
|
917
|
+
"Access-Control-Allow-Headers": "Content-Type",
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
# Handle OPTIONS preflight
|
|
921
|
+
if request.method == "OPTIONS":
|
|
922
|
+
return web.Response(status=200, headers=headers)
|
|
923
|
+
|
|
884
924
|
return web.json_response(
|
|
885
925
|
{
|
|
886
|
-
"version": "test",
|
|
926
|
+
"version": os.environ.get("TEST_AGENT_VERSION", "test"),
|
|
887
927
|
"endpoints": [
|
|
888
928
|
"/v0.4/traces",
|
|
889
929
|
"/v0.5/traces",
|
|
@@ -902,6 +942,7 @@ class Agent:
|
|
|
902
942
|
"peer_tags": ["db.name", "mongodb.db", "messaging.system"],
|
|
903
943
|
"span_events": True, # Advertise support for the top-level Span field for Span Events
|
|
904
944
|
},
|
|
945
|
+
headers=headers,
|
|
905
946
|
)
|
|
906
947
|
|
|
907
948
|
async def _handle_traces(self, request: Request, version: Literal["v0.4", "v0.5", "v0.7", "v1"]) -> web.Response:
|
|
@@ -1601,6 +1642,9 @@ def make_app(
|
|
|
1601
1642
|
vcr_ci_mode: bool,
|
|
1602
1643
|
vcr_provider_map: str,
|
|
1603
1644
|
vcr_ignore_headers: str,
|
|
1645
|
+
dd_site: str,
|
|
1646
|
+
dd_api_key: str | None,
|
|
1647
|
+
disable_llmobs_data_forwarding: bool,
|
|
1604
1648
|
enable_web_ui: bool = False,
|
|
1605
1649
|
) -> web.Application:
|
|
1606
1650
|
agent = Agent()
|
|
@@ -1650,6 +1694,7 @@ def make_app(
|
|
|
1650
1694
|
web.post("/evp_proxy/v2/api/v2/exposures", agent.handle_evp_proxy_v2_api_v2_exposures),
|
|
1651
1695
|
web.post("/evp_proxy/v4/api/v2/errorsintake", agent.handle_evp_proxy_v4_api_v2_errorsintake),
|
|
1652
1696
|
web.get("/info", agent.handle_info),
|
|
1697
|
+
web.options("/info", agent.handle_info),
|
|
1653
1698
|
web.get("/test/session/start", agent.handle_session_start),
|
|
1654
1699
|
web.get("/test/session/clear", agent.handle_session_clear),
|
|
1655
1700
|
web.get("/test/session/snapshot", agent.handle_snapshot),
|
|
@@ -1682,6 +1727,12 @@ def make_app(
|
|
|
1682
1727
|
),
|
|
1683
1728
|
]
|
|
1684
1729
|
)
|
|
1730
|
+
|
|
1731
|
+
# Add LLM Observability Event Platform API routes
|
|
1732
|
+
# These provide Datadog Event Platform compatible endpoints for local development
|
|
1733
|
+
llmobs_event_platform_api = LLMObsEventPlatformAPI(agent)
|
|
1734
|
+
app.add_routes(llmobs_event_platform_api.get_routes())
|
|
1735
|
+
|
|
1685
1736
|
checks = Checks(
|
|
1686
1737
|
checks=[
|
|
1687
1738
|
CheckMetaTracerVersionHeader,
|
|
@@ -1707,6 +1758,9 @@ def make_app(
|
|
|
1707
1758
|
app["snapshot_removed_attrs"] = snapshot_removed_attrs
|
|
1708
1759
|
app["snapshot_regex_placeholders"] = snapshot_regex_placeholders
|
|
1709
1760
|
app["vcr_cassettes_directory"] = vcr_cassettes_directory
|
|
1761
|
+
app["dd_site"] = dd_site
|
|
1762
|
+
app["dd_api_key"] = dd_api_key
|
|
1763
|
+
app["disable_llmobs_data_forwarding"] = disable_llmobs_data_forwarding
|
|
1710
1764
|
return app
|
|
1711
1765
|
|
|
1712
1766
|
|
|
@@ -2010,6 +2064,24 @@ def main(args: Optional[List[str]] = None) -> None:
|
|
|
2010
2064
|
default=int(os.environ.get("MAX_REQUESTS", 200)),
|
|
2011
2065
|
help="Maximum number of requests to keep in memory for the UI (default: 200). Older requests are discarded when limit is reached.",
|
|
2012
2066
|
)
|
|
2067
|
+
parser.add_argument(
|
|
2068
|
+
"--dd-site",
|
|
2069
|
+
type=str,
|
|
2070
|
+
default=os.environ.get("DD_SITE", "datadoghq.com"),
|
|
2071
|
+
help="Datadog site to use for the agent. Example: --dd-site=datadoghq.com",
|
|
2072
|
+
)
|
|
2073
|
+
parser.add_argument(
|
|
2074
|
+
"--dd-api-key",
|
|
2075
|
+
type=str,
|
|
2076
|
+
default=os.environ.get("DD_API_KEY", ""),
|
|
2077
|
+
help="Datadog API key to use for the agent. Example: --dd-api-key=1234567890",
|
|
2078
|
+
)
|
|
2079
|
+
parser.add_argument(
|
|
2080
|
+
"--disable-llmobs-data-forwarding",
|
|
2081
|
+
action="store_true",
|
|
2082
|
+
default=os.environ.get("DISABLE_LLMOBS_DATA_FORWARDING", "").lower() in ("true", "1", "yes"),
|
|
2083
|
+
help="Disable data forwarding to Datadog.",
|
|
2084
|
+
)
|
|
2013
2085
|
parsed_args = parser.parse_args(args=args)
|
|
2014
2086
|
logging.basicConfig(level=parsed_args.log_level)
|
|
2015
2087
|
|
|
@@ -2056,6 +2128,9 @@ def main(args: Optional[List[str]] = None) -> None:
|
|
|
2056
2128
|
vcr_ci_mode=parsed_args.vcr_ci_mode,
|
|
2057
2129
|
vcr_provider_map=parsed_args.vcr_provider_map,
|
|
2058
2130
|
vcr_ignore_headers=parsed_args.vcr_ignore_headers,
|
|
2131
|
+
dd_site=parsed_args.dd_site,
|
|
2132
|
+
dd_api_key=parsed_args.dd_api_key,
|
|
2133
|
+
disable_llmobs_data_forwarding=parsed_args.disable_llmobs_data_forwarding,
|
|
2059
2134
|
enable_web_ui=parsed_args.web_ui_port > 0,
|
|
2060
2135
|
)
|
|
2061
2136
|
|