lmnr 0.4.29b4__py3-none-any.whl → 0.4.31__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.
- lmnr/__init__.py +1 -0
- lmnr/sdk/laminar.py +134 -21
- lmnr/traceloop_sdk/tracing/attributes.py +1 -0
- lmnr/traceloop_sdk/tracing/tracing.py +0 -13
- {lmnr-0.4.29b4.dist-info → lmnr-0.4.31.dist-info}/METADATA +34 -52
- {lmnr-0.4.29b4.dist-info → lmnr-0.4.31.dist-info}/RECORD +9 -9
- {lmnr-0.4.29b4.dist-info → lmnr-0.4.31.dist-info}/LICENSE +0 -0
- {lmnr-0.4.29b4.dist-info → lmnr-0.4.31.dist-info}/WHEEL +0 -0
- {lmnr-0.4.29b4.dist-info → lmnr-0.4.31.dist-info}/entry_points.txt +0 -0
lmnr/__init__.py
CHANGED
lmnr/sdk/laminar.py
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
import
|
2
|
-
from
|
3
|
-
from opentelemetry import context
|
4
|
-
from opentelemetry.trace import (
|
5
|
-
INVALID_SPAN,
|
6
|
-
get_current_span,
|
7
|
-
)
|
1
|
+
from contextlib import contextmanager
|
2
|
+
from contextvars import Context
|
3
|
+
from opentelemetry import context, trace
|
8
4
|
from opentelemetry.util.types import AttributeValue
|
9
5
|
from opentelemetry.context import set_value, attach, detach
|
10
6
|
from lmnr.traceloop_sdk import Traceloop
|
7
|
+
from lmnr.traceloop_sdk.instruments import Instruments
|
11
8
|
from lmnr.traceloop_sdk.tracing import get_tracer
|
12
|
-
from lmnr.traceloop_sdk.tracing.attributes import
|
9
|
+
from lmnr.traceloop_sdk.tracing.attributes import (
|
10
|
+
Attributes,
|
11
|
+
SPAN_TYPE,
|
12
|
+
OVERRIDE_PARENT_SPAN,
|
13
|
+
)
|
13
14
|
from lmnr.traceloop_sdk.decorators.base import json_dumps
|
14
|
-
from contextlib import contextmanager
|
15
15
|
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
16
16
|
|
17
17
|
from pydantic.alias_generators import to_snake
|
@@ -23,6 +23,8 @@ import dotenv
|
|
23
23
|
import json
|
24
24
|
import logging
|
25
25
|
import os
|
26
|
+
import random
|
27
|
+
import re
|
26
28
|
import requests
|
27
29
|
import urllib.parse
|
28
30
|
import uuid
|
@@ -196,8 +198,8 @@ class Laminar:
|
|
196
198
|
"API key or set the LMNR_PROJECT_API_KEY environment variable"
|
197
199
|
)
|
198
200
|
try:
|
199
|
-
current_span = get_current_span()
|
200
|
-
if current_span != INVALID_SPAN:
|
201
|
+
current_span = trace.get_current_span()
|
202
|
+
if current_span != trace.INVALID_SPAN:
|
201
203
|
parent_span_id = parent_span_id or uuid.UUID(
|
202
204
|
int=current_span.get_span_context().span_id
|
203
205
|
)
|
@@ -276,8 +278,8 @@ class Laminar:
|
|
276
278
|
if value is not None:
|
277
279
|
event["lmnr.event.value"] = value
|
278
280
|
|
279
|
-
current_span = get_current_span()
|
280
|
-
if current_span == INVALID_SPAN:
|
281
|
+
current_span = trace.get_current_span()
|
282
|
+
if current_span == trace.INVALID_SPAN:
|
281
283
|
cls.__logger.warning(
|
282
284
|
"`Laminar().event()` called outside of span context. "
|
283
285
|
f"Event '{name}' will not be recorded in the trace. "
|
@@ -294,6 +296,8 @@ class Laminar:
|
|
294
296
|
name: str,
|
295
297
|
input: Any = None,
|
296
298
|
span_type: Union[Literal["DEFAULT"], Literal["LLM"]] = "DEFAULT",
|
299
|
+
context: Optional[Context] = None,
|
300
|
+
trace_id: Optional[uuid.UUID] = None,
|
297
301
|
):
|
298
302
|
"""Start a new span as the current span. Useful for manual
|
299
303
|
instrumentation. If `span_type` is set to `"LLM"`, you should report
|
@@ -314,30 +318,139 @@ class Laminar:
|
|
314
318
|
span_type (Union[Literal["DEFAULT"], Literal["LLM"]], optional):\
|
315
319
|
type of the span. If you use `"LLM"`, you should report usage\
|
316
320
|
and response attributes manually. Defaults to "DEFAULT".
|
321
|
+
context (Optional[Context], optional): raw OpenTelemetry context\
|
322
|
+
to attach the span to. Defaults to None.
|
323
|
+
trace_id (Optional[uuid.UUID], optional): [EXPERIMENTAL] override\
|
324
|
+
the trace id for the span. If not provided, use the current\
|
325
|
+
trace id. Defaults to None.
|
317
326
|
"""
|
327
|
+
|
318
328
|
with get_tracer() as tracer:
|
319
329
|
span_path = get_span_path(name)
|
320
|
-
ctx = set_value("span_path", span_path)
|
330
|
+
ctx = set_value("span_path", span_path, context)
|
331
|
+
if trace_id is not None:
|
332
|
+
if isinstance(trace_id, uuid.UUID):
|
333
|
+
span_context = trace.SpanContext(
|
334
|
+
trace_id=int(trace_id),
|
335
|
+
span_id=random.getrandbits(64),
|
336
|
+
is_remote=False,
|
337
|
+
trace_flags=trace.TraceFlags(trace.TraceFlags.SAMPLED),
|
338
|
+
)
|
339
|
+
ctx = trace.set_span_in_context(
|
340
|
+
trace.NonRecordingSpan(span_context), ctx
|
341
|
+
)
|
342
|
+
else:
|
343
|
+
cls.__logger.warning(
|
344
|
+
"trace_id provided to `Laminar.start_as_current_span`"
|
345
|
+
" is not a valid UUID"
|
346
|
+
)
|
321
347
|
ctx_token = attach(ctx)
|
322
348
|
with tracer.start_as_current_span(
|
323
349
|
name,
|
324
350
|
context=ctx,
|
325
|
-
attributes={SPAN_PATH: span_path},
|
351
|
+
attributes={SPAN_PATH: span_path, SPAN_TYPE: span_type},
|
326
352
|
) as span:
|
353
|
+
if trace_id is not None and isinstance(trace_id, uuid.UUID):
|
354
|
+
span.set_attribute(OVERRIDE_PARENT_SPAN, True)
|
327
355
|
if input is not None:
|
328
356
|
span.set_attribute(
|
329
357
|
SPAN_INPUT,
|
330
358
|
json_dumps(input),
|
331
359
|
)
|
332
|
-
span.set_attribute(SPAN_TYPE, span_type)
|
333
360
|
yield span
|
334
361
|
|
335
|
-
# TODO: Figure out if this is necessary
|
362
|
+
# # TODO: Figure out if this is necessary
|
336
363
|
try:
|
337
364
|
detach(ctx_token)
|
338
365
|
except Exception:
|
339
366
|
pass
|
340
367
|
|
368
|
+
@classmethod
|
369
|
+
def start_span(
|
370
|
+
cls,
|
371
|
+
name: str,
|
372
|
+
input: Any = None,
|
373
|
+
span_type: Union[Literal["DEFAULT"], Literal["LLM"]] = "DEFAULT",
|
374
|
+
context: Optional[Context] = None,
|
375
|
+
trace_id: Optional[uuid.UUID] = None,
|
376
|
+
):
|
377
|
+
"""Start a new span. Useful for manual instrumentation.
|
378
|
+
If `span_type` is set to `"LLM"`, you should report usage and response
|
379
|
+
attributes manually. See `Laminar.set_span_attributes` for more
|
380
|
+
information.
|
381
|
+
|
382
|
+
Usage example:
|
383
|
+
```python
|
384
|
+
from src.lmnr import Laminar, use_span
|
385
|
+
def foo(span):
|
386
|
+
with use_span(span):
|
387
|
+
with Laminar.start_as_current_span("foo_inner"):
|
388
|
+
some_function()
|
389
|
+
|
390
|
+
def bar():
|
391
|
+
with use_span(span):
|
392
|
+
openai_client.chat.completions.create()
|
393
|
+
|
394
|
+
span = Laminar.start_span("outer")
|
395
|
+
foo(span)
|
396
|
+
bar(span)
|
397
|
+
# IMPORTANT: End the span manually
|
398
|
+
span.end()
|
399
|
+
|
400
|
+
# Results in:
|
401
|
+
# | outer
|
402
|
+
# | | foo
|
403
|
+
# | | | foo_inner
|
404
|
+
# | | bar
|
405
|
+
# | | | openai.chat
|
406
|
+
```
|
407
|
+
|
408
|
+
Args:
|
409
|
+
name (str): name of the span
|
410
|
+
input (Any, optional): input to the span. Will be sent as an\
|
411
|
+
attribute, so must be json serializable. Defaults to None.
|
412
|
+
span_type (Union[Literal["DEFAULT"], Literal["LLM"]], optional):\
|
413
|
+
type of the span. If you use `"LLM"`, you should report usage\
|
414
|
+
and response attributes manually. Defaults to "DEFAULT".
|
415
|
+
context (Optional[Context], optional): raw OpenTelemetry context\
|
416
|
+
to attach the span to. Defaults to None.
|
417
|
+
trace_id (Optional[uuid.UUID], optional): [EXPERIMENTAL] override\
|
418
|
+
the trace id for the span. If not provided, use the current\
|
419
|
+
trace id. Defaults to None.
|
420
|
+
"""
|
421
|
+
with get_tracer() as tracer:
|
422
|
+
span_path = get_span_path(name)
|
423
|
+
ctx = set_value("span_path", span_path, context)
|
424
|
+
if trace_id is not None:
|
425
|
+
if isinstance(trace_id, uuid.UUID):
|
426
|
+
span_context = trace.SpanContext(
|
427
|
+
trace_id=int(trace_id),
|
428
|
+
span_id=random.getrandbits(64),
|
429
|
+
is_remote=False,
|
430
|
+
trace_flags=trace.TraceFlags(trace.TraceFlags.SAMPLED),
|
431
|
+
)
|
432
|
+
ctx = trace.set_span_in_context(
|
433
|
+
trace.NonRecordingSpan(span_context), ctx
|
434
|
+
)
|
435
|
+
else:
|
436
|
+
cls.__logger.warning(
|
437
|
+
"trace_id provided to `Laminar.start_span`"
|
438
|
+
" is not a valid UUID"
|
439
|
+
)
|
440
|
+
span = tracer.start_span(
|
441
|
+
name,
|
442
|
+
context=ctx,
|
443
|
+
attributes={SPAN_PATH: span_path, SPAN_TYPE: span_type},
|
444
|
+
)
|
445
|
+
if trace_id is not None and isinstance(trace_id, uuid.UUID):
|
446
|
+
span.set_attribute(OVERRIDE_PARENT_SPAN, True)
|
447
|
+
if input is not None:
|
448
|
+
span.set_attribute(
|
449
|
+
SPAN_INPUT,
|
450
|
+
json_dumps(input),
|
451
|
+
)
|
452
|
+
return span
|
453
|
+
|
341
454
|
@classmethod
|
342
455
|
def set_span_output(cls, output: Any = None):
|
343
456
|
"""Set the output of the current span. Useful for manual
|
@@ -347,8 +460,8 @@ class Laminar:
|
|
347
460
|
output (Any, optional): output of the span. Will be sent as an\
|
348
461
|
attribute, so must be json serializable. Defaults to None.
|
349
462
|
"""
|
350
|
-
span = get_current_span()
|
351
|
-
if output is not None and span != INVALID_SPAN:
|
463
|
+
span = trace.get_current_span()
|
464
|
+
if output is not None and span != trace.INVALID_SPAN:
|
352
465
|
span.set_attribute(SPAN_OUTPUT, json_dumps(output))
|
353
466
|
|
354
467
|
@classmethod
|
@@ -378,8 +491,8 @@ class Laminar:
|
|
378
491
|
Args:
|
379
492
|
attributes (dict[ATTRIBUTES, Any]): attributes to set for the span
|
380
493
|
"""
|
381
|
-
span = get_current_span()
|
382
|
-
if span == INVALID_SPAN:
|
494
|
+
span = trace.get_current_span()
|
495
|
+
if span == trace.INVALID_SPAN:
|
383
496
|
return
|
384
497
|
|
385
498
|
for key, value in attributes.items():
|
@@ -6,6 +6,7 @@ SPAN_OUTPUT = "lmnr.span.output"
|
|
6
6
|
SPAN_TYPE = "lmnr.span.type"
|
7
7
|
SPAN_PATH = "lmnr.span.path"
|
8
8
|
SPAN_INSTRUMENTATION_SOURCE = "lmnr.span.instrumentation_source"
|
9
|
+
OVERRIDE_PARENT_SPAN = "lmnr.internal.override_parent_span"
|
9
10
|
|
10
11
|
ASSOCIATION_PROPERTIES = "lmnr.association.properties"
|
11
12
|
SESSION_ID = "session_id"
|
@@ -184,8 +184,6 @@ class TracerWrapper(object):
|
|
184
184
|
def set_association_properties(properties: dict) -> None:
|
185
185
|
attach(set_value("association_properties", properties))
|
186
186
|
|
187
|
-
# TODO: When called inside observe decorator, this actually sets the properties on the parent span, not the current one
|
188
|
-
# Then, processor's on_start will assign this to current span
|
189
187
|
span = trace.get_current_span()
|
190
188
|
_set_association_properties_attributes(span, properties)
|
191
189
|
|
@@ -197,8 +195,6 @@ def update_association_properties(properties: dict) -> None:
|
|
197
195
|
|
198
196
|
attach(set_value("association_properties", association_properties))
|
199
197
|
|
200
|
-
# TODO: When called inside observe decorator, this actually sets the properties on the parent span, not the current one
|
201
|
-
# Then, processor's on_start will assign this to current span
|
202
198
|
span = trace.get_current_span()
|
203
199
|
_set_association_properties_attributes(span, properties)
|
204
200
|
|
@@ -229,15 +225,6 @@ def set_managed_prompt_tracing_context(
|
|
229
225
|
attach(set_value("prompt_template_variables", template_variables))
|
230
226
|
|
231
227
|
|
232
|
-
def set_external_prompt_tracing_context(
|
233
|
-
template: str, variables: dict, version: int
|
234
|
-
) -> None:
|
235
|
-
attach(set_value("managed_prompt", False))
|
236
|
-
attach(set_value("prompt_version", version))
|
237
|
-
attach(set_value("prompt_template", template))
|
238
|
-
attach(set_value("prompt_template_variables", variables))
|
239
|
-
|
240
|
-
|
241
228
|
def init_spans_exporter(api_endpoint: str, headers: Dict[str, str]) -> SpanExporter:
|
242
229
|
if "http" in api_endpoint.lower() or "https" in api_endpoint.lower():
|
243
230
|
return HTTPExporter(endpoint=f"{api_endpoint}/v1/traces", headers=headers)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lmnr
|
3
|
-
Version: 0.4.
|
3
|
+
Version: 0.4.31
|
4
4
|
Summary: Python SDK for Laminar AI
|
5
5
|
License: Apache-2.0
|
6
6
|
Author: lmnr.ai
|
@@ -16,39 +16,39 @@ Requires-Dist: argparse (>=1.0,<2.0)
|
|
16
16
|
Requires-Dist: backoff (>=2.0,<3.0)
|
17
17
|
Requires-Dist: deprecated (>=1.0,<2.0)
|
18
18
|
Requires-Dist: jinja2 (>=3.0,<4.0)
|
19
|
-
Requires-Dist: opentelemetry-api (>=1.27.0
|
20
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (>=1.27.0
|
21
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-http (>=1.27.0
|
22
|
-
Requires-Dist: opentelemetry-instrumentation-alephalpha (>=0.33.
|
23
|
-
Requires-Dist: opentelemetry-instrumentation-anthropic (>=0.33.
|
24
|
-
Requires-Dist: opentelemetry-instrumentation-bedrock (>=0.33.
|
25
|
-
Requires-Dist: opentelemetry-instrumentation-chromadb (>=0.33.
|
26
|
-
Requires-Dist: opentelemetry-instrumentation-cohere (>=0.33.
|
27
|
-
Requires-Dist: opentelemetry-instrumentation-google-generativeai (>=0.33.
|
28
|
-
Requires-Dist: opentelemetry-instrumentation-groq (>=0.33.
|
29
|
-
Requires-Dist: opentelemetry-instrumentation-haystack (>=0.33.
|
30
|
-
Requires-Dist: opentelemetry-instrumentation-lancedb (>=0.33.
|
31
|
-
Requires-Dist: opentelemetry-instrumentation-langchain (>=0.33.
|
32
|
-
Requires-Dist: opentelemetry-instrumentation-llamaindex (>=0.33.
|
33
|
-
Requires-Dist: opentelemetry-instrumentation-marqo (>=0.33.
|
34
|
-
Requires-Dist: opentelemetry-instrumentation-milvus (>=0.33.
|
35
|
-
Requires-Dist: opentelemetry-instrumentation-mistralai (>=0.33.
|
36
|
-
Requires-Dist: opentelemetry-instrumentation-ollama (>=0.33.
|
37
|
-
Requires-Dist: opentelemetry-instrumentation-openai (>=0.33.
|
38
|
-
Requires-Dist: opentelemetry-instrumentation-pinecone (>=0.33.
|
39
|
-
Requires-Dist: opentelemetry-instrumentation-qdrant (>=0.33.
|
40
|
-
Requires-Dist: opentelemetry-instrumentation-replicate (>=0.33.
|
41
|
-
Requires-Dist: opentelemetry-instrumentation-requests (>=0.48b0
|
42
|
-
Requires-Dist: opentelemetry-instrumentation-sagemaker (>=0.33.
|
43
|
-
Requires-Dist: opentelemetry-instrumentation-sqlalchemy (>=0.48b0
|
44
|
-
Requires-Dist: opentelemetry-instrumentation-threading (>=0.48b0
|
45
|
-
Requires-Dist: opentelemetry-instrumentation-together (>=0.33.
|
46
|
-
Requires-Dist: opentelemetry-instrumentation-transformers (>=0.33.
|
47
|
-
Requires-Dist: opentelemetry-instrumentation-urllib3 (>=0.48b0
|
48
|
-
Requires-Dist: opentelemetry-instrumentation-vertexai (>=0.33.
|
49
|
-
Requires-Dist: opentelemetry-instrumentation-watsonx (>=0.33.
|
50
|
-
Requires-Dist: opentelemetry-instrumentation-weaviate (>=0.33.
|
51
|
-
Requires-Dist: opentelemetry-sdk (>=1.27.0
|
19
|
+
Requires-Dist: opentelemetry-api (>=1.27.0)
|
20
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (>=1.27.0)
|
21
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http (>=1.27.0)
|
22
|
+
Requires-Dist: opentelemetry-instrumentation-alephalpha (>=0.33.9)
|
23
|
+
Requires-Dist: opentelemetry-instrumentation-anthropic (>=0.33.9)
|
24
|
+
Requires-Dist: opentelemetry-instrumentation-bedrock (>=0.33.9)
|
25
|
+
Requires-Dist: opentelemetry-instrumentation-chromadb (>=0.33.9)
|
26
|
+
Requires-Dist: opentelemetry-instrumentation-cohere (>=0.33.9)
|
27
|
+
Requires-Dist: opentelemetry-instrumentation-google-generativeai (>=0.33.9)
|
28
|
+
Requires-Dist: opentelemetry-instrumentation-groq (>=0.33.9)
|
29
|
+
Requires-Dist: opentelemetry-instrumentation-haystack (>=0.33.9)
|
30
|
+
Requires-Dist: opentelemetry-instrumentation-lancedb (>=0.33.9)
|
31
|
+
Requires-Dist: opentelemetry-instrumentation-langchain (>=0.33.9)
|
32
|
+
Requires-Dist: opentelemetry-instrumentation-llamaindex (>=0.33.9)
|
33
|
+
Requires-Dist: opentelemetry-instrumentation-marqo (>=0.33.9)
|
34
|
+
Requires-Dist: opentelemetry-instrumentation-milvus (>=0.33.9)
|
35
|
+
Requires-Dist: opentelemetry-instrumentation-mistralai (>=0.33.9)
|
36
|
+
Requires-Dist: opentelemetry-instrumentation-ollama (>=0.33.9)
|
37
|
+
Requires-Dist: opentelemetry-instrumentation-openai (>=0.33.9)
|
38
|
+
Requires-Dist: opentelemetry-instrumentation-pinecone (>=0.33.9)
|
39
|
+
Requires-Dist: opentelemetry-instrumentation-qdrant (>=0.33.9)
|
40
|
+
Requires-Dist: opentelemetry-instrumentation-replicate (>=0.33.9)
|
41
|
+
Requires-Dist: opentelemetry-instrumentation-requests (>=0.48b0)
|
42
|
+
Requires-Dist: opentelemetry-instrumentation-sagemaker (>=0.33.9)
|
43
|
+
Requires-Dist: opentelemetry-instrumentation-sqlalchemy (>=0.48b0)
|
44
|
+
Requires-Dist: opentelemetry-instrumentation-threading (>=0.48b0)
|
45
|
+
Requires-Dist: opentelemetry-instrumentation-together (>=0.33.9)
|
46
|
+
Requires-Dist: opentelemetry-instrumentation-transformers (>=0.33.9)
|
47
|
+
Requires-Dist: opentelemetry-instrumentation-urllib3 (>=0.48b0)
|
48
|
+
Requires-Dist: opentelemetry-instrumentation-vertexai (>=0.33.9)
|
49
|
+
Requires-Dist: opentelemetry-instrumentation-watsonx (>=0.33.9)
|
50
|
+
Requires-Dist: opentelemetry-instrumentation-weaviate (>=0.33.9)
|
51
|
+
Requires-Dist: opentelemetry-sdk (>=1.27.0)
|
52
52
|
Requires-Dist: opentelemetry-semantic-conventions-ai (==0.4.2)
|
53
53
|
Requires-Dist: pydantic (>=2.7,<3.0)
|
54
54
|
Requires-Dist: python-dotenv (>=1.0,<2.0)
|
@@ -172,24 +172,6 @@ If you want to fully disable any kind of autoinstrumentation, pass an empty set
|
|
172
172
|
|
173
173
|
Autoinstrumentations are provided by Traceloop's [OpenLLMetry](https://github.com/traceloop/openllmetry).
|
174
174
|
|
175
|
-
## Sending events
|
176
|
-
|
177
|
-
You can send laminar events using `L.event(name, value)`.
|
178
|
-
|
179
|
-
Read our [docs](https://docs.lmnr.ai) to learn more about events and examples.
|
180
|
-
|
181
|
-
### Example
|
182
|
-
|
183
|
-
```python
|
184
|
-
from lmnr import Laminar as L
|
185
|
-
# ...
|
186
|
-
poem = response.choices[0].message.content
|
187
|
-
|
188
|
-
# this will register True or False value with Laminar
|
189
|
-
L.event("topic alignment", topic in poem)
|
190
|
-
|
191
|
-
```
|
192
|
-
|
193
175
|
## Evaluations
|
194
176
|
|
195
177
|
### Quickstart
|
@@ -1,10 +1,10 @@
|
|
1
|
-
lmnr/__init__.py,sha256=
|
1
|
+
lmnr/__init__.py,sha256=bIkXw003GaigTxNfGE_gwVtTDGdSdAPUr6CS_nN51oA,430
|
2
2
|
lmnr/cli.py,sha256=Ptvm5dsNLKUY5lwnN8XkT5GtCYjzpRNi2WvefknB3OQ,1079
|
3
3
|
lmnr/sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
lmnr/sdk/datasets.py,sha256=w8U9E6fvetAo65Cb2CbYzlfhY8CfXAR-VysrakG6-4I,1591
|
5
5
|
lmnr/sdk/decorators.py,sha256=ZSDaEZyjo-RUzRCltsNbe6x0t9SKl2xRQ2q4uaKvXtk,2250
|
6
6
|
lmnr/sdk/evaluations.py,sha256=5Vfyp0aIjuGpqfuM3cqsaaLpcoO7z6lcOOKxnyHCNHk,16264
|
7
|
-
lmnr/sdk/laminar.py,sha256=
|
7
|
+
lmnr/sdk/laminar.py,sha256=2EMMeppaR8GuB29YGS3WqGssMQvneUxXeOV7w5Ahv4Q,23462
|
8
8
|
lmnr/sdk/log.py,sha256=cZBeUoSK39LMEV-X4-eEhTWOciULRfHaKfRK8YqIM8I,1532
|
9
9
|
lmnr/sdk/types.py,sha256=qGD1tkGszd-_sZJaZ_Zx9U_CdUYzoDkUeN2g-o48Gls,5588
|
10
10
|
lmnr/sdk/utils.py,sha256=Uk8y15x-sd5tP2ERONahElLDJVEy_3dA_1_5g9A6auY,3358
|
@@ -36,17 +36,17 @@ lmnr/traceloop_sdk/tests/test_sdk_initialization.py,sha256=fRaf6lrxFzJIN94P1Tav_
|
|
36
36
|
lmnr/traceloop_sdk/tests/test_tasks.py,sha256=xlEx8BKp4yG83SCjK5WkPGfyC33JSrx4h8VyjVwGbgw,906
|
37
37
|
lmnr/traceloop_sdk/tests/test_workflows.py,sha256=RVcfY3WAFIDZC15-aSua21aoQyYeWE7KypDyUsm-2EM,9372
|
38
38
|
lmnr/traceloop_sdk/tracing/__init__.py,sha256=Ckq7zCM26VdJVB5tIZv0GTPyMZKyfso_KWD5yPHaqdo,66
|
39
|
-
lmnr/traceloop_sdk/tracing/attributes.py,sha256=
|
39
|
+
lmnr/traceloop_sdk/tracing/attributes.py,sha256=h970zmb7yTszzf2oHBfOY3cDYhE6O7LhkiHLqa_7x1k,1261
|
40
40
|
lmnr/traceloop_sdk/tracing/content_allow_list.py,sha256=3feztm6PBWNelc8pAZUcQyEGyeSpNiVKjOaDk65l2ps,846
|
41
41
|
lmnr/traceloop_sdk/tracing/context_manager.py,sha256=csVlB6kDmbgSPsROHwnddvGGblx55v6lJMRj0wsSMQM,304
|
42
|
-
lmnr/traceloop_sdk/tracing/tracing.py,sha256=
|
42
|
+
lmnr/traceloop_sdk/tracing/tracing.py,sha256=Wo3ooDmuUiiqIA7ULpDCjxP6Z5UFu7Ai5ViSFLwYV8Q,28741
|
43
43
|
lmnr/traceloop_sdk/utils/__init__.py,sha256=pNhf0G3vTd5ccoc03i1MXDbricSaiqCbi1DLWhSekK8,604
|
44
44
|
lmnr/traceloop_sdk/utils/in_memory_span_exporter.py,sha256=H_4TRaThMO1H6vUQ0OpQvzJk_fZH0OOsRAM1iZQXsR8,2112
|
45
45
|
lmnr/traceloop_sdk/utils/json_encoder.py,sha256=dK6b_axr70IYL7Vv-bu4wntvDDuyntoqsHaddqX7P58,463
|
46
46
|
lmnr/traceloop_sdk/utils/package_check.py,sha256=TZSngzJOpFhfUZLXIs38cpMxQiZSmp0D-sCrIyhz7BA,251
|
47
47
|
lmnr/traceloop_sdk/version.py,sha256=OlatFEFA4ttqSSIiV8jdE-sq3KG5zu2hnC4B4mzWF3s,23
|
48
|
-
lmnr-0.4.
|
49
|
-
lmnr-0.4.
|
50
|
-
lmnr-0.4.
|
51
|
-
lmnr-0.4.
|
52
|
-
lmnr-0.4.
|
48
|
+
lmnr-0.4.31.dist-info/LICENSE,sha256=67b_wJHVV1CBaWkrKFWU1wyqTPSdzH77Ls-59631COg,10411
|
49
|
+
lmnr-0.4.31.dist-info/METADATA,sha256=B-4622Jd4h5dX-iOELI_q8ovk30KRW4fIsdA0cGzZ3A,10273
|
50
|
+
lmnr-0.4.31.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
51
|
+
lmnr-0.4.31.dist-info/entry_points.txt,sha256=K1jE20ww4jzHNZLnsfWBvU3YKDGBgbOiYG5Y7ivQcq4,37
|
52
|
+
lmnr-0.4.31.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|