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 +2 -0
- sentry_sdk/ai/monitoring.py +7 -3
- sentry_sdk/api.py +16 -0
- sentry_sdk/consts.py +1 -1
- sentry_sdk/integrations/asgi.py +19 -3
- sentry_sdk/integrations/langchain.py +45 -21
- sentry_sdk/integrations/litestar.py +9 -0
- sentry_sdk/integrations/openai_agents/spans/ai_client.py +2 -1
- sentry_sdk/integrations/openai_agents/spans/execute_tool.py +6 -1
- sentry_sdk/integrations/openai_agents/utils.py +2 -1
- sentry_sdk/integrations/ray.py +70 -62
- sentry_sdk/sessions.py +8 -9
- {sentry_sdk-2.31.0.dist-info → sentry_sdk-2.33.0.dist-info}/METADATA +1 -1
- {sentry_sdk-2.31.0.dist-info → sentry_sdk-2.33.0.dist-info}/RECORD +18 -18
- {sentry_sdk-2.31.0.dist-info → sentry_sdk-2.33.0.dist-info}/WHEEL +0 -0
- {sentry_sdk-2.31.0.dist-info → sentry_sdk-2.33.0.dist-info}/entry_points.txt +0 -0
- {sentry_sdk-2.31.0.dist-info → sentry_sdk-2.33.0.dist-info}/licenses/LICENSE +0 -0
- {sentry_sdk-2.31.0.dist-info → sentry_sdk-2.33.0.dist-info}/top_level.txt +0 -0
sentry_sdk/__init__.py
CHANGED
sentry_sdk/ai/monitoring.py
CHANGED
|
@@ -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.
|
|
107
|
+
span.set_data(SPANDATA.GEN_AI_USAGE_INPUT_TOKENS, prompt_tokens)
|
|
108
|
+
|
|
107
109
|
if completion_tokens is not None:
|
|
108
|
-
span.
|
|
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.
|
|
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
sentry_sdk/integrations/asgi.py
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
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
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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(
|
sentry_sdk/integrations/ray.py
CHANGED
|
@@ -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,
|
|
53
|
-
|
|
54
|
-
def
|
|
55
|
-
# type: (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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.
|
|
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
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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.
|
|
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.
|
|
273
|
+
self.__shutdown_requested.set()
|
|
275
274
|
|
|
276
275
|
def __del__(self):
|
|
277
276
|
# type: (...) -> None
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
sentry_sdk/__init__.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
134
|
-
sentry_sdk/integrations/openai_agents/spans/execute_tool.py,sha256=
|
|
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.
|
|
162
|
-
sentry_sdk-2.
|
|
163
|
-
sentry_sdk-2.
|
|
164
|
-
sentry_sdk-2.
|
|
165
|
-
sentry_sdk-2.
|
|
166
|
-
sentry_sdk-2.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|