-
Notifications
You must be signed in to change notification settings - Fork 449
chore(openai): fix responses reasoning token metric tracking support for streaming #14072
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
Bootstrap import analysisComparison of import times between this PR and base. SummaryThe average import time from this PR is: 282 ± 5 ms. The average import time from base is: 289 ± 8 ms. The import time difference between this PR and base is: -7.8 ± 0.3 ms. Import time breakdownThe following import paths have shrunk:
|
…g/dd-trace-py into sabrenner/use-get-attr-token-util
Performance SLOsPerformance SLOsBenchmark execution time: 2025-07-18 21:04:02 Comparing candidate commit 5cdcc5d in branch coreapiscenario-context_with_data_listeners
coreapiscenario-context_with_data_no_listeners
coreapiscenario-context_with_data_only_all_listeners
coreapiscenario-get_item_exists
coreapiscenario-get_item_missing
coreapiscenario-set_item
djangosimple-appsec
djangosimple-exception-replay-enabled
djangosimple-iast
djangosimple-profiler
djangosimple-span-code-origin
djangosimple-tracer
djangosimple-tracer-and-profiler
djangosimple-tracer-no-caches
djangosimple-tracer-no-databases
djangosimple-tracer-no-middleware
djangosimple-tracer-no-templates
errortrackingdjangosimple-errortracking-enabled-all
errortrackingdjangosimple-errortracking-enabled-user
errortrackingdjangosimple-tracer-enabled
errortrackingflasksqli-errortracking-enabled-all
errortrackingflasksqli-errortracking-enabled-user
errortrackingflasksqli-tracer-enabled
flasksimple-appsec-get
flasksimple-appsec-post
flasksimple-appsec-telemetry
flasksimple-debugger
flasksimple-iast-get
flasksimple-profiler
flasksimple-tracer
flasksqli-appsec-enabled
flasksqli-iast-enabled
flasksqli-tracer-enabled
httppropagationextract-all_styles_all_headers
httppropagationextract-b3_headers
httppropagationextract-b3_single_headers
httppropagationextract-datadog_tracecontext_tracestate_not_propagated_on_trace_id_no_match
httppropagationextract-datadog_tracecontext_tracestate_propagated_on_trace_id_match
httppropagationextract-empty_headers
httppropagationextract-full_t_id_datadog_headers
httppropagationextract-invalid_priority_header
httppropagationextract-invalid_span_id_header
httppropagationextract-invalid_tags_header
httppropagationextract-invalid_trace_id_header
httppropagationextract-large_header_no_matches
httppropagationextract-large_valid_headers_all
httppropagationextract-medium_header_no_matches
httppropagationextract-medium_valid_headers_all
httppropagationextract-none_propagation_style
httppropagationextract-tracecontext_headers
httppropagationextract-valid_headers_all
httppropagationextract-valid_headers_basic
httppropagationextract-wsgi_empty_headers
httppropagationextract-wsgi_invalid_priority_header
httppropagationextract-wsgi_invalid_span_id_header
httppropagationextract-wsgi_invalid_tags_header
httppropagationextract-wsgi_invalid_trace_id_header
httppropagationextract-wsgi_large_header_no_matches
httppropagationextract-wsgi_large_valid_headers_all
httppropagationextract-wsgi_medium_header_no_matches
httppropagationextract-wsgi_medium_valid_headers_all
httppropagationextract-wsgi_valid_headers_all
httppropagationextract-wsgi_valid_headers_basic
httppropagationinject-ids_only
httppropagationinject-with_all
httppropagationinject-with_dd_origin
httppropagationinject-with_priority_and_origin
httppropagationinject-with_sampling_priority
httppropagationinject-with_tags
httppropagationinject-with_tags_invalid
httppropagationinject-with_tags_max_size
iast_aspects-re_expand_aspect
iast_aspects-re_expand_noaspect
iast_aspects-re_findall_aspect
iast_aspects-re_findall_noaspect
iast_aspects-re_finditer_aspect
iast_aspects-re_finditer_noaspect
iast_aspects-re_fullmatch_aspect
iast_aspects-re_fullmatch_noaspect
iast_aspects-re_group_aspect
iast_aspects-re_group_noaspect
iast_aspects-re_groups_aspect
iast_aspects-re_groups_noaspect
iast_aspects-re_match_aspect
iast_aspects-re_match_noaspect
iast_aspects-re_search_aspect
iast_aspects-re_search_noaspect
iast_aspects-re_sub_aspect
iast_aspects-re_sub_noaspect
iast_aspects-re_subn_aspect
iast_aspects-re_subn_noaspect
iastaspects-add_aspect
iastaspects-add_inplace_aspect
iastaspects-add_inplace_noaspect
iastaspects-add_noaspect
iastaspects-bytearray_aspect
iastaspects-bytearray_extend_aspect
iastaspects-bytearray_extend_noaspect
iastaspects-bytearray_noaspect
iastaspects-bytes_aspect
iastaspects-bytes_noaspect
iastaspects-bytesio_aspect
iastaspects-bytesio_noaspect
iastaspects-capitalize_aspect
iastaspects-capitalize_noaspect
iastaspects-casefold_aspect
iastaspects-casefold_noaspect
iastaspects-decode_aspect
iastaspects-decode_noaspect
iastaspects-encode_aspect
iastaspects-encode_noaspect
iastaspects-format_aspect
iastaspects-format_map_aspect
iastaspects-format_map_noaspect
iastaspects-format_noaspect
iastaspects-index_aspect
iastaspects-index_noaspect
iastaspects-join_aspect
iastaspects-join_noaspect
iastaspects-ljust_aspect
iastaspects-ljust_noaspect
iastaspects-lower_aspect
iastaspects-lower_noaspect
iastaspects-lstrip_aspect
iastaspects-lstrip_noaspect
iastaspects-modulo_aspect
iastaspects-modulo_aspect_for_bytearray_bytearray
iastaspects-modulo_aspect_for_bytes
iastaspects-modulo_aspect_for_bytes_bytearray
iastaspects-modulo_noaspect
iastaspects-replace_aspect
iastaspects-replace_noaspect
iastaspects-repr_aspect
iastaspects-repr_noaspect
iastaspects-rstrip_aspect
iastaspects-rstrip_noaspect
iastaspects-slice_aspect
iastaspects-slice_noaspect
iastaspects-stringio_aspect
iastaspects-stringio_noaspect
iastaspects-strip_aspect
iastaspects-strip_noaspect
iastaspects-swapcase_aspect
iastaspects-swapcase_noaspect
iastaspects-title_aspect
iastaspects-title_noaspect
iastaspects-translate_aspect
iastaspects-translate_noaspect
iastaspects-upper_aspect
iastaspects-upper_noaspect
iastaspectsospath-ospathbasename_aspect
iastaspectsospath-ospathbasename_noaspect
iastaspectsospath-ospathjoin_aspect
iastaspectsospath-ospathjoin_noaspect
iastaspectsospath-ospathnormcase_aspect
iastaspectsospath-ospathnormcase_noaspect
iastaspectsospath-ospathsplit_aspect
iastaspectsospath-ospathsplit_noaspect
iastaspectsospath-ospathsplitdrive_aspect
iastaspectsospath-ospathsplitdrive_noaspect
iastaspectsospath-ospathsplitext_aspect
iastaspectsospath-ospathsplitext_noaspect
iastaspectssplit-rsplit_aspect
iastaspectssplit-rsplit_noaspect
iastaspectssplit-split_aspect
iastaspectssplit-split_noaspect
iastaspectssplit-splitlines_aspect
iastaspectssplit-splitlines_noaspect
iastpropagation-no-propagation
iastpropagation-propagation_enabled
iastpropagation-propagation_enabled_100
iastpropagation-propagation_enabled_1000
otelsdkspan-add-event
otelsdkspan-add-link
otelsdkspan-add-metrics
otelsdkspan-add-tags
otelsdkspan-get-context
otelsdkspan-is-recording
otelsdkspan-record-exception
otelsdkspan-set-status
otelsdkspan-start
otelsdkspan-start-finish
otelsdkspan-start-finish-telemetry
otelsdkspan-update-name
otelspan-add-event
otelspan-add-metrics
otelspan-add-tags
otelspan-get-context
otelspan-is-recording
otelspan-record-exception
otelspan-set-status
otelspan-start
otelspan-start-finish
otelspan-start-finish-telemetry
otelspan-update-name
packagespackageforrootmodulemapping-cache_off
packagespackageforrootmodulemapping-cache_on
packagesupdateimporteddependencies-import_many
packagesupdateimporteddependencies-import_many_cached
packagesupdateimporteddependencies-import_many_stdlib
packagesupdateimporteddependencies-import_many_stdlib_cached
packagesupdateimporteddependencies-import_many_unknown
packagesupdateimporteddependencies-import_many_unknown_cached
packagesupdateimporteddependencies-import_one
packagesupdateimporteddependencies-import_one_cache
packagesupdateimporteddependencies-import_one_stdlib
packagesupdateimporteddependencies-import_one_stdlib_cache
packagesupdateimporteddependencies-import_one_unknown
packagesupdateimporteddependencies-import_one_unknown_cache
ratelimiter-defaults
ratelimiter-high_rate_limit
ratelimiter-long_window
ratelimiter-low_rate_limit
ratelimiter-no_rate_limit
ratelimiter-short_window
recursivecomputation-deep
recursivecomputation-deep-profiled
recursivecomputation-medium
recursivecomputation-shallow
samplingrules-average_match
samplingrules-high_match
samplingrules-low_match
samplingrules-very_low_match
sethttpmeta-all-disabled
sethttpmeta-all-enabled
sethttpmeta-collectipvariant_exists
sethttpmeta-no-collectipvariant
sethttpmeta-no-useragentvariant
sethttpmeta-obfuscation-no-query
sethttpmeta-obfuscation-regular-case-explicit-query
sethttpmeta-obfuscation-regular-case-implicit-query
sethttpmeta-obfuscation-send-querystring-disabled
sethttpmeta-obfuscation-worst-case-explicit-query
sethttpmeta-obfuscation-worst-case-implicit-query
sethttpmeta-useragentvariant_exists_1
sethttpmeta-useragentvariant_exists_2
sethttpmeta-useragentvariant_exists_3
sethttpmeta-useragentvariant_not_exists_1
sethttpmeta-useragentvariant_not_exists_2
span-add-event
span-add-metrics
span-add-tags
span-get-context
span-is-recording
span-record-exception
span-set-status
span-start
span-start-finish
span-start-finish-telemetry
span-start-finish-traceid128
span-start-traceid128
span-update-name
telemetryaddmetric-1-count-metric-1-times
telemetryaddmetric-1-count-metrics-100-times
telemetryaddmetric-1-distribution-metric-1-times
telemetryaddmetric-1-distribution-metrics-100-times
telemetryaddmetric-1-gauge-metric-1-times
telemetryaddmetric-1-gauge-metrics-100-times
telemetryaddmetric-1-rate-metric-1-times
telemetryaddmetric-1-rate-metrics-100-times
telemetryaddmetric-100-count-metrics-100-times
telemetryaddmetric-100-distribution-metrics-100-times
telemetryaddmetric-100-gauge-metrics-100-times
telemetryaddmetric-100-rate-metrics-100-times
telemetryaddmetric-flush-1-metric
telemetryaddmetric-flush-100-metrics
telemetryaddmetric-flush-1000-metrics
tracer-large
tracer-medium
tracer-small
Legend:
Note: All comparisons are against the mean unless a different statistic (e.g., p95) is explicitly shown. |
metadata={ | ||
"reasoning": {"effort": "medium", "summary": "detailed"}, | ||
"stream": True, | ||
"temperature": 1.0, | ||
"top_p": 1.0, | ||
"tools": [], | ||
"tool_choice": "auto", | ||
"truncation": "disabled", | ||
"text": {"format": {"type": "text"}}, | ||
"reasoning_tokens": 128, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
metadata differs too much between versions for whatever reasons. we only really care about asserting a) no error, and b) specific properties like reasoning summary and assistant content are set
I discovered another instance of where we check object attributes when we should be checking dict attributes. Although, I have not been able to reproduce in tests here. I discovered this while writing shared tests, and I think this should have been part of #14030, although the test there doesn't catch it because the response from the OpenAI SDK is an object and not a dict.
No release note as this can be considered a follow-up fix to the mentioned PR and is grouped under the release note there.
Checklist
Reviewer Checklist