lmnr 0.6.2__py3-none-any.whl → 0.6.4__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.
Files changed (36) hide show
  1. lmnr/cli.py +18 -11
  2. lmnr/opentelemetry_lib/__init__.py +6 -7
  3. lmnr/opentelemetry_lib/decorators/__init__.py +23 -8
  4. lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/__init__.py +2 -2
  5. lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/config.py +4 -4
  6. lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/utils.py +19 -19
  7. lmnr/opentelemetry_lib/tracing/__init__.py +6 -7
  8. lmnr/opentelemetry_lib/tracing/_instrument_initializers.py +32 -33
  9. lmnr/opentelemetry_lib/tracing/context_properties.py +2 -3
  10. lmnr/opentelemetry_lib/tracing/exporter.py +4 -5
  11. lmnr/opentelemetry_lib/tracing/instruments.py +5 -6
  12. lmnr/opentelemetry_lib/tracing/processor.py +6 -7
  13. lmnr/sdk/browser/utils.py +4 -3
  14. lmnr/sdk/client/asynchronous/async_client.py +26 -11
  15. lmnr/sdk/client/asynchronous/resources/__init__.py +2 -0
  16. lmnr/sdk/client/asynchronous/resources/agent.py +89 -91
  17. lmnr/sdk/client/asynchronous/resources/evals.py +8 -8
  18. lmnr/sdk/client/asynchronous/resources/tags.py +89 -0
  19. lmnr/sdk/client/synchronous/resources/__init__.py +2 -1
  20. lmnr/sdk/client/synchronous/resources/agent.py +91 -91
  21. lmnr/sdk/client/synchronous/resources/evals.py +8 -8
  22. lmnr/sdk/client/synchronous/resources/tags.py +89 -0
  23. lmnr/sdk/client/synchronous/sync_client.py +28 -13
  24. lmnr/sdk/decorators.py +43 -27
  25. lmnr/sdk/eval_control.py +1 -1
  26. lmnr/sdk/evaluations.py +75 -52
  27. lmnr/sdk/laminar.py +76 -58
  28. lmnr/sdk/types.py +47 -37
  29. lmnr/sdk/utils.py +3 -3
  30. lmnr/version.py +1 -1
  31. {lmnr-0.6.2.dist-info → lmnr-0.6.4.dist-info}/METADATA +1 -1
  32. lmnr-0.6.4.dist-info/RECORD +56 -0
  33. lmnr-0.6.2.dist-info/RECORD +0 -54
  34. {lmnr-0.6.2.dist-info → lmnr-0.6.4.dist-info}/LICENSE +0 -0
  35. {lmnr-0.6.2.dist-info → lmnr-0.6.4.dist-info}/WHEEL +0 -0
  36. {lmnr-0.6.2.dist-info → lmnr-0.6.4.dist-info}/entry_points.txt +0 -0
lmnr/sdk/types.py CHANGED
@@ -1,23 +1,25 @@
1
+ from __future__ import annotations # For "Self" | str | ... type hint
2
+
3
+ import json
1
4
  import logging
2
5
  import datetime
3
- from enum import Enum
4
- import json
5
- from opentelemetry.trace import SpanContext, TraceFlags
6
6
  import pydantic
7
- from typing import Any, Awaitable, Callable, Literal, Optional, Union
7
+ import pydantic.alias_generators
8
8
  import uuid
9
9
 
10
- import pydantic.alias_generators
10
+ from enum import Enum
11
+ from opentelemetry.trace import SpanContext, TraceFlags
12
+ from typing import Any, Awaitable, Callable, Literal
11
13
 
12
14
  from .utils import serialize
13
15
 
14
16
 
15
- Numeric = Union[int, float]
17
+ Numeric = int | float
16
18
  NumericTypes = (int, float) # for use with isinstance
17
19
 
18
20
  EvaluationDatapointData = Any # non-null, must be JSON-serializable
19
- EvaluationDatapointTarget = Optional[Any] # must be JSON-serializable
20
- EvaluationDatapointMetadata = Optional[Any] # must be JSON-serializable
21
+ EvaluationDatapointTarget = Any | None # must be JSON-serializable
22
+ EvaluationDatapointMetadata = Any | None # must be JSON-serializable
21
23
 
22
24
 
23
25
  # EvaluationDatapoint is a single data point in the evaluation
@@ -30,11 +32,11 @@ class Datapoint(pydantic.BaseModel):
30
32
 
31
33
 
32
34
  ExecutorFunctionReturnType = Any
33
- EvaluatorFunctionReturnType = Union[Numeric, dict[str, Numeric]]
35
+ EvaluatorFunctionReturnType = Numeric | dict[str, Numeric]
34
36
 
35
37
  ExecutorFunction = Callable[
36
38
  [EvaluationDatapointData, Any],
37
- Union[ExecutorFunctionReturnType, Awaitable[ExecutorFunctionReturnType]],
39
+ ExecutorFunctionReturnType | Awaitable[ExecutorFunctionReturnType],
38
40
  ]
39
41
 
40
42
  # EvaluatorFunction is a function that takes the output of the executor and the
@@ -43,7 +45,7 @@ ExecutorFunction = Callable[
43
45
  # multiple criteria in one go instead of running multiple evaluators.
44
46
  EvaluatorFunction = Callable[
45
47
  [ExecutorFunctionReturnType, Any],
46
- Union[EvaluatorFunctionReturnType, Awaitable[EvaluatorFunctionReturnType]],
48
+ EvaluatorFunctionReturnType | Awaitable[EvaluatorFunctionReturnType],
47
49
  ]
48
50
 
49
51
 
@@ -66,6 +68,7 @@ class PartialEvaluationDatapoint(pydantic.BaseModel):
66
68
  index: int
67
69
  trace_id: uuid.UUID
68
70
  executor_span_id: uuid.UUID
71
+ metadata: EvaluationDatapointMetadata = pydantic.Field(default=None)
69
72
 
70
73
  # uuid is not serializable by default, so we need to convert it to a string
71
74
  def to_dict(self):
@@ -77,6 +80,9 @@ class PartialEvaluationDatapoint(pydantic.BaseModel):
77
80
  "index": self.index,
78
81
  "traceId": str(self.trace_id),
79
82
  "executorSpanId": str(self.executor_span_id),
83
+ "metadata": (
84
+ serialize(self.metadata) if self.metadata is not None else None
85
+ ),
80
86
  }
81
87
  except Exception as e:
82
88
  raise ValueError(f"Error serializing PartialEvaluationDatapoint: {e}")
@@ -92,6 +98,7 @@ class EvaluationResultDatapoint(pydantic.BaseModel):
92
98
  human_evaluators: list[HumanEvaluator] = pydantic.Field(default_factory=list)
93
99
  trace_id: uuid.UUID
94
100
  executor_span_id: uuid.UUID
101
+ metadata: EvaluationDatapointMetadata = pydantic.Field(default=None)
95
102
 
96
103
  # uuid is not serializable by default, so we need to convert it to a string
97
104
  def to_dict(self):
@@ -115,6 +122,9 @@ class EvaluationResultDatapoint(pydantic.BaseModel):
115
122
  ],
116
123
  "executorSpanId": str(self.executor_span_id),
117
124
  "index": self.index,
125
+ "metadata": (
126
+ serialize(self.metadata) if self.metadata is not None else None
127
+ ),
118
128
  }
119
129
  except Exception as e:
120
130
  raise ValueError(f"Error serializing EvaluationResultDatapoint: {e}")
@@ -168,8 +178,8 @@ class LaminarSpanContext(pydantic.BaseModel):
168
178
  @classmethod
169
179
  def try_to_otel_span_context(
170
180
  cls,
171
- span_context: Union["LaminarSpanContext", dict[str, Any], str, SpanContext],
172
- logger: Optional[logging.Logger] = None,
181
+ span_context: "LaminarSpanContext" | dict[str, Any] | str | SpanContext,
182
+ logger: logging.Logger | None = None,
173
183
  ) -> SpanContext:
174
184
  if logger is None:
175
185
  logger = logging.getLogger(__name__)
@@ -206,7 +216,7 @@ class LaminarSpanContext(pydantic.BaseModel):
206
216
  raise ValueError("Invalid span_context provided")
207
217
 
208
218
  @classmethod
209
- def deserialize(cls, data: Union[dict[str, Any], str]) -> "LaminarSpanContext":
219
+ def deserialize(cls, data: dict[str, Any] | str) -> "LaminarSpanContext":
210
220
  if isinstance(data, dict):
211
221
  # Convert camelCase to snake_case for known fields
212
222
  converted_data = {
@@ -234,23 +244,23 @@ class RunAgentRequest(pydantic.BaseModel):
234
244
  populate_by_name=True,
235
245
  )
236
246
  prompt: str
237
- storage_state: Optional[str] = pydantic.Field(default=None)
238
- agent_state: Optional[str] = pydantic.Field(default=None)
239
- parent_span_context: Optional[str] = pydantic.Field(default=None)
240
- model_provider: Optional[ModelProvider] = pydantic.Field(default=None)
241
- model: Optional[str] = pydantic.Field(default=None)
247
+ storage_state: str | None = pydantic.Field(default=None)
248
+ agent_state: str | None = pydantic.Field(default=None)
249
+ parent_span_context: str | None = pydantic.Field(default=None)
250
+ model_provider: ModelProvider | None = pydantic.Field(default=None)
251
+ model: str | None = pydantic.Field(default=None)
242
252
  stream: bool = pydantic.Field(default=False)
243
253
  enable_thinking: bool = pydantic.Field(default=True)
244
- cdp_url: Optional[str] = pydantic.Field(default=None)
254
+ cdp_url: str | None = pydantic.Field(default=None)
245
255
  return_screenshots: bool = pydantic.Field(default=False)
246
256
  return_storage_state: bool = pydantic.Field(default=False)
247
257
  return_agent_state: bool = pydantic.Field(default=False)
248
- timeout: Optional[int] = pydantic.Field(default=None)
249
- max_steps: Optional[int] = pydantic.Field(default=None)
250
- thinking_token_budget: Optional[int] = pydantic.Field(default=None)
251
- start_url: Optional[str] = pydantic.Field(default=None)
258
+ timeout: int | None = pydantic.Field(default=None)
259
+ max_steps: int | None = pydantic.Field(default=None)
260
+ thinking_token_budget: int | None = pydantic.Field(default=None)
261
+ start_url: str | None = pydantic.Field(default=None)
252
262
  disable_give_control: bool = pydantic.Field(default=False)
253
- user_agent: Optional[str] = pydantic.Field(default=None)
263
+ user_agent: str | None = pydantic.Field(default=None)
254
264
 
255
265
 
256
266
  class ActionResult(pydantic.BaseModel):
@@ -258,8 +268,8 @@ class ActionResult(pydantic.BaseModel):
258
268
  alias_generator=pydantic.alias_generators.to_camel
259
269
  )
260
270
  is_done: bool = pydantic.Field(default=False)
261
- content: Optional[str] = pydantic.Field(default=None)
262
- error: Optional[str] = pydantic.Field(default=None)
271
+ content: str | None = pydantic.Field(default=None)
272
+ error: str | None = pydantic.Field(default=None)
263
273
 
264
274
 
265
275
  class AgentOutput(pydantic.BaseModel):
@@ -271,12 +281,12 @@ class AgentOutput(pydantic.BaseModel):
271
281
  # A stringified JSON object.
272
282
  # Only returned if return_storage_state is True.
273
283
  # CAUTION: This object may become large. It also may contain sensitive data.
274
- storage_state: Optional[str] = pydantic.Field(default=None)
284
+ storage_state: str | None = pydantic.Field(default=None)
275
285
  # Agent state with data related to the agent's state, such as the chat history.
276
286
  # A stringified JSON object.
277
287
  # Only returned if return_agent_state is True.
278
288
  # CAUTION: This object is large.
279
- agent_state: Optional[str] = pydantic.Field(default=None)
289
+ agent_state: str | None = pydantic.Field(default=None)
280
290
 
281
291
 
282
292
  class StepChunkContent(pydantic.BaseModel):
@@ -287,7 +297,7 @@ class StepChunkContent(pydantic.BaseModel):
287
297
  message_id: uuid.UUID = pydantic.Field()
288
298
  action_result: ActionResult = pydantic.Field()
289
299
  summary: str = pydantic.Field()
290
- screenshot: Optional[str] = pydantic.Field(default=None)
300
+ screenshot: str | None = pydantic.Field(default=None)
291
301
 
292
302
 
293
303
  class TimeoutChunkContent(pydantic.BaseModel):
@@ -301,7 +311,7 @@ class TimeoutChunkContent(pydantic.BaseModel):
301
311
  chunk_type: Literal["timeout"] = pydantic.Field(default="timeout")
302
312
  message_id: uuid.UUID = pydantic.Field()
303
313
  summary: str = pydantic.Field()
304
- screenshot: Optional[str] = pydantic.Field(default=None)
314
+ screenshot: str | None = pydantic.Field(default=None)
305
315
 
306
316
 
307
317
  class FinalOutputChunkContent(pydantic.BaseModel):
@@ -332,9 +342,9 @@ class ErrorChunkContent(pydantic.BaseModel):
332
342
 
333
343
 
334
344
  class RunAgentResponseChunk(pydantic.RootModel):
335
- root: Union[
336
- StepChunkContent,
337
- FinalOutputChunkContent,
338
- ErrorChunkContent,
339
- TimeoutChunkContent,
340
- ]
345
+ root: (
346
+ StepChunkContent
347
+ | FinalOutputChunkContent
348
+ | ErrorChunkContent
349
+ | TimeoutChunkContent
350
+ )
lmnr/sdk/utils.py CHANGED
@@ -50,7 +50,7 @@ def is_iterator(o: typing.Any) -> bool:
50
50
  return hasattr(o, "__iter__") and hasattr(o, "__next__")
51
51
 
52
52
 
53
- def serialize(obj: typing.Any) -> typing.Union[str, dict[str, typing.Any]]:
53
+ def serialize(obj: typing.Any) -> str | dict[str, typing.Any]:
54
54
  def serialize_inner(o: typing.Any):
55
55
  if isinstance(o, (datetime.datetime, datetime.date)):
56
56
  return o.strftime("%Y-%m-%dT%H:%M:%S.%f%z")
@@ -87,7 +87,7 @@ def get_input_from_func_args(
87
87
  is_method: bool = False,
88
88
  func_args: list[typing.Any] = [],
89
89
  func_kwargs: dict[str, typing.Any] = {},
90
- ignore_inputs: typing.Optional[list[str]] = None,
90
+ ignore_inputs: list[str] | None = None,
91
91
  ) -> dict[str, typing.Any]:
92
92
  # Remove implicitly passed "self" or "cls" argument for
93
93
  # instance or class methods
@@ -107,7 +107,7 @@ def get_input_from_func_args(
107
107
  return res
108
108
 
109
109
 
110
- def from_env(key: str) -> typing.Optional[str]:
110
+ def from_env(key: str) -> str | None:
111
111
  if val := os.getenv(key):
112
112
  return val
113
113
  dotenv_path = dotenv.find_dotenv(usecwd=True)
lmnr/version.py CHANGED
@@ -3,7 +3,7 @@ import httpx
3
3
  from packaging import version
4
4
 
5
5
 
6
- __version__ = "0.6.2"
6
+ __version__ = "0.6.4"
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.3
2
2
  Name: lmnr
3
- Version: 0.6.2
3
+ Version: 0.6.4
4
4
  Summary: Python SDK for Laminar
5
5
  License: Apache-2.0
6
6
  Author: lmnr.ai
@@ -0,0 +1,56 @@
1
+ lmnr/__init__.py,sha256=eJ-gIHEk8KV-BeaU8c9spQww_T2G5_OMu4F8JEzngvA,1281
2
+ lmnr/cli.py,sha256=OBgtPAUNzv6ONchasH53HppR-FEyLlIhAYOntkDYsEA,3308
3
+ lmnr/opentelemetry_lib/.flake8,sha256=bCxuDlGx3YQ55QHKPiGJkncHanh9qGjQJUujcFa3lAU,150
4
+ lmnr/opentelemetry_lib/__init__.py,sha256=E_NwAWxh3hckZjXTA80hOzmRUL8RvnSYRdcPExwVROc,2056
5
+ lmnr/opentelemetry_lib/decorators/__init__.py,sha256=E8OF6yaCitsjvHLscbrUs-OaomOd0Vjftf5La834WD8,8669
6
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/__init__.py,sha256=8bBzOZ4ekeF121KDSmaax9OVUPBrPKXDbq8amwsnq6U,15326
7
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/config.py,sha256=25zevJ7g3MtJP_5gju3jBH7-wg7SbDkktysuUO29ksI,245
8
+ lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/utils.py,sha256=3knAm34hX78JUWvz8rdJSfpytclVnmivATm4q1l1WwU,6144
9
+ lmnr/opentelemetry_lib/tracing/__init__.py,sha256=dy3zrgeiZmLX-aLXuRUW8-RGR4FaIdRRKKEVR0eItGs,5662
10
+ lmnr/opentelemetry_lib/tracing/_instrument_initializers.py,sha256=O_98Tw45AphJRWmv_sJ7TNp4pc5YGaG9zn7eLZsv4_4,14145
11
+ lmnr/opentelemetry_lib/tracing/attributes.py,sha256=MvowVluXfCqSIC3Cvx3tWDqB0Cpr9bpSlY91qL4Iy74,1497
12
+ lmnr/opentelemetry_lib/tracing/context_properties.py,sha256=eolsrmW1oOHQwiNJ3wsMQWOq3sJsoCIGgXCXJXmakuU,1723
13
+ lmnr/opentelemetry_lib/tracing/exporter.py,sha256=avjmH9hz6PXbMV2bnx7b9GuGC6flAUDwvcxoZMbTWgM,2082
14
+ lmnr/opentelemetry_lib/tracing/instruments.py,sha256=iA8PWSq0gmdgBqtq1GVBynSP64SAri1tkHBojGUnFvA,5163
15
+ lmnr/opentelemetry_lib/tracing/processor.py,sha256=0iGpByt-GT-Z5ddiqSVpymeVIVwOkuABES0tep5Hpvw,3437
16
+ lmnr/opentelemetry_lib/tracing/tracer.py,sha256=oNC6V8eFvuK3i5IWXsKDjEMFL_axeSov3L1fPevwuWM,476
17
+ lmnr/opentelemetry_lib/utils/__init__.py,sha256=pNhf0G3vTd5ccoc03i1MXDbricSaiqCbi1DLWhSekK8,604
18
+ lmnr/opentelemetry_lib/utils/json_encoder.py,sha256=dK6b_axr70IYL7Vv-bu4wntvDDuyntoqsHaddqX7P58,463
19
+ lmnr/opentelemetry_lib/utils/package_check.py,sha256=ST2BvDxt0bax-ih9F9Wf0jlKAErmztbxKmOcFf713rI,265
20
+ lmnr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ lmnr/sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ lmnr/sdk/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ lmnr/sdk/browser/browser_use_otel.py,sha256=I3Qoc8y1hqTxRJtzh84qJKz1sz2s_b68YNEYxI0CTV4,4577
24
+ lmnr/sdk/browser/patchright_otel.py,sha256=O7n1dB_Mw-_L70zi0zqpnFFiKuTPEEpO7ry1ia6IXWQ,5454
25
+ lmnr/sdk/browser/playwright_otel.py,sha256=LFg1iJXbez-BEgEIY9eaO_2T2uR6SxyfFL46fHcS7Mg,13423
26
+ lmnr/sdk/browser/pw_utils.py,sha256=nFqVujQb7owVFzT-31_g09CbfbBwUIXKxs3JxuE47ws,10835
27
+ lmnr/sdk/browser/rrweb/rrweb.umd.min.cjs,sha256=Ly2jiwC7hTEtgiXzBpoJNSE1Vkzu0lZPZS8brjusAW0,260896
28
+ lmnr/sdk/browser/utils.py,sha256=SmaHdtKTgQjSX7zs1hyOFxCk2j5WIw1f78pZZN0J48E,2371
29
+ lmnr/sdk/client/asynchronous/async_client.py,sha256=5Hb1Z4tPdUATHgmQ8R6laCqWCxvm5MbxyU4jMmRPnO8,4579
30
+ lmnr/sdk/client/asynchronous/resources/__init__.py,sha256=9fkjlVJS8zhnCTITjhow173phBdZlyiae-X0LcTSWqM,381
31
+ lmnr/sdk/client/asynchronous/resources/agent.py,sha256=Ong3K2KRLN7agx1_-aZxMGcT_OGF3_ZGtFLm8aPMbYw,17788
32
+ lmnr/sdk/client/asynchronous/resources/base.py,sha256=aJ43Q1rltg23IQaI4eeaZKckxVTgDUbCJrChhQCUEoE,986
33
+ lmnr/sdk/client/asynchronous/resources/browser_events.py,sha256=T-DUbbAfMQ2VqiVfgVplxuTaJZuoNcC1O6RCxdfw7UQ,1163
34
+ lmnr/sdk/client/asynchronous/resources/evals.py,sha256=88PsegaPhqHTuTzMmG9qBrGAgd5peBgdOc_sL9zf2G8,2231
35
+ lmnr/sdk/client/asynchronous/resources/tags.py,sha256=VbsBMp120d_8drGFr1Obp4xSRktzPC-3kOYcblZnvKA,2565
36
+ lmnr/sdk/client/synchronous/resources/__init__.py,sha256=hDGyNARdG3J25lLAP8JnlER7r8JL-JQuPN1xdheiCw4,318
37
+ lmnr/sdk/client/synchronous/resources/agent.py,sha256=mnTu6toN2LbgmEhQ-mdZ0CzNAnkrGiksrys0AyMwz2A,17809
38
+ lmnr/sdk/client/synchronous/resources/base.py,sha256=ne1ZZ10UmNkMrECVvClcEJfcFJlSGvaXOC8K6mZTPdY,971
39
+ lmnr/sdk/client/synchronous/resources/browser_events.py,sha256=9rFYWZesXQomnFgbZ590tGFMTaNj0OAzT9RcFwD8q_Y,1135
40
+ lmnr/sdk/client/synchronous/resources/evals.py,sha256=0vOVY6nNZkvhX6kgmpfeeMHWl97YoO1hUiu6CM8XOuM,3540
41
+ lmnr/sdk/client/synchronous/resources/tags.py,sha256=cNMEzMDhlBNpI7J4x6xkFAANiNSq-Vuu_zi5NPk2kcA,2485
42
+ lmnr/sdk/client/synchronous/sync_client.py,sha256=kPS14M0e99xMtLQ_yEOJrFpQWhstqARytkGIbfCoNVc,4906
43
+ lmnr/sdk/datasets.py,sha256=jl5Wj5nEI9pww4Jwn4XKF8h0gXBU4TOIrhqNjTJsHZQ,1709
44
+ lmnr/sdk/decorators.py,sha256=4j313WdRilkxLBTlpnqKCod7tO7TAi4VCnpKXcsbtPI,3933
45
+ lmnr/sdk/eval_control.py,sha256=KROUrDhcZTrptRZ-hxvr60_o_Gt_8u045jb4cBXcuoY,184
46
+ lmnr/sdk/evaluations.py,sha256=LxeKOVqUYEuyjC05fSknX5HobuIX_xHTn43RGPziLNg,21244
47
+ lmnr/sdk/laminar.py,sha256=jbsNHl-IbZs_6okGGckkDbh_gpV2rsR3ao5jflIZHgU,28627
48
+ lmnr/sdk/log.py,sha256=nt_YMmPw1IRbGy0b7q4rTtP4Yo3pQfNxqJPXK3nDSNQ,2213
49
+ lmnr/sdk/types.py,sha256=wnC1OkF-FErpAaRbEGYtiDnPBYw2qxmz3zu8kVBMn7w,12657
50
+ lmnr/sdk/utils.py,sha256=AK9njI7s0cacR93NpvQr6nEiEp6Cj-GIBWSdbFHrWVk,3858
51
+ lmnr/version.py,sha256=9pfSIZo6naIUBr6k6ijLSUUNfBAZcJePcTUnyuODmKs,1321
52
+ lmnr-0.6.4.dist-info/LICENSE,sha256=67b_wJHVV1CBaWkrKFWU1wyqTPSdzH77Ls-59631COg,10411
53
+ lmnr-0.6.4.dist-info/METADATA,sha256=ysmdrNljcVt7KX3g49iE1HuBqa7BszsOzTm3S3sAZZw,15135
54
+ lmnr-0.6.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
55
+ lmnr-0.6.4.dist-info/entry_points.txt,sha256=K1jE20ww4jzHNZLnsfWBvU3YKDGBgbOiYG5Y7ivQcq4,37
56
+ lmnr-0.6.4.dist-info/RECORD,,
@@ -1,54 +0,0 @@
1
- lmnr/__init__.py,sha256=eJ-gIHEk8KV-BeaU8c9spQww_T2G5_OMu4F8JEzngvA,1281
2
- lmnr/cli.py,sha256=e_Jgcwn3Q-hgR6VLLar2ccWLAhJb8yB4cwoIdg5vwDs,3013
3
- lmnr/opentelemetry_lib/.flake8,sha256=bCxuDlGx3YQ55QHKPiGJkncHanh9qGjQJUujcFa3lAU,150
4
- lmnr/opentelemetry_lib/__init__.py,sha256=QMPaVYATF_rT50A-lqoJZaH6YlzRu1BQKPgw0L3Rxs0,2107
5
- lmnr/opentelemetry_lib/decorators/__init__.py,sha256=fTO-p6CaLFw2-8HDVGUS1dvnfCMwUH5vZSYc6_NVAuU,7995
6
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/__init__.py,sha256=jrvHu8aq2EBGZI3ypucUltR4-v8HqTKnqGtWXF5Qbb8,15339
7
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/config.py,sha256=FeQOcC3RNq-yOd8KZ_VoBuZgDl6tnkxx6I2MKVH1GMI,256
8
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/utils.py,sha256=P0fOmGi_0nv3cMFcdWblRuTsDRCZnvdM8GQ3zJT0qbM,6229
9
- lmnr/opentelemetry_lib/tracing/__init__.py,sha256=7uGdMNAlUJv2HcNz3XAqpb7iUNsiQwSY9ipv8D2V10I,5713
10
- lmnr/opentelemetry_lib/tracing/_instrument_initializers.py,sha256=CBgkfVKmvWWvSgN8eZHgEF92ED8K4VkXzz9d0QC4tIs,14269
11
- lmnr/opentelemetry_lib/tracing/attributes.py,sha256=MvowVluXfCqSIC3Cvx3tWDqB0Cpr9bpSlY91qL4Iy74,1497
12
- lmnr/opentelemetry_lib/tracing/context_properties.py,sha256=xMLitHrENwSW3U9_PweAFRIdTm8hqwHP4Vi3S8jazXA,1757
13
- lmnr/opentelemetry_lib/tracing/exporter.py,sha256=vKsJCx8TMJ7NK4NmyJrygHH2aBaLMzIHVSzDt1-ABrs,2132
14
- lmnr/opentelemetry_lib/tracing/instruments.py,sha256=KDnjJZbCC9arRgdksZfaBU4Oej0QBcS8b9JANe_ZbNU,5214
15
- lmnr/opentelemetry_lib/tracing/processor.py,sha256=5gYBQj7VStID-nNqPGUmyEOfFIwJKuvmlhcU2kvv5KY,3493
16
- lmnr/opentelemetry_lib/tracing/tracer.py,sha256=oNC6V8eFvuK3i5IWXsKDjEMFL_axeSov3L1fPevwuWM,476
17
- lmnr/opentelemetry_lib/utils/__init__.py,sha256=pNhf0G3vTd5ccoc03i1MXDbricSaiqCbi1DLWhSekK8,604
18
- lmnr/opentelemetry_lib/utils/json_encoder.py,sha256=dK6b_axr70IYL7Vv-bu4wntvDDuyntoqsHaddqX7P58,463
19
- lmnr/opentelemetry_lib/utils/package_check.py,sha256=ST2BvDxt0bax-ih9F9Wf0jlKAErmztbxKmOcFf713rI,265
20
- lmnr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- lmnr/sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- lmnr/sdk/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- lmnr/sdk/browser/browser_use_otel.py,sha256=I3Qoc8y1hqTxRJtzh84qJKz1sz2s_b68YNEYxI0CTV4,4577
24
- lmnr/sdk/browser/patchright_otel.py,sha256=O7n1dB_Mw-_L70zi0zqpnFFiKuTPEEpO7ry1ia6IXWQ,5454
25
- lmnr/sdk/browser/playwright_otel.py,sha256=LFg1iJXbez-BEgEIY9eaO_2T2uR6SxyfFL46fHcS7Mg,13423
26
- lmnr/sdk/browser/pw_utils.py,sha256=nFqVujQb7owVFzT-31_g09CbfbBwUIXKxs3JxuE47ws,10835
27
- lmnr/sdk/browser/rrweb/rrweb.umd.min.cjs,sha256=Ly2jiwC7hTEtgiXzBpoJNSE1Vkzu0lZPZS8brjusAW0,260896
28
- lmnr/sdk/browser/utils.py,sha256=xPpMRP2y9aJIsdIDNg2wN4PSa_4w0LSsra-GIMx9VXc,2366
29
- lmnr/sdk/client/asynchronous/async_client.py,sha256=NuGla1gGlyYLxyIQ6LSKG-b5eYGNIQA5HXAOzGQR5BU,4036
30
- lmnr/sdk/client/asynchronous/resources/__init__.py,sha256=WL2ehX1LfxG3n7bsxzTRO8grM0YtMGb_r7DLMjkmm1Y,298
31
- lmnr/sdk/client/asynchronous/resources/agent.py,sha256=NiX2azmQnzNYHpZT_Sme7Dm5cmDf2xp37YAwZIqCCrI,18276
32
- lmnr/sdk/client/asynchronous/resources/base.py,sha256=aJ43Q1rltg23IQaI4eeaZKckxVTgDUbCJrChhQCUEoE,986
33
- lmnr/sdk/client/asynchronous/resources/browser_events.py,sha256=T-DUbbAfMQ2VqiVfgVplxuTaJZuoNcC1O6RCxdfw7UQ,1163
34
- lmnr/sdk/client/asynchronous/resources/evals.py,sha256=bm3ATwqLozUoW2Ed6psmdjmeJ7joBaQHSv6mBeA_cws,2187
35
- lmnr/sdk/client/synchronous/resources/__init__.py,sha256=Sk0_5Y1UkqwUhJKRct9R3JAnHk6sPe8lDokpYVqehdY,250
36
- lmnr/sdk/client/synchronous/resources/agent.py,sha256=vwf3XOHX4nF_W0t4qwqcpaGC2vdccaJ5iI920G1jPf0,18150
37
- lmnr/sdk/client/synchronous/resources/base.py,sha256=ne1ZZ10UmNkMrECVvClcEJfcFJlSGvaXOC8K6mZTPdY,971
38
- lmnr/sdk/client/synchronous/resources/browser_events.py,sha256=9rFYWZesXQomnFgbZ590tGFMTaNj0OAzT9RcFwD8q_Y,1135
39
- lmnr/sdk/client/synchronous/resources/evals.py,sha256=sMMAai7_IW842z_J0W9OpthDhGQPCkTVJZamIkKq0wk,3496
40
- lmnr/sdk/client/synchronous/sync_client.py,sha256=-sSMbUvgDLt98tT-nDyE_xfTohcGdn00lAmul1713Wo,4396
41
- lmnr/sdk/datasets.py,sha256=jl5Wj5nEI9pww4Jwn4XKF8h0gXBU4TOIrhqNjTJsHZQ,1709
42
- lmnr/sdk/decorators.py,sha256=NIen6dUhcryiWnoZTP6C6_llwPZqbGoOr8iWPorKWuY,3346
43
- lmnr/sdk/eval_control.py,sha256=qMiAI6FnHdIwKX8-W1nDhEcS5Cjm5lYRoIN7x4J-AVI,182
44
- lmnr/sdk/evaluations.py,sha256=SMCoYMHGwMKEXaGT6tR10dvXXU_OrazlYZCy11hKlQc,20444
45
- lmnr/sdk/laminar.py,sha256=QbMbxdAhFzVIWzKQRtoVv9M5qMQj_cdhJ4ph3d22Rxs,28158
46
- lmnr/sdk/log.py,sha256=nt_YMmPw1IRbGy0b7q4rTtP4Yo3pQfNxqJPXK3nDSNQ,2213
47
- lmnr/sdk/types.py,sha256=QOIZ18ELzts5AG1Tx-_twHI43_PHoB4X8JYynTH0MCA,12287
48
- lmnr/sdk/utils.py,sha256=_kUn43AEn7Cdqcsg1CkQvzVQ7PhQT27m-iuLcRrwlZM,3891
49
- lmnr/version.py,sha256=4bUSBAdSHSi1BuH3OK30Hf5PMi-Y4qdGcEI7XjLBqlU,1321
50
- lmnr-0.6.2.dist-info/LICENSE,sha256=67b_wJHVV1CBaWkrKFWU1wyqTPSdzH77Ls-59631COg,10411
51
- lmnr-0.6.2.dist-info/METADATA,sha256=kVlsBTEjT5P8gdcYPZ1dUGPW4JWAUq0FHsYHDwFelJg,15135
52
- lmnr-0.6.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
53
- lmnr-0.6.2.dist-info/entry_points.txt,sha256=K1jE20ww4jzHNZLnsfWBvU3YKDGBgbOiYG5Y7ivQcq4,37
54
- lmnr-0.6.2.dist-info/RECORD,,
File without changes
File without changes