lmnr 0.4.54__py3-none-any.whl → 0.4.56__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.
@@ -32,6 +32,8 @@ class Traceloop:
32
32
  should_enrich_metrics: bool = False,
33
33
  resource_attributes: dict = {},
34
34
  instruments: Optional[Set[Instruments]] = None,
35
+ base_http_url: Optional[str] = None,
36
+ project_api_key: Optional[str] = None,
35
37
  ) -> None:
36
38
  if not is_tracing_enabled():
37
39
  return
@@ -69,4 +71,6 @@ class Traceloop:
69
71
  exporter=exporter,
70
72
  should_enrich_metrics=should_enrich_metrics,
71
73
  instruments=instruments,
74
+ base_http_url=base_http_url,
75
+ project_api_key=project_api_key,
72
76
  )
@@ -21,6 +21,7 @@ class Instruments(Enum):
21
21
  OLLAMA = "ollama"
22
22
  OPENAI = "openai"
23
23
  PINECONE = "pinecone"
24
+ PLAYWRIGHT = "playwright"
24
25
  QDRANT = "qdrant"
25
26
  REPLICATE = "replicate"
26
27
  SAGEMAKER = "sagemaker"
@@ -6,6 +6,7 @@ import logging
6
6
  from contextvars import Context
7
7
  from lmnr.sdk.log import VerboseColorfulFormatter
8
8
  from lmnr.openllmetry_sdk.instruments import Instruments
9
+ from lmnr.sdk.browser import init_browser_tracing
9
10
  from lmnr.openllmetry_sdk.tracing.attributes import (
10
11
  ASSOCIATION_PROPERTIES,
11
12
  SPAN_INSTRUMENTATION_SOURCE,
@@ -80,6 +81,8 @@ class TracerWrapper(object):
80
81
  exporter: Optional[SpanExporter] = None,
81
82
  should_enrich_metrics: bool = False,
82
83
  instruments: Optional[Set[Instruments]] = None,
84
+ base_http_url: Optional[str] = None,
85
+ project_api_key: Optional[str] = None,
83
86
  ) -> "TracerWrapper":
84
87
  cls._initialize_logger(cls)
85
88
  if not hasattr(cls, "instance"):
@@ -122,6 +125,8 @@ class TracerWrapper(object):
122
125
  instrument_set = init_instrumentations(
123
126
  should_enrich_metrics,
124
127
  instruments,
128
+ base_http_url=base_http_url,
129
+ project_api_key=project_api_key,
125
130
  )
126
131
 
127
132
  if not instrument_set:
@@ -286,6 +291,8 @@ def init_instrumentations(
286
291
  should_enrich_metrics: bool,
287
292
  instruments: Optional[Set[Instruments]] = None,
288
293
  block_instruments: Optional[Set[Instruments]] = None,
294
+ base_http_url: Optional[str] = None,
295
+ project_api_key: Optional[str] = None,
289
296
  ):
290
297
  block_instruments = block_instruments or set()
291
298
  # These libraries are not instrumented by default,
@@ -397,6 +404,9 @@ def init_instrumentations(
397
404
  elif instrument == Instruments.WEAVIATE:
398
405
  if init_weaviate_instrumentor():
399
406
  instrument_set = True
407
+ elif instrument == Instruments.PLAYWRIGHT:
408
+ if init_browser_tracing(base_http_url, project_api_key):
409
+ instrument_set = True
400
410
  else:
401
411
  module_logger.warning(
402
412
  f"Warning: {instrument} instrumentation does not exist."
@@ -0,0 +1,9 @@
1
+ from lmnr.openllmetry_sdk.utils.package_check import is_package_installed
2
+
3
+
4
+ def init_browser_tracing(http_url: str, project_api_key: str):
5
+ if is_package_installed("playwright"):
6
+ from .playwright_patch import init_playwright_tracing
7
+
8
+ init_playwright_tracing(http_url, project_api_key)
9
+ # Other browsers can be added here
@@ -0,0 +1,192 @@
1
+ import opentelemetry
2
+ import uuid
3
+
4
+ try:
5
+ from playwright.async_api import BrowserContext, Page
6
+ from playwright.sync_api import (
7
+ BrowserContext as SyncBrowserContext,
8
+ Page as SyncPage,
9
+ )
10
+ except ImportError as e:
11
+ raise ImportError(
12
+ f"Attempated to import {__file__}, but it is designed "
13
+ "to patch Playwright, which is not installed. Use `pip install playwright` "
14
+ "to install Playwright or remove this import."
15
+ ) from e
16
+
17
+ _original_new_page = None
18
+ _original_goto = None
19
+ _original_new_page_async = None
20
+ _original_goto_async = None
21
+
22
+ INJECT_PLACEHOLDER = """
23
+ ([baseUrl, projectApiKey]) => {
24
+ const serverUrl = `${baseUrl}/v1/browser-sessions/events`;
25
+ const BATCH_SIZE = 16;
26
+ const FLUSH_INTERVAL = 1000;
27
+ const HEARTBEAT_INTERVAL = 1000; // 1 second heartbeat
28
+
29
+ window.rrwebEventsBatch = [];
30
+
31
+ window.sendBatch = async () => {
32
+ if (window.rrwebEventsBatch.length === 0) return;
33
+
34
+ const eventsPayload = {
35
+ sessionId: window.rrwebSessionId,
36
+ traceId: window.traceId,
37
+ events: window.rrwebEventsBatch
38
+ };
39
+
40
+ try {
41
+ await fetch(serverUrl, {
42
+ method: 'POST',
43
+ headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${projectApiKey}` },
44
+ body: JSON.stringify(eventsPayload),
45
+ });
46
+ window.rrwebEventsBatch = [];
47
+ } catch (error) {
48
+ console.error('Failed to send events:', error);
49
+ }
50
+ };
51
+
52
+ setInterval(() => window.sendBatch(), FLUSH_INTERVAL);
53
+
54
+ // Add heartbeat event
55
+ setInterval(() => {
56
+ window.rrwebEventsBatch.push({
57
+ type: 6, // Custom event type
58
+ data: { source: 'heartbeat' },
59
+ timestamp: Date.now()
60
+ });
61
+ }, HEARTBEAT_INTERVAL);
62
+
63
+ window.rrweb.record({
64
+ emit(event) {
65
+ window.rrwebEventsBatch.push(event);
66
+
67
+ if (window.rrwebEventsBatch.length >= BATCH_SIZE) {
68
+ window.sendBatch();
69
+ }
70
+ }
71
+ });
72
+
73
+ // Simplified beforeunload handler
74
+ window.addEventListener('beforeunload', () => {
75
+ window.sendBatch();
76
+ });
77
+ }
78
+ """
79
+
80
+
81
+ def init_playwright_tracing(http_url: str, project_api_key: str):
82
+ def inject_rrweb(page: SyncPage):
83
+ # Get current trace ID from active span
84
+ current_span = opentelemetry.trace.get_current_span()
85
+ current_span.set_attribute("lmnr.internal.has_browser_session", True)
86
+ trace_id = format(current_span.get_span_context().trace_id, "032x")
87
+ session_id = str(uuid.uuid4().hex)
88
+
89
+ # Generate UUID session ID and set trace ID
90
+ page.evaluate(
91
+ """([traceId, sessionId]) => {
92
+ window.rrwebSessionId = sessionId;
93
+ window.traceId = traceId;
94
+ }""",
95
+ [trace_id, session_id],
96
+ )
97
+
98
+ # Load rrweb and set up recording
99
+ page.add_script_tag(
100
+ url="https://cdn.jsdelivr.net/npm/rrweb@latest/dist/rrweb.min.js"
101
+ )
102
+
103
+ # Update the recording setup to include trace ID
104
+ page.evaluate(
105
+ INJECT_PLACEHOLDER,
106
+ [http_url, project_api_key],
107
+ )
108
+
109
+ async def inject_rrweb_async(page: Page):
110
+ # Wait for the page to be in a ready state first
111
+ await page.wait_for_load_state("domcontentloaded")
112
+
113
+ # Get current trace ID from active span
114
+ current_span = opentelemetry.trace.get_current_span()
115
+ current_span.set_attribute("lmnr.internal.has_browser_session", True)
116
+ trace_id = format(current_span.get_span_context().trace_id, "032x")
117
+ session_id = str(uuid.uuid4().hex)
118
+
119
+ # Wait for any existing script load to complete
120
+ await page.wait_for_load_state("networkidle")
121
+
122
+ # Generate UUID session ID and set trace ID
123
+ await page.evaluate(
124
+ """([traceId, sessionId]) => {
125
+ window.rrwebSessionId = sessionId;
126
+ window.traceId = traceId;
127
+ }""",
128
+ [trace_id, session_id],
129
+ )
130
+
131
+ # Load rrweb and set up recording
132
+ await page.add_script_tag(
133
+ url="https://cdn.jsdelivr.net/npm/rrweb@latest/dist/rrweb.min.js"
134
+ )
135
+
136
+ await page.wait_for_function("""(() => window.rrweb || 'rrweb' in window)""")
137
+
138
+ # Update the recording setup to include trace ID
139
+ await page.evaluate(
140
+ INJECT_PLACEHOLDER,
141
+ [http_url, project_api_key],
142
+ )
143
+
144
+ async def patched_new_page_async(self: BrowserContext, *args, **kwargs):
145
+ # Call the original new_page (returns a Page object)
146
+ page = await _original_new_page_async(self, *args, **kwargs)
147
+ # Inject rrweb automatically after the page is created
148
+ await inject_rrweb_async(page)
149
+ return page
150
+
151
+ async def patched_goto_async(self: Page, *args, **kwargs):
152
+ # Call the original goto
153
+ result = await _original_goto_async(self, *args, **kwargs)
154
+ # Inject rrweb after navigation
155
+ await inject_rrweb_async(self)
156
+ return result
157
+
158
+ def patched_new_page(self: SyncBrowserContext, *args, **kwargs):
159
+ # Call the original new_page (returns a Page object)
160
+ page = _original_new_page(self, *args, **kwargs)
161
+ # Inject rrweb automatically after the page is created
162
+ inject_rrweb(page)
163
+ return page
164
+
165
+ def patched_goto(self: SyncPage, *args, **kwargs):
166
+ # Call the original goto
167
+ result = _original_goto(self, *args, **kwargs)
168
+ # Inject rrweb after navigation
169
+ inject_rrweb(self)
170
+ return result
171
+
172
+ def patch_browser():
173
+ """
174
+ Overrides BrowserContext.new_page with a patched async function
175
+ that injects rrweb into every new page.
176
+ """
177
+ global _original_new_page, _original_goto, _original_new_page_async, _original_goto_async
178
+ if _original_new_page_async is None or _original_goto_async is None:
179
+ _original_new_page_async = BrowserContext.new_page
180
+ BrowserContext.new_page = patched_new_page_async
181
+
182
+ _original_goto_async = Page.goto
183
+ Page.goto = patched_goto_async
184
+
185
+ if _original_new_page is None or _original_goto is None:
186
+ _original_new_page = SyncBrowserContext.new_page
187
+ SyncBrowserContext.new_page = patched_new_page
188
+
189
+ _original_goto = SyncPage.goto
190
+ SyncPage.goto = patched_goto
191
+
192
+ patch_browser()
lmnr/sdk/laminar.py CHANGED
@@ -142,6 +142,8 @@ class Laminar:
142
142
  cls._initialize_logger()
143
143
 
144
144
  Traceloop.init(
145
+ base_http_url=cls.__base_http_url,
146
+ project_api_key=cls.__project_api_key,
145
147
  exporter=OTLPSpanExporter(
146
148
  endpoint=cls.__base_grpc_url,
147
149
  headers={"authorization": f"Bearer {cls.__project_api_key}"},
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: lmnr
3
- Version: 0.4.54
3
+ Version: 0.4.56
4
4
  Summary: Python SDK for Laminar
5
5
  License: Apache-2.0
6
6
  Author: lmnr.ai
@@ -42,63 +42,64 @@ Provides-Extra: weaviate
42
42
  Requires-Dist: aiohttp (>=3.0)
43
43
  Requires-Dist: argparse (>=1.0)
44
44
  Requires-Dist: deprecated (>=1.0)
45
+ Requires-Dist: grpcio (<1.68.0)
45
46
  Requires-Dist: opentelemetry-api (>=1.28.0)
46
47
  Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (>=1.28.0)
47
48
  Requires-Dist: opentelemetry-exporter-otlp-proto-http (>=1.28.0)
48
- Requires-Dist: opentelemetry-instrumentation-alephalpha (>=0.35.0) ; extra == "alephalpha"
49
- Requires-Dist: opentelemetry-instrumentation-alephalpha (>=0.35.0) ; extra == "all"
50
- Requires-Dist: opentelemetry-instrumentation-anthropic (>=0.35.0) ; extra == "all"
51
- Requires-Dist: opentelemetry-instrumentation-anthropic (>=0.35.0) ; extra == "anthropic"
52
- Requires-Dist: opentelemetry-instrumentation-bedrock (>=0.35.0) ; extra == "all"
53
- Requires-Dist: opentelemetry-instrumentation-bedrock (>=0.35.0) ; extra == "bedrock"
54
- Requires-Dist: opentelemetry-instrumentation-chromadb (>=0.35.0) ; extra == "all"
55
- Requires-Dist: opentelemetry-instrumentation-chromadb (>=0.35.0) ; extra == "chromadb"
56
- Requires-Dist: opentelemetry-instrumentation-cohere (>=0.35.0) ; extra == "all"
57
- Requires-Dist: opentelemetry-instrumentation-cohere (>=0.35.0) ; extra == "cohere"
58
- Requires-Dist: opentelemetry-instrumentation-google-generativeai (>=0.35.0) ; extra == "all"
59
- Requires-Dist: opentelemetry-instrumentation-google-generativeai (>=0.35.0) ; extra == "google-generativeai"
60
- Requires-Dist: opentelemetry-instrumentation-groq (>=0.35.0) ; extra == "all"
61
- Requires-Dist: opentelemetry-instrumentation-groq (>=0.35.0) ; extra == "groq"
62
- Requires-Dist: opentelemetry-instrumentation-haystack (>=0.35.0) ; extra == "all"
63
- Requires-Dist: opentelemetry-instrumentation-haystack (>=0.35.0) ; extra == "haystack"
64
- Requires-Dist: opentelemetry-instrumentation-lancedb (>=0.35.0) ; extra == "all"
65
- Requires-Dist: opentelemetry-instrumentation-lancedb (>=0.35.0) ; extra == "lancedb"
66
- Requires-Dist: opentelemetry-instrumentation-langchain (>=0.35.0) ; extra == "all"
67
- Requires-Dist: opentelemetry-instrumentation-langchain (>=0.35.0) ; extra == "langchain"
68
- Requires-Dist: opentelemetry-instrumentation-llamaindex (>=0.35.0) ; extra == "all"
69
- Requires-Dist: opentelemetry-instrumentation-llamaindex (>=0.35.0) ; extra == "llamaindex"
70
- Requires-Dist: opentelemetry-instrumentation-marqo (>=0.35.0) ; extra == "all"
71
- Requires-Dist: opentelemetry-instrumentation-marqo (>=0.35.0) ; extra == "marqo"
72
- Requires-Dist: opentelemetry-instrumentation-milvus (>=0.35.0) ; extra == "all"
73
- Requires-Dist: opentelemetry-instrumentation-milvus (>=0.35.0) ; extra == "milvus"
74
- Requires-Dist: opentelemetry-instrumentation-mistralai (>=0.35.0) ; extra == "all"
75
- Requires-Dist: opentelemetry-instrumentation-mistralai (>=0.35.0) ; extra == "mistralai"
76
- Requires-Dist: opentelemetry-instrumentation-ollama (>=0.35.0) ; extra == "all"
77
- Requires-Dist: opentelemetry-instrumentation-ollama (>=0.35.0) ; extra == "ollama"
78
- Requires-Dist: opentelemetry-instrumentation-openai (>=0.35.0) ; extra == "all"
79
- Requires-Dist: opentelemetry-instrumentation-openai (>=0.35.0) ; extra == "openai"
80
- Requires-Dist: opentelemetry-instrumentation-pinecone (>=0.35.0) ; extra == "all"
81
- Requires-Dist: opentelemetry-instrumentation-pinecone (>=0.35.0) ; extra == "pinecone"
82
- Requires-Dist: opentelemetry-instrumentation-qdrant (>=0.35.0) ; extra == "all"
83
- Requires-Dist: opentelemetry-instrumentation-qdrant (>=0.35.0) ; extra == "qdrant"
84
- Requires-Dist: opentelemetry-instrumentation-replicate (>=0.35.0) ; extra == "all"
85
- Requires-Dist: opentelemetry-instrumentation-replicate (>=0.35.0) ; extra == "replicate"
49
+ Requires-Dist: opentelemetry-instrumentation-alephalpha (>=0.36.1) ; extra == "alephalpha"
50
+ Requires-Dist: opentelemetry-instrumentation-alephalpha (>=0.36.1) ; extra == "all"
51
+ Requires-Dist: opentelemetry-instrumentation-anthropic (>=0.36.1) ; extra == "all"
52
+ Requires-Dist: opentelemetry-instrumentation-anthropic (>=0.36.1) ; extra == "anthropic"
53
+ Requires-Dist: opentelemetry-instrumentation-bedrock (>=0.36.1) ; extra == "all"
54
+ Requires-Dist: opentelemetry-instrumentation-bedrock (>=0.36.1) ; extra == "bedrock"
55
+ Requires-Dist: opentelemetry-instrumentation-chromadb (>=0.36.1) ; extra == "all"
56
+ Requires-Dist: opentelemetry-instrumentation-chromadb (>=0.36.1) ; extra == "chromadb"
57
+ Requires-Dist: opentelemetry-instrumentation-cohere (>=0.36.1) ; extra == "all"
58
+ Requires-Dist: opentelemetry-instrumentation-cohere (>=0.36.1) ; extra == "cohere"
59
+ Requires-Dist: opentelemetry-instrumentation-google-generativeai (>=0.36.1) ; extra == "all"
60
+ Requires-Dist: opentelemetry-instrumentation-google-generativeai (>=0.36.1) ; extra == "google-generativeai"
61
+ Requires-Dist: opentelemetry-instrumentation-groq (>=0.36.1) ; extra == "all"
62
+ Requires-Dist: opentelemetry-instrumentation-groq (>=0.36.1) ; extra == "groq"
63
+ Requires-Dist: opentelemetry-instrumentation-haystack (>=0.36.1) ; extra == "all"
64
+ Requires-Dist: opentelemetry-instrumentation-haystack (>=0.36.1) ; extra == "haystack"
65
+ Requires-Dist: opentelemetry-instrumentation-lancedb (>=0.36.1) ; extra == "all"
66
+ Requires-Dist: opentelemetry-instrumentation-lancedb (>=0.36.1) ; extra == "lancedb"
67
+ Requires-Dist: opentelemetry-instrumentation-langchain (>=0.36.1) ; extra == "all"
68
+ Requires-Dist: opentelemetry-instrumentation-langchain (>=0.36.1) ; extra == "langchain"
69
+ Requires-Dist: opentelemetry-instrumentation-llamaindex (>=0.36.1) ; extra == "all"
70
+ Requires-Dist: opentelemetry-instrumentation-llamaindex (>=0.36.1) ; extra == "llamaindex"
71
+ Requires-Dist: opentelemetry-instrumentation-marqo (>=0.36.1) ; extra == "all"
72
+ Requires-Dist: opentelemetry-instrumentation-marqo (>=0.36.1) ; extra == "marqo"
73
+ Requires-Dist: opentelemetry-instrumentation-milvus (>=0.36.1) ; extra == "all"
74
+ Requires-Dist: opentelemetry-instrumentation-milvus (>=0.36.1) ; extra == "milvus"
75
+ Requires-Dist: opentelemetry-instrumentation-mistralai (>=0.36.1) ; extra == "all"
76
+ Requires-Dist: opentelemetry-instrumentation-mistralai (>=0.36.1) ; extra == "mistralai"
77
+ Requires-Dist: opentelemetry-instrumentation-ollama (>=0.36.1) ; extra == "all"
78
+ Requires-Dist: opentelemetry-instrumentation-ollama (>=0.36.1) ; extra == "ollama"
79
+ Requires-Dist: opentelemetry-instrumentation-openai (>=0.36.1) ; extra == "all"
80
+ Requires-Dist: opentelemetry-instrumentation-openai (>=0.36.1) ; extra == "openai"
81
+ Requires-Dist: opentelemetry-instrumentation-pinecone (>=0.36.1) ; extra == "all"
82
+ Requires-Dist: opentelemetry-instrumentation-pinecone (>=0.36.1) ; extra == "pinecone"
83
+ Requires-Dist: opentelemetry-instrumentation-qdrant (>=0.36.1) ; extra == "all"
84
+ Requires-Dist: opentelemetry-instrumentation-qdrant (>=0.36.1) ; extra == "qdrant"
85
+ Requires-Dist: opentelemetry-instrumentation-replicate (>=0.36.1) ; extra == "all"
86
+ Requires-Dist: opentelemetry-instrumentation-replicate (>=0.36.1) ; extra == "replicate"
86
87
  Requires-Dist: opentelemetry-instrumentation-requests (>=0.50b0)
87
- Requires-Dist: opentelemetry-instrumentation-sagemaker (>=0.35.0) ; extra == "all"
88
- Requires-Dist: opentelemetry-instrumentation-sagemaker (>=0.35.0) ; extra == "sagemaker"
88
+ Requires-Dist: opentelemetry-instrumentation-sagemaker (>=0.36.1) ; extra == "all"
89
+ Requires-Dist: opentelemetry-instrumentation-sagemaker (>=0.36.1) ; extra == "sagemaker"
89
90
  Requires-Dist: opentelemetry-instrumentation-sqlalchemy (>=0.50b0)
90
91
  Requires-Dist: opentelemetry-instrumentation-threading (>=0.50b0)
91
- Requires-Dist: opentelemetry-instrumentation-together (>=0.35.0) ; extra == "all"
92
- Requires-Dist: opentelemetry-instrumentation-together (>=0.35.0) ; extra == "together"
93
- Requires-Dist: opentelemetry-instrumentation-transformers (>=0.35.0) ; extra == "all"
94
- Requires-Dist: opentelemetry-instrumentation-transformers (>=0.35.0) ; extra == "transformers"
92
+ Requires-Dist: opentelemetry-instrumentation-together (>=0.36.1) ; extra == "all"
93
+ Requires-Dist: opentelemetry-instrumentation-together (>=0.36.1) ; extra == "together"
94
+ Requires-Dist: opentelemetry-instrumentation-transformers (>=0.36.1) ; extra == "all"
95
+ Requires-Dist: opentelemetry-instrumentation-transformers (>=0.36.1) ; extra == "transformers"
95
96
  Requires-Dist: opentelemetry-instrumentation-urllib3 (>=0.50b0)
96
- Requires-Dist: opentelemetry-instrumentation-vertexai (>=0.35.0) ; extra == "all"
97
- Requires-Dist: opentelemetry-instrumentation-vertexai (>=0.35.0) ; extra == "vertexai"
98
- Requires-Dist: opentelemetry-instrumentation-watsonx (>=0.35.0) ; extra == "all"
99
- Requires-Dist: opentelemetry-instrumentation-watsonx (>=0.35.0) ; extra == "watsonx"
100
- Requires-Dist: opentelemetry-instrumentation-weaviate (>=0.35.0) ; extra == "all"
101
- Requires-Dist: opentelemetry-instrumentation-weaviate (>=0.35.0) ; extra == "weaviate"
97
+ Requires-Dist: opentelemetry-instrumentation-vertexai (>=0.36.1) ; extra == "all"
98
+ Requires-Dist: opentelemetry-instrumentation-vertexai (>=0.36.1) ; extra == "vertexai"
99
+ Requires-Dist: opentelemetry-instrumentation-watsonx (>=0.36.1) ; extra == "all"
100
+ Requires-Dist: opentelemetry-instrumentation-watsonx (>=0.36.1) ; extra == "watsonx"
101
+ Requires-Dist: opentelemetry-instrumentation-weaviate (>=0.36.1) ; extra == "all"
102
+ Requires-Dist: opentelemetry-instrumentation-weaviate (>=0.36.1) ; extra == "weaviate"
102
103
  Requires-Dist: opentelemetry-sdk (>=1.28.0)
103
104
  Requires-Dist: opentelemetry-semantic-conventions-ai (>=0.4.2)
104
105
  Requires-Dist: pydantic (>=2.0.3)
@@ -2,32 +2,34 @@ lmnr/__init__.py,sha256=Bqxs-8Mh4h69pOHURgBCgo9EW1GwChebxP6wUX2-bsU,452
2
2
  lmnr/cli.py,sha256=4J2RZQhHM3jJcjFvBC4PChQTS-ukxykVvI0X6lTkK-o,2918
3
3
  lmnr/openllmetry_sdk/.flake8,sha256=bCxuDlGx3YQ55QHKPiGJkncHanh9qGjQJUujcFa3lAU,150
4
4
  lmnr/openllmetry_sdk/.python-version,sha256=9OLQBQVbD4zE4cJsPePhnAfV_snrPSoqEQw-PXgPMOs,6
5
- lmnr/openllmetry_sdk/__init__.py,sha256=zPxPkkC43MX8SOK0LbItBnzBQBCr_t1zy9QxhaBMLX8,2355
5
+ lmnr/openllmetry_sdk/__init__.py,sha256=Z-SwgbFRgNRRk2rcO2AY6HpK7nXR0WSscYQ8n0S9xmM,2533
6
6
  lmnr/openllmetry_sdk/config/__init__.py,sha256=DliMGp2NjYAqRFLKpWQPUKjGMHRO8QsVfazBA1qENQ8,248
7
7
  lmnr/openllmetry_sdk/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  lmnr/openllmetry_sdk/decorators/base.py,sha256=BhfTJHjGnKXZRyug41wnmvjbg2UDq2p7eLEak7RsCXI,5779
9
- lmnr/openllmetry_sdk/instruments.py,sha256=CGGUEELldrXkQwAzAkDeAtDq07_pjhz7i14a92P7C_E,1036
9
+ lmnr/openllmetry_sdk/instruments.py,sha256=X1S3XbFF_RDlbxxbNxqKKJ9JNUStdTI6gLYCPWnoOTs,1066
10
10
  lmnr/openllmetry_sdk/tracing/__init__.py,sha256=xT73L1t2si2CM6QmMiTZ7zn-dKKYBLNrpBBWq6WfVBw,68
11
11
  lmnr/openllmetry_sdk/tracing/attributes.py,sha256=B_4KVYWAUu-6DQmsm2eCJQcTxm8pG1EByCBK3uOPkuI,1293
12
12
  lmnr/openllmetry_sdk/tracing/content_allow_list.py,sha256=3feztm6PBWNelc8pAZUcQyEGyeSpNiVKjOaDk65l2ps,846
13
13
  lmnr/openllmetry_sdk/tracing/context_manager.py,sha256=rdSus-p-TaevQ8hIAhfbnZr5dTqRvACDkzXGDpflncY,306
14
- lmnr/openllmetry_sdk/tracing/tracing.py,sha256=N5EeK4yoSa11CPh4J0OvHnDy8uxx018lzJ0FQLVapQ4,32360
14
+ lmnr/openllmetry_sdk/tracing/tracing.py,sha256=QZEB5K1bJ2GmfSLSIa22kAll4iD-TXN5hlRND-2JO0E,32838
15
15
  lmnr/openllmetry_sdk/utils/__init__.py,sha256=pNhf0G3vTd5ccoc03i1MXDbricSaiqCbi1DLWhSekK8,604
16
16
  lmnr/openllmetry_sdk/utils/in_memory_span_exporter.py,sha256=H_4TRaThMO1H6vUQ0OpQvzJk_fZH0OOsRAM1iZQXsR8,2112
17
17
  lmnr/openllmetry_sdk/utils/json_encoder.py,sha256=dK6b_axr70IYL7Vv-bu4wntvDDuyntoqsHaddqX7P58,463
18
18
  lmnr/openllmetry_sdk/utils/package_check.py,sha256=Da4WoTX6J9naODs99DnY9BA-2MxH2pWLmbbVkbQ7VUQ,236
19
19
  lmnr/openllmetry_sdk/version.py,sha256=OlatFEFA4ttqSSIiV8jdE-sq3KG5zu2hnC4B4mzWF3s,23
20
20
  lmnr/sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ lmnr/sdk/browser/__init__.py,sha256=NSP5sB-dm-f0FP70_GMvVrNFwc5rHf7SW0_Oisyo3cE,343
22
+ lmnr/sdk/browser/playwright_patch.py,sha256=6E6eNQmts-dn1qNNB4CAJwpmr6UFxqEuvh1Gh-o8bWI,6487
21
23
  lmnr/sdk/datasets.py,sha256=hJcQcwTJbtA4COoVG3god4xll9TBSDMfvrhKmMfanjg,1567
22
24
  lmnr/sdk/decorators.py,sha256=ja2EUWUWvFOp28ER0k78PRuxNahwCVyH0TdM3U-xY7U,1856
23
25
  lmnr/sdk/eval_control.py,sha256=G6Fg3Xx_KWv72iBaWlNMdyRTF2bZFQnwJ68sJNSpIcY,177
24
26
  lmnr/sdk/evaluations.py,sha256=dUIMEmKUzkOmHZ3nxlddk9kKm518C6xvElpgtNsql10,16344
25
- lmnr/sdk/laminar.py,sha256=611MLSJwGxVHd7LgW0kPCtwPB2rLlHE_BtVyVrIKFz0,31447
27
+ lmnr/sdk/laminar.py,sha256=B4vx8WGtfAYF-NLWXJj7KZLR6KZIkC02GMtoPqalwiU,31545
26
28
  lmnr/sdk/log.py,sha256=nt_YMmPw1IRbGy0b7q4rTtP4Yo3pQfNxqJPXK3nDSNQ,2213
27
29
  lmnr/sdk/types.py,sha256=FCNoFoa0ingOvpXGfbiETVsakYyq9Zpoc56MXJ1YDzQ,6390
28
30
  lmnr/sdk/utils.py,sha256=Uk8y15x-sd5tP2ERONahElLDJVEy_3dA_1_5g9A6auY,3358
29
- lmnr-0.4.54.dist-info/LICENSE,sha256=67b_wJHVV1CBaWkrKFWU1wyqTPSdzH77Ls-59631COg,10411
30
- lmnr-0.4.54.dist-info/METADATA,sha256=ohFPnFyzy3ppgJdvvoz1ofQ6BZFZUsb9wBanIfzUNEc,13829
31
- lmnr-0.4.54.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
32
- lmnr-0.4.54.dist-info/entry_points.txt,sha256=K1jE20ww4jzHNZLnsfWBvU3YKDGBgbOiYG5Y7ivQcq4,37
33
- lmnr-0.4.54.dist-info/RECORD,,
31
+ lmnr-0.4.56.dist-info/LICENSE,sha256=67b_wJHVV1CBaWkrKFWU1wyqTPSdzH77Ls-59631COg,10411
32
+ lmnr-0.4.56.dist-info/METADATA,sha256=lcz6sK6hDBN-7vto1rSB_zUxoQmqWw3z-5iTHSDJgBM,13861
33
+ lmnr-0.4.56.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
34
+ lmnr-0.4.56.dist-info/entry_points.txt,sha256=K1jE20ww4jzHNZLnsfWBvU3YKDGBgbOiYG5Y7ivQcq4,37
35
+ lmnr-0.4.56.dist-info/RECORD,,
File without changes
File without changes