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.
Files changed (298) hide show
  1. ddapm_test_agent-1.40.0/CLAUDE.md +304 -0
  2. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/PKG-INFO +11 -1
  3. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/README.md +10 -0
  4. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/agent.py +77 -2
  5. ddapm_test_agent-1.40.0/ddapm_test_agent/llmobs_event_platform.py +997 -0
  6. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/vcr_proxy.py +2 -1
  7. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/PKG-INFO +11 -1
  8. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/SOURCES.txt +8 -0
  9. ddapm_test_agent-1.40.0/releasenotes/notes/add-llmobs-data-forwarding-083ec4e3ca7100b3.yaml +5 -0
  10. ddapm_test_agent-1.40.0/releasenotes/notes/controllable-test-agent-version-a12e61934bbce5fe.yaml +4 -0
  11. ddapm_test_agent-1.40.0/releasenotes/notes/ignore-transfer-encoding-header-3b22699615356f91.yaml +5 -0
  12. ddapm_test_agent-1.40.0/releasenotes/notes/llmobs-event-platform-api-a816ea44d81f4345.yaml +6 -0
  13. ddapm_test_agent-1.40.0/releasenotes/notes/llmobs-facet-filter-query-support-a3ac0c9f87d759d5.yaml +5 -0
  14. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/conftest.py +21 -0
  15. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_agent.py +15 -0
  16. ddapm_test_agent-1.40.0/tests/test_llmobs_event_platform.py +358 -0
  17. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_vcr_proxy.py +7 -0
  18. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.dockerignore +0 -0
  19. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.github/workflows/docker.yml +0 -0
  20. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.github/workflows/main.yml +0 -0
  21. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.github/workflows/publish_pypi.yml +0 -0
  22. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.github/workflows/releasenote.yml +0 -0
  23. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/.gitignore +0 -0
  24. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/Dockerfile +0 -0
  25. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/Dockerfile.windows +0 -0
  26. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/LICENSE.BSD3 +0 -0
  27. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/LICENSE.apache2 +0 -0
  28. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/__init__.py +0 -0
  29. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/apmtelemetry.py +0 -0
  30. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/checks.py +0 -0
  31. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/client.py +0 -0
  32. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/cmd.py +0 -0
  33. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/context.py +0 -0
  34. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/fmt.py +0 -0
  35. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/integration.py +0 -0
  36. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/logs.py +0 -0
  37. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/metrics.py +0 -0
  38. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/remoteconfig.py +0 -0
  39. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/static/style.css +0 -0
  40. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/base.html +0 -0
  41. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/config.html +0 -0
  42. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/dashboard.html +0 -0
  43. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/macros.html +0 -0
  44. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/requests.html +0 -0
  45. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/session_detail.html +0 -0
  46. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/sessions.html +0 -0
  47. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/snapshot_detail.html +0 -0
  48. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/snapshots.html +0 -0
  49. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/trace_detail.html +0 -0
  50. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/tracer_flares.html +0 -0
  51. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/templates/traces.html +0 -0
  52. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/trace.py +0 -0
  53. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/trace_checks.py +0 -0
  54. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/trace_snapshot.py +0 -0
  55. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/tracerflare.py +0 -0
  56. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/tracestats.py +0 -0
  57. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/tracestats_snapshot.py +0 -0
  58. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent/web.py +0 -0
  59. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/dependency_links.txt +0 -0
  60. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/entry_points.txt +0 -0
  61. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/not-zip-safe +0 -0
  62. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/requires.txt +0 -0
  63. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/ddapm_test_agent.egg-info/top_level.txt +0 -0
  64. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/pyproject.toml +0 -0
  65. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/check-releasenotes +0 -0
  66. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/config.yaml +0 -0
  67. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/1.0-e192f5064e917083.yaml +0 -0
  68. {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
  69. {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
  70. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/Checks-changed-to-opt-in-8716cac4ecdbb1c2.yaml +0 -0
  71. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/SNAPSHOT_REGEX_PLACEHOLDERS-1d2c5e2711d1953b.yaml +0 -0
  72. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/SNAPSHOT_REGEX_PLACEHOLDERS-compare-c829e7a4df4fa1f4.yaml +0 -0
  73. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/Settings-endpoint-928ae5b6e8ddc625.yaml +0 -0
  74. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/Telemetry-requests-delay-2586180b286ce393.yaml +0 -0
  75. {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
  76. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/acceptV1TracePayloads-5435cff37cfb6a85.yaml +0 -0
  77. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-datadog-proxy-7e2e608c101a564b.yaml +0 -0
  78. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-distributed-trace-c35a314698a3b966.yaml +0 -0
  79. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-errors-intake-proxy-endpoint-7e0f31d72a130f1a.yaml +0 -0
  80. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-feature-flags-evp-endpoint-da7786735ac02f50.yaml +0 -0
  81. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-fmt-command-cc31769942a5fec3.yaml +0 -0
  82. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-nix-build-support-29dc8a347e3bd7c1.yaml +0 -0
  83. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-optional-json-parser-10aac54bd1cbe322.yaml +0 -0
  84. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-otel-metrics-support-a2ebeb28cae2f0ba.yaml +0 -0
  85. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-python-3.13-support-ae7b96f4a10f20f4.yaml +0 -0
  86. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-rcm-endpoints-7e1f949e83e21039.yaml +0 -0
  87. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-request-forwarding-middleware-d3f325166b0f8e9e.yaml +0 -0
  88. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-service-naming-checks-2b68ff51d1b5496d.yaml +0 -0
  89. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-session-to-rcm-endpoints-d97e925a04a99a65.yaml +0 -0
  90. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-span-events-306e697168373899.yaml +0 -0
  91. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-support-for-plain-text-responses-00d20bf7b335e75b.yaml +0 -0
  92. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-support-telemetry-requests-10737cd3da802ca6.yaml +0 -0
  93. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-tracer_flare-endpoint-b2c81510920974d7.yaml +0 -0
  94. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/add-web-ui-304c84316f2b4818.yaml +0 -0
  95. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/addAgentStateToInfo-f9a179ce88f2ab9e.yaml +0 -0
  96. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/addPeerTagsToInfo-4ccc2539d22c2993.yaml +0 -0
  97. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/allow-attribute-removal-snapshots-314b744b043b97c5.yaml +0 -0
  98. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/args-88f664c83a96075d.yaml +0 -0
  99. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/change-trace-proxy-headers-f9fcbb4efc4fcb95.yaml +0 -0
  100. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/check-http-header-sensitivity-daaa9d9595ae86d6.yaml +0 -0
  101. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/clearing-sessions-now-only-removes-6b0311673d8b37aa.yaml +0 -0
  102. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/client-173dbc6655e42337.yaml +0 -0
  103. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/content_length-e1bab75580aa1dcb.yaml +0 -0
  104. {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
  105. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/docker-arm64-images-a4b6b2cc527327d6.yaml +0 -0
  106. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/evp-proxy-on-info-d65cd077575306ca.yaml +0 -0
  107. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/exception-messages-21ee64461020edd1.yaml +0 -0
  108. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-docker-image-tags-785d40f5bfdb8003.yaml +0 -0
  109. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-fmt-logging-6a323fd8d5d4eb28.yaml +0 -0
  110. {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
  111. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-matching-319744b82d2514c1.yaml +0 -0
  112. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-missing-slim-deps-fa3b0fc0292a09b3.yaml +0 -0
  113. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-otlp-endpoint-response-type-18822a3ac85e1cb7.yaml +0 -0
  114. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-partial-chunks-0db14ce3017e6173.yaml +0 -0
  115. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-racecondition-9bd0ef15b7da60fa.yaml +0 -0
  116. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/fix-tracerflare-request-parsing-fae18ff9997c216d.yaml +0 -0
  117. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/genai-vcr-support-b499ec54df84eaa3.yaml +0 -0
  118. {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
  119. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/image-optimization-d614eccb59441217.yaml +0 -0
  120. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/improve-test-agent-debugging-5759413f1fc5f7fa.yaml +0 -0
  121. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/improve-test-agent-proxying-a207f0fc81b3ab2d.yaml +0 -0
  122. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/improve-trace-check-results-endpoints-6ab4132628520793.yaml +0 -0
  123. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/info-34dcd9cbcc382487.yaml +0 -0
  124. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/info-drop-p0s-c207889f590340fb.yaml +0 -0
  125. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/llmobs-eval-metric-endpoint-8b5222491969ab4f.yaml +0 -0
  126. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/llmobs-evp-proxy-1383f4b4962ac7c9.yaml +0 -0
  127. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/meta-struct-2cce08475cb05470.yaml +0 -0
  128. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/more-oai-cass-908eb5ea46bd2985.yaml +0 -0
  129. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/named-pipe-ded0ebbbeee2e7fa.yaml +0 -0
  130. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/new-process-id-tag-f0ab0daf652e05cc.yaml +0 -0
  131. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/oai-incomplete-cass-795ad19b6a226c1f.yaml +0 -0
  132. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/otlp-logs-grpc-45365879c22969aa.yaml +0 -0
  133. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/otlp-logs-support-d5a150d9f5304d7c.yaml +0 -0
  134. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/pipeline_stats_endpoint-e8ad6da735dc2647.yaml +0 -0
  135. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/profiling-endpoint-0cd209e4e5b6cfc0.yaml +0 -0
  136. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/provider-snapshot-server-f6a307acbf11d214.yaml +0 -0
  137. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/proxy-37c94e2fb428c6fc.yaml +0 -0
  138. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/python-3.12-952e06c6158af67d.yaml +0 -0
  139. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/python-support-1c447acc4607abc7.yaml +0 -0
  140. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/python310-025fbc190363de98.yaml +0 -0
  141. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/python310-docker-image-d4e329cfecf6510e.yaml +0 -0
  142. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/rc-encoding-length-fix-cc011edea7f8f5b2.yaml +0 -0
  143. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/rc-get-endpoint-e502f55b7df544e2.yaml +0 -0
  144. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remoteconfig-requests-1af7abb99c61c069.yaml +0 -0
  145. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remove-agent-state-header-from-info-87f920bf4ce5785c.yaml +0 -0
  146. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remove-nix-ec1c4aca7dc002c4.yaml +0 -0
  147. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remove-old-pythons-4667b182aacf0ce6.yaml +0 -0
  148. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/remove-vcr-dependancy-ea09889df42b3975.yaml +0 -0
  149. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/reuse-session-1670aa569907cf68.yaml +0 -0
  150. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/sample-rate-1e06ae4cdc933b14.yaml +0 -0
  151. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/session-requests-b8057811f976220e.yaml +0 -0
  152. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/session-tracerflares-400ce9b3d3838b40.yaml +0 -0
  153. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-cmds-de4a561911afee11.yaml +0 -0
  154. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-empty-maps-2cbe8cea3e7112fa.yaml +0 -0
  155. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-error-messages-de41d9e3207fa30a.yaml +0 -0
  156. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-filename-c068de1bc3e50c04.yaml +0 -0
  157. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-order-type-2d6424e380b2c88f.yaml +0 -0
  158. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/snapshot-parent-id-7abb860008702e70.yaml +0 -0
  159. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/span-links-1ec76bd2b47a3880.yaml +0 -0
  160. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/span-ordering-1a7b383aa015bddc.yaml +0 -0
  161. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/span-parent-id-a4d7d63fa623361c.yaml +0 -0
  162. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/support-ant-vcr-1eff9a40caa0aba0.yaml +0 -0
  163. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/support-tracking-of-tested-integrations-ac19ccd1f8333c00.yaml +0 -0
  164. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/throttling-590bf58ecb3cc4a5.yaml +0 -0
  165. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/trace-stats-97da3a478dabfa99.yaml +0 -0
  166. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/trace-stats-snapshot-718ca37385c93e1e.yaml +0 -0
  167. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/traces-endpoint-f4f9c1d94d6ceda2.yaml +0 -0
  168. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/tracestats-fixes-07152c708e73ef96.yaml +0 -0
  169. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/tracestats-post-65ce788f81862532.yaml +0 -0
  170. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/tracestats-service-2a0a178cbd21b07d.yaml +0 -0
  171. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/uds-64b11960931d8b77.yaml +0 -0
  172. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/uds-c99ea5d099e67156.yaml +0 -0
  173. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/uds-container-8138f8b1438b1a0a.yaml +0 -0
  174. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/uds-permissions-903266ac6445b873.yaml +0 -0
  175. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/v0.5-traces-cf469b0b71398d97.yaml +0 -0
  176. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/v0.7-traces-7ea3ebbed7502d01.yaml +0 -0
  177. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-aws-bedrock-proxy-3bf018b1712d5105.yaml +0 -0
  178. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-cassette-name-middleware-fix-9e47c395892a9fe7.yaml +0 -0
  179. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-cassettes-for-openai-v5-6e9d78091de1f0c2.yaml +0 -0
  180. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-cassettes-for-vercel-ai-7a8275f9c2b48bc7.yaml +0 -0
  181. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-ci-mode-99dbd2940fff8d7a.yaml +0 -0
  182. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-custom-providers-map-a43b7e2d62d02015.yaml +0 -0
  183. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-prefix-instead-of-suffix-4c56dcb5038d222e.yaml +0 -0
  184. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-proxy-aws-recalculation-fix-2184c10270a7bca5.yaml +0 -0
  185. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-proxy-use-test-name-bugfix-be758294ba30ac78.yaml +0 -0
  186. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-proxy-use-test-name-e47891994c961c52.yaml +0 -0
  187. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/vcr-support-querystring-b06555fb9a7c90ae.yaml +0 -0
  188. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/version-0c32d2752f154eb9.yaml +0 -0
  189. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/wheels-68a7dc2f4b00e0c4.yaml +0 -0
  190. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/releasenotes/notes/windows-docker-image-1f5d5e894558bb4b.yaml +0 -0
  191. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/riotfile.py +0 -0
  192. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/setup.cfg +0 -0
  193. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/setup.py +0 -0
  194. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/test_deps.txt +0 -0
  195. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/__init__.py +0 -0
  196. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_multi_trace.json +0 -0
  197. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_single_trace.json +0 -0
  198. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_distributed_propagated.json +0 -0
  199. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_distributed_same_payload.json +0 -0
  200. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_missing_received.json +0 -0
  201. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_stats.json +0 -0
  202. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/integration_snapshots/test_trace_stats_tracestats.json +0 -0
  203. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_apmtelemetry.py +0 -0
  204. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_checks.py +0 -0
  205. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_client.py +0 -0
  206. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_container.py +0 -0
  207. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_logs.py +0 -0
  208. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_metrics.py +0 -0
  209. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_remoteconfig.py +0 -0
  210. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_session.py +0 -0
  211. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_snapshot.py +0 -0
  212. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_snapshot_integration.py +0 -0
  213. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_trace.py +0 -0
  214. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_tracerflare.py +0 -0
  215. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/test_tracestats.py +0 -0
  216. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/tests/trace_utils.py +0 -0
  217. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_26d618ee.yaml +0 -0
  218. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_595f439c.yaml +0 -0
  219. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_717ba0b4.yaml +0 -0
  220. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/anthropic/anthropic_v1_messages_post_a1af2c12.yaml +0 -0
  221. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/deepseek/deepseek_chat_completions_post_afb6ccab.yaml +0 -0
  222. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_audio_transcriptions_post_173af3e5.yaml +0 -0
  223. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_audio_transcriptions_post_71305a25.yaml +0 -0
  224. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_audio_translations_post_d5b5b8d6.yaml +0 -0
  225. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_audio_translations_post_dd92a18a.yaml +0 -0
  226. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_0f1514e1.yaml +0 -0
  227. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_172294b4.yaml +0 -0
  228. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_193ae44a.yaml +0 -0
  229. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_23558eed.yaml +0 -0
  230. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_2edb59ae.yaml +0 -0
  231. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_3517e44e.yaml +0 -0
  232. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_36bdc0cb.yaml +0 -0
  233. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_3c045664.yaml +0 -0
  234. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_432a8e46.yaml +0 -0
  235. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_4749eff9.yaml +0 -0
  236. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_4dce8db6.yaml +0 -0
  237. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_57612363.yaml +0 -0
  238. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_649d8162.yaml +0 -0
  239. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_655a8ef2.yaml +0 -0
  240. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_66dfc80e.yaml +0 -0
  241. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_67e8e833.yaml +0 -0
  242. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_6df851cc.yaml +0 -0
  243. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_7c2d1ac5.yaml +0 -0
  244. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_82a4bb3c.yaml +0 -0
  245. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_9122b1ae.yaml +0 -0
  246. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_917478d0.yaml +0 -0
  247. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_a73ecd7a.yaml +0 -0
  248. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_a925b737.yaml +0 -0
  249. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_ae4728c2.yaml +0 -0
  250. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_b29f1a87.yaml +0 -0
  251. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_ce69ed91.yaml +0 -0
  252. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_d8fb132a.yaml +0 -0
  253. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_d94d5844.yaml +0 -0
  254. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_d98ce00d.yaml +0 -0
  255. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_chat_completions_post_ebff79da.yaml +0 -0
  256. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_33681ea4.yaml +0 -0
  257. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_5d2418d4.yaml +0 -0
  258. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_619dee1c.yaml +0 -0
  259. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_6224acff.yaml +0 -0
  260. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_87f617af.yaml +0 -0
  261. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_98c30019.yaml +0 -0
  262. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_9bb49464.yaml +0 -0
  263. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_completions_post_b24dbf7d.yaml +0 -0
  264. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_embeddings_post_0381abe4.yaml +0 -0
  265. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_embeddings_post_48694087.yaml +0 -0
  266. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_embeddings_post_541bd4d0.yaml +0 -0
  267. {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
  268. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_delete_3ee48409.yaml +0 -0
  269. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_file-RpTpuvRVtnKpdKZb7DDGto_get_1afefb93.yaml +0 -0
  270. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_get_68efa25d.yaml +0 -0
  271. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_post_2fcf9545.yaml +0 -0
  272. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_files_post_957d63ba.yaml +0 -0
  273. {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
  274. {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
  275. {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
  276. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_get_ebc57c6f.yaml +0 -0
  277. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_fine_tuning_jobs_post_c3b6e4a9.yaml +0 -0
  278. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_075386c4.yaml +0 -0
  279. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_57b4f4da.yaml +0 -0
  280. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_660e9dd7.yaml +0 -0
  281. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_993e0192.yaml +0 -0
  282. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_a2f1eb43.yaml +0 -0
  283. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_ae72c45f.yaml +0 -0
  284. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_cf5af376.yaml +0 -0
  285. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_edits_post_dbefb624.yaml +0 -0
  286. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_generations_post_48272841.yaml +0 -0
  287. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_generations_post_736070ea.yaml +0 -0
  288. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_variations_post_5971e285.yaml +0 -0
  289. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_images_variations_post_f2f62f6c.yaml +0 -0
  290. {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
  291. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_models_get_e04cf04b.yaml +0 -0
  292. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_models_gpt-4_get_b13c5b23.yaml +0 -0
  293. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_moderations_post_532b3315.yaml +0 -0
  294. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_responses_post_33fb1f66.yaml +0 -0
  295. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_responses_post_5ca556ec.yaml +0 -0
  296. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_responses_post_c05c936e.yaml +0 -0
  297. {ddapm_test_agent-1.38.0 → ddapm_test_agent-1.40.0}/vcr-cassettes/openai/openai_responses_post_c61e3067.yaml +0 -0
  298. {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.38.0
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
- (client_response, body) = await _forward_request(data, headers, full_agent_url)
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