lmnr 0.7.0__py3-none-any.whl → 0.7.1__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/sdk/laminar.py CHANGED
@@ -3,6 +3,12 @@ from contextvars import Context
3
3
  import warnings
4
4
  from lmnr.opentelemetry_lib import TracerManager
5
5
  from lmnr.opentelemetry_lib.tracing import TracerWrapper, get_current_context
6
+ from lmnr.opentelemetry_lib.tracing.context import (
7
+ CONTEXT_SESSION_ID_KEY,
8
+ CONTEXT_USER_ID_KEY,
9
+ attach_context,
10
+ get_event_attributes_from_context,
11
+ )
6
12
  from lmnr.opentelemetry_lib.tracing.instruments import Instruments
7
13
  from lmnr.opentelemetry_lib.tracing.tracer import get_tracer_with_context
8
14
  from lmnr.opentelemetry_lib.tracing.attributes import (
@@ -14,7 +20,7 @@ from lmnr.opentelemetry_lib.tracing.attributes import (
14
20
  from lmnr.opentelemetry_lib import MAX_MANUAL_SPAN_PAYLOAD_SIZE
15
21
  from lmnr.opentelemetry_lib.decorators import json_dumps
16
22
  from opentelemetry import trace
17
- from opentelemetry.context import attach, detach
23
+ from opentelemetry import context as context_api
18
24
  from opentelemetry.trace import INVALID_TRACE_ID, Span, Status, StatusCode, use_span
19
25
  from opentelemetry.sdk.trace.id_generator import RandomIdGenerator
20
26
  from opentelemetry.util.types import AttributeValue
@@ -196,18 +202,18 @@ class Laminar:
196
202
  def event(
197
203
  cls,
198
204
  name: str,
199
- value: AttributeValue | None = None,
205
+ attributes: dict[str, AttributeValue] | None = None,
200
206
  timestamp: datetime.datetime | int | None = None,
207
+ *,
208
+ user_id: str | None = None,
209
+ session_id: str | None = None,
201
210
  ):
202
- """Associate an event with the current span. If using manual\
203
- instrumentation, use raw OpenTelemetry `span.add_event()` instead.\
204
- `value` will be saved as a `lmnr.event.value` attribute.
211
+ """Associate an event with the current span. This is a wrapper around
212
+ `span.add_event()` that adds the event to the current span.
205
213
 
206
214
  Args:
207
215
  name (str): event name
208
- value (AttributeValue | None, optional): event value. Must be a\
209
- primitive type. Boolean `True` is assumed in the backend if\
210
- `value` is None.
216
+ attributes (dict[str, AttributeValue] | None, optional): event attributes.
211
217
  Defaults to None.
212
218
  timestamp (datetime.datetime | int | None, optional): If int, must\
213
219
  be epoch nanoseconds. If not specified, relies on the underlying\
@@ -219,22 +225,26 @@ class Laminar:
219
225
  if timestamp and isinstance(timestamp, datetime.datetime):
220
226
  timestamp = int(timestamp.timestamp() * 1e9)
221
227
 
222
- event = {
223
- "lmnr.event.type": "default",
224
- }
225
- if value is not None:
226
- event["lmnr.event.value"] = value
228
+ extra_attributes = get_event_attributes_from_context()
229
+
230
+ # override the user_id and session_id from the context with the ones
231
+ # passed as arguments
232
+ if user_id is not None:
233
+ extra_attributes["lmnr.event.user_id"] = user_id
234
+ if session_id is not None:
235
+ extra_attributes["lmnr.event.session_id"] = session_id
227
236
 
228
237
  current_span = trace.get_current_span(context=get_current_context())
229
238
  if current_span == trace.INVALID_SPAN:
230
- cls.__logger.warning(
231
- "`Laminar().event()` called outside of span context. "
232
- f"Event '{name}' will not be recorded in the trace. "
233
- "Make sure to annotate the function with a decorator"
234
- )
239
+ with cls.start_as_current_span(name) as span:
240
+ span.add_event(
241
+ name, {**(attributes or {}), **extra_attributes}, timestamp
242
+ )
235
243
  return
236
244
 
237
- current_span.add_event(name, event, timestamp)
245
+ current_span.add_event(
246
+ name, {**(attributes or {}), **extra_attributes}, timestamp
247
+ )
238
248
 
239
249
  @classmethod
240
250
  @contextmanager
@@ -306,7 +316,7 @@ class Laminar:
306
316
  ctx = trace.set_span_in_context(
307
317
  trace.NonRecordingSpan(span_context), ctx
308
318
  )
309
- ctx_token = attach(ctx)
319
+ ctx_token = context_api.attach(ctx)
310
320
  label_props = {}
311
321
  try:
312
322
  if labels:
@@ -355,9 +365,8 @@ class Laminar:
355
365
  yield span
356
366
 
357
367
  wrapper.pop_span_context()
358
- # TODO: Figure out if this is necessary
359
368
  try:
360
- detach(ctx_token)
369
+ context_api.detach(ctx_token)
361
370
  except Exception:
362
371
  pass
363
372
 
@@ -528,10 +537,16 @@ class Laminar:
528
537
  wrapper = TracerWrapper()
529
538
 
530
539
  try:
531
- wrapper.push_span_context(span)
540
+ context = wrapper.push_span_context(span)
541
+ # Some auto-instrumentations are not under our control, so they
542
+ # don't have access to our isolated context. We attach the context
543
+ # to the OTEL global context, so that spans know their parent
544
+ # span and trace_id.
545
+ context_token = context_api.attach(context)
532
546
  try:
533
547
  yield span
534
548
  finally:
549
+ context_api.detach(context_token)
535
550
  wrapper.pop_span_context()
536
551
 
537
552
  # Record only exceptions that inherit Exception class but not BaseException, because
@@ -541,7 +556,9 @@ class Laminar:
541
556
  if isinstance(span, Span) and span.is_recording():
542
557
  # Record the exception as an event
543
558
  if record_exception:
544
- span.record_exception(exc)
559
+ span.record_exception(
560
+ exc, attributes=get_event_attributes_from_context()
561
+ )
545
562
 
546
563
  # Set status in case exception was raised
547
564
  if set_status_on_exception:
@@ -737,7 +754,11 @@ class Laminar:
737
754
  if not cls.is_initialized():
738
755
  return
739
756
 
740
- span = trace.get_current_span(context=get_current_context())
757
+ context = get_current_context()
758
+ context = context_api.set_value(CONTEXT_SESSION_ID_KEY, session_id, context)
759
+ attach_context(context)
760
+
761
+ span = trace.get_current_span(context=context)
741
762
  if span == trace.INVALID_SPAN:
742
763
  cls.__logger.warning("No active span to set session id on")
743
764
  return
@@ -755,7 +776,11 @@ class Laminar:
755
776
  if not cls.is_initialized():
756
777
  return
757
778
 
758
- span = trace.get_current_span(context=get_current_context())
779
+ context = get_current_context()
780
+ context = context_api.set_value(CONTEXT_USER_ID_KEY, user_id, context)
781
+ attach_context(context)
782
+
783
+ span = trace.get_current_span(context=context)
759
784
  if span == trace.INVALID_SPAN:
760
785
  cls.__logger.warning("No active span to set user id on")
761
786
  return
lmnr/sdk/types.py CHANGED
@@ -13,6 +13,8 @@ from typing import Any, Awaitable, Callable, Literal, Optional
13
13
 
14
14
  from .utils import serialize
15
15
 
16
+ EVALUATION_DATAPOINT_MAX_DATA_LENGTH = 8_000_000 # 8MB
17
+
16
18
 
17
19
  Numeric = int | float
18
20
  NumericTypes = (int, float) # for use with isinstance
@@ -75,8 +77,12 @@ class PartialEvaluationDatapoint(pydantic.BaseModel):
75
77
  try:
76
78
  return {
77
79
  "id": str(self.id),
78
- "data": str(serialize(self.data))[:100],
79
- "target": str(serialize(self.target))[:100],
80
+ "data": str(serialize(self.data))[
81
+ :EVALUATION_DATAPOINT_MAX_DATA_LENGTH
82
+ ],
83
+ "target": str(serialize(self.target))[
84
+ :EVALUATION_DATAPOINT_MAX_DATA_LENGTH
85
+ ],
80
86
  "index": self.index,
81
87
  "traceId": str(self.trace_id),
82
88
  "executorSpanId": str(self.executor_span_id),
@@ -106,9 +112,15 @@ class EvaluationResultDatapoint(pydantic.BaseModel):
106
112
  # preserve only preview of the data, target and executor output
107
113
  # (full data is in trace)
108
114
  "id": str(self.id),
109
- "data": str(serialize(self.data))[:100],
110
- "target": str(serialize(self.target))[:100],
111
- "executorOutput": str(serialize(self.executor_output))[:100],
115
+ "data": str(serialize(self.data))[
116
+ :EVALUATION_DATAPOINT_MAX_DATA_LENGTH
117
+ ],
118
+ "target": str(serialize(self.target))[
119
+ :EVALUATION_DATAPOINT_MAX_DATA_LENGTH
120
+ ],
121
+ "executorOutput": str(serialize(self.executor_output))[
122
+ :EVALUATION_DATAPOINT_MAX_DATA_LENGTH
123
+ ],
112
124
  "scores": self.scores,
113
125
  "traceId": str(self.trace_id),
114
126
  "executorSpanId": str(self.executor_span_id),
lmnr/version.py CHANGED
@@ -3,7 +3,7 @@ import httpx
3
3
  from packaging import version
4
4
 
5
5
 
6
- __version__ = "0.7.0"
6
+ __version__ = "0.7.1"
7
7
  PYTHON_VERSION = f"{sys.version_info.major}.{sys.version_info.minor}"
8
8
 
9
9
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lmnr
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Summary: Python SDK for Laminar
5
5
  Author: lmnr.ai
6
6
  Author-email: lmnr.ai <founders@lmnr.ai>
@@ -2,8 +2,8 @@ lmnr/__init__.py,sha256=47422a1fd58f5be3e7870ccb3ed7de4f1ac520d942e0c83cbcf903b0
2
2
  lmnr/cli.py,sha256=b8780b51f37fe9e20db5495c41d3ad3837f6b48f408b09a58688d017850c0796,6047
3
3
  lmnr/opentelemetry_lib/.flake8,sha256=6c2c6e0e51b1dd8439e501ca3e21899277076a787da868d0254ba37056b79405,150
4
4
  lmnr/opentelemetry_lib/__init__.py,sha256=6962aca915d485586ed814b9e799ced898594ac2bc6d35329405705b26eab861,2160
5
- lmnr/opentelemetry_lib/decorators/__init__.py,sha256=7bd673692d15591ca1fbf48e16ab63e6e4d6a61d5123b41ad680687145b8efb6,9533
6
- lmnr/opentelemetry_lib/litellm/__init__.py,sha256=c23a38e88b7919d866c4f09a880f2468ac9acf756cb910d1614082b2dbcad3e6,14858
5
+ lmnr/opentelemetry_lib/decorators/__init__.py,sha256=216536fb3ac8de18e6dfe4dfb2e571074c727466f97e6dcd609339c8458a345a,11511
6
+ lmnr/opentelemetry_lib/litellm/__init__.py,sha256=8a3679381ca5660cf53e4b7571850906c6635264129149adebda8f3f7c248f68,15127
7
7
  lmnr/opentelemetry_lib/litellm/utils.py,sha256=da8cf0553f82dc7203109f117a4c7b4185e8baf34caad12d7823875515201a27,539
8
8
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/__init__.py,sha256=984b8f97eb31d4345ea4c52237451f791af189c4a94aaf2625edfd05107d8a6e,20696
9
9
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/config.py,sha256=972919b821b9b7e5dc7cd191ba7e78b30b6efa5d63514e8cb301996d6386392c,369
@@ -13,7 +13,7 @@ lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/span_utils.py,sha
13
13
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/streaming.py,sha256=e999ad093275c5195b5d31dfea456726afd5f474cd779be7af892f54d7b416b8,10129
14
14
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/utils.py,sha256=0044f02da8b99322fdbf3f8f6663f04ff5d1295ddae92a635fd16eb685d5fbb6,5386
15
15
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/version.py,sha256=5aacde4ca55ef50ed07a239ad8a86889e0621b1cc72be19bd93be7c9e20910a9,23
16
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/__init__.py,sha256=7d2cfb6007cbed2c9809f07911d42e07cc2a520ddafb384bd7a750a75b6fd92a,20316
16
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/__init__.py,sha256=a47d4d1234e0278d1538748130a79c03d6cb3486976cb5d19578fe1b90f28e7b,20524
17
17
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/config.py,sha256=db9cdebc9ee0dccb493ffe608eede3047efec20ed26c3924b72b2e50edbd92c2,245
18
18
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/schema_utils.py,sha256=857a6bc52f8bfd4da72786173615d31faaf3f9378f8f6150ffe8f6f9c4bb78f9,685
19
19
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/utils.py,sha256=f1248196246826d899304e510c4c2df74088d8169d28f1d0aed578a7a6c3cbfd,7669
@@ -27,20 +27,20 @@ lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/version.py,sha256=5aac
27
27
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/langgraph/__init__.py,sha256=b77a70771741b95006cb27d7f9fc26e4b79b1f10ca24b93a3160a458c3397a9d,3313
28
28
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/langgraph/utils.py,sha256=9dff6c2595e79edb38818668aed1220efc188d8a982594c04f4ceeb6e3ff47a6,1512
29
29
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/__init__.py,sha256=8b91dc16af927eee75b969c0980c606680b347a87f8533bc0f4a092e5ec6e5c9,2071
30
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/__init__.py,sha256=dcc910aa6df02263cad89c1feac2aa21e316fdd6b491ebca2b93fd24a5149625,14911
31
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/chat_wrappers.py,sha256=59438bac0abb79bc7e5868a8bf5b975ff4e956fa31bf0569e0839b876188ef4a,33571
32
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/completion_wrappers.py,sha256=1ac4a2f05e9c548b19fa66b71208bb40b5585876d3ce4835ae8998fb94ad472a,9329
30
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/__init__.py,sha256=9d182c8cef5ee1e205dc4c2f7c8e49d8403ee9fee66072c5cfdd29a0d54f61a2,15149
31
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/chat_wrappers.py,sha256=6042b3bcf94f38c90bdebaa2c6c9ac1a4723d1801b8e7c20cf8cc3926cef83ad,38657
32
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/completion_wrappers.py,sha256=3a45c07d9d0f37baf409a48e2a1b577f28041c623c41f59ada1c87b94285ae3b,9537
33
33
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/config.py,sha256=8016e4af0291a77484ce88d7d1ca06146b1229ae0e0a0f46e042faf75b456a8f,507
34
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/embeddings_wrappers.py,sha256=345c4c795019418b9c7cbf4e571689b566f2b0e350579b48fd2f5f2535351586,9076
34
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/embeddings_wrappers.py,sha256=324eeeaf8dd862f49c15bb7290d414e77ad51cdf532c2cfd74358783cdf654a5,9330
35
35
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/event_emitter.py,sha256=9c96455b5ca2064dd3a9fb570d78b14ebbdf3d02f8e33255ee9e301c31336c9e,3043
36
36
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/event_models.py,sha256=3c27c21b1aeb02bc19a91fb8c05717ae1c10ab4b01300c664aba42e0f50cb5a3,876
37
37
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/image_gen_wrappers.py,sha256=9650a0e4ad2d3bfb2a072590da189bcf4f807aca070945af26a9f9b99d779b77,2021
38
38
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/utils.py,sha256=541e94d60c94b8a8035ee74cda00ca3576a3f50a215df03d948de58665dbc25b,4649
39
39
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v0/__init__.py,sha256=7f43421e052bd8f64d5d5b03170a3b7187c2ce038362fa15b5d1d0c43bc1a40d,6143
40
40
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/__init__.py,sha256=662afd935c52b42512280614bf502554389c8854ab1256efbfde03fe364dac64,12932
41
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py,sha256=0284307113b148b1d59d5b9bd922cbf89679e8a466800f8022e0973b4e92fccf,10260
42
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py,sha256=18d106e77f26ebb233bf3379edf3116540891d643be72be73ea47be3724a89b8,4211
43
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/responses_wrappers.py,sha256=059b28106e2f473dd361e3cf85ef2db54f2aaaa8092286a03d589d4d337d8bc9,24062
41
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py,sha256=558036c734559b3526647c1b18cfb986699e8fb322855af72ea054c2e458f721,10404
42
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py,sha256=4809cde003e5892822828b373aa3e43a8adbaee4ff443f198401003f43c15e8a,4366
43
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/responses_wrappers.py,sha256=67c94b3e5bf16b64cecf7a091b05a2eb43162e09968845066721d1cf715856c7,24372
44
44
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/version.py,sha256=4f39aaa913f3e49b0c174bc23028687d00bfaffc745bd3fe241e0ae6b442bed1,24
45
45
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/opentelemetry/__init__.py,sha256=1f86cdf738e2f68586b0a4569bb1e40edddd85c529f511ef49945ddb7b61fab5,2648
46
46
  lmnr/opentelemetry_lib/opentelemetry/instrumentation/skyvern/__init__.py,sha256=764e4fe979fb08d7821419a3cc5c3ae89a6664b626ef928259f8f175c939eaea,6334
@@ -48,7 +48,7 @@ lmnr/opentelemetry_lib/opentelemetry/instrumentation/threading/__init__.py,sha25
48
48
  lmnr/opentelemetry_lib/tracing/__init__.py,sha256=a39e9a48f8a842ce7f7ec53364d793c1a303dcfd485aee7a72ade07d1b3635a2,9662
49
49
  lmnr/opentelemetry_lib/tracing/_instrument_initializers.py,sha256=a15a46a0515462319195a96f7cdb695e72a1559c3212964f5883ab824031bf70,15125
50
50
  lmnr/opentelemetry_lib/tracing/attributes.py,sha256=32fa30565b977c2a92202dc2bf1ded583a81d02a6bf5ba52958f75a8be08cbbe,1497
51
- lmnr/opentelemetry_lib/tracing/context.py,sha256=33d133a396af8585e51597ed58b28e8efe4ae688b71b85b4dbff920465ec84f6,3428
51
+ lmnr/opentelemetry_lib/tracing/context.py,sha256=83f842be0fc29a96647cbf005c39ea761b0fb5913c4102f965411f47906a6135,4103
52
52
  lmnr/opentelemetry_lib/tracing/exporter.py,sha256=6af8e61fd873e8f5db315d9b9f1edbf46b860ba7e50140f0bdcc6864c6d35a03,2082
53
53
  lmnr/opentelemetry_lib/tracing/instruments.py,sha256=e3c12315bda301416d1f3bc8d354ad16d4da211e2ecfa019265f4b565307c118,5655
54
54
  lmnr/opentelemetry_lib/tracing/processor.py,sha256=fd11e4d48eb5932f47898b8f70b8b5880f7ee7e58478f1ef20caff20e1f34252,3381
@@ -62,8 +62,8 @@ lmnr/sdk/browser/__init__.py,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b
62
62
  lmnr/sdk/browser/browser_use_otel.py,sha256=37d26de1af37f76774af176cb226e0b04988fc3bf419a2fd899ad36e79562fad,5104
63
63
  lmnr/sdk/browser/patchright_otel.py,sha256=9d22ab1f28f1eddbcfd0032a14fe306bfe00bfc7f11128cb99836c4dd15fb7c8,4800
64
64
  lmnr/sdk/browser/playwright_otel.py,sha256=50c0a5a75155a3a7ff5db84790ffb409c9cbd0351eef212d83d923893730223b,9459
65
- lmnr/sdk/browser/pw_utils.py,sha256=63364e31b31734a1a941847289ba5f00902c13181ce1ef624c73c25dcbc26b3c,22297
66
- lmnr/sdk/browser/rrweb/rrweb.umd.min.cjs,sha256=2f2da38b00bb85312d8225f3069a09352135564ceed2564f652f1bae3bac016d,260896
65
+ lmnr/sdk/browser/pw_utils.py,sha256=f6cb4b7cb59d6b488298f462cf88aa967a424f5bfdfd91c39998df930b212c2c,20420
66
+ lmnr/sdk/browser/recorder/record.umd.min.cjs,sha256=f09c09052c2fc474efb0405e63d8d26ed2184b994513ce8aee04efdac8be155d,181235
67
67
  lmnr/sdk/browser/utils.py,sha256=4a668776d2938108d25fbcecd61c8e1710a4da3e56230d5fefca5964dd09e3c1,2371
68
68
  lmnr/sdk/client/asynchronous/async_client.py,sha256=e8feae007506cd2e4b08e72706f5f1bb4ea54492b4aa6b68ef184a129de8f466,4948
69
69
  lmnr/sdk/client/asynchronous/resources/__init__.py,sha256=993423ea462aa8ea37d8d91662341c1ca0711cb2447cd476aacc373858f76135,481
@@ -85,12 +85,12 @@ lmnr/sdk/datasets.py,sha256=3fd851c5f97bf88eaa84b1451a053eaff23b4497cbb45eac2f9e
85
85
  lmnr/sdk/decorators.py,sha256=0c6b95b92ec8023f28cd15ddc47849888fa91f2534d575f626e3557f5f0a0c02,6451
86
86
  lmnr/sdk/eval_control.py,sha256=291394ac385c653ae9b5167e871bebeb4fe8fc6b7ff2ed38e636f87015dcba86,184
87
87
  lmnr/sdk/evaluations.py,sha256=b41f7737b084dc5b64b2952659b729622e0918fd492bfcddde7177d1a1c690ae,22572
88
- lmnr/sdk/laminar.py,sha256=7e63c547dc5a5fa15967fe374ef60463234f41eac0936a2bfeb3e1bb159cc6fd,33388
88
+ lmnr/sdk/laminar.py,sha256=c38590ec5d65d5dedad37258f13f4f88f989e9ae10cbdb30bd1acdad5443e1d6,34427
89
89
  lmnr/sdk/log.py,sha256=9edfd83263f0d4845b1b2d1beeae2b4ed3f8628de941f371a893d72b79c348d4,2213
90
- lmnr/sdk/types.py,sha256=116fd2f8cfa2985c4ae5b9ca021b702975ec9aff614e0e9e24d13b89abd61c16,12258
90
+ lmnr/sdk/types.py,sha256=c4868d7d1df2fbd108fe5990900675bff2e595f6ff207afcf166ad4853f5eb0a,12670
91
91
  lmnr/sdk/utils.py,sha256=4beb884ae6fbbc7d8cf639b036b726ea6a2a658f0a6386faf5735a13d706a2d8,5039
92
- lmnr/version.py,sha256=54170fa0ec116bd0098e49eb35a28551fd5ec28ab1414e05b2d2dee3979404e5,1321
93
- lmnr-0.7.0.dist-info/WHEEL,sha256=ab6157bc637547491fb4567cd7ddf26b04d63382916ca16c29a5c8e94c9c9ef7,79
94
- lmnr-0.7.0.dist-info/entry_points.txt,sha256=abdf3411b7dd2d7329a241f2da6669bab4e314a747a586ecdb9f888f3035003c,39
95
- lmnr-0.7.0.dist-info/METADATA,sha256=a7e7ad2b1a865c39bfc75358dd0f0da33975534dcfc6cbbea2ca4b0d3406766e,14473
96
- lmnr-0.7.0.dist-info/RECORD,,
92
+ lmnr/version.py,sha256=05f60eaaaa74f6161e0194247bb2244c9a3b5c1176c8902c6075ebef93276235,1321
93
+ lmnr-0.7.1.dist-info/WHEEL,sha256=ab6157bc637547491fb4567cd7ddf26b04d63382916ca16c29a5c8e94c9c9ef7,79
94
+ lmnr-0.7.1.dist-info/entry_points.txt,sha256=abdf3411b7dd2d7329a241f2da6669bab4e314a747a586ecdb9f888f3035003c,39
95
+ lmnr-0.7.1.dist-info/METADATA,sha256=847134a28ee45d56155835c491fbeb4a12cd6650709991550fff10976a328212,14473
96
+ lmnr-0.7.1.dist-info/RECORD,,