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

Files changed (31) hide show
  1. sentry_sdk/__init__.py +4 -2
  2. sentry_sdk/_types.py +1 -1
  3. sentry_sdk/ai/utils.py +11 -1
  4. sentry_sdk/consts.py +5 -2
  5. sentry_sdk/envelope.py +1 -1
  6. sentry_sdk/integrations/__init__.py +2 -1
  7. sentry_sdk/integrations/anthropic.py +65 -15
  8. sentry_sdk/integrations/asyncio.py +2 -0
  9. sentry_sdk/integrations/cohere.py +4 -0
  10. sentry_sdk/integrations/dedupe.py +19 -3
  11. sentry_sdk/integrations/gql.py +22 -5
  12. sentry_sdk/integrations/huggingface_hub.py +278 -81
  13. sentry_sdk/integrations/langchain.py +17 -14
  14. sentry_sdk/integrations/openai.py +13 -8
  15. sentry_sdk/integrations/openai_agents/patches/agent_run.py +4 -4
  16. sentry_sdk/integrations/openai_agents/spans/agent_workflow.py +2 -2
  17. sentry_sdk/integrations/openai_agents/spans/execute_tool.py +1 -1
  18. sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +50 -6
  19. sentry_sdk/integrations/openai_agents/utils.py +3 -10
  20. sentry_sdk/integrations/threading.py +1 -1
  21. sentry_sdk/profiler/continuous_profiler.py +13 -3
  22. sentry_sdk/serializer.py +12 -1
  23. sentry_sdk/tracing.py +3 -3
  24. sentry_sdk/tracing_utils.py +32 -23
  25. sentry_sdk/utils.py +6 -0
  26. {sentry_sdk-2.37.1.dist-info → sentry_sdk-2.39.0.dist-info}/METADATA +1 -1
  27. {sentry_sdk-2.37.1.dist-info → sentry_sdk-2.39.0.dist-info}/RECORD +31 -31
  28. {sentry_sdk-2.37.1.dist-info → sentry_sdk-2.39.0.dist-info}/WHEEL +0 -0
  29. {sentry_sdk-2.37.1.dist-info → sentry_sdk-2.39.0.dist-info}/entry_points.txt +0 -0
  30. {sentry_sdk-2.37.1.dist-info → sentry_sdk-2.39.0.dist-info}/licenses/LICENSE +0 -0
  31. {sentry_sdk-2.37.1.dist-info → sentry_sdk-2.39.0.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,8 @@
1
1
  import sentry_sdk
2
+ from sentry_sdk.ai.utils import get_start_span_function, set_data_normalized
2
3
  from sentry_sdk.consts import OP, SPANDATA
4
+ from sentry_sdk.scope import should_send_default_pii
5
+ from sentry_sdk.utils import safe_serialize
3
6
 
4
7
  from ..consts import SPAN_ORIGIN
5
8
  from ..utils import _set_agent_data
@@ -11,9 +14,10 @@ if TYPE_CHECKING:
11
14
  from typing import Any
12
15
 
13
16
 
14
- def invoke_agent_span(context, agent):
15
- # type: (agents.RunContextWrapper, agents.Agent) -> sentry_sdk.tracing.Span
16
- span = sentry_sdk.start_span(
17
+ def invoke_agent_span(context, agent, kwargs):
18
+ # type: (agents.RunContextWrapper, agents.Agent, dict[str, Any]) -> sentry_sdk.tracing.Span
19
+ start_span_function = get_start_span_function()
20
+ span = start_span_function(
17
21
  op=OP.GEN_AI_INVOKE_AGENT,
18
22
  name=f"invoke_agent {agent.name}",
19
23
  origin=SPAN_ORIGIN,
@@ -22,6 +26,40 @@ def invoke_agent_span(context, agent):
22
26
 
23
27
  span.set_data(SPANDATA.GEN_AI_OPERATION_NAME, "invoke_agent")
24
28
 
29
+ if should_send_default_pii():
30
+ messages = []
31
+ if agent.instructions:
32
+ message = (
33
+ agent.instructions
34
+ if isinstance(agent.instructions, str)
35
+ else safe_serialize(agent.instructions)
36
+ )
37
+ messages.append(
38
+ {
39
+ "content": [{"text": message, "type": "text"}],
40
+ "role": "system",
41
+ }
42
+ )
43
+
44
+ original_input = kwargs.get("original_input")
45
+ if original_input is not None:
46
+ message = (
47
+ original_input
48
+ if isinstance(original_input, str)
49
+ else safe_serialize(original_input)
50
+ )
51
+ messages.append(
52
+ {
53
+ "content": [{"text": message, "type": "text"}],
54
+ "role": "user",
55
+ }
56
+ )
57
+
58
+ if len(messages) > 0:
59
+ set_data_normalized(
60
+ span, SPANDATA.GEN_AI_REQUEST_MESSAGES, messages, unpack=False
61
+ )
62
+
25
63
  _set_agent_data(span, agent)
26
64
 
27
65
  return span
@@ -29,6 +67,12 @@ def invoke_agent_span(context, agent):
29
67
 
30
68
  def update_invoke_agent_span(context, agent, output):
31
69
  # type: (agents.RunContextWrapper, agents.Agent, Any) -> None
32
- current_span = sentry_sdk.get_current_span()
33
- if current_span:
34
- current_span.__exit__(None, None, None)
70
+ span = sentry_sdk.get_current_span()
71
+
72
+ if span:
73
+ if should_send_default_pii():
74
+ set_data_normalized(
75
+ span, SPANDATA.GEN_AI_RESPONSE_TEXT, output, unpack=False
76
+ )
77
+
78
+ span.__exit__(None, None, None)
@@ -3,13 +3,13 @@ from sentry_sdk.ai.utils import set_data_normalized
3
3
  from sentry_sdk.consts import SPANDATA
4
4
  from sentry_sdk.integrations import DidNotEnable
5
5
  from sentry_sdk.scope import should_send_default_pii
6
+ from sentry_sdk.tracing_utils import set_span_errored
6
7
  from sentry_sdk.utils import event_from_exception, safe_serialize
7
8
 
8
9
  from typing import TYPE_CHECKING
9
10
 
10
11
  if TYPE_CHECKING:
11
12
  from typing import Any
12
- from typing import Callable
13
13
  from agents import Usage
14
14
 
15
15
  try:
@@ -21,6 +21,8 @@ except ImportError:
21
21
 
22
22
  def _capture_exception(exc):
23
23
  # type: (Any) -> None
24
+ set_span_errored()
25
+
24
26
  event, hint = event_from_exception(
25
27
  exc,
26
28
  client_options=sentry_sdk.get_client().options,
@@ -29,15 +31,6 @@ def _capture_exception(exc):
29
31
  sentry_sdk.capture_event(event, hint=hint)
30
32
 
31
33
 
32
- def _get_start_span_function():
33
- # type: () -> Callable[..., Any]
34
- current_span = sentry_sdk.get_current_span()
35
- transaction_exists = (
36
- current_span is not None and current_span.containing_transaction == current_span
37
- )
38
- return sentry_sdk.start_span if transaction_exists else sentry_sdk.start_transaction
39
-
40
-
41
34
  def _set_agent_data(span, agent):
42
35
  # type: (sentry_sdk.tracing.Span, agents.Agent) -> None
43
36
  span.set_data(
@@ -52,7 +52,7 @@ class ThreadingIntegration(Integration):
52
52
 
53
53
  try:
54
54
  from django import VERSION as django_version # noqa: N811
55
- import channels # type: ignore[import-not-found]
55
+ import channels # type: ignore[import-untyped]
56
56
 
57
57
  channels_version = channels.__version__
58
58
  except ImportError:
@@ -75,9 +75,11 @@ def setup_continuous_profiler(options, sdk_info, capture_func):
75
75
  # type: (Dict[str, Any], SDKInfo, Callable[[Envelope], None]) -> bool
76
76
  global _scheduler
77
77
 
78
- if _scheduler is not None:
78
+ already_initialized = _scheduler is not None
79
+
80
+ if already_initialized:
79
81
  logger.debug("[Profiling] Continuous Profiler is already setup")
80
- return False
82
+ teardown_continuous_profiler()
81
83
 
82
84
  if is_gevent():
83
85
  # If gevent has patched the threading modules then we cannot rely on
@@ -117,11 +119,19 @@ def setup_continuous_profiler(options, sdk_info, capture_func):
117
119
  )
118
120
  )
119
121
 
120
- atexit.register(teardown_continuous_profiler)
122
+ if not already_initialized:
123
+ atexit.register(teardown_continuous_profiler)
121
124
 
122
125
  return True
123
126
 
124
127
 
128
+ def is_profile_session_sampled():
129
+ # type: () -> bool
130
+ if _scheduler is None:
131
+ return False
132
+ return _scheduler.sampled
133
+
134
+
125
135
  def try_autostart_continuous_profiler():
126
136
  # type: () -> None
127
137
 
sentry_sdk/serializer.py CHANGED
@@ -187,6 +187,16 @@ def serialize(event, **kwargs):
187
187
 
188
188
  return False
189
189
 
190
+ def _is_span_attribute():
191
+ # type: () -> Optional[bool]
192
+ try:
193
+ if path[0] == "spans" and path[2] == "data":
194
+ return True
195
+ except IndexError:
196
+ return None
197
+
198
+ return False
199
+
190
200
  def _is_request_body():
191
201
  # type: () -> Optional[bool]
192
202
  try:
@@ -282,7 +292,8 @@ def serialize(event, **kwargs):
282
292
  )
283
293
  return None
284
294
 
285
- if is_databag and global_repr_processors:
295
+ is_span_attribute = _is_span_attribute()
296
+ if (is_databag or is_span_attribute) and global_repr_processors:
286
297
  hints = {"memo": memo, "remaining_depth": remaining_depth}
287
298
  for processor in global_repr_processors:
288
299
  result = processor(obj, hints)
sentry_sdk/tracing.py CHANGED
@@ -1,4 +1,3 @@
1
- from decimal import Decimal
2
1
  import uuid
3
2
  import warnings
4
3
  from datetime import datetime, timedelta, timezone
@@ -417,7 +416,8 @@ class Span:
417
416
  def __exit__(self, ty, value, tb):
418
417
  # type: (Optional[Any], Optional[Any], Optional[Any]) -> None
419
418
  if value is not None and should_be_treated_as_error(ty, value):
420
- self.set_status(SPANSTATUS.INTERNAL_ERROR)
419
+ if self.status != SPANSTATUS.ERROR:
420
+ self.set_status(SPANSTATUS.INTERNAL_ERROR)
421
421
 
422
422
  with capture_internal_exceptions():
423
423
  scope, old_span = self._context_manager_state
@@ -1251,7 +1251,7 @@ class Transaction(Span):
1251
1251
  return
1252
1252
 
1253
1253
  # Now we roll the dice.
1254
- self.sampled = self._sample_rand < Decimal.from_float(self.sample_rate)
1254
+ self.sampled = self._sample_rand < self.sample_rate
1255
1255
 
1256
1256
  if self.sampled:
1257
1257
  logger.debug(
@@ -6,13 +6,12 @@ import re
6
6
  import sys
7
7
  from collections.abc import Mapping
8
8
  from datetime import timedelta
9
- from decimal import ROUND_DOWN, Decimal, DefaultContext, localcontext
10
9
  from random import Random
11
10
  from urllib.parse import quote, unquote
12
11
  import uuid
13
12
 
14
13
  import sentry_sdk
15
- from sentry_sdk.consts import OP, SPANDATA, SPANTEMPLATE
14
+ from sentry_sdk.consts import OP, SPANDATA, SPANSTATUS, SPANTEMPLATE
16
15
  from sentry_sdk.utils import (
17
16
  capture_internal_exceptions,
18
17
  filename_for_module,
@@ -502,7 +501,7 @@ class PropagationContext:
502
501
  return
503
502
 
504
503
  sample_rand = try_convert(
505
- Decimal, self.dynamic_sampling_context.get("sample_rand")
504
+ float, self.dynamic_sampling_context.get("sample_rand")
506
505
  )
507
506
  if sample_rand is not None and 0 <= sample_rand < 1:
508
507
  # sample_rand is present and valid, so don't overwrite it
@@ -650,7 +649,7 @@ class Baggage:
650
649
  options = client.options or {}
651
650
 
652
651
  sentry_items["trace_id"] = transaction.trace_id
653
- sentry_items["sample_rand"] = str(transaction._sample_rand)
652
+ sentry_items["sample_rand"] = f"{transaction._sample_rand:.6f}" # noqa: E231
654
653
 
655
654
  if options.get("environment"):
656
655
  sentry_items["environment"] = options["environment"]
@@ -724,15 +723,15 @@ class Baggage:
724
723
  )
725
724
 
726
725
  def _sample_rand(self):
727
- # type: () -> Optional[Decimal]
726
+ # type: () -> Optional[float]
728
727
  """Convenience method to get the sample_rand value from the sentry_items.
729
728
 
730
- We validate the value and parse it as a Decimal before returning it. The value is considered
731
- valid if it is a Decimal in the range [0, 1).
729
+ We validate the value and parse it as a float before returning it. The value is considered
730
+ valid if it is a float in the range [0, 1).
732
731
  """
733
- sample_rand = try_convert(Decimal, self.sentry_items.get("sample_rand"))
732
+ sample_rand = try_convert(float, self.sentry_items.get("sample_rand"))
734
733
 
735
- if sample_rand is not None and Decimal(0) <= sample_rand < Decimal(1):
734
+ if sample_rand is not None and 0.0 <= sample_rand < 1.0:
736
735
  return sample_rand
737
736
 
738
737
  return None
@@ -893,12 +892,25 @@ def get_current_span(scope=None):
893
892
  return current_span
894
893
 
895
894
 
895
+ def set_span_errored(span=None):
896
+ # type: (Optional[Span]) -> None
897
+ """
898
+ Set the status of the current or given span to ERROR.
899
+ Also sets the status of the transaction (root span) to ERROR.
900
+ """
901
+ span = span or get_current_span()
902
+ if span is not None:
903
+ span.set_status(SPANSTATUS.ERROR)
904
+ if span.containing_transaction is not None:
905
+ span.containing_transaction.set_status(SPANSTATUS.ERROR)
906
+
907
+
896
908
  def _generate_sample_rand(
897
909
  trace_id, # type: Optional[str]
898
910
  *,
899
911
  interval=(0.0, 1.0), # type: tuple[float, float]
900
912
  ):
901
- # type: (...) -> Decimal
913
+ # type: (...) -> float
902
914
  """Generate a sample_rand value from a trace ID.
903
915
 
904
916
  The generated value will be pseudorandomly chosen from the provided
@@ -913,19 +925,16 @@ def _generate_sample_rand(
913
925
  raise ValueError("Invalid interval: lower must be less than upper")
914
926
 
915
927
  rng = Random(trace_id)
916
- sample_rand = upper
917
- while sample_rand >= upper:
918
- sample_rand = rng.uniform(lower, upper)
919
-
920
- # Round down to exactly six decimal-digit precision.
921
- # Setting the context is needed to avoid an InvalidOperation exception
922
- # in case the user has changed the default precision or set traps.
923
- with localcontext(DefaultContext) as ctx:
924
- ctx.prec = 6
925
- return Decimal(sample_rand).quantize(
926
- Decimal("0.000001"),
927
- rounding=ROUND_DOWN,
928
- )
928
+ lower_scaled = int(lower * 1_000_000)
929
+ upper_scaled = int(upper * 1_000_000)
930
+ try:
931
+ sample_rand_scaled = rng.randrange(lower_scaled, upper_scaled)
932
+ except ValueError:
933
+ # In some corner cases it might happen that the range is too small
934
+ # In that case, just take the lower bound
935
+ sample_rand_scaled = lower_scaled
936
+
937
+ return sample_rand_scaled / 1_000_000
929
938
 
930
939
 
931
940
  def _sample_rand_range(parent_sampled, sample_rate):
sentry_sdk/utils.py CHANGED
@@ -1934,6 +1934,12 @@ def try_convert(convert_func, value):
1934
1934
  given function. Return None if the conversion fails, i.e. if the function
1935
1935
  raises an exception.
1936
1936
  """
1937
+ try:
1938
+ if isinstance(value, convert_func): # type: ignore
1939
+ return value
1940
+ except TypeError:
1941
+ pass
1942
+
1937
1943
  try:
1938
1944
  return convert_func(value)
1939
1945
  except Exception:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-sdk
3
- Version: 2.37.1
3
+ Version: 2.39.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,17 +1,17 @@
1
- sentry_sdk/__init__.py,sha256=WaDm18HlX8BC_JAApork8LhiUBqPeJSXcMZDv3ACcWs,1310
1
+ sentry_sdk/__init__.py,sha256=-jRAO-EG4LBj5L20sK01fdMlbtvGf_idy54Eb46EiKQ,1364
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
5
5
  sentry_sdk/_lru_cache.py,sha256=phZMBm9EKU1m67OOApnKCffnlWAlVz9bYjig7CglQuk,1229
6
6
  sentry_sdk/_queue.py,sha256=UUzbmliDYmdVYiDA32NMYkX369ElWMFNSj5kodqVQZE,11250
7
- sentry_sdk/_types.py,sha256=TMdmMSxc0dYErvRA5ikEnNxH_Iwb2Wiw3ZUMNlp0HCA,10482
7
+ sentry_sdk/_types.py,sha256=Gw9Pn0mIHZP23B8C2iM1g07NzxnAkpgRAGR5MrKA2Es,10487
8
8
  sentry_sdk/_werkzeug.py,sha256=m3GPf-jHd8v3eVOfBHaKw5f0uHoLkXrSO1EcY-8EisY,3734
9
9
  sentry_sdk/api.py,sha256=OkwQ2tA5YASJ77wLOteUdv_woPF4wL_JTOAMxe9z8k4,15282
10
10
  sentry_sdk/attachments.py,sha256=0Dylhm065O6hNFjB40fWCd5Hg4qWSXndmi1TPWglZkI,3109
11
11
  sentry_sdk/client.py,sha256=oQcolwFdLvuX4huUaCcpgABy3M5Yb4IhzymlzyrqfkE,38860
12
- sentry_sdk/consts.py,sha256=cmxQIqENDy4786iER8LUoa7KncY9epWPsRnCecLM28s,49815
12
+ sentry_sdk/consts.py,sha256=o2sL8csVj4m-XkGOqeXN0C-ZZJcY2yS1qP-EBXfQsN8,50182
13
13
  sentry_sdk/debug.py,sha256=ddBehQlAuQC1sg1XO-N4N3diZ0x0iT5RWJwFdrtcsjw,1019
14
- sentry_sdk/envelope.py,sha256=Mgcib0uLm_5tSVzOrznRLdK9B3CjQ6TEgM1ZIZIfjWo,10355
14
+ sentry_sdk/envelope.py,sha256=nCUvqVWIVWV-RoVvMgrTNUDfo7h_Z5jU8g90T30wdXE,10360
15
15
  sentry_sdk/feature_flags.py,sha256=99JRig6TBkrkBzVCKqYcmVgjsuA_Hk-ul7jFHGhJplc,2233
16
16
  sentry_sdk/hub.py,sha256=2QLvEtIYSYV04r8h7VBmQjookILaiBZxZBGTtQKNAWg,25675
17
17
  sentry_sdk/logger.py,sha256=HnmkMmOf1hwvxIcPW2qOvIOSnFZ9yRNDBae_eriGsoY,2471
@@ -20,33 +20,33 @@ sentry_sdk/monitor.py,sha256=52CG1m2e8okFDVoTpbqfm9zeeaLa0ciC_r9x2RiXuDg,3639
20
20
  sentry_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  sentry_sdk/scope.py,sha256=opbEbR_qWzSj4OCp8vr9Sn-7H11Qe7z4vKY0pjIgA88,63907
22
22
  sentry_sdk/scrubber.py,sha256=rENmQ35buugDl269bRZuIAtgr27B9SzisJYUF-691pc,6064
23
- sentry_sdk/serializer.py,sha256=xUw3xjSsGF0cWRHL9ofe0nmWEtZvzPOHSQ6IHvo6UAc,13239
23
+ sentry_sdk/serializer.py,sha256=_d7bPzE0EsCsffDCsN9jnhrwfdvu3h5vG-vM6205A5Q,13550
24
24
  sentry_sdk/session.py,sha256=TqDVmRKKHUDSmZb4jQR-s8wDt7Fwb6QaG21hawUGWEs,5571
25
25
  sentry_sdk/sessions.py,sha256=UZ2jfrqhYvZzTxCDGc1MLD6P_aHLJnTFetSUROIaPaA,9154
26
26
  sentry_sdk/spotlight.py,sha256=93kdd8KxdLfcPaxFnFuqHgYAAL4FCfpK1hiiPoD7Ac4,8678
27
- sentry_sdk/tracing.py,sha256=FHL6u9SHGfyFCDnSbOwZiQYStTcuf8-YvV47DO4Q9DI,51578
28
- sentry_sdk/tracing_utils.py,sha256=0RjENkigpVHydBIk_CqOTRZ8GJQHslgHveatvelZA1c,39040
27
+ sentry_sdk/tracing.py,sha256=QMg5KuP6SI21YS9ufBTpv1LvLCxlFE2YBfF4mHhvVNI,51582
28
+ sentry_sdk/tracing_utils.py,sha256=yeor53ehPe2OWGuIMnk-0v_Q1VvWeNCwJMzETp0qwFo,39312
29
29
  sentry_sdk/transport.py,sha256=A0uux7XnniDJuExLudLyyFDYnS5C6r7zozGbkveUM7E,32469
30
30
  sentry_sdk/types.py,sha256=NLbnRzww2K3_oGz2GzcC8TdX5L2DXYso1-H1uCv2Hwc,1222
31
- sentry_sdk/utils.py,sha256=Ys7lnnvXZMIR9dcoT30CVxpUx2NnZifSy-TUNrCtMQA,61575
31
+ sentry_sdk/utils.py,sha256=KubsR-No80YTJ1FYwNQxavYU4hOQyBixevnPsXxNCBc,61705
32
32
  sentry_sdk/worker.py,sha256=VSMaigRMbInVyupSFpBC42bft2oIViea-0C_d9ThnIo,4464
33
33
  sentry_sdk/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  sentry_sdk/ai/monitoring.py,sha256=bS_KneWCAL9ehml5XiyficoPVx4DUUG6acbH3cjP3I8,5057
35
- sentry_sdk/ai/utils.py,sha256=JPK6EM0ZcjWJU1IP2k40Jxf0yD_-ox_FlYxVIn7LVR4,1351
35
+ sentry_sdk/ai/utils.py,sha256=CsPNw-N2utLhUfXbT8cCBPlDIyTBNzJQ5aIF18gPdhk,1705
36
36
  sentry_sdk/crons/__init__.py,sha256=3Zt6g1-pZZ12uRKKsC8QLm3XgJ4K1VYxgVpNNUygOZY,221
37
37
  sentry_sdk/crons/api.py,sha256=mk-UB8Im2LU2rJFdE-TV302EaKnf8kAjwEL0bIV0Hzc,1767
38
38
  sentry_sdk/crons/consts.py,sha256=dXqJk5meBSu5rjlGpqAOlkpACnuUi7svQnAFoy1ZNUU,87
39
39
  sentry_sdk/crons/decorator.py,sha256=UrjeIqBCbvsuKrfjGkKJbbLBvjw2TQvDWcTO7WwAmrI,3913
40
- sentry_sdk/integrations/__init__.py,sha256=NNRTFZUcQacKGRCWT8IuVZk2wtifEhnQ34-6mHuekvw,10339
40
+ sentry_sdk/integrations/__init__.py,sha256=8u7jM0K-emYrV8ukmybQiPzMrD030aSPSGO5A22gSQc,10367
41
41
  sentry_sdk/integrations/_asgi_common.py,sha256=Ypg7IctB3iPPY60ebVlzChzgT8GeGpZ0YH8VvJNDlEY,3187
42
42
  sentry_sdk/integrations/_wsgi_common.py,sha256=A1-X7l1pZCcrbUhRHkmdKiK_EemEZjn7xToJIvlEuFM,7558
43
43
  sentry_sdk/integrations/aiohttp.py,sha256=_rfDKx1arvVQwcC20vh7HG80p8XtgzqKB3iBuPYZy8A,12895
44
- sentry_sdk/integrations/anthropic.py,sha256=8KnFdRNeaaB_rB9Bmi0FbYQrw1TUX535t2uSRI8Pv9o,11726
44
+ sentry_sdk/integrations/anthropic.py,sha256=7nMkdkhNlo9gepMShnlidUn0lfn5vcIOpvO2Zwe8dK0,13771
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
48
  sentry_sdk/integrations/asgi.py,sha256=zjoOOA5bHlTptRsP3ZU4X5UsluyHFqebsUt3lRfiGtE,12738
49
- sentry_sdk/integrations/asyncio.py,sha256=KdQs5dd_jY2cmBTGeG_jwEgfrPntC4lH71vTBXI670k,4034
49
+ sentry_sdk/integrations/asyncio.py,sha256=DEoXAwk8oVl_1Sbmm2TthpruaLO7p4WZBTh9K-mch_g,4136
50
50
  sentry_sdk/integrations/asyncpg.py,sha256=fbBTi5bEERK3c9o43LBLtS5wPaSVq_qIl3Y50NPmr5Y,6521
51
51
  sentry_sdk/integrations/atexit.py,sha256=sY46N2hEvtGuT1DBQhirUXHbjgXjXAm7R_sgiectVKw,1652
52
52
  sentry_sdk/integrations/aws_lambda.py,sha256=WveHWnB_nBsnfLTbaUxih79Ra3Qjv4Jjh-7m2v-gSJs,17954
@@ -56,8 +56,8 @@ sentry_sdk/integrations/bottle.py,sha256=aC5OsitlsRUEWBlpkNjxvH0m6UEG3OfAJ9jFyPC
56
56
  sentry_sdk/integrations/chalice.py,sha256=A4K_9FmNUu131El0ctkTmjtyYd184I4hQTlidZcEC54,4699
57
57
  sentry_sdk/integrations/clickhouse_driver.py,sha256=2qpRznwSNuRSzrCA1R5bmpgiehDmzbG7yZe6hN-61Wg,6098
58
58
  sentry_sdk/integrations/cloud_resource_context.py,sha256=_gFldMeVHs5pxP5sm8uP7ZKmm6s_5hw3UsnXek9Iw8A,7780
59
- sentry_sdk/integrations/cohere.py,sha256=iuDI1IVPE39rbsc3e9_qJS2bCjNg7F53apueCdhzr8Q,9322
60
- sentry_sdk/integrations/dedupe.py,sha256=usREWhtGDFyxVBlIVzyCYj_Qy7NJBJ84FK0B57z11LM,1418
59
+ sentry_sdk/integrations/cohere.py,sha256=VI5mLukp_CQDt-OFVNgtVqpbY-j-d5UOfD7iPBKu0FU,9401
60
+ sentry_sdk/integrations/dedupe.py,sha256=FMdGQOlL86r4AjiSf4MfzyfEIjkI5b_v3Ko2gOZKkBE,1975
61
61
  sentry_sdk/integrations/dramatiq.py,sha256=I09vKWnfiuhdRFCjYYjmE9LOBQvDTPS-KFqf3iHFSsM,5583
62
62
  sentry_sdk/integrations/excepthook.py,sha256=tfwpSQuo1b_OmJbNKPPRh90EUjD_OSE4DqqgYY9PVQI,2408
63
63
  sentry_sdk/integrations/executing.py,sha256=5lxBAxO5FypY-zTV03AHncGmolmaHd327-3Vrjzskcc,1994
@@ -66,19 +66,19 @@ sentry_sdk/integrations/fastapi.py,sha256=kicdigHM3MG-GlpLUN6wwH8jOVu4dTuoQD6RBF
66
66
  sentry_sdk/integrations/flask.py,sha256=t7q73JoJT46RWDtrNImtIloGyDg7CnsNFKpS4gOuBIw,8740
67
67
  sentry_sdk/integrations/gcp.py,sha256=u1rSi3nK2ISUQqkRnmKFG23Ks-SefshTf5PV0Dwp3_4,8274
68
68
  sentry_sdk/integrations/gnu_backtrace.py,sha256=FL7WkRfHT6idYCSLIrtFQ2G5ZTGoYudCKvBcjR5hqsI,2812
69
- sentry_sdk/integrations/gql.py,sha256=ppC7fjpyQ6jWST-batRt5HtebxE_9IeHbmZ-CJ1TfUU,4179
69
+ sentry_sdk/integrations/gql.py,sha256=lN5LJNZwUHs_1BQcIrR0adIkgb9YiOh6UtoUG8vCO_Y,4801
70
70
  sentry_sdk/integrations/graphene.py,sha256=I6ZJ8Apd9dO9XPVvZY7I46-v1eXOW1C1rAkWwasF3gU,5042
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
- sentry_sdk/integrations/huggingface_hub.py,sha256=ypTn17T0vufQwi7ODXONFkB8fMjUrU5b4Q6JZ34bnA4,6717
74
- sentry_sdk/integrations/langchain.py,sha256=-9uNE_y-0LWJcQ3UWnSTr2g55UYJEsqQx1aMQqRrtAA,29260
73
+ sentry_sdk/integrations/huggingface_hub.py,sha256=B5z0--bC2tEDtWl5V7xAqM4234yhY_RYbnkZGgqC8PA,14952
74
+ sentry_sdk/integrations/langchain.py,sha256=mlbcshMs28wv10naLQv-4o1k-ERLgUjRlQsiiH8_DZM,29518
75
75
  sentry_sdk/integrations/langgraph.py,sha256=YyDDc14gFCNVuqVmKwX8GRQ17T17WOx2SqqD4IHROPs,11015
76
76
  sentry_sdk/integrations/launchdarkly.py,sha256=bvtExuj68xPXZFsQeWTDR-ZBqP087tPuVzP1bNAOZHc,1935
77
77
  sentry_sdk/integrations/litestar.py,sha256=jao0f8v5JQagkBg15dUJTdWGPxpS3LmOV301-lwGkGc,11815
78
78
  sentry_sdk/integrations/logging.py,sha256=4JC2ehLqd5Tz_rad8YVb9KhZnPcDzLxLh-AjopyNVEc,13905
79
79
  sentry_sdk/integrations/loguru.py,sha256=fgivPdQn3rmsMeInUd2wbNlbXPAH9MKhjaqytRVKnsI,6215
80
80
  sentry_sdk/integrations/modules.py,sha256=vzLx3Erg77Vl4mnUvAgTg_3teAuWy7zylFpAidBI9I0,820
81
- sentry_sdk/integrations/openai.py,sha256=MtvS7FM41etRn5kPqb37qSflo876L8mcV2skEFwBFlI,23890
81
+ sentry_sdk/integrations/openai.py,sha256=o41gBELZRVdaPXPrM3FQ7cOn6zIzvdu5hzMIf_nK5_I,24060
82
82
  sentry_sdk/integrations/openfeature.py,sha256=-vvdrN4fK0Xhu2ip41bkPIPEqdzv8xzmLu9wRlI2xPA,1131
83
83
  sentry_sdk/integrations/pure_eval.py,sha256=OvT76XvllQ_J6ABu3jVNU6KD2QAxnXMtTZ7hqhXNhpY,4581
84
84
  sentry_sdk/integrations/pymongo.py,sha256=cPpMGEbXHlV6HTHgmIDL1F-x3w7ZMROXVb4eUhLs3bw,6380
@@ -97,7 +97,7 @@ sentry_sdk/integrations/statsig.py,sha256=-e57hxHfHo1S13YQKObV65q_UvREyxbR56fnf7
97
97
  sentry_sdk/integrations/stdlib.py,sha256=vgB9weDGh455vBwmUSgcQRgzViKstu3O0syOthCn_H0,8831
98
98
  sentry_sdk/integrations/strawberry.py,sha256=u7Lk4u3sNEycdSmY1nQBzYKmqI-mO8BWKAAJkCSuTRA,14126
99
99
  sentry_sdk/integrations/sys_exit.py,sha256=AwShgGBWPdiY25aOWDLRAs2RBUKm5T3CrL-Q-zAk0l4,2493
100
- sentry_sdk/integrations/threading.py,sha256=tV7pQB8LwR8dIju-I81rgjps4sRxSofj_2YFBL2JXWM,5396
100
+ sentry_sdk/integrations/threading.py,sha256=yzJ2gK9cWg_-gZfAidzktVokGM9fxAijS4nMO_Ev7r0,5394
101
101
  sentry_sdk/integrations/tornado.py,sha256=Qcft8FZxdVICnaa1AhsDB262sInEQZPf-pvgI-Agjmc,7206
102
102
  sentry_sdk/integrations/trytond.py,sha256=BaLCNqQeRWDbHHDEelS5tmj-p_CrbmtGEHIn6JfzEFE,1651
103
103
  sentry_sdk/integrations/typer.py,sha256=FQrFgpR9t6yQWF-oWCI9KJLFioEnA2c_1BEtYV-mPAs,1815
@@ -124,18 +124,18 @@ sentry_sdk/integrations/grpc/aio/client.py,sha256=csOwlJb7fg9fBnzeNHxr-qpZEmU97I
124
124
  sentry_sdk/integrations/grpc/aio/server.py,sha256=SCkdikPZRdWyrlnZewsSGpPk4v6AsdSApVAbO-lf_Lk,4019
125
125
  sentry_sdk/integrations/openai_agents/__init__.py,sha256=-ydqG0sFIrvJlT9JHO58EZpCAzyy9J59Av8dxn0fHuw,1424
126
126
  sentry_sdk/integrations/openai_agents/consts.py,sha256=PTb3vlqkuMPktu21ALK72o5WMIX4-cewTEiTRdHKFdQ,38
127
- sentry_sdk/integrations/openai_agents/utils.py,sha256=7OiJc2BW9yvuVZBd8o7A6sWq0jy2ri9dWwvqMjJG2cw,5571
127
+ sentry_sdk/integrations/openai_agents/utils.py,sha256=NWcko9EphtvirpW_PhZV_l81299QNTouiRZxOKu15rE,5286
128
128
  sentry_sdk/integrations/openai_agents/patches/__init__.py,sha256=I7C9JZ70Mf8PV3wPdFsxTqvcYl4TYUgSZYfNU2Spb7Y,231
129
- sentry_sdk/integrations/openai_agents/patches/agent_run.py,sha256=qPmZ--UMQpExxYGEbaDJ7tY_H9VQ6gv0lpim3_impWk,5733
129
+ sentry_sdk/integrations/openai_agents/patches/agent_run.py,sha256=GPBV-j8YnHOrJAhdhu_tphe14z7G0-riFVmjFNDgy0s,5773
130
130
  sentry_sdk/integrations/openai_agents/patches/models.py,sha256=DtwqCmSsYFlhRZquKM2jiTOnnAg97eyCTtJYZkWqdww,1405
131
131
  sentry_sdk/integrations/openai_agents/patches/runner.py,sha256=Fr5tflgadu3fnEThSZauAhrT7BbvemuZelDVGZjleqA,1483
132
132
  sentry_sdk/integrations/openai_agents/patches/tools.py,sha256=uAx1GgsiDJBP7jpYW8r_kOImdgzXlwYqK-uhkyP3icI,3255
133
133
  sentry_sdk/integrations/openai_agents/spans/__init__.py,sha256=RlVi781zGsvCJBciDO_EbBbwkakwbP9DoFQBbo4VAEE,353
134
- sentry_sdk/integrations/openai_agents/spans/agent_workflow.py,sha256=GIIeNKQ1rrciqkjwJWK5AMxsjWjWslR3E054jIWDoiw,459
134
+ sentry_sdk/integrations/openai_agents/spans/agent_workflow.py,sha256=fdRSThD31TcoMXFg-2vmqK2YcSws8Yhd0oC6fxOnysM,469
135
135
  sentry_sdk/integrations/openai_agents/spans/ai_client.py,sha256=0HG5pT8a06Zgc5JUmRx8p_6bPoQFQLjDrMY_QSQd0_E,1206
136
- sentry_sdk/integrations/openai_agents/spans/execute_tool.py,sha256=w3QWWS4wbpteFTz4JjMCXdDpR6JVKcUVREQ-lvJOQTY,1420
136
+ sentry_sdk/integrations/openai_agents/spans/execute_tool.py,sha256=tqtDIzaxhxJUE-XEvm2dSyJV65UXJ7Mr23C6NTt6ZJE,1411
137
137
  sentry_sdk/integrations/openai_agents/spans/handoff.py,sha256=MBhzy7MpvPGwQTPT5TFcOnmSPiSH_uadQ5wvksueIik,525
138
- sentry_sdk/integrations/openai_agents/spans/invoke_agent.py,sha256=WU7E7DoO1IXZKjXuZ1BTPqfWnm3mNl6Ao8duUGoRA9w,875
138
+ sentry_sdk/integrations/openai_agents/spans/invoke_agent.py,sha256=yyg-wyVZaYMYbaORva_BotNxB9oyK5Dsn8KfQ3Y7OZI,2323
139
139
  sentry_sdk/integrations/opentelemetry/__init__.py,sha256=emNL5aAq_NhK0PZmfX_g4GIdvBS6nHqGrjrIgrdC5m8,229
140
140
  sentry_sdk/integrations/opentelemetry/consts.py,sha256=fYL6FIAEfnGZGBhFn5X7aRyHxihSPqAKKqMLhf5Gniw,143
141
141
  sentry_sdk/integrations/opentelemetry/integration.py,sha256=CWp6hFFMqoR7wcuwTRbRO-1iVch4A6oOB3RuHWeX9GQ,1791
@@ -157,12 +157,12 @@ sentry_sdk/integrations/spark/__init__.py,sha256=oOewMErnZk2rzNvIlZO6URxQexu9bUJ
157
157
  sentry_sdk/integrations/spark/spark_driver.py,sha256=mqGQMngDAZWM78lWK5S0FPpmjd1Q65Ta5T4bOH6mNXs,9465
158
158
  sentry_sdk/integrations/spark/spark_worker.py,sha256=FGT4yRU2X_iQCC46aasMmvJfYOKmBip8KbDF_wnhvEY,3706
159
159
  sentry_sdk/profiler/__init__.py,sha256=3PI3bHk9RSkkOXZKN84DDedk_7M65EiqqaIGo-DYs0E,1291
160
- sentry_sdk/profiler/continuous_profiler.py,sha256=s0DHkj3RZYRg9HnQQC0G44ku6DaFqRy30fZTMtTYvIs,22828
160
+ sentry_sdk/profiler/continuous_profiler.py,sha256=7Qb75TaKLNYxMA97wO-qEpDVqxPQWOLUi2rnUm6_Ci0,23066
161
161
  sentry_sdk/profiler/transaction_profiler.py,sha256=e3MsUqs-YIp6-nmzpmBYGoWWIF7RyuSGu24Dj-8GXAU,27970
162
162
  sentry_sdk/profiler/utils.py,sha256=G5s4tYai9ATJqcHrQ3bOIxlK6jIaHzELrDtU5k3N4HI,6556
163
- sentry_sdk-2.37.1.dist-info/licenses/LICENSE,sha256=KhQNZg9GKBL6KQvHQNBGMxJsXsRdhLebVp4Sew7t3Qs,1093
164
- sentry_sdk-2.37.1.dist-info/METADATA,sha256=OkawBoE3U9CFHg01etuOhSLvQQMmVygWbXUdTvGcAUQ,10358
165
- sentry_sdk-2.37.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
166
- sentry_sdk-2.37.1.dist-info/entry_points.txt,sha256=qacZEz40UspQZD1IukCXykx0JtImqGDOctS5KfOLTko,91
167
- sentry_sdk-2.37.1.dist-info/top_level.txt,sha256=XrQz30XE9FKXSY_yGLrd9bsv2Rk390GTDJOSujYaMxI,11
168
- sentry_sdk-2.37.1.dist-info/RECORD,,
163
+ sentry_sdk-2.39.0.dist-info/licenses/LICENSE,sha256=KhQNZg9GKBL6KQvHQNBGMxJsXsRdhLebVp4Sew7t3Qs,1093
164
+ sentry_sdk-2.39.0.dist-info/METADATA,sha256=taZTJIDINnsHLuPc4upXBJPLMLnD3bdXscPqoNE_F8o,10358
165
+ sentry_sdk-2.39.0.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
166
+ sentry_sdk-2.39.0.dist-info/entry_points.txt,sha256=qacZEz40UspQZD1IukCXykx0JtImqGDOctS5KfOLTko,91
167
+ sentry_sdk-2.39.0.dist-info/top_level.txt,sha256=XrQz30XE9FKXSY_yGLrd9bsv2Rk390GTDJOSujYaMxI,11
168
+ sentry_sdk-2.39.0.dist-info/RECORD,,