lmnr 0.6.20__py3-none-any.whl → 0.7.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.
- lmnr/__init__.py +0 -4
- lmnr/opentelemetry_lib/decorators/__init__.py +211 -151
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/__init__.py +678 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/config.py +13 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/event_emitter.py +211 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/event_models.py +41 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/span_utils.py +256 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/streaming.py +295 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/utils.py +179 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/version.py +1 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/__init__.py +4 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/__init__.py +488 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/config.py +8 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/event_emitter.py +143 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/event_models.py +41 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/span_utils.py +229 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/utils.py +92 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/version.py +1 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/langgraph/__init__.py +16 -16
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/chat_wrappers.py +3 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/completion_wrappers.py +3 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/utils.py +3 -3
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py +3 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/responses_wrappers.py +7 -0
- lmnr/opentelemetry_lib/opentelemetry/instrumentation/threading/__init__.py +190 -0
- lmnr/opentelemetry_lib/tracing/__init__.py +90 -2
- lmnr/opentelemetry_lib/tracing/_instrument_initializers.py +12 -7
- lmnr/opentelemetry_lib/tracing/context.py +109 -0
- lmnr/opentelemetry_lib/tracing/processor.py +6 -7
- lmnr/opentelemetry_lib/tracing/tracer.py +29 -0
- lmnr/opentelemetry_lib/utils/package_check.py +9 -0
- lmnr/sdk/browser/browser_use_otel.py +9 -7
- lmnr/sdk/browser/patchright_otel.py +14 -26
- lmnr/sdk/browser/playwright_otel.py +72 -73
- lmnr/sdk/browser/pw_utils.py +436 -119
- lmnr/sdk/client/asynchronous/resources/browser_events.py +1 -0
- lmnr/sdk/decorators.py +39 -4
- lmnr/sdk/evaluations.py +23 -9
- lmnr/sdk/laminar.py +181 -209
- lmnr/sdk/types.py +0 -6
- lmnr/version.py +1 -1
- {lmnr-0.6.20.dist-info → lmnr-0.7.0.dist-info}/METADATA +10 -8
- {lmnr-0.6.20.dist-info → lmnr-0.7.0.dist-info}/RECORD +45 -29
- {lmnr-0.6.20.dist-info → lmnr-0.7.0.dist-info}/WHEEL +1 -1
- lmnr/opentelemetry_lib/tracing/context_properties.py +0 -65
- {lmnr-0.6.20.dist-info → lmnr-0.7.0.dist-info}/entry_points.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
from lmnr.sdk.browser.playwright_otel import (
|
2
|
-
|
3
|
-
|
2
|
+
_wrap_bring_to_front_async,
|
3
|
+
_wrap_bring_to_front_sync,
|
4
4
|
_wrap_new_browser_sync,
|
5
5
|
_wrap_new_browser_async,
|
6
6
|
_wrap_new_context_sync,
|
@@ -18,18 +18,6 @@ from wrapt import wrap_function_wrapper
|
|
18
18
|
_instruments = ("patchright >= 1.9.0",)
|
19
19
|
|
20
20
|
WRAPPED_METHODS = [
|
21
|
-
{
|
22
|
-
"package": "patchright.sync_api",
|
23
|
-
"object": "BrowserContext",
|
24
|
-
"method": "new_page",
|
25
|
-
"wrapper": _wrap_new_page,
|
26
|
-
},
|
27
|
-
{
|
28
|
-
"package": "patchright.sync_api",
|
29
|
-
"object": "Browser",
|
30
|
-
"method": "new_page",
|
31
|
-
"wrapper": _wrap_new_page,
|
32
|
-
},
|
33
21
|
{
|
34
22
|
"package": "patchright.sync_api",
|
35
23
|
"object": "BrowserType",
|
@@ -60,21 +48,15 @@ WRAPPED_METHODS = [
|
|
60
48
|
"method": "launch_persistent_context",
|
61
49
|
"wrapper": _wrap_new_context_sync,
|
62
50
|
},
|
51
|
+
{
|
52
|
+
"package": "patchright.sync_api",
|
53
|
+
"object": "Page",
|
54
|
+
"method": "bring_to_front",
|
55
|
+
"wrapper": _wrap_bring_to_front_sync,
|
56
|
+
},
|
63
57
|
]
|
64
58
|
|
65
59
|
WRAPPED_METHODS_ASYNC = [
|
66
|
-
{
|
67
|
-
"package": "patchright.async_api",
|
68
|
-
"object": "BrowserContext",
|
69
|
-
"method": "new_page",
|
70
|
-
"wrapper": _wrap_new_page_async,
|
71
|
-
},
|
72
|
-
{
|
73
|
-
"package": "patchright.async_api",
|
74
|
-
"object": "Browser",
|
75
|
-
"method": "new_page",
|
76
|
-
"wrapper": _wrap_new_page_async,
|
77
|
-
},
|
78
60
|
{
|
79
61
|
"package": "patchright.async_api",
|
80
62
|
"object": "BrowserType",
|
@@ -105,6 +87,12 @@ WRAPPED_METHODS_ASYNC = [
|
|
105
87
|
"method": "launch_persistent_context",
|
106
88
|
"wrapper": _wrap_new_context_async,
|
107
89
|
},
|
90
|
+
{
|
91
|
+
"package": "patchright.async_api",
|
92
|
+
"object": "Page",
|
93
|
+
"method": "bring_to_front",
|
94
|
+
"wrapper": _wrap_bring_to_front_async,
|
95
|
+
},
|
108
96
|
]
|
109
97
|
|
110
98
|
|
@@ -2,7 +2,12 @@ import logging
|
|
2
2
|
import uuid
|
3
3
|
|
4
4
|
from lmnr.opentelemetry_lib.utils.package_check import is_package_installed
|
5
|
-
from lmnr.sdk.browser.pw_utils import
|
5
|
+
from lmnr.sdk.browser.pw_utils import (
|
6
|
+
start_recording_events_async,
|
7
|
+
start_recording_events_sync,
|
8
|
+
take_full_snapshot,
|
9
|
+
take_full_snapshot_async,
|
10
|
+
)
|
6
11
|
from lmnr.sdk.browser.utils import with_tracer_and_client_wrapper
|
7
12
|
from lmnr.sdk.client.asynchronous.async_client import AsyncLaminarClient
|
8
13
|
from lmnr.sdk.client.synchronous.sync_client import LaminarClient
|
@@ -19,18 +24,16 @@ from wrapt import wrap_function_wrapper
|
|
19
24
|
|
20
25
|
try:
|
21
26
|
if is_package_installed("playwright"):
|
22
|
-
from playwright.async_api import Browser, BrowserContext
|
27
|
+
from playwright.async_api import Browser, BrowserContext
|
23
28
|
from playwright.sync_api import (
|
24
29
|
Browser as SyncBrowser,
|
25
30
|
BrowserContext as SyncBrowserContext,
|
26
|
-
Page as SyncPage,
|
27
31
|
)
|
28
32
|
elif is_package_installed("patchright"):
|
29
|
-
from patchright.async_api import Browser, BrowserContext
|
33
|
+
from patchright.async_api import Browser, BrowserContext
|
30
34
|
from patchright.sync_api import (
|
31
35
|
Browser as SyncBrowser,
|
32
36
|
BrowserContext as SyncBrowserContext,
|
33
|
-
Page as SyncPage,
|
34
37
|
)
|
35
38
|
else:
|
36
39
|
raise ImportError(
|
@@ -50,44 +53,25 @@ _instruments = ("playwright >= 1.9.0",)
|
|
50
53
|
logger = logging.getLogger(__name__)
|
51
54
|
|
52
55
|
|
53
|
-
@with_tracer_and_client_wrapper
|
54
|
-
def _wrap_new_page(
|
55
|
-
tracer: Tracer, client: LaminarClient, to_wrap, wrapped, instance, args, kwargs
|
56
|
-
):
|
57
|
-
page = wrapped(*args, **kwargs)
|
58
|
-
session_id = str(uuid.uuid4().hex)
|
59
|
-
handle_navigation_sync(page, session_id, client)
|
60
|
-
return page
|
61
|
-
|
62
|
-
|
63
|
-
@with_tracer_and_client_wrapper
|
64
|
-
async def _wrap_new_page_async(
|
65
|
-
tracer: Tracer, client: AsyncLaminarClient, to_wrap, wrapped, instance, args, kwargs
|
66
|
-
):
|
67
|
-
page = await wrapped(*args, **kwargs)
|
68
|
-
session_id = str(uuid.uuid4().hex)
|
69
|
-
await handle_navigation_async(page, session_id, client)
|
70
|
-
return page
|
71
|
-
|
72
|
-
|
73
56
|
@with_tracer_and_client_wrapper
|
74
57
|
def _wrap_new_browser_sync(
|
75
58
|
tracer: Tracer, client: LaminarClient, to_wrap, wrapped, instance, args, kwargs
|
76
59
|
):
|
77
60
|
browser: SyncBrowser = wrapped(*args, **kwargs)
|
78
61
|
session_id = str(uuid.uuid4().hex)
|
79
|
-
for context in browser.contexts:
|
80
62
|
|
81
|
-
|
82
|
-
|
63
|
+
def create_page_handler(session_id, client):
|
64
|
+
def page_handler(page):
|
65
|
+
start_recording_events_sync(page, session_id, client)
|
83
66
|
|
84
|
-
|
85
|
-
"page",
|
86
|
-
handle_page_navigation,
|
87
|
-
)
|
67
|
+
return page_handler
|
88
68
|
|
69
|
+
for context in browser.contexts:
|
70
|
+
page_handler = create_page_handler(session_id, client)
|
71
|
+
context.on("page", page_handler)
|
89
72
|
for page in context.pages:
|
90
|
-
|
73
|
+
start_recording_events_sync(page, session_id, client)
|
74
|
+
|
91
75
|
return browser
|
92
76
|
|
93
77
|
|
@@ -97,14 +81,18 @@ async def _wrap_new_browser_async(
|
|
97
81
|
):
|
98
82
|
browser: Browser = await wrapped(*args, **kwargs)
|
99
83
|
session_id = str(uuid.uuid4().hex)
|
100
|
-
for context in browser.contexts:
|
101
84
|
|
102
|
-
|
103
|
-
|
85
|
+
def create_page_handler(session_id, client):
|
86
|
+
async def page_handler(page):
|
87
|
+
await start_recording_events_async(page, session_id, client)
|
104
88
|
|
105
|
-
|
89
|
+
return page_handler
|
90
|
+
|
91
|
+
for context in browser.contexts:
|
92
|
+
page_handler = create_page_handler(session_id, client)
|
93
|
+
context.on("page", page_handler)
|
106
94
|
for page in context.pages:
|
107
|
-
await
|
95
|
+
await start_recording_events_async(page, session_id, client)
|
108
96
|
return browser
|
109
97
|
|
110
98
|
|
@@ -115,15 +103,17 @@ def _wrap_new_context_sync(
|
|
115
103
|
context: SyncBrowserContext = wrapped(*args, **kwargs)
|
116
104
|
session_id = str(uuid.uuid4().hex)
|
117
105
|
|
118
|
-
def
|
119
|
-
|
106
|
+
def create_page_handler(session_id, client):
|
107
|
+
def page_handler(page):
|
108
|
+
start_recording_events_sync(page, session_id, client)
|
109
|
+
|
110
|
+
return page_handler
|
120
111
|
|
121
|
-
|
122
|
-
|
123
|
-
handle_page_navigation,
|
124
|
-
)
|
112
|
+
page_handler = create_page_handler(session_id, client)
|
113
|
+
context.on("page", page_handler)
|
125
114
|
for page in context.pages:
|
126
|
-
|
115
|
+
start_recording_events_sync(page, session_id, client)
|
116
|
+
|
127
117
|
return context
|
128
118
|
|
129
119
|
|
@@ -134,28 +124,37 @@ async def _wrap_new_context_async(
|
|
134
124
|
context: BrowserContext = await wrapped(*args, **kwargs)
|
135
125
|
session_id = str(uuid.uuid4().hex)
|
136
126
|
|
137
|
-
|
138
|
-
|
127
|
+
def create_page_handler(session_id, client):
|
128
|
+
async def page_handler(page):
|
129
|
+
await start_recording_events_async(page, session_id, client)
|
130
|
+
|
131
|
+
return page_handler
|
139
132
|
|
140
|
-
|
133
|
+
page_handler = create_page_handler(session_id, client)
|
134
|
+
context.on("page", page_handler)
|
141
135
|
for page in context.pages:
|
142
|
-
await
|
136
|
+
await start_recording_events_async(page, session_id, client)
|
137
|
+
|
143
138
|
return context
|
144
139
|
|
145
140
|
|
141
|
+
@with_tracer_and_client_wrapper
|
142
|
+
def _wrap_bring_to_front_sync(
|
143
|
+
tracer: Tracer, client: LaminarClient, to_wrap, wrapped, instance, args, kwargs
|
144
|
+
):
|
145
|
+
wrapped(*args, **kwargs)
|
146
|
+
take_full_snapshot(instance)
|
147
|
+
|
148
|
+
|
149
|
+
@with_tracer_and_client_wrapper
|
150
|
+
async def _wrap_bring_to_front_async(
|
151
|
+
tracer: Tracer, client: AsyncLaminarClient, to_wrap, wrapped, instance, args, kwargs
|
152
|
+
):
|
153
|
+
await wrapped(*args, **kwargs)
|
154
|
+
await take_full_snapshot_async(instance)
|
155
|
+
|
156
|
+
|
146
157
|
WRAPPED_METHODS = [
|
147
|
-
{
|
148
|
-
"package": "playwright.sync_api",
|
149
|
-
"object": "BrowserContext",
|
150
|
-
"method": "new_page",
|
151
|
-
"wrapper": _wrap_new_page,
|
152
|
-
},
|
153
|
-
{
|
154
|
-
"package": "playwright.sync_api",
|
155
|
-
"object": "Browser",
|
156
|
-
"method": "new_page",
|
157
|
-
"wrapper": _wrap_new_page,
|
158
|
-
},
|
159
158
|
{
|
160
159
|
"package": "playwright.sync_api",
|
161
160
|
"object": "BrowserType",
|
@@ -186,21 +185,15 @@ WRAPPED_METHODS = [
|
|
186
185
|
"method": "launch_persistent_context",
|
187
186
|
"wrapper": _wrap_new_context_sync,
|
188
187
|
},
|
188
|
+
{
|
189
|
+
"package": "playwright.sync_api",
|
190
|
+
"object": "Page",
|
191
|
+
"method": "bring_to_front",
|
192
|
+
"wrapper": _wrap_bring_to_front_sync,
|
193
|
+
},
|
189
194
|
]
|
190
195
|
|
191
196
|
WRAPPED_METHODS_ASYNC = [
|
192
|
-
{
|
193
|
-
"package": "playwright.async_api",
|
194
|
-
"object": "BrowserContext",
|
195
|
-
"method": "new_page",
|
196
|
-
"wrapper": _wrap_new_page_async,
|
197
|
-
},
|
198
|
-
{
|
199
|
-
"package": "playwright.async_api",
|
200
|
-
"object": "Browser",
|
201
|
-
"method": "new_page",
|
202
|
-
"wrapper": _wrap_new_page_async,
|
203
|
-
},
|
204
197
|
{
|
205
198
|
"package": "playwright.async_api",
|
206
199
|
"object": "BrowserType",
|
@@ -231,6 +224,12 @@ WRAPPED_METHODS_ASYNC = [
|
|
231
224
|
"method": "launch_persistent_context",
|
232
225
|
"wrapper": _wrap_new_context_async,
|
233
226
|
},
|
227
|
+
{
|
228
|
+
"package": "playwright.async_api",
|
229
|
+
"object": "Page",
|
230
|
+
"method": "bring_to_front",
|
231
|
+
"wrapper": _wrap_bring_to_front_async,
|
232
|
+
},
|
234
233
|
]
|
235
234
|
|
236
235
|
|