Skip to content

Commit aaf7fdf

Browse files
committed
fix broken traces and add tests
1 parent e510980 commit aaf7fdf

File tree

5 files changed

+543
-55
lines changed

5 files changed

+543
-55
lines changed

packages/opentelemetry-instrumentation-openai/opentelemetry/instrumentation/openai/v1/responses_wrappers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,10 +462,13 @@ def responses_get_or_create_wrapper(tracer: Tracer, wrapped, instance, args, kwa
462462
try:
463463
response = wrapped(*args, **kwargs)
464464
if isinstance(response, Stream):
465+
# Capture current trace context to maintain trace continuity
466+
ctx = context_api.get_current()
465467
span = tracer.start_span(
466468
SPAN_NAME,
467469
kind=SpanKind.CLIENT,
468470
start_time=start_time,
471+
context=ctx,
469472
)
470473
_set_request_attributes(span, prepare_kwargs_for_shared_attributes(kwargs), instance)
471474

@@ -622,10 +625,13 @@ async def async_responses_get_or_create_wrapper(
622625
try:
623626
response = await wrapped(*args, **kwargs)
624627
if isinstance(response, (Stream, AsyncStream)):
628+
# Capture current trace context to maintain trace continuity
629+
ctx = context_api.get_current()
625630
span = tracer.start_span(
626631
SPAN_NAME,
627632
kind=SpanKind.CLIENT,
628633
start_time=start_time,
634+
context=ctx,
629635
)
630636
_set_request_attributes(span, prepare_kwargs_for_shared_attributes(kwargs), instance)
631637

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
interactions:
2+
- request:
3+
body: '{"input": "Count to 3", "model": "gpt-4o", "stream": true}'
4+
headers:
5+
accept:
6+
- application/json
7+
accept-encoding:
8+
- gzip, deflate
9+
connection:
10+
- keep-alive
11+
content-length:
12+
- '58'
13+
content-type:
14+
- application/json
15+
host:
16+
- api.openai.com
17+
user-agent:
18+
- AsyncOpenAI/Python 1.99.7
19+
x-stainless-arch:
20+
- arm64
21+
x-stainless-async:
22+
- async:asyncio
23+
x-stainless-lang:
24+
- python
25+
x-stainless-os:
26+
- MacOS
27+
x-stainless-package-version:
28+
- 1.99.7
29+
x-stainless-read-timeout:
30+
- '600'
31+
x-stainless-retry-count:
32+
- '0'
33+
x-stainless-runtime:
34+
- CPython
35+
x-stainless-runtime-version:
36+
- 3.10.16
37+
method: POST
38+
uri: https://api.openai.com/v1/responses
39+
response:
40+
body:
41+
string: 'event: response.created
42+
43+
data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_0833439a21e2e07f00692744f7343c8194a974c6475b934753","object":"response","created_at":1764181239,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
44+
45+
46+
event: response.in_progress
47+
48+
data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_0833439a21e2e07f00692744f7343c8194a974c6475b934753","object":"response","created_at":1764181239,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
49+
50+
51+
event: response.output_item.added
52+
53+
data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","type":"message","status":"in_progress","content":[],"role":"assistant"}}
54+
55+
56+
event: response.content_part.added
57+
58+
data: {"type":"response.content_part.added","sequence_number":3,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""}}
59+
60+
61+
event: response.output_text.delta
62+
63+
data: {"type":"response.output_text.delta","sequence_number":4,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"delta":"1","logprobs":[],"obfuscation":"XA0B7nq36y3I0p0"}
64+
65+
66+
event: response.output_text.delta
67+
68+
data: {"type":"response.output_text.delta","sequence_number":5,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"delta":",","logprobs":[],"obfuscation":"Xr3zhqYKv3CQfSO"}
69+
70+
71+
event: response.output_text.delta
72+
73+
data: {"type":"response.output_text.delta","sequence_number":6,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"delta":"
74+
","logprobs":[],"obfuscation":"UVLmTFr7FkA87lB"}
75+
76+
77+
event: response.output_text.delta
78+
79+
data: {"type":"response.output_text.delta","sequence_number":7,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"delta":"2","logprobs":[],"obfuscation":"wPVtjCN3qKdLhJk"}
80+
81+
82+
event: response.output_text.delta
83+
84+
data: {"type":"response.output_text.delta","sequence_number":8,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"delta":",","logprobs":[],"obfuscation":"7ajjiAJKL5KDRn7"}
85+
86+
87+
event: response.output_text.delta
88+
89+
data: {"type":"response.output_text.delta","sequence_number":9,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"delta":"
90+
","logprobs":[],"obfuscation":"mJIUyOlMT0CuNgP"}
91+
92+
93+
event: response.output_text.delta
94+
95+
data: {"type":"response.output_text.delta","sequence_number":10,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"delta":"3","logprobs":[],"obfuscation":"tkvYO2ofKRqiMo2"}
96+
97+
98+
event: response.output_text.done
99+
100+
data: {"type":"response.output_text.done","sequence_number":11,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"text":"1,
101+
2, 3","logprobs":[]}
102+
103+
104+
event: response.content_part.done
105+
106+
data: {"type":"response.content_part.done","sequence_number":12,"item_id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","output_index":0,"content_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"1,
107+
2, 3"}}
108+
109+
110+
event: response.output_item.done
111+
112+
data: {"type":"response.output_item.done","sequence_number":13,"output_index":0,"item":{"id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"1,
113+
2, 3"}],"role":"assistant"}}
114+
115+
116+
event: response.completed
117+
118+
data: {"type":"response.completed","sequence_number":14,"response":{"id":"resp_0833439a21e2e07f00692744f7343c8194a974c6475b934753","object":"response","created_at":1764181239,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[{"id":"msg_0833439a21e2e07f00692744f7989c81949dceeaed14d8e652","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"1,
119+
2, 3"}],"role":"assistant"}],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":11,"input_tokens_details":{"cached_tokens":0},"output_tokens":8,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":19},"user":null,"metadata":{}}}
120+
121+
122+
'
123+
headers:
124+
CF-RAY:
125+
- 9a4b66a84caf0dd4-TLV
126+
Connection:
127+
- keep-alive
128+
Content-Type:
129+
- text/event-stream; charset=utf-8
130+
Date:
131+
- Wed, 26 Nov 2025 18:20:39 GMT
132+
Server:
133+
- cloudflare
134+
Set-Cookie:
135+
- __cf_bm=V.B2dWw7Yqqxcb1uimxGCTcSgcx.eZynXeAnI8MdqrY-1764181239-1.0.1.1-fLTkIx0eOASBJaTgLguVlUcPeXfGdMzkMTJLHFk_x1Cp16J1_CVnZQv28zh4n2kXaZhhKmaa.rU.jVIHjsuftLTTbR8d2NsEO_GRuM9Oe3k;
136+
path=/; expires=Wed, 26-Nov-25 18:50:39 GMT; domain=.api.openai.com; HttpOnly;
137+
Secure; SameSite=None
138+
- _cfuvid=OlLe323e8JzelzLOlibVBzWl3.rFDoa53lmaaBwwA4Y-1764181239310-0.0.1.1-604800000;
139+
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
140+
Strict-Transport-Security:
141+
- max-age=31536000; includeSubDomains; preload
142+
Transfer-Encoding:
143+
- chunked
144+
X-Content-Type-Options:
145+
- nosniff
146+
alt-svc:
147+
- h3=":443"; ma=86400
148+
cf-cache-status:
149+
- DYNAMIC
150+
openai-organization:
151+
- traceloop
152+
openai-processing-ms:
153+
- '31'
154+
openai-project:
155+
- proj_tzz1TbPPOXaf6j9tEkVUBIAa
156+
openai-version:
157+
- '2020-10-01'
158+
x-envoy-upstream-service-time:
159+
- '36'
160+
x-request-id:
161+
- req_e541f460fc054ca5b778bb69c39095e9
162+
status:
163+
code: 200
164+
message: OK
165+
version: 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
interactions:
2+
- request:
3+
body: '{"input": "Count to 3", "model": "gpt-4o", "stream": true}'
4+
headers:
5+
accept:
6+
- application/json
7+
accept-encoding:
8+
- gzip, deflate
9+
connection:
10+
- keep-alive
11+
content-length:
12+
- '58'
13+
content-type:
14+
- application/json
15+
host:
16+
- api.openai.com
17+
user-agent:
18+
- OpenAI/Python 1.99.7
19+
x-stainless-arch:
20+
- arm64
21+
x-stainless-async:
22+
- 'false'
23+
x-stainless-lang:
24+
- python
25+
x-stainless-os:
26+
- MacOS
27+
x-stainless-package-version:
28+
- 1.99.7
29+
x-stainless-read-timeout:
30+
- '600'
31+
x-stainless-retry-count:
32+
- '0'
33+
x-stainless-runtime:
34+
- CPython
35+
x-stainless-runtime-version:
36+
- 3.10.16
37+
method: POST
38+
uri: https://api.openai.com/v1/responses
39+
response:
40+
body:
41+
string: 'event: response.created
42+
43+
data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_0ffe4aaa25a8f1360069274580b4888195ae91e8f419909c18","object":"response","created_at":1764181376,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
44+
45+
46+
event: response.in_progress
47+
48+
data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_0ffe4aaa25a8f1360069274580b4888195ae91e8f419909c18","object":"response","created_at":1764181376,"status":"in_progress","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"auto","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"metadata":{}}}
49+
50+
51+
event: response.output_item.added
52+
53+
data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","type":"message","status":"in_progress","content":[],"role":"assistant"}}
54+
55+
56+
event: response.content_part.added
57+
58+
data: {"type":"response.content_part.added","sequence_number":3,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""}}
59+
60+
61+
event: response.output_text.delta
62+
63+
data: {"type":"response.output_text.delta","sequence_number":4,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":"Sure","logprobs":[],"obfuscation":"o7XDIwdGK3Hk"}
64+
65+
66+
event: response.output_text.delta
67+
68+
data: {"type":"response.output_text.delta","sequence_number":5,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":"!","logprobs":[],"obfuscation":"Pjp374hninfkthr"}
69+
70+
71+
event: response.output_text.delta
72+
73+
data: {"type":"response.output_text.delta","sequence_number":6,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":"
74+
Here","logprobs":[],"obfuscation":"wFHbas0IJRy"}
75+
76+
77+
event: response.output_text.delta
78+
79+
data: {"type":"response.output_text.delta","sequence_number":7,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":"
80+
you","logprobs":[],"obfuscation":"kUseDwwsQaxF"}
81+
82+
83+
event: response.output_text.delta
84+
85+
data: {"type":"response.output_text.delta","sequence_number":8,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":"
86+
go","logprobs":[],"obfuscation":"raARGZ6luKJpg"}
87+
88+
89+
event: response.output_text.delta
90+
91+
data: {"type":"response.output_text.delta","sequence_number":9,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":":\n\n","logprobs":[],"obfuscation":"NTu51UUDfbc02"}
92+
93+
94+
event: response.output_text.delta
95+
96+
data: {"type":"response.output_text.delta","sequence_number":10,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":"1","logprobs":[],"obfuscation":"XliigWUcMuigs5D"}
97+
98+
99+
event: response.output_text.delta
100+
101+
data: {"type":"response.output_text.delta","sequence_number":11,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":" \n","logprobs":[],"obfuscation":"1XY5B4YDTEIdb"}
102+
103+
104+
event: response.output_text.delta
105+
106+
data: {"type":"response.output_text.delta","sequence_number":12,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":"2","logprobs":[],"obfuscation":"pVKbFpFPUcisYzh"}
107+
108+
109+
event: response.output_text.delta
110+
111+
data: {"type":"response.output_text.delta","sequence_number":13,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":" \n","logprobs":[],"obfuscation":"MkoZrYD7Oc7FX"}
112+
113+
114+
event: response.output_text.delta
115+
116+
data: {"type":"response.output_text.delta","sequence_number":14,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"delta":"3","logprobs":[],"obfuscation":"mIpjMgY638Nv571"}
117+
118+
119+
event: response.output_text.done
120+
121+
data: {"type":"response.output_text.done","sequence_number":15,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"text":"Sure!
122+
Here you go:\n\n1 \n2 \n3","logprobs":[]}
123+
124+
125+
event: response.content_part.done
126+
127+
data: {"type":"response.content_part.done","sequence_number":16,"item_id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","output_index":0,"content_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"Sure!
128+
Here you go:\n\n1 \n2 \n3"}}
129+
130+
131+
event: response.output_item.done
132+
133+
data: {"type":"response.output_item.done","sequence_number":17,"output_index":0,"item":{"id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"Sure!
134+
Here you go:\n\n1 \n2 \n3"}],"role":"assistant"}}
135+
136+
137+
event: response.completed
138+
139+
data: {"type":"response.completed","sequence_number":18,"response":{"id":"resp_0ffe4aaa25a8f1360069274580b4888195ae91e8f419909c18","object":"response","created_at":1764181376,"status":"completed","background":false,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"gpt-4o-2024-08-06","output":[{"id":"msg_0ffe4aaa25a8f136006927458169608195a795458bfa606fde","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"Sure!
140+
Here you go:\n\n1 \n2 \n3"}],"role":"assistant"}],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":null,"summary":null},"safety_identifier":null,"service_tier":"default","store":true,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":11,"input_tokens_details":{"cached_tokens":0},"output_tokens":12,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":23},"user":null,"metadata":{}}}
141+
142+
143+
'
144+
headers:
145+
CF-RAY:
146+
- 9a4b6a007a4b2187-TLV
147+
Connection:
148+
- keep-alive
149+
Content-Type:
150+
- text/event-stream; charset=utf-8
151+
Date:
152+
- Wed, 26 Nov 2025 18:22:56 GMT
153+
Server:
154+
- cloudflare
155+
Set-Cookie:
156+
- __cf_bm=nZxSDLfi5mbASekh0yXG0ILW1Mxf7Ry4qcPPNOWEd5w-1764181376-1.0.1.1-S4wwKLgZ4xbQxdEknsl3aca3v2JRBh1D9e_6zX16V5i_9HEopy2.QQqIIL9ouX9pMIAbsfSc6GZzWV.Xq8tPwG81SEXS1ZoHi1rTDkxRYbI;
157+
path=/; expires=Wed, 26-Nov-25 18:52:56 GMT; domain=.api.openai.com; HttpOnly;
158+
Secure; SameSite=None
159+
- _cfuvid=.LTV.htnuQfDTX6nETImcMgLTWAi_xNWTCiZSf1zwNw-1764181376816-0.0.1.1-604800000;
160+
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
161+
Strict-Transport-Security:
162+
- max-age=31536000; includeSubDomains; preload
163+
Transfer-Encoding:
164+
- chunked
165+
X-Content-Type-Options:
166+
- nosniff
167+
alt-svc:
168+
- h3=":443"; ma=86400
169+
cf-cache-status:
170+
- DYNAMIC
171+
openai-organization:
172+
- traceloop
173+
openai-processing-ms:
174+
- '28'
175+
openai-project:
176+
- proj_tzz1TbPPOXaf6j9tEkVUBIAa
177+
openai-version:
178+
- '2020-10-01'
179+
x-envoy-upstream-service-time:
180+
- '31'
181+
x-request-id:
182+
- req_cbaf6b7c75304a579f65027dd273006a
183+
status:
184+
code: 200
185+
message: OK
186+
version: 1

0 commit comments

Comments
 (0)