langtrace-python-sdk 3.7.0__py3-none-any.whl → 3.8.0__py3-none-any.whl

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.
@@ -42,6 +42,7 @@ SERVICE_PROVIDERS = {
42
42
  "MILVUS": "Milvus",
43
43
  "GRAPHLIT": "Graphlit",
44
44
  "PHIDATA": "Phidata",
45
+ "AGNO": "Agno",
45
46
  }
46
47
 
47
48
  LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY = "langtrace_additional_attributes"
@@ -31,6 +31,7 @@ from .milvus import MilvusInstrumentation
31
31
  from .google_genai import GoogleGenaiInstrumentation
32
32
  from .graphlit import GraphlitInstrumentation
33
33
  from .phidata import PhiDataInstrumentation
34
+ from .agno import AgnoInstrumentation
34
35
 
35
36
  __all__ = [
36
37
  "AnthropicInstrumentation",
@@ -63,4 +64,5 @@ __all__ = [
63
64
  "CrewaiToolsInstrumentation",
64
65
  "GraphlitInstrumentation",
65
66
  "PhiDataInstrumentation",
67
+ "AgnoInstrumentation",
66
68
  ]
@@ -0,0 +1,5 @@
1
+ from .instrumentation import AgnoInstrumentation
2
+
3
+ __all__ = [
4
+ "AgnoInstrumentation",
5
+ ]
@@ -0,0 +1,80 @@
1
+ """
2
+ Copyright (c) 2024 Scale3 Labs
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ """
16
+
17
+ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
18
+ from opentelemetry.trace import get_tracer
19
+ from wrapt import wrap_function_wrapper as _W
20
+ from typing import Collection
21
+ from importlib_metadata import version as v
22
+ from .patch import patch_agent, patch_memory
23
+
24
+ class AgnoInstrumentation(BaseInstrumentor):
25
+ def instrumentation_dependencies(self) -> Collection[str]:
26
+ return ["agno >= 1.1.4"]
27
+
28
+ def _instrument(self, **kwargs):
29
+ tracer_provider = kwargs.get("tracer_provider")
30
+ tracer = get_tracer(__name__, "", tracer_provider)
31
+ version = v("agno")
32
+
33
+ try:
34
+ _W(
35
+ "agno.agent.agent",
36
+ "Agent.run",
37
+ patch_agent("Agent.run", version, tracer),
38
+ )
39
+ _W(
40
+ "agno.agent.agent",
41
+ "Agent.arun",
42
+ patch_agent("Agent.arun", version, tracer),
43
+ )
44
+ _W(
45
+ "agno.agent.agent",
46
+ "Agent._run",
47
+ patch_agent("Agent._run", version, tracer),
48
+ )
49
+ _W(
50
+ "agno.agent.agent",
51
+ "Agent._arun",
52
+ patch_agent("Agent._arun", version, tracer),
53
+ )
54
+
55
+ _W(
56
+ "agno.memory.agent",
57
+ "AgentMemory.update_memory",
58
+ patch_memory("AgentMemory.update_memory", version, tracer),
59
+ )
60
+ _W(
61
+ "agno.memory.agent",
62
+ "AgentMemory.aupdate_memory",
63
+ patch_memory("AgentMemory.aupdate_memory", version, tracer),
64
+ )
65
+ _W(
66
+ "agno.memory.agent",
67
+ "AgentMemory.update_summary",
68
+ patch_memory("AgentMemory.update_summary", version, tracer),
69
+ )
70
+ _W(
71
+ "agno.memory.agent",
72
+ "AgentMemory.aupdate_summary",
73
+ patch_memory("AgentMemory.aupdate_summary", version, tracer),
74
+ )
75
+
76
+ except Exception:
77
+ pass
78
+
79
+ def _uninstrument(self, **kwargs):
80
+ pass
@@ -0,0 +1,261 @@
1
+ import json
2
+ from importlib_metadata import version as v
3
+ from langtrace.trace_attributes import FrameworkSpanAttributes
4
+ from opentelemetry import baggage
5
+ from opentelemetry.trace import Span, SpanKind, Tracer
6
+ from opentelemetry.trace.status import Status, StatusCode
7
+ from typing import Dict, Any, Optional
8
+
9
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
10
+ from langtrace_python_sdk.constants.instrumentation.common import (
11
+ LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
12
+ SERVICE_PROVIDERS,
13
+ )
14
+ from langtrace_python_sdk.utils import set_span_attribute
15
+ from langtrace_python_sdk.utils.llm import get_span_name, set_span_attributes
16
+ from langtrace_python_sdk.utils.misc import serialize_args, serialize_kwargs
17
+
18
+ def _extract_metrics(metrics: Dict[str, Any]) -> Dict[str, Any]:
19
+ """Helper function to extract and format metrics"""
20
+ formatted_metrics = {}
21
+
22
+ # Extract basic metrics
23
+ for key in ['time', 'time_to_first_token', 'input_tokens', 'output_tokens',
24
+ 'prompt_tokens', 'completion_tokens', 'total_tokens']:
25
+ if key in metrics:
26
+ formatted_metrics[key] = metrics[key]
27
+
28
+ # Extract nested metric details if present
29
+ if 'prompt_tokens_details' in metrics:
30
+ formatted_metrics['prompt_tokens_details'] = metrics['prompt_tokens_details']
31
+ if 'completion_tokens_details' in metrics:
32
+ formatted_metrics['completion_tokens_details'] = metrics['completion_tokens_details']
33
+ if 'tool_call_times' in metrics:
34
+ formatted_metrics['tool_call_times'] = metrics['tool_call_times']
35
+
36
+ return formatted_metrics
37
+
38
+ def patch_memory(operation_name, version, tracer: Tracer):
39
+ def traced_method(wrapped, instance, args, kwargs):
40
+ service_provider = SERVICE_PROVIDERS["AGNO"]
41
+ extra_attributes = baggage.get_baggage(LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY)
42
+ span_attributes = {
43
+ "langtrace.sdk.name": "langtrace-python-sdk",
44
+ "langtrace.service.name": service_provider,
45
+ "langtrace.service.type": "framework",
46
+ "langtrace.service.version": version,
47
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
48
+ **(extra_attributes if extra_attributes is not None else {}),
49
+ }
50
+
51
+ span_attributes.update({
52
+ "agno.memory.type": type(instance).__name__,
53
+ "agno.memory.create_session_summary": str(instance.create_session_summary),
54
+ "agno.memory.create_user_memories": str(instance.create_user_memories),
55
+ "agno.memory.retrieval": str(instance.retrieval)
56
+ })
57
+
58
+ inputs = {}
59
+ if len(args) > 0:
60
+ inputs["args"] = serialize_args(*args)
61
+ if len(kwargs) > 0:
62
+ inputs["kwargs"] = serialize_kwargs(**kwargs)
63
+ span_attributes["agno.memory.inputs"] = json.dumps(inputs)
64
+
65
+ attributes = FrameworkSpanAttributes(**span_attributes)
66
+
67
+ with tracer.start_as_current_span(
68
+ get_span_name(operation_name), kind=SpanKind.CLIENT
69
+ ) as span:
70
+ try:
71
+ set_span_attributes(span, attributes)
72
+ result = wrapped(*args, **kwargs)
73
+
74
+ if result is not None:
75
+ set_span_attribute(span, "agno.memory.output", str(result))
76
+
77
+ if instance.summary is not None:
78
+ set_span_attribute(span, "agno.memory.summary", str(instance.summary))
79
+ if instance.memories is not None:
80
+ set_span_attribute(span, "agno.memory.memories_count", str(len(instance.memories)))
81
+
82
+ span.set_status(Status(StatusCode.OK))
83
+ return result
84
+
85
+ except Exception as err:
86
+ span.record_exception(err)
87
+ span.set_status(Status(StatusCode.ERROR, str(err)))
88
+ raise
89
+
90
+ return traced_method
91
+
92
+ def patch_agent(operation_name, version, tracer: Tracer):
93
+ def traced_method(wrapped, instance, args, kwargs):
94
+ service_provider = SERVICE_PROVIDERS["AGNO"]
95
+ extra_attributes = baggage.get_baggage(LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY)
96
+ span_attributes = {
97
+ "langtrace.sdk.name": "langtrace-python-sdk",
98
+ "langtrace.service.name": service_provider,
99
+ "langtrace.service.type": "framework",
100
+ "langtrace.service.version": version,
101
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
102
+ **(extra_attributes if extra_attributes is not None else {}),
103
+ }
104
+
105
+ attributes = FrameworkSpanAttributes(**span_attributes)
106
+
107
+ with tracer.start_as_current_span(
108
+ get_span_name(operation_name), kind=SpanKind.CLIENT
109
+ ) as span:
110
+ try:
111
+ set_span_attributes(span, attributes)
112
+ AgnoSpanAttributes(span=span, instance=instance)
113
+ result_generator = wrapped(*args, **kwargs)
114
+
115
+ accumulated_content = ""
116
+ current_tool_call = None
117
+ response_metadata = None
118
+ seen_tool_calls = set()
119
+
120
+ try:
121
+ for response in result_generator:
122
+ if not hasattr(response, 'to_dict'):
123
+ yield response
124
+ continue
125
+
126
+ if not response_metadata:
127
+ response_metadata = {
128
+ "run_id": response.run_id,
129
+ "agent_id": response.agent_id,
130
+ "session_id": response.session_id,
131
+ "model": response.model,
132
+ "content_type": response.content_type,
133
+ }
134
+ for key, value in response_metadata.items():
135
+ if value is not None:
136
+ set_span_attribute(span, f"agno.agent.{key}", str(value))
137
+
138
+ if response.content:
139
+ accumulated_content += response.content
140
+ set_span_attribute(span, "agno.agent.response", accumulated_content)
141
+
142
+ if response.messages:
143
+ for msg in response.messages:
144
+ if msg.tool_calls:
145
+ for tool_call in msg.tool_calls:
146
+ tool_id = tool_call.get('id')
147
+ if tool_id and tool_id not in seen_tool_calls:
148
+ seen_tool_calls.add(tool_id)
149
+ tool_info = {
150
+ 'id': tool_id,
151
+ 'name': tool_call.get('function', {}).get('name'),
152
+ 'arguments': tool_call.get('function', {}).get('arguments'),
153
+ 'start_time': msg.created_at,
154
+ }
155
+ current_tool_call = tool_info
156
+ set_span_attribute(span, f"agno.agent.tool_call.{tool_id}", json.dumps(tool_info))
157
+
158
+ if msg.metrics:
159
+ metrics = _extract_metrics(msg.metrics)
160
+ role_prefix = f"agno.agent.metrics.{msg.role}"
161
+ for key, value in metrics.items():
162
+ set_span_attribute(span, f"{role_prefix}.{key}", str(value))
163
+
164
+ if response.tools:
165
+ for tool in response.tools:
166
+ tool_id = tool.get('tool_call_id')
167
+ if tool_id and current_tool_call and current_tool_call['id'] == tool_id:
168
+ tool_result = {
169
+ **current_tool_call,
170
+ 'result': tool.get('content'),
171
+ 'error': tool.get('tool_call_error'),
172
+ 'end_time': tool.get('created_at'),
173
+ 'metrics': tool.get('metrics'),
174
+ }
175
+ set_span_attribute(span, f"agno.agent.tool_call.{tool_id}", json.dumps(tool_result))
176
+ current_tool_call = None
177
+
178
+ yield response
179
+
180
+ except Exception as err:
181
+ span.record_exception(err)
182
+ span.set_status(Status(StatusCode.ERROR, str(err)))
183
+ raise
184
+ finally:
185
+ span.set_status(Status(StatusCode.OK))
186
+ if len(seen_tool_calls) > 0:
187
+ span.set_attribute("agno.agent.total_tool_calls", len(seen_tool_calls))
188
+ except Exception as err:
189
+ span.record_exception(err)
190
+ span.set_status(Status(StatusCode.ERROR, str(err)))
191
+ raise
192
+
193
+ return traced_method
194
+
195
+ class AgnoSpanAttributes:
196
+ span: Span
197
+ agent_data: dict
198
+
199
+ def __init__(self, span: Span, instance) -> None:
200
+ self.span = span
201
+ self.instance = instance
202
+ self.agent_data = {
203
+ "memory": {},
204
+ "model": {},
205
+ "tools": [],
206
+ }
207
+
208
+ self.run()
209
+
210
+ def run(self):
211
+ instance_attrs = {
212
+ "agent_id": self.instance.agent_id,
213
+ "session_id": self.instance.session_id,
214
+ "name": self.instance.name,
215
+ "markdown": self.instance.markdown,
216
+ "reasoning": self.instance.reasoning,
217
+ "add_references": self.instance.add_references,
218
+ "show_tool_calls": self.instance.show_tool_calls,
219
+ "stream": self.instance.stream,
220
+ "stream_intermediate_steps": self.instance.stream_intermediate_steps,
221
+ }
222
+
223
+ for key, value in instance_attrs.items():
224
+ if value is not None:
225
+ set_span_attribute(self.span, f"agno.agent.{key}", str(value))
226
+
227
+ if self.instance.model:
228
+ model_attrs = {
229
+ "id": self.instance.model.id,
230
+ "name": self.instance.model.name,
231
+ "provider": self.instance.model.provider,
232
+ "structured_outputs": self.instance.model.structured_outputs,
233
+ "supports_structured_outputs": self.instance.model.supports_structured_outputs,
234
+ }
235
+ for key, value in model_attrs.items():
236
+ if value is not None:
237
+ set_span_attribute(self.span, f"agno.agent.model.{key}", str(value))
238
+
239
+ if hasattr(self.instance.model, 'metrics') and self.instance.model.metrics:
240
+ metrics = _extract_metrics(self.instance.model.metrics)
241
+ set_span_attribute(self.span, "agno.agent.model.metrics", json.dumps(metrics))
242
+
243
+ if self.instance.tools:
244
+ tool_list = []
245
+ for tool in self.instance.tools:
246
+ if hasattr(tool, "name"):
247
+ tool_list.append(tool.name)
248
+ elif hasattr(tool, "__name__"):
249
+ tool_list.append(tool.__name__)
250
+ set_span_attribute(self.span, "agno.agent.tools", str(tool_list))
251
+
252
+ if self.instance.memory:
253
+ memory_attrs = {
254
+ "create_session_summary": self.instance.memory.create_session_summary,
255
+ "create_user_memories": self.instance.memory.create_user_memories,
256
+ "update_session_summary_after_run": self.instance.memory.update_session_summary_after_run,
257
+ "update_user_memories_after_run": self.instance.memory.update_user_memories_after_run,
258
+ }
259
+ for key, value in memory_attrs.items():
260
+ if value is not None:
261
+ set_span_attribute(self.span, f"agno.agent.memory.{key}", str(value))
@@ -75,6 +75,7 @@ from langtrace_python_sdk.instrumentation import (
75
75
  GoogleGenaiInstrumentation,
76
76
  GraphlitInstrumentation,
77
77
  PhiDataInstrumentation,
78
+ AgnoInstrumentation,
78
79
  )
79
80
  from opentelemetry.util.re import parse_env_headers
80
81
  from sentry_sdk.types import Event, Hint
@@ -325,6 +326,7 @@ def init(
325
326
  "google-genai": GoogleGenaiInstrumentation(),
326
327
  "graphlit-client": GraphlitInstrumentation(),
327
328
  "phidata": PhiDataInstrumentation(),
329
+ "agno": AgnoInstrumentation(),
328
330
  "mistralai": MistralInstrumentation(),
329
331
  "boto3": AWSBedrockInstrumentation(),
330
332
  "autogen": AutogenInstrumentation(),
@@ -1 +1 @@
1
- __version__ = "3.7.0"
1
+ __version__ = "3.8.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langtrace-python-sdk
3
- Version: 3.7.0
3
+ Version: 3.8.0
4
4
  Summary: Python SDK for LangTrace
5
5
  Project-URL: Homepage, https://github.com/Scale3-Labs/langtrace-python-sdk
6
6
  Author-email: Scale3 Labs <engineering@scale3labs.com>
@@ -114,8 +114,8 @@ examples/vertexai_example/main.py,sha256=gndId5X5ksD-ycxnAWMdEqIDbLc3kz5Vt8vm4YP
114
114
  examples/weaviate_example/__init__.py,sha256=8JMDBsRSEV10HfTd-YC7xb4txBjD3la56snk-Bbg2Kw,618
115
115
  examples/weaviate_example/query_text.py,sha256=wPHQTc_58kPoKTZMygVjTj-2ZcdrIuaausJfMxNQnQc,127162
116
116
  langtrace_python_sdk/__init__.py,sha256=VZM6i71NR7pBQK6XvJWRelknuTYUhqwqE7PlicKa5Wg,1166
117
- langtrace_python_sdk/langtrace.py,sha256=_ZvCPqk2i9qXFxyJ7-jIJvEC97O9EM0rM_4_ngHskLI,14684
118
- langtrace_python_sdk/version.py,sha256=ibJtaVWNEhFI-zyI5L2qNlBxgnDWfNBmPNsp-pdAAm8,22
117
+ langtrace_python_sdk/langtrace.py,sha256=k1Zp7AUZ6WKuDqbb7V3PGhHu7Vp8S8-cpevLu7QIdPM,14748
118
+ langtrace_python_sdk/version.py,sha256=edzbr-98v4uv9fXQrYJg9zw4sjVitC66PBVB8KQLB0I,22
119
119
  langtrace_python_sdk/constants/__init__.py,sha256=3CNYkWMdd1DrkGqzLUgNZXjdAlM6UFMlf_F-odAToyc,146
120
120
  langtrace_python_sdk/constants/exporter/langtrace_exporter.py,sha256=EVCrouYCpY98f0KSaKr4PzNxPULTZZO6dSA_crEOyJU,106
121
121
  langtrace_python_sdk/constants/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -123,7 +123,7 @@ langtrace_python_sdk/constants/instrumentation/anthropic.py,sha256=YX3llt3zwDY6X
123
123
  langtrace_python_sdk/constants/instrumentation/aws_bedrock.py,sha256=QwKtO4NBarOZoGkt5cFCcpxAw3zvZxcMMWBbzPPGv-g,422
124
124
  langtrace_python_sdk/constants/instrumentation/chroma.py,sha256=hiPGYdHS0Yj4Kh3eaYBbuCAl_swqIygu80yFqkOgdak,955
125
125
  langtrace_python_sdk/constants/instrumentation/cohere.py,sha256=9yD133VdrYZ5BoJR4nJHlj67gHEImB9-KsD-NkzHW1I,1159
126
- langtrace_python_sdk/constants/instrumentation/common.py,sha256=OCml2ysh-Y5M_Jj4fQhFePR3qikRCmgJUkvdIwFUqAk,1278
126
+ langtrace_python_sdk/constants/instrumentation/common.py,sha256=ZW4_dM-2xWyf-Mw4rqpZtfg_a9KSGX_1lhR-TOq-A4Y,1298
127
127
  langtrace_python_sdk/constants/instrumentation/embedchain.py,sha256=HodCJvaFjILoOG50OwFObxfVxt_8VUaIAIqvgoN3tzo,278
128
128
  langtrace_python_sdk/constants/instrumentation/gemini.py,sha256=UAmfgg9FM7uNeOCdPfWlir6OIH-8BoxFGPRpdBd9ZZs,358
129
129
  langtrace_python_sdk/constants/instrumentation/groq.py,sha256=VFXmIl4aqGY_fS0PAmjPj_Qm7Tibxbx7Ur_e7rQpqXc,134
@@ -140,7 +140,10 @@ langtrace_python_sdk/constants/instrumentation/weaviate.py,sha256=gtv-JBxvNGClEM
140
140
  langtrace_python_sdk/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
141
  langtrace_python_sdk/extensions/langtrace_exporter.py,sha256=ckd8dMmY6h2oxE04p1JFLwUB5PSJX_Cy4eDFEM6aj4Y,6605
142
142
  langtrace_python_sdk/extensions/langtrace_filesystem.py,sha256=34fZutG28EJ66l67OvTGsydAH3ZpXgikdE7hVLqBpG4,7863
143
- langtrace_python_sdk/instrumentation/__init__.py,sha256=GcMx5OXJlbFA33JlY6i7Ulw0rDhxgoGHN5nqJimK51o,2468
143
+ langtrace_python_sdk/instrumentation/__init__.py,sha256=UcdRFsfst03uzSQt5LefGcPMqBGueaMKSX5PVFG6OwE,2533
144
+ langtrace_python_sdk/instrumentation/agno/__init__.py,sha256=95fn4oA-CHB0mxc6KnVB20KSbXGl_ZZr9n99EEaXzrY,91
145
+ langtrace_python_sdk/instrumentation/agno/instrumentation.py,sha256=CrwHzkzLpdo2m2nBHE69d8MIFMxZuvTsT1LTxqlTWV0,2664
146
+ langtrace_python_sdk/instrumentation/agno/patch.py,sha256=EOaz3n_FYx7qXtd_liSjvBqjvD5E1ze6FL1K51v8NBc,12060
144
147
  langtrace_python_sdk/instrumentation/anthropic/__init__.py,sha256=donrurJAGYlxrSRA3BIf76jGeUcAx9Tq8CVpah68S0Y,101
145
148
  langtrace_python_sdk/instrumentation/anthropic/instrumentation.py,sha256=ndXdruI0BG7n75rsuEpKjfzePxrZxg40gZ39ONmD_v4,1845
146
149
  langtrace_python_sdk/instrumentation/anthropic/patch.py,sha256=ztPN4VZujoxYOKhTbFnup7Ibms9NAzYCPAJY43NUgKw,4935
@@ -290,8 +293,8 @@ tests/pinecone/cassettes/test_query.yaml,sha256=b5v9G3ssUy00oG63PlFUR3JErF2Js-5A
290
293
  tests/pinecone/cassettes/test_upsert.yaml,sha256=neWmQ1v3d03V8WoLl8FoFeeCYImb8pxlJBWnFd_lITU,38607
291
294
  tests/qdrant/conftest.py,sha256=9n0uHxxIjWk9fbYc4bx-uP8lSAgLBVx-cV9UjnsyCHM,381
292
295
  tests/qdrant/test_qdrant.py,sha256=pzjAjVY2kmsmGfrI2Gs2xrolfuaNHz7l1fqGQCjp5_o,3353
293
- langtrace_python_sdk-3.7.0.dist-info/METADATA,sha256=j2FPiSVBVA-scxnzPs-H8a7QTvPjGQHbTp3NIEX_s4o,15792
294
- langtrace_python_sdk-3.7.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
295
- langtrace_python_sdk-3.7.0.dist-info/entry_points.txt,sha256=1_b9-qvf2fE7uQNZcbUei9vLpFZBbbh9LrtGw95ssAo,70
296
- langtrace_python_sdk-3.7.0.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
297
- langtrace_python_sdk-3.7.0.dist-info/RECORD,,
296
+ langtrace_python_sdk-3.8.0.dist-info/METADATA,sha256=42XsIyqMHzukQVePvhG78-ITceSu6l6yXFWd3_C4zZ4,15792
297
+ langtrace_python_sdk-3.8.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
298
+ langtrace_python_sdk-3.8.0.dist-info/entry_points.txt,sha256=1_b9-qvf2fE7uQNZcbUei9vLpFZBbbh9LrtGw95ssAo,70
299
+ langtrace_python_sdk-3.8.0.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
300
+ langtrace_python_sdk-3.8.0.dist-info/RECORD,,