sentry-sdk 2.31.0__py2.py3-none-any.whl → 2.33.0__py2.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.

Potentially problematic release.


This version of sentry-sdk might be problematic. Click here for more details.

sentry_sdk/__init__.py CHANGED
@@ -47,6 +47,8 @@ __all__ = [ # noqa
47
47
  "trace",
48
48
  "monitor",
49
49
  "logger",
50
+ "start_session",
51
+ "end_session",
50
52
  ]
51
53
 
52
54
  # Initialize the debug support after everything is loaded
@@ -102,15 +102,19 @@ def record_token_usage(
102
102
  ai_pipeline_name = get_ai_pipeline_name()
103
103
  if ai_pipeline_name:
104
104
  span.set_data(SPANDATA.AI_PIPELINE_NAME, ai_pipeline_name)
105
+
105
106
  if prompt_tokens is not None:
106
- span.set_measurement("ai_prompt_tokens_used", value=prompt_tokens)
107
+ span.set_data(SPANDATA.GEN_AI_USAGE_INPUT_TOKENS, prompt_tokens)
108
+
107
109
  if completion_tokens is not None:
108
- span.set_measurement("ai_completion_tokens_used", value=completion_tokens)
110
+ span.set_data(SPANDATA.GEN_AI_USAGE_OUTPUT_TOKENS, completion_tokens)
111
+
109
112
  if (
110
113
  total_tokens is None
111
114
  and prompt_tokens is not None
112
115
  and completion_tokens is not None
113
116
  ):
114
117
  total_tokens = prompt_tokens + completion_tokens
118
+
115
119
  if total_tokens is not None:
116
- span.set_measurement("ai_total_tokens_used", total_tokens)
120
+ span.set_data(SPANDATA.GEN_AI_USAGE_TOTAL_TOKENS, total_tokens)
sentry_sdk/api.py CHANGED
@@ -82,6 +82,8 @@ __all__ = [
82
82
  "start_transaction",
83
83
  "trace",
84
84
  "monitor",
85
+ "start_session",
86
+ "end_session",
85
87
  ]
86
88
 
87
89
 
@@ -450,3 +452,17 @@ def continue_trace(
450
452
  return get_isolation_scope().continue_trace(
451
453
  environ_or_headers, op, name, source, origin
452
454
  )
455
+
456
+
457
+ @scopemethod
458
+ def start_session(
459
+ session_mode="application", # type: str
460
+ ):
461
+ # type: (...) -> None
462
+ return get_isolation_scope().start_session(session_mode=session_mode)
463
+
464
+
465
+ @scopemethod
466
+ def end_session():
467
+ # type: () -> None
468
+ return get_isolation_scope().end_session()
sentry_sdk/consts.py CHANGED
@@ -1181,4 +1181,4 @@ DEFAULT_OPTIONS = _get_default_options()
1181
1181
  del _get_default_options
1182
1182
 
1183
1183
 
1184
- VERSION = "2.31.0"
1184
+ VERSION = "2.33.0"
@@ -145,6 +145,22 @@ class SentryAsgiMiddleware:
145
145
  else:
146
146
  self.__call__ = self._run_asgi2
147
147
 
148
+ def _capture_lifespan_exception(self, exc):
149
+ # type: (Exception) -> None
150
+ """Capture exceptions raise in application lifespan handlers.
151
+
152
+ The separate function is needed to support overriding in derived integrations that use different catching mechanisms.
153
+ """
154
+ return _capture_exception(exc=exc, mechanism_type=self.mechanism_type)
155
+
156
+ def _capture_request_exception(self, exc):
157
+ # type: (Exception) -> None
158
+ """Capture exceptions raised in incoming request handlers.
159
+
160
+ The separate function is needed to support overriding in derived integrations that use different catching mechanisms.
161
+ """
162
+ return _capture_exception(exc=exc, mechanism_type=self.mechanism_type)
163
+
148
164
  def _run_asgi2(self, scope):
149
165
  # type: (Any) -> Any
150
166
  async def inner(receive, send):
@@ -158,7 +174,7 @@ class SentryAsgiMiddleware:
158
174
  return await self._run_app(scope, receive, send, asgi_version=3)
159
175
 
160
176
  async def _run_app(self, scope, receive, send, asgi_version):
161
- # type: (Any, Any, Any, Any, int) -> Any
177
+ # type: (Any, Any, Any, int) -> Any
162
178
  is_recursive_asgi_middleware = _asgi_middleware_applied.get(False)
163
179
  is_lifespan = scope["type"] == "lifespan"
164
180
  if is_recursive_asgi_middleware or is_lifespan:
@@ -169,7 +185,7 @@ class SentryAsgiMiddleware:
169
185
  return await self.app(scope, receive, send)
170
186
 
171
187
  except Exception as exc:
172
- _capture_exception(exc, mechanism_type=self.mechanism_type)
188
+ self._capture_lifespan_exception(exc)
173
189
  raise exc from None
174
190
 
175
191
  _asgi_middleware_applied.set(True)
@@ -256,7 +272,7 @@ class SentryAsgiMiddleware:
256
272
  scope, receive, _sentry_wrapped_send
257
273
  )
258
274
  except Exception as exc:
259
- _capture_exception(exc, mechanism_type=self.mechanism_type)
275
+ self._capture_request_exception(exc)
260
276
  raise exc from None
261
277
  finally:
262
278
  _asgi_middleware_applied.set(False)
@@ -1,3 +1,4 @@
1
+ import itertools
1
2
  from collections import OrderedDict
2
3
  from functools import wraps
3
4
 
@@ -22,6 +23,7 @@ try:
22
23
  from langchain_core.callbacks import (
23
24
  manager,
24
25
  BaseCallbackHandler,
26
+ BaseCallbackManager,
25
27
  Callbacks,
26
28
  )
27
29
  from langchain_core.agents import AgentAction, AgentFinish
@@ -88,12 +90,9 @@ class WatchedSpan:
88
90
  class SentryLangchainCallback(BaseCallbackHandler): # type: ignore[misc]
89
91
  """Base callback handler that can be used to handle callbacks from langchain."""
90
92
 
91
- span_map = OrderedDict() # type: OrderedDict[UUID, WatchedSpan]
92
-
93
- max_span_map_size = 0
94
-
95
93
  def __init__(self, max_span_map_size, include_prompts, tiktoken_encoding_name=None):
96
94
  # type: (int, bool, Optional[str]) -> None
95
+ self.span_map = OrderedDict() # type: OrderedDict[UUID, WatchedSpan]
97
96
  self.max_span_map_size = max_span_map_size
98
97
  self.include_prompts = include_prompts
99
98
 
@@ -436,12 +435,20 @@ def _wrap_configure(f):
436
435
  **kwargs,
437
436
  )
438
437
 
439
- callbacks_list = local_callbacks or []
440
-
441
- if isinstance(callbacks_list, BaseCallbackHandler):
442
- callbacks_list = [callbacks_list]
443
- elif not isinstance(callbacks_list, list):
444
- logger.debug("Unknown callback type: %s", callbacks_list)
438
+ local_callbacks = local_callbacks or []
439
+
440
+ # Handle each possible type of local_callbacks. For each type, we
441
+ # extract the list of callbacks to check for SentryLangchainCallback,
442
+ # and define a function that would add the SentryLangchainCallback
443
+ # to the existing callbacks list.
444
+ if isinstance(local_callbacks, BaseCallbackManager):
445
+ callbacks_list = local_callbacks.handlers
446
+ elif isinstance(local_callbacks, BaseCallbackHandler):
447
+ callbacks_list = [local_callbacks]
448
+ elif isinstance(local_callbacks, list):
449
+ callbacks_list = local_callbacks
450
+ else:
451
+ logger.debug("Unknown callback type: %s", local_callbacks)
445
452
  # Just proceed with original function call
446
453
  return f(
447
454
  callback_manager_cls,
@@ -451,21 +458,38 @@ def _wrap_configure(f):
451
458
  **kwargs,
452
459
  )
453
460
 
454
- if not any(isinstance(cb, SentryLangchainCallback) for cb in callbacks_list):
455
- # Avoid mutating the existing callbacks list
456
- callbacks_list = [
457
- *callbacks_list,
458
- SentryLangchainCallback(
459
- integration.max_spans,
460
- integration.include_prompts,
461
- integration.tiktoken_encoding_name,
462
- ),
463
- ]
461
+ # Handle each possible type of inheritable_callbacks.
462
+ if isinstance(inheritable_callbacks, BaseCallbackManager):
463
+ inheritable_callbacks_list = inheritable_callbacks.handlers
464
+ elif isinstance(inheritable_callbacks, list):
465
+ inheritable_callbacks_list = inheritable_callbacks
466
+ else:
467
+ inheritable_callbacks_list = []
468
+
469
+ if not any(
470
+ isinstance(cb, SentryLangchainCallback)
471
+ for cb in itertools.chain(callbacks_list, inheritable_callbacks_list)
472
+ ):
473
+ sentry_handler = SentryLangchainCallback(
474
+ integration.max_spans,
475
+ integration.include_prompts,
476
+ integration.tiktoken_encoding_name,
477
+ )
478
+ if isinstance(local_callbacks, BaseCallbackManager):
479
+ local_callbacks = local_callbacks.copy()
480
+ local_callbacks.handlers = [
481
+ *local_callbacks.handlers,
482
+ sentry_handler,
483
+ ]
484
+ elif isinstance(local_callbacks, BaseCallbackHandler):
485
+ local_callbacks = [local_callbacks, sentry_handler]
486
+ else: # local_callbacks is a list
487
+ local_callbacks = [*local_callbacks, sentry_handler]
464
488
 
465
489
  return f(
466
490
  callback_manager_cls,
467
491
  inheritable_callbacks,
468
- callbacks_list,
492
+ local_callbacks,
469
493
  *args,
470
494
  **kwargs,
471
495
  )
@@ -87,6 +87,15 @@ class SentryLitestarASGIMiddleware(SentryAsgiMiddleware):
87
87
  span_origin=span_origin,
88
88
  )
89
89
 
90
+ def _capture_request_exception(self, exc):
91
+ # type: (Exception) -> None
92
+ """Avoid catching exceptions from request handlers.
93
+
94
+ Those exceptions are already handled in Litestar.after_exception handler.
95
+ We still catch exceptions from application lifespan handlers.
96
+ """
97
+ pass
98
+
90
99
 
91
100
  def patch_app_init():
92
101
  # type: () -> None
@@ -19,9 +19,10 @@ if TYPE_CHECKING:
19
19
  def ai_client_span(agent, get_response_kwargs):
20
20
  # type: (Agent, dict[str, Any]) -> sentry_sdk.tracing.Span
21
21
  # TODO-anton: implement other types of operations. Now "chat" is hardcoded.
22
+ model_name = agent.model.model if hasattr(agent.model, "model") else agent.model
22
23
  span = sentry_sdk.start_span(
23
24
  op=OP.GEN_AI_CHAT,
24
- description=f"chat {agent.model}",
25
+ description=f"chat {model_name}",
25
26
  origin=SPAN_ORIGIN,
26
27
  )
27
28
  # TODO-anton: remove hardcoded stuff and replace something that also works for embedding and so on
@@ -1,5 +1,5 @@
1
1
  import sentry_sdk
2
- from sentry_sdk.consts import OP, SPANDATA
2
+ from sentry_sdk.consts import OP, SPANDATA, SPANSTATUS
3
3
  from sentry_sdk.scope import should_send_default_pii
4
4
 
5
5
  from ..consts import SPAN_ORIGIN
@@ -39,5 +39,10 @@ def update_execute_tool_span(span, agent, tool, result):
39
39
  # type: (sentry_sdk.tracing.Span, agents.Agent, agents.Tool, Any) -> None
40
40
  _set_agent_data(span, agent)
41
41
 
42
+ if isinstance(result, str) and result.startswith(
43
+ "An error occurred while running the tool"
44
+ ):
45
+ span.set_status(SPANSTATUS.INTERNAL_ERROR)
46
+
42
47
  if should_send_default_pii():
43
48
  span.set_data(SPANDATA.GEN_AI_TOOL_OUTPUT, result)
@@ -53,7 +53,8 @@ def _set_agent_data(span, agent):
53
53
  )
54
54
 
55
55
  if agent.model:
56
- span.set_data(SPANDATA.GEN_AI_REQUEST_MODEL, agent.model)
56
+ model_name = agent.model.model if hasattr(agent.model, "model") else agent.model
57
+ span.set_data(SPANDATA.GEN_AI_REQUEST_MODEL, model_name)
57
58
 
58
59
  if agent.model_settings.presence_penalty:
59
60
  span.set_data(
@@ -42,73 +42,81 @@ def _patch_ray_remote():
42
42
  old_remote = ray.remote
43
43
 
44
44
  @functools.wraps(old_remote)
45
- def new_remote(f, *args, **kwargs):
46
- # type: (Callable[..., Any], *Any, **Any) -> Callable[..., Any]
45
+ def new_remote(f=None, *args, **kwargs):
46
+ # type: (Optional[Callable[..., Any]], *Any, **Any) -> Callable[..., Any]
47
+
47
48
  if inspect.isclass(f):
48
49
  # Ray Actors
49
50
  # (https://docs.ray.io/en/latest/ray-core/actors.html)
50
51
  # are not supported
51
52
  # (Only Ray Tasks are supported)
52
- return old_remote(f, *args, *kwargs)
53
-
54
- def _f(*f_args, _tracing=None, **f_kwargs):
55
- # type: (Any, Optional[dict[str, Any]], Any) -> Any
56
- """
57
- Ray Worker
58
- """
59
- _check_sentry_initialized()
60
-
61
- transaction = sentry_sdk.continue_trace(
62
- _tracing or {},
63
- op=OP.QUEUE_TASK_RAY,
64
- name=qualname_from_function(f),
65
- origin=RayIntegration.origin,
66
- source=TransactionSource.TASK,
67
- )
68
-
69
- with sentry_sdk.start_transaction(transaction) as transaction:
70
- try:
71
- result = f(*f_args, **f_kwargs)
72
- transaction.set_status(SPANSTATUS.OK)
73
- except Exception:
74
- transaction.set_status(SPANSTATUS.INTERNAL_ERROR)
75
- exc_info = sys.exc_info()
76
- _capture_exception(exc_info)
77
- reraise(*exc_info)
78
-
79
- return result
80
-
81
- rv = old_remote(_f, *args, *kwargs)
82
- old_remote_method = rv.remote
83
-
84
- def _remote_method_with_header_propagation(*args, **kwargs):
85
- # type: (*Any, **Any) -> Any
86
- """
87
- Ray Client
88
- """
89
- with sentry_sdk.start_span(
90
- op=OP.QUEUE_SUBMIT_RAY,
91
- name=qualname_from_function(f),
92
- origin=RayIntegration.origin,
93
- ) as span:
94
- tracing = {
95
- k: v
96
- for k, v in sentry_sdk.get_current_scope().iter_trace_propagation_headers()
97
- }
98
- try:
99
- result = old_remote_method(*args, **kwargs, _tracing=tracing)
100
- span.set_status(SPANSTATUS.OK)
101
- except Exception:
102
- span.set_status(SPANSTATUS.INTERNAL_ERROR)
103
- exc_info = sys.exc_info()
104
- _capture_exception(exc_info)
105
- reraise(*exc_info)
106
-
107
- return result
108
-
109
- rv.remote = _remote_method_with_header_propagation
110
-
111
- return rv
53
+ return old_remote(f, *args, **kwargs)
54
+
55
+ def wrapper(user_f):
56
+ # type: (Callable[..., Any]) -> Any
57
+ def new_func(*f_args, _tracing=None, **f_kwargs):
58
+ # type: (Any, Optional[dict[str, Any]], Any) -> Any
59
+ _check_sentry_initialized()
60
+
61
+ transaction = sentry_sdk.continue_trace(
62
+ _tracing or {},
63
+ op=OP.QUEUE_TASK_RAY,
64
+ name=qualname_from_function(user_f),
65
+ origin=RayIntegration.origin,
66
+ source=TransactionSource.TASK,
67
+ )
68
+
69
+ with sentry_sdk.start_transaction(transaction) as transaction:
70
+ try:
71
+ result = user_f(*f_args, **f_kwargs)
72
+ transaction.set_status(SPANSTATUS.OK)
73
+ except Exception:
74
+ transaction.set_status(SPANSTATUS.INTERNAL_ERROR)
75
+ exc_info = sys.exc_info()
76
+ _capture_exception(exc_info)
77
+ reraise(*exc_info)
78
+
79
+ return result
80
+
81
+ if f:
82
+ rv = old_remote(new_func)
83
+ else:
84
+ rv = old_remote(*args, **kwargs)(new_func)
85
+ old_remote_method = rv.remote
86
+
87
+ def _remote_method_with_header_propagation(*args, **kwargs):
88
+ # type: (*Any, **Any) -> Any
89
+ """
90
+ Ray Client
91
+ """
92
+ with sentry_sdk.start_span(
93
+ op=OP.QUEUE_SUBMIT_RAY,
94
+ name=qualname_from_function(user_f),
95
+ origin=RayIntegration.origin,
96
+ ) as span:
97
+ tracing = {
98
+ k: v
99
+ for k, v in sentry_sdk.get_current_scope().iter_trace_propagation_headers()
100
+ }
101
+ try:
102
+ result = old_remote_method(*args, **kwargs, _tracing=tracing)
103
+ span.set_status(SPANSTATUS.OK)
104
+ except Exception:
105
+ span.set_status(SPANSTATUS.INTERNAL_ERROR)
106
+ exc_info = sys.exc_info()
107
+ _capture_exception(exc_info)
108
+ reraise(*exc_info)
109
+
110
+ return result
111
+
112
+ rv.remote = _remote_method_with_header_propagation
113
+
114
+ return rv
115
+
116
+ if f is not None:
117
+ return wrapper(f)
118
+ else:
119
+ return wrapper
112
120
 
113
121
  ray.remote = new_remote
114
122
 
sentry_sdk/sessions.py CHANGED
@@ -1,7 +1,6 @@
1
1
  import os
2
- import time
3
2
  import warnings
4
- from threading import Thread, Lock
3
+ from threading import Thread, Lock, Event
5
4
  from contextlib import contextmanager
6
5
 
7
6
  import sentry_sdk
@@ -162,7 +161,7 @@ class SessionFlusher:
162
161
  self._thread_lock = Lock()
163
162
  self._aggregate_lock = Lock()
164
163
  self._thread_for_pid = None # type: Optional[int]
165
- self._running = True
164
+ self.__shutdown_requested = Event()
166
165
 
167
166
  def flush(self):
168
167
  # type: (...) -> None
@@ -208,10 +207,10 @@ class SessionFlusher:
208
207
 
209
208
  def _thread():
210
209
  # type: (...) -> None
211
- while self._running:
212
- time.sleep(self.flush_interval)
213
- if self._running:
214
- self.flush()
210
+ running = True
211
+ while running:
212
+ running = not self.__shutdown_requested.wait(self.flush_interval)
213
+ self.flush()
215
214
 
216
215
  thread = Thread(target=_thread)
217
216
  thread.daemon = True
@@ -220,7 +219,7 @@ class SessionFlusher:
220
219
  except RuntimeError:
221
220
  # Unfortunately at this point the interpreter is in a state that no
222
221
  # longer allows us to spawn a thread and we have to bail.
223
- self._running = False
222
+ self.__shutdown_requested.set()
224
223
  return None
225
224
 
226
225
  self._thread = thread
@@ -271,7 +270,7 @@ class SessionFlusher:
271
270
 
272
271
  def kill(self):
273
272
  # type: (...) -> None
274
- self._running = False
273
+ self.__shutdown_requested.set()
275
274
 
276
275
  def __del__(self):
277
276
  # type: (...) -> None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-sdk
3
- Version: 2.31.0
3
+ Version: 2.33.0
4
4
  Summary: Python client for Sentry (https://sentry.io)
5
5
  Home-page: https://github.com/getsentry/sentry-python
6
6
  Author: Sentry Team and Contributors
@@ -1,4 +1,4 @@
1
- sentry_sdk/__init__.py,sha256=NpAD2ppgC_6JdRSMcfgZKXqOnV3q2jAp7PWZxKeXo-k,1215
1
+ sentry_sdk/__init__.py,sha256=c3IYjMHt7ZJlOKg4DQK2xMOVQm4A9jVfBIGuzjoCq-k,1255
2
2
  sentry_sdk/_compat.py,sha256=Pxcg6cUYPiOoXIFfLI_H3ATb7SfrcXOeZdzpeWv3umI,3116
3
3
  sentry_sdk/_init_implementation.py,sha256=WL54d8nggjRunBm3XlG-sWSx4yS5lpYYggd7YBWpuVk,2559
4
4
  sentry_sdk/_log_batcher.py,sha256=bBpspIlf1ejxlbudo17bZOSir226LGAdjDe_3kHkOro,5085
@@ -6,10 +6,10 @@ sentry_sdk/_lru_cache.py,sha256=phZMBm9EKU1m67OOApnKCffnlWAlVz9bYjig7CglQuk,1229
6
6
  sentry_sdk/_queue.py,sha256=UUzbmliDYmdVYiDA32NMYkX369ElWMFNSj5kodqVQZE,11250
7
7
  sentry_sdk/_types.py,sha256=TMdmMSxc0dYErvRA5ikEnNxH_Iwb2Wiw3ZUMNlp0HCA,10482
8
8
  sentry_sdk/_werkzeug.py,sha256=m3GPf-jHd8v3eVOfBHaKw5f0uHoLkXrSO1EcY-8EisY,3734
9
- sentry_sdk/api.py,sha256=om-rCEK4Wo5MRdh3nlgkFdrdJe3ZNkPPDmI0MQdLGfk,11866
9
+ sentry_sdk/api.py,sha256=mdw2-KPGLrYwN7QPRbk2TL4gDfOV56fIO8fAdafMcFo,12192
10
10
  sentry_sdk/attachments.py,sha256=0Dylhm065O6hNFjB40fWCd5Hg4qWSXndmi1TPWglZkI,3109
11
11
  sentry_sdk/client.py,sha256=7G9qH7YsBhl2ga9BZgmW0ESuXl4Z8pQZz2M8GC3aIV4,38668
12
- sentry_sdk/consts.py,sha256=5XFUCcTvObSqSXSVPpT4_MnOgG9umf7ZgGUECRr0WMA,45069
12
+ sentry_sdk/consts.py,sha256=PE5l_ESiXr5Gy1z2IPuKyCQPvVjuxjDdrkuS6DFGhSE,45069
13
13
  sentry_sdk/debug.py,sha256=ddBehQlAuQC1sg1XO-N4N3diZ0x0iT5RWJwFdrtcsjw,1019
14
14
  sentry_sdk/envelope.py,sha256=Mgcib0uLm_5tSVzOrznRLdK9B3CjQ6TEgM1ZIZIfjWo,10355
15
15
  sentry_sdk/feature_flags.py,sha256=99JRig6TBkrkBzVCKqYcmVgjsuA_Hk-ul7jFHGhJplc,2233
@@ -22,7 +22,7 @@ sentry_sdk/scope.py,sha256=fl6Hm7BD-1HlzghOHkWY_zQY3FkakrNrqdjebfJ0LbY,63942
22
22
  sentry_sdk/scrubber.py,sha256=rENmQ35buugDl269bRZuIAtgr27B9SzisJYUF-691pc,6064
23
23
  sentry_sdk/serializer.py,sha256=iXiRwTuRj0gcKyHRO0GNTZB1Hmk0LMDiBt6Be7RpGt8,13087
24
24
  sentry_sdk/session.py,sha256=TqDVmRKKHUDSmZb4jQR-s8wDt7Fwb6QaG21hawUGWEs,5571
25
- sentry_sdk/sessions.py,sha256=DKgZh4xq-ccOmTqzX98fp-dZn0b6WwbLCbfMOp8x27o,9181
25
+ sentry_sdk/sessions.py,sha256=gQxwVBVqGhLp4a6xwrUe3JdaCSVbitZRxTdqScOSjj4,9228
26
26
  sentry_sdk/spotlight.py,sha256=93kdd8KxdLfcPaxFnFuqHgYAAL4FCfpK1hiiPoD7Ac4,8678
27
27
  sentry_sdk/tracing.py,sha256=dEyLZn0JSj5WMjVJEQUxRud5NewBRau9dkuDrrzJ_Xw,48114
28
28
  sentry_sdk/tracing_utils.py,sha256=J_eY_0XuyydslEmcFZcrv8dt2ItpW7uWwe6CoXxoK5Q,28820
@@ -31,7 +31,7 @@ sentry_sdk/types.py,sha256=NLbnRzww2K3_oGz2GzcC8TdX5L2DXYso1-H1uCv2Hwc,1222
31
31
  sentry_sdk/utils.py,sha256=jRoLuDOYyZXn2Ks7BP4WUOTkutJnofKBZoJ9s7Dha5k,59368
32
32
  sentry_sdk/worker.py,sha256=VSMaigRMbInVyupSFpBC42bft2oIViea-0C_d9ThnIo,4464
33
33
  sentry_sdk/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- sentry_sdk/ai/monitoring.py,sha256=2foyUmlXzowyNUk_pyEzP2OHiccGKr4BJo0T3U52ksk,4506
34
+ sentry_sdk/ai/monitoring.py,sha256=hDaLjTcI_CMUpy_wyYD5WNts07I07BZDleItu0Djv_w,4508
35
35
  sentry_sdk/ai/utils.py,sha256=QCwhHoptrdXyYroJqzCKxqi0cmrlD9IDDWUcBk6yWZc,950
36
36
  sentry_sdk/crons/__init__.py,sha256=3Zt6g1-pZZ12uRKKsC8QLm3XgJ4K1VYxgVpNNUygOZY,221
37
37
  sentry_sdk/crons/api.py,sha256=s3x6SG-jqIdWS-Kj0sAxJv0nz2A3stdGE1UCtQyRUy4,1559
@@ -45,7 +45,7 @@ sentry_sdk/integrations/anthropic.py,sha256=4iMGpFOw9rxQrRPwBU4F9aZaZ6aOU-Bh0X_C
45
45
  sentry_sdk/integrations/argv.py,sha256=GIY7TBFETF8Z0fDzqTXEJldt5XXCDdFNZxpGxP7EPaU,911
46
46
  sentry_sdk/integrations/ariadne.py,sha256=C-zKlOrU7jvTWmQHZx0M0tAZNkPPo7Z5-5jXDD92LiU,5834
47
47
  sentry_sdk/integrations/arq.py,sha256=yDPdWJa3ZgnGLwFzavIylIafEVN0qqSSgL4kUHxQF70,7881
48
- sentry_sdk/integrations/asgi.py,sha256=by5ccoZJVIc9ah4KwnwhKpGB7FrOfb6tY2crjOkEXww,12779
48
+ sentry_sdk/integrations/asgi.py,sha256=NiaIUpSycwU8GPJhykHYqArGGeQliMn9PMXrhIqSt7g,13471
49
49
  sentry_sdk/integrations/asyncio.py,sha256=KdQs5dd_jY2cmBTGeG_jwEgfrPntC4lH71vTBXI670k,4034
50
50
  sentry_sdk/integrations/asyncpg.py,sha256=fbBTi5bEERK3c9o43LBLtS5wPaSVq_qIl3Y50NPmr5Y,6521
51
51
  sentry_sdk/integrations/atexit.py,sha256=sY46N2hEvtGuT1DBQhirUXHbjgXjXAm7R_sgiectVKw,1652
@@ -71,9 +71,9 @@ sentry_sdk/integrations/graphene.py,sha256=I6ZJ8Apd9dO9XPVvZY7I46-v1eXOW1C1rAkWw
71
71
  sentry_sdk/integrations/httpx.py,sha256=WwUulqzBLoGGqWUUdQg_MThwQUKzBXnA-m3g_1GOpCE,5866
72
72
  sentry_sdk/integrations/huey.py,sha256=wlyxjeWqqJp1X5S3neD5FiZjXcyznm1dl8_u1wIo76U,5443
73
73
  sentry_sdk/integrations/huggingface_hub.py,sha256=pbtcwBtB0Nz09nNVxKMDs_GYm9XGmQVj1xgSsFSLdLI,6551
74
- sentry_sdk/integrations/langchain.py,sha256=s0cnCcxlDEsZdLxidAeZvznafM-aEUXuXZDg3mLPUMU,17683
74
+ sentry_sdk/integrations/langchain.py,sha256=Zxc0Xf7Y5Nv7_r-awlfXtvloGwma2B2onm-ylrQWvLU,18993
75
75
  sentry_sdk/integrations/launchdarkly.py,sha256=bvtExuj68xPXZFsQeWTDR-ZBqP087tPuVzP1bNAOZHc,1935
76
- sentry_sdk/integrations/litestar.py,sha256=kGOgCTEqeN6UqQjz4t9gjuXlaZX91zPoxwe590OEjNo,11569
76
+ sentry_sdk/integrations/litestar.py,sha256=ui52AfgyyAO4aQ9XSkqJZNcPduX0BccCYUkQA9nIJ_E,11891
77
77
  sentry_sdk/integrations/logging.py,sha256=-0o9HTFo5RpHkCpxfZvpiBj5VWpH4aIJmH-HNQzj3Ec,13643
78
78
  sentry_sdk/integrations/loguru.py,sha256=mEWYWsNHQLlWknU4M8RBgOf2-5B5cBr5aGd-ZH1Emq4,6193
79
79
  sentry_sdk/integrations/modules.py,sha256=vzLx3Erg77Vl4mnUvAgTg_3teAuWy7zylFpAidBI9I0,820
@@ -83,7 +83,7 @@ sentry_sdk/integrations/pure_eval.py,sha256=OvT76XvllQ_J6ABu3jVNU6KD2QAxnXMtTZ7h
83
83
  sentry_sdk/integrations/pymongo.py,sha256=cPpMGEbXHlV6HTHgmIDL1F-x3w7ZMROXVb4eUhLs3bw,6380
84
84
  sentry_sdk/integrations/pyramid.py,sha256=IDonzoZvLrH18JL-i_Qpbztc4T3iZNQhWFFv6SAXac8,7364
85
85
  sentry_sdk/integrations/quart.py,sha256=pPFB-MVYGj_nfmZK9BRKxJHiqmBVulUnW0nAxI7FDOc,7437
86
- sentry_sdk/integrations/ray.py,sha256=HIqW3ClnWPKE9DVT2FghpkEPLN73f-iypZ5mMoyl018,4162
86
+ sentry_sdk/integrations/ray.py,sha256=HfRxAfTYe9Mli3c8hv-HPD8XSZ339l-6yM-rKrCm2Os,4596
87
87
  sentry_sdk/integrations/rq.py,sha256=2Cidur0yL_JtdpOtBup6D6aYyN4T9mgshebEc-kvp-E,5307
88
88
  sentry_sdk/integrations/rust_tracing.py,sha256=fQ0eG09w3IPZe8ecgeUoQTPoGFThkkarUyGC8KJj35o,9078
89
89
  sentry_sdk/integrations/sanic.py,sha256=Z7orxkX9YhU9YSX4Oidsi3n46J0qlVG7Ajog-fnUreo,12960
@@ -122,7 +122,7 @@ sentry_sdk/integrations/grpc/aio/client.py,sha256=csOwlJb7fg9fBnzeNHxr-qpZEmU97I
122
122
  sentry_sdk/integrations/grpc/aio/server.py,sha256=SCkdikPZRdWyrlnZewsSGpPk4v6AsdSApVAbO-lf_Lk,4019
123
123
  sentry_sdk/integrations/openai_agents/__init__.py,sha256=-ydqG0sFIrvJlT9JHO58EZpCAzyy9J59Av8dxn0fHuw,1424
124
124
  sentry_sdk/integrations/openai_agents/consts.py,sha256=PTb3vlqkuMPktu21ALK72o5WMIX4-cewTEiTRdHKFdQ,38
125
- sentry_sdk/integrations/openai_agents/utils.py,sha256=NststW5BXr9PTRAf_e1U0RXd2eLZwnCALcZB-jcObQw,7011
125
+ sentry_sdk/integrations/openai_agents/utils.py,sha256=fZ00TW7eUBH3e0BSBp0QnXJioYQgGh32S-mptJz96-4,7099
126
126
  sentry_sdk/integrations/openai_agents/patches/__init__.py,sha256=I7C9JZ70Mf8PV3wPdFsxTqvcYl4TYUgSZYfNU2Spb7Y,231
127
127
  sentry_sdk/integrations/openai_agents/patches/agent_run.py,sha256=jDYY2jVTcoJLiH-0KOKMryv7IAoDKjWXsMwnxJU8KHM,5736
128
128
  sentry_sdk/integrations/openai_agents/patches/models.py,sha256=DtwqCmSsYFlhRZquKM2jiTOnnAg97eyCTtJYZkWqdww,1405
@@ -130,8 +130,8 @@ sentry_sdk/integrations/openai_agents/patches/runner.py,sha256=P1My3zKNlgCtu8cAk
130
130
  sentry_sdk/integrations/openai_agents/patches/tools.py,sha256=uAx1GgsiDJBP7jpYW8r_kOImdgzXlwYqK-uhkyP3icI,3255
131
131
  sentry_sdk/integrations/openai_agents/spans/__init__.py,sha256=RlVi781zGsvCJBciDO_EbBbwkakwbP9DoFQBbo4VAEE,353
132
132
  sentry_sdk/integrations/openai_agents/spans/agent_workflow.py,sha256=GIIeNKQ1rrciqkjwJWK5AMxsjWjWslR3E054jIWDoiw,459
133
- sentry_sdk/integrations/openai_agents/spans/ai_client.py,sha256=uEtJg4tCmCqtoKj5YXrMmYV_sV_hl0Oj256zyiq_AWs,1122
134
- sentry_sdk/integrations/openai_agents/spans/execute_tool.py,sha256=L9UYj1lfXeEogsFICHvDZ2x_hFKlwJUjiIipPjaG-Cg,1244
133
+ sentry_sdk/integrations/openai_agents/spans/ai_client.py,sha256=0HG5pT8a06Zgc5JUmRx8p_6bPoQFQLjDrMY_QSQd0_E,1206
134
+ sentry_sdk/integrations/openai_agents/spans/execute_tool.py,sha256=w3QWWS4wbpteFTz4JjMCXdDpR6JVKcUVREQ-lvJOQTY,1420
135
135
  sentry_sdk/integrations/openai_agents/spans/handoff.py,sha256=MBhzy7MpvPGwQTPT5TFcOnmSPiSH_uadQ5wvksueIik,525
136
136
  sentry_sdk/integrations/openai_agents/spans/invoke_agent.py,sha256=WU7E7DoO1IXZKjXuZ1BTPqfWnm3mNl6Ao8duUGoRA9w,875
137
137
  sentry_sdk/integrations/opentelemetry/__init__.py,sha256=emNL5aAq_NhK0PZmfX_g4GIdvBS6nHqGrjrIgrdC5m8,229
@@ -158,9 +158,9 @@ sentry_sdk/profiler/__init__.py,sha256=3PI3bHk9RSkkOXZKN84DDedk_7M65EiqqaIGo-DYs
158
158
  sentry_sdk/profiler/continuous_profiler.py,sha256=s0DHkj3RZYRg9HnQQC0G44ku6DaFqRy30fZTMtTYvIs,22828
159
159
  sentry_sdk/profiler/transaction_profiler.py,sha256=4Gj6FHLnK1di3GmnI1cCc_DbNcBVMdBjZZFvPvm7C7k,27877
160
160
  sentry_sdk/profiler/utils.py,sha256=G5s4tYai9ATJqcHrQ3bOIxlK6jIaHzELrDtU5k3N4HI,6556
161
- sentry_sdk-2.31.0.dist-info/licenses/LICENSE,sha256=KhQNZg9GKBL6KQvHQNBGMxJsXsRdhLebVp4Sew7t3Qs,1093
162
- sentry_sdk-2.31.0.dist-info/METADATA,sha256=01eEfFRFsoCbVQTZpuX4IgSXPhzKEKZJl3eRulYTVaw,10278
163
- sentry_sdk-2.31.0.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
164
- sentry_sdk-2.31.0.dist-info/entry_points.txt,sha256=qacZEz40UspQZD1IukCXykx0JtImqGDOctS5KfOLTko,91
165
- sentry_sdk-2.31.0.dist-info/top_level.txt,sha256=XrQz30XE9FKXSY_yGLrd9bsv2Rk390GTDJOSujYaMxI,11
166
- sentry_sdk-2.31.0.dist-info/RECORD,,
161
+ sentry_sdk-2.33.0.dist-info/licenses/LICENSE,sha256=KhQNZg9GKBL6KQvHQNBGMxJsXsRdhLebVp4Sew7t3Qs,1093
162
+ sentry_sdk-2.33.0.dist-info/METADATA,sha256=dMkhuet0J0rBMeXCztJyYwoQwKvKC5gwByORWmpygJg,10278
163
+ sentry_sdk-2.33.0.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
164
+ sentry_sdk-2.33.0.dist-info/entry_points.txt,sha256=qacZEz40UspQZD1IukCXykx0JtImqGDOctS5KfOLTko,91
165
+ sentry_sdk-2.33.0.dist-info/top_level.txt,sha256=XrQz30XE9FKXSY_yGLrd9bsv2Rk390GTDJOSujYaMxI,11
166
+ sentry_sdk-2.33.0.dist-info/RECORD,,