lmnr 0.6.20__py3-none-any.whl → 0.6.21__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 (33) hide show
  1. lmnr/opentelemetry_lib/decorators/__init__.py +188 -138
  2. lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/__init__.py +674 -0
  3. lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/config.py +13 -0
  4. lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/event_emitter.py +211 -0
  5. lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/event_models.py +41 -0
  6. lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/span_utils.py +256 -0
  7. lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/streaming.py +295 -0
  8. lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/utils.py +179 -0
  9. lmnr/opentelemetry_lib/opentelemetry/instrumentation/anthropic/version.py +1 -0
  10. lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/__init__.py +485 -0
  11. lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/config.py +8 -0
  12. lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/event_emitter.py +143 -0
  13. lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/event_models.py +41 -0
  14. lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/span_utils.py +229 -0
  15. lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/utils.py +92 -0
  16. lmnr/opentelemetry_lib/opentelemetry/instrumentation/groq/version.py +1 -0
  17. lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/utils.py +3 -3
  18. lmnr/opentelemetry_lib/tracing/__init__.py +1 -1
  19. lmnr/opentelemetry_lib/tracing/_instrument_initializers.py +12 -7
  20. lmnr/opentelemetry_lib/tracing/processor.py +1 -1
  21. lmnr/opentelemetry_lib/utils/package_check.py +9 -0
  22. lmnr/sdk/browser/browser_use_otel.py +4 -2
  23. lmnr/sdk/browser/patchright_otel.py +0 -26
  24. lmnr/sdk/browser/playwright_otel.py +51 -78
  25. lmnr/sdk/browser/pw_utils.py +359 -114
  26. lmnr/sdk/decorators.py +39 -4
  27. lmnr/sdk/evaluations.py +23 -9
  28. lmnr/sdk/laminar.py +75 -48
  29. lmnr/version.py +1 -1
  30. {lmnr-0.6.20.dist-info → lmnr-0.6.21.dist-info}/METADATA +8 -7
  31. {lmnr-0.6.20.dist-info → lmnr-0.6.21.dist-info}/RECORD +33 -18
  32. {lmnr-0.6.20.dist-info → lmnr-0.6.21.dist-info}/WHEEL +1 -1
  33. {lmnr-0.6.20.dist-info → lmnr-0.6.21.dist-info}/entry_points.txt +0 -0
@@ -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 handle_navigation_async, handle_navigation_sync
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, Page
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, Page
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,18 @@ _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
-
81
- def handle_page_navigation(page: SyncPage):
82
- return handle_navigation_sync(page, session_id, client)
83
-
84
- context.on(
85
- "page",
86
- handle_page_navigation,
87
- )
88
62
 
63
+ for context in browser.contexts:
64
+ context.on("page", lambda p: start_recording_events_sync(p, session_id, client))
89
65
  for page in context.pages:
90
- handle_navigation_sync(page, session_id, client)
66
+ start_recording_events_sync(page, session_id, client)
67
+
91
68
  return browser
92
69
 
93
70
 
@@ -97,14 +74,13 @@ async def _wrap_new_browser_async(
97
74
  ):
98
75
  browser: Browser = await wrapped(*args, **kwargs)
99
76
  session_id = str(uuid.uuid4().hex)
100
- for context in browser.contexts:
101
77
 
102
- async def handle_page_navigation(page: Page):
103
- return await handle_navigation_async(page, session_id, client)
104
-
105
- context.on("page", handle_page_navigation)
78
+ for context in browser.contexts:
79
+ context.on(
80
+ "page", lambda p: start_recording_events_async(p, session_id, client)
81
+ )
106
82
  for page in context.pages:
107
- await handle_navigation_async(page, session_id, client)
83
+ await start_recording_events_async(page, session_id, client)
108
84
  return browser
109
85
 
110
86
 
@@ -115,15 +91,10 @@ def _wrap_new_context_sync(
115
91
  context: SyncBrowserContext = wrapped(*args, **kwargs)
116
92
  session_id = str(uuid.uuid4().hex)
117
93
 
118
- def handle_page_navigation(page: SyncPage):
119
- return handle_navigation_sync(page, session_id, client)
120
-
121
- context.on(
122
- "page",
123
- handle_page_navigation,
124
- )
94
+ context.on("page", lambda p: start_recording_events_sync(p, session_id, client))
125
95
  for page in context.pages:
126
- handle_navigation_sync(page, session_id, client)
96
+ start_recording_events_sync(page, session_id, client)
97
+
127
98
  return context
128
99
 
129
100
 
@@ -134,28 +105,30 @@ async def _wrap_new_context_async(
134
105
  context: BrowserContext = await wrapped(*args, **kwargs)
135
106
  session_id = str(uuid.uuid4().hex)
136
107
 
137
- async def handle_page_navigation(page):
138
- return await handle_navigation_async(page, session_id, client)
139
-
140
- context.on("page", handle_page_navigation)
108
+ context.on("page", lambda p: start_recording_events_async(p, session_id, client))
141
109
  for page in context.pages:
142
- await handle_navigation_async(page, session_id, client)
110
+ await start_recording_events_async(page, session_id, client)
111
+
143
112
  return context
144
113
 
145
114
 
115
+ @with_tracer_and_client_wrapper
116
+ def _wrap_bring_to_front_sync(
117
+ tracer: Tracer, client: LaminarClient, to_wrap, wrapped, instance, args, kwargs
118
+ ):
119
+ wrapped(*args, **kwargs)
120
+ take_full_snapshot(instance)
121
+
122
+
123
+ @with_tracer_and_client_wrapper
124
+ async def _wrap_bring_to_front_async(
125
+ tracer: Tracer, client: AsyncLaminarClient, to_wrap, wrapped, instance, args, kwargs
126
+ ):
127
+ await wrapped(*args, **kwargs)
128
+ await take_full_snapshot_async(instance)
129
+
130
+
146
131
  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
132
  {
160
133
  "package": "playwright.sync_api",
161
134
  "object": "BrowserType",
@@ -186,21 +159,15 @@ WRAPPED_METHODS = [
186
159
  "method": "launch_persistent_context",
187
160
  "wrapper": _wrap_new_context_sync,
188
161
  },
162
+ {
163
+ "package": "playwright.sync_api",
164
+ "object": "Page",
165
+ "method": "bring_to_front",
166
+ "wrapper": _wrap_bring_to_front_sync,
167
+ },
189
168
  ]
190
169
 
191
170
  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
171
  {
205
172
  "package": "playwright.async_api",
206
173
  "object": "BrowserType",
@@ -231,6 +198,12 @@ WRAPPED_METHODS_ASYNC = [
231
198
  "method": "launch_persistent_context",
232
199
  "wrapper": _wrap_new_context_async,
233
200
  },
201
+ {
202
+ "package": "playwright.async_api",
203
+ "object": "Page",
204
+ "method": "bring_to_front",
205
+ "wrapper": _wrap_bring_to_front_async,
206
+ },
234
207
  ]
235
208
 
236
209