Skip to content

Commit 4410eef

Browse files
nirgaclaude
andauthored
fix(langchain): populate metadata as span attributes in batch operations (#3218)
Co-authored-by: Claude <[email protected]>
1 parent 2f718ec commit 4410eef

File tree

4 files changed

+558
-0
lines changed

4 files changed

+558
-0
lines changed

packages/opentelemetry-instrumentation-langchain/opentelemetry/instrumentation/langchain/callback_handler.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,11 @@ def _create_span(
234234
_set_span_attribute(span, SpanAttributes.TRACELOOP_WORKFLOW_NAME, workflow_name)
235235
_set_span_attribute(span, SpanAttributes.TRACELOOP_ENTITY_PATH, entity_path)
236236

237+
# Set metadata as span attributes if available
238+
if metadata is not None:
239+
for key, value in sanitized_metadata.items():
240+
_set_span_attribute(span, f"{SpanAttributes.TRACELOOP_ASSOCIATION_PROPERTIES}.{key}", value)
241+
237242
self.spans[run_id] = SpanHolder(
238243
span, token, None, [], workflow_name, entity_name, entity_path
239244
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
interactions:
2+
- request:
3+
body: '{"messages": [{"content": "What is AI?", "role": "user"}], "model": "gpt-3.5-turbo",
4+
"stream": false, "temperature": 0.0}'
5+
headers:
6+
accept:
7+
- application/json
8+
accept-encoding:
9+
- gzip, deflate
10+
connection:
11+
- keep-alive
12+
content-length:
13+
- '121'
14+
content-type:
15+
- application/json
16+
host:
17+
- api.openai.com
18+
traceparent:
19+
- 00-c8f6bf81c4645a3bed423c22e499f6e1-a2abe4f4c63baba3-01
20+
user-agent:
21+
- AsyncOpenAI/Python 1.78.1
22+
x-stainless-arch:
23+
- arm64
24+
x-stainless-async:
25+
- async:asyncio
26+
x-stainless-lang:
27+
- python
28+
x-stainless-os:
29+
- MacOS
30+
x-stainless-package-version:
31+
- 1.78.1
32+
x-stainless-retry-count:
33+
- '0'
34+
x-stainless-runtime:
35+
- CPython
36+
x-stainless-runtime-version:
37+
- 3.9.5
38+
method: POST
39+
uri: https://api.openai.com/v1/chat/completions
40+
response:
41+
body:
42+
string: !!binary |
43+
H4sIAAAAAAAAAwAAAP//jFTBahsxEL37Kwad18ZO7abxLQ2lCTSlh0BpSzBjabw7iVYSGsmtCfn3
44+
ol3Ha7cp9LKIeTOj92ae9mkEoNioJSjdYNJtsOOr6cW3q+vp+936YR7D5+/Xt48fvn66+HJby91H
45+
VZUKv34gnV6qJtq3wVJi73pYR8JEpevsfDGfLc7O5+86oPWGbCmrQxq/mSzGKce1H09nZ4t9ZeNZ
46+
k6gl/BgBADx138LRGfqlljCtXiItiWBNanlIAlDR2xJRKMKS0CVVDaD2LpHraF/eVOAjYEy8Yc1o
47+
gV0ia7kmp6mCSBuKAslDagiE22yx6AO/gSa36E7yIUSvSYQE1jtoUTfsSCogCVSa2x2UEeVEEWQn
48+
iVqZwF1DclzJTttsCCxhdOzqQgLF98cQ/dpSOxZvt32AoqZQKFWAzoBFV2esCbIzFIt0w66ewOUN
49+
JNKN89bXTAIYCbKQAXaA8JMNQURXUxGGIVjWnU6pQLJuAAUkEOkGImlfO+5v5LZcdRJymHJEOxDZ
50+
K+vYFoaYk3e+9VlgSw1rSzI53k6kTRYs7nDZ2iMAnfOpZ1V8cb9Hng9OsL4u85E/StWGHUuz6sdY
51+
ti7JB9WhzyOA+85x+cREKkTfhrRK/pG662azvp0aPD6Ab+d7MPmEdoifL6pXuq0MJWQrR45VGnVD
52+
Zqgc7I3ZsD8CRkea/ybzWu+Dff6n/QDo4isyqxDJsD4VPKRFKn+Af6UdZtwRVkJxy5pWiSmWPRja
53+
YLb921T9g1ht2NUUQ+TugZY9jp5HvwEAAP//AwAHSY+ynwQAAA==
54+
headers:
55+
CF-RAY:
56+
- 968f0276a9678e45-TLV
57+
Connection:
58+
- keep-alive
59+
Content-Encoding:
60+
- gzip
61+
Content-Type:
62+
- application/json
63+
Date:
64+
- Sat, 02 Aug 2025 16:39:09 GMT
65+
Server:
66+
- cloudflare
67+
Set-Cookie:
68+
- __cf_bm=G2aFKRo.BMpAVgGzp94qrRN6RFU7.sDRxXTLHkf8fgo-1754152749-1.0.1.1-Lx9OnarPKsAIlqV43Q12KB5FSJp3XJUvbV6VvCvuebyvq7nZ_5iNbqW0T.Vq2MT9kokKzR8l56yO.9pF3QwNd6qd0SjmE3BGbxpWtahcyDo;
69+
path=/; expires=Sat, 02-Aug-25 17:09:09 GMT; domain=.api.openai.com; HttpOnly;
70+
Secure; SameSite=None
71+
- _cfuvid=f202526c11Dikkj5iE5UA8lghq6b_dAuQZKN7YTvkY8-1754152749387-0.0.1.1-604800000;
72+
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
73+
Strict-Transport-Security:
74+
- max-age=31536000; includeSubDomains; preload
75+
Transfer-Encoding:
76+
- chunked
77+
X-Content-Type-Options:
78+
- nosniff
79+
access-control-expose-headers:
80+
- X-Request-ID
81+
alt-svc:
82+
- h3=":443"; ma=86400
83+
cf-cache-status:
84+
- DYNAMIC
85+
openai-organization:
86+
- traceloop
87+
openai-processing-ms:
88+
- '606'
89+
openai-project:
90+
- proj_tzz1TbPPOXaf6j9tEkVUBIAa
91+
openai-version:
92+
- '2020-10-01'
93+
x-envoy-decorator-operation:
94+
- router.openai.svc.cluster.local:5004/*
95+
x-envoy-upstream-service-time:
96+
- '631'
97+
x-ratelimit-limit-requests:
98+
- '10000'
99+
x-ratelimit-limit-tokens:
100+
- '50000000'
101+
x-ratelimit-remaining-requests:
102+
- '9999'
103+
x-ratelimit-remaining-tokens:
104+
- '49999995'
105+
x-ratelimit-reset-requests:
106+
- 6ms
107+
x-ratelimit-reset-tokens:
108+
- 0s
109+
x-request-id:
110+
- req_3d597d8be1044e54a572d6c5077562cd
111+
status:
112+
code: 200
113+
message: OK
114+
- request:
115+
body: '{"messages": [{"content": "Explain machine learning", "role": "user"}],
116+
"model": "gpt-3.5-turbo", "stream": false, "temperature": 0.0}'
117+
headers:
118+
accept:
119+
- application/json
120+
accept-encoding:
121+
- gzip, deflate
122+
connection:
123+
- keep-alive
124+
content-length:
125+
- '134'
126+
content-type:
127+
- application/json
128+
host:
129+
- api.openai.com
130+
traceparent:
131+
- 00-4e3b9efa7eda214b5b3d2f13af79d3f0-66d461c13277fb39-01
132+
user-agent:
133+
- AsyncOpenAI/Python 1.78.1
134+
x-stainless-arch:
135+
- arm64
136+
x-stainless-async:
137+
- async:asyncio
138+
x-stainless-lang:
139+
- python
140+
x-stainless-os:
141+
- MacOS
142+
x-stainless-package-version:
143+
- 1.78.1
144+
x-stainless-retry-count:
145+
- '0'
146+
x-stainless-runtime:
147+
- CPython
148+
x-stainless-runtime-version:
149+
- 3.9.5
150+
method: POST
151+
uri: https://api.openai.com/v1/chat/completions
152+
response:
153+
body:
154+
string: !!binary |
155+
H4sIAAAAAAAAAwAAAP//jFXBbiM3DL37K4g5O0acJkiT66IFcuihxV52uwtDljgzbDSiQFH2pov8
156+
e0GNEzupt+hlgBFF8vGRfPq+AOgodPfQ+dGpn3K8+HB59+lDv95+uvn88fOvv++vb/+og6fbXx5o
157+
i93SPHj7F3p98Vp5nnJEJU6z2Qs6RYu6vr25Xt9c3V7/3AwTB4zmNmS9+Gl1c6FVtnxxub66OXiO
158+
TB5Ldw9/LgAAvrevYUwBv3X3cLl8OZmwFDdgd/96CaATjnbSuVKoqEvaLY9Gz0kxNdi/OT9SQojo
159+
JFEagAo4KHVbUIF7cKLUkycXgZJijDRg8gg6OgVKO447LKAjQsAdRs4TptkxDiyk41TApQBFnVJR
160+
8i5CK77MITC5bUQw4qqiFFCesUAvPDXXyT0iZMFA3pgtwAIBPZX2s3UFA3CC4NSt4CHB9K6k5Ul0
161+
JwgqjhIGyyToeUj0N0J2qiipAM2RjpmPqVjewNiTjlwVtmi84bccyZPGJ8jCg7hpmnMEhsKrL+lL
162+
+jiiYIMQqO9RjCl9yliMr/eoTwhcAiUfa7DTUjPKjqzmY301nT22EgQp9SweW19ebI2nsz7WydfM
163+
NgwvbHGC6LYYMTR+lrBv1dh9zyLoFbhqrmpOWXhHAQP0LIDOj0ApV21pfwD2vxLXdJp6bk0tCj2l
164+
cOwcCwhG15ozUm6tbINpPpyAtADvUwNxnpb3KNq5DapwHUZQsTWw7CjCsrTxQdpZW3rEsHX+8SVn
165+
zzJZVwX3TsI8OphcVMLSSDEwbh6kNhvn9rAaQ5TAwZ4Cgrg0YFutbKM2F3o6GzS5Aedty4h+fBlv
166+
u7iE5LSKixBdGqpdzMIeS2l1281pwhRaVChPRdEGz4K5qpx44lpghyP5iGUFDwqjmxc/s4mJUdM2
167+
asexWhDbKkqhFhUr2iLRZIOBgL1JCib/NCfwvorzT233Dtt2MblHq+kAEsvqVMAE+1qcCWiqMZ4Y
168+
XEqsMzMmnV8PludXsYw8ZOFteefa9ZSojBtBVziZMBbl3DXr8wLgaxPl+kZnuyw8Zd0oP2JLt17P
169+
4brjM3BivLs7WJXVxaPhan2Q8rfxNgHVUSwnst5550cMR9fjG+BqID4xLE6q/jecc7HnyikN/yf8
170+
0eA9ZsWwOQrjuWuC9kz+6Noryw1wV0wcPG6UUKwTAXtX4/yAdfNkbnpKA0oWaq+YdXLxvPgHAAD/
171+
/wMAmz+dlMQHAAA=
172+
headers:
173+
CF-RAY:
174+
- 968f0276c9d08e4e-TLV
175+
Connection:
176+
- keep-alive
177+
Content-Encoding:
178+
- gzip
179+
Content-Type:
180+
- application/json
181+
Date:
182+
- Sat, 02 Aug 2025 16:39:11 GMT
183+
Server:
184+
- cloudflare
185+
Set-Cookie:
186+
- __cf_bm=hOCUQ293QoWYMqqLmtY7.ikGh02jPfZwBmxUDtxRhA0-1754152751-1.0.1.1-tdrHlbsiwPs7qn7mPbKLg89QVwttr.A1N.bbVtnbZhFuWXRyj88YHh3jX8cJ9bU0ryfo3_BTVeABOhH93.Km8xewtWWIqotz34VO0PG6g.s;
187+
path=/; expires=Sat, 02-Aug-25 17:09:11 GMT; domain=.api.openai.com; HttpOnly;
188+
Secure; SameSite=None
189+
- _cfuvid=3JjMgNbPVSJtY9DwH4U6N3l7v6TtZNUEeC87.qgS3bY-1754152751459-0.0.1.1-604800000;
190+
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
191+
Strict-Transport-Security:
192+
- max-age=31536000; includeSubDomains; preload
193+
Transfer-Encoding:
194+
- chunked
195+
X-Content-Type-Options:
196+
- nosniff
197+
access-control-expose-headers:
198+
- X-Request-ID
199+
alt-svc:
200+
- h3=":443"; ma=86400
201+
cf-cache-status:
202+
- DYNAMIC
203+
openai-organization:
204+
- traceloop
205+
openai-processing-ms:
206+
- '2531'
207+
openai-project:
208+
- proj_tzz1TbPPOXaf6j9tEkVUBIAa
209+
openai-version:
210+
- '2020-10-01'
211+
x-envoy-decorator-operation:
212+
- router.openai.svc.cluster.local:5004/*
213+
x-envoy-upstream-service-time:
214+
- '2564'
215+
x-ratelimit-limit-requests:
216+
- '10000'
217+
x-ratelimit-limit-tokens:
218+
- '50000000'
219+
x-ratelimit-remaining-requests:
220+
- '9999'
221+
x-ratelimit-remaining-tokens:
222+
- '49999992'
223+
x-ratelimit-reset-requests:
224+
- 6ms
225+
x-ratelimit-reset-tokens:
226+
- 0s
227+
x-request-id:
228+
- req_ce7184c928e1432a9dac39b70919dad7
229+
status:
230+
code: 200
231+
message: OK
232+
version: 1

0 commit comments

Comments
 (0)