sentry-sdk 2.35.2__tar.gz → 2.37.0__tar.gz

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 (203) hide show
  1. {sentry_sdk-2.35.2/sentry_sdk.egg-info → sentry_sdk-2.37.0}/PKG-INFO +3 -1
  2. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/pyproject.toml +4 -0
  3. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/ai/monitoring.py +7 -5
  4. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/ai/utils.py +9 -6
  5. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/consts.py +2 -1
  6. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/__init__.py +3 -1
  7. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/langchain.py +105 -33
  8. sentry_sdk-2.37.0/sentry_sdk/integrations/langgraph.py +321 -0
  9. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai.py +38 -15
  10. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/utils.py +6 -3
  11. sentry_sdk-2.37.0/sentry_sdk/integrations/unraisablehook.py +53 -0
  12. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/profiler/transaction_profiler.py +6 -4
  13. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/tracing.py +6 -4
  14. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0/sentry_sdk.egg-info}/PKG-INFO +3 -1
  15. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk.egg-info/SOURCES.txt +2 -0
  16. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk.egg-info/requires.txt +3 -0
  17. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/setup.py +2 -1
  18. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_basics.py +1 -0
  19. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/LICENSE +0 -0
  20. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/MANIFEST.in +0 -0
  21. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/README.md +0 -0
  22. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/__init__.py +0 -0
  23. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/_compat.py +0 -0
  24. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/_init_implementation.py +0 -0
  25. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/_log_batcher.py +0 -0
  26. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/_lru_cache.py +0 -0
  27. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/_queue.py +0 -0
  28. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/_types.py +0 -0
  29. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/_werkzeug.py +0 -0
  30. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/ai/__init__.py +0 -0
  31. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/api.py +0 -0
  32. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/attachments.py +0 -0
  33. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/client.py +0 -0
  34. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/crons/__init__.py +0 -0
  35. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/crons/api.py +0 -0
  36. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/crons/consts.py +0 -0
  37. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/crons/decorator.py +0 -0
  38. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/debug.py +0 -0
  39. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/envelope.py +0 -0
  40. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/feature_flags.py +0 -0
  41. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/hub.py +0 -0
  42. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/_asgi_common.py +0 -0
  43. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/_wsgi_common.py +0 -0
  44. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/aiohttp.py +0 -0
  45. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/anthropic.py +0 -0
  46. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/argv.py +0 -0
  47. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/ariadne.py +0 -0
  48. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/arq.py +0 -0
  49. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/asgi.py +0 -0
  50. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/asyncio.py +0 -0
  51. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/asyncpg.py +0 -0
  52. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/atexit.py +0 -0
  53. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/aws_lambda.py +0 -0
  54. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/beam.py +0 -0
  55. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/boto3.py +0 -0
  56. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/bottle.py +0 -0
  57. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/celery/__init__.py +0 -0
  58. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/celery/beat.py +0 -0
  59. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/celery/utils.py +0 -0
  60. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/chalice.py +0 -0
  61. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/clickhouse_driver.py +0 -0
  62. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/cloud_resource_context.py +0 -0
  63. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/cohere.py +0 -0
  64. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/dedupe.py +0 -0
  65. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/django/__init__.py +0 -0
  66. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/django/asgi.py +0 -0
  67. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/django/caching.py +0 -0
  68. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/django/middleware.py +0 -0
  69. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/django/signals_handlers.py +0 -0
  70. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/django/templates.py +0 -0
  71. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/django/transactions.py +0 -0
  72. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/django/views.py +0 -0
  73. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/dramatiq.py +0 -0
  74. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/excepthook.py +0 -0
  75. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/executing.py +0 -0
  76. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/falcon.py +0 -0
  77. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/fastapi.py +0 -0
  78. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/flask.py +0 -0
  79. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/gcp.py +0 -0
  80. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/gnu_backtrace.py +0 -0
  81. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/gql.py +0 -0
  82. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/graphene.py +0 -0
  83. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/grpc/__init__.py +0 -0
  84. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/grpc/aio/__init__.py +0 -0
  85. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/grpc/aio/client.py +0 -0
  86. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/grpc/aio/server.py +0 -0
  87. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/grpc/client.py +0 -0
  88. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/grpc/consts.py +0 -0
  89. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/grpc/server.py +0 -0
  90. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/httpx.py +0 -0
  91. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/huey.py +0 -0
  92. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/huggingface_hub.py +0 -0
  93. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/launchdarkly.py +0 -0
  94. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/litestar.py +0 -0
  95. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/logging.py +0 -0
  96. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/loguru.py +0 -0
  97. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/modules.py +0 -0
  98. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/__init__.py +0 -0
  99. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/consts.py +0 -0
  100. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/patches/__init__.py +0 -0
  101. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/patches/agent_run.py +0 -0
  102. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/patches/models.py +0 -0
  103. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/patches/runner.py +0 -0
  104. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/patches/tools.py +0 -0
  105. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/spans/__init__.py +0 -0
  106. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/spans/agent_workflow.py +0 -0
  107. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/spans/ai_client.py +0 -0
  108. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/spans/execute_tool.py +0 -0
  109. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/spans/handoff.py +0 -0
  110. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +0 -0
  111. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/openfeature.py +0 -0
  112. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/opentelemetry/__init__.py +0 -0
  113. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/opentelemetry/consts.py +0 -0
  114. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/opentelemetry/integration.py +0 -0
  115. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/opentelemetry/propagator.py +0 -0
  116. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/opentelemetry/span_processor.py +0 -0
  117. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/pure_eval.py +0 -0
  118. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/pymongo.py +0 -0
  119. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/pyramid.py +0 -0
  120. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/quart.py +0 -0
  121. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/ray.py +0 -0
  122. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/__init__.py +0 -0
  123. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/_async_common.py +0 -0
  124. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/_sync_common.py +0 -0
  125. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/consts.py +0 -0
  126. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/modules/__init__.py +0 -0
  127. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/modules/caches.py +0 -0
  128. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/modules/queries.py +0 -0
  129. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/rb.py +0 -0
  130. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/redis.py +0 -0
  131. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/redis_cluster.py +0 -0
  132. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/redis_py_cluster_legacy.py +0 -0
  133. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/redis/utils.py +0 -0
  134. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/rq.py +0 -0
  135. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/rust_tracing.py +0 -0
  136. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/sanic.py +0 -0
  137. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/serverless.py +0 -0
  138. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/socket.py +0 -0
  139. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/spark/__init__.py +0 -0
  140. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/spark/spark_driver.py +0 -0
  141. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/spark/spark_worker.py +0 -0
  142. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/sqlalchemy.py +0 -0
  143. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/starlette.py +0 -0
  144. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/starlite.py +0 -0
  145. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/statsig.py +0 -0
  146. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/stdlib.py +0 -0
  147. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/strawberry.py +0 -0
  148. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/sys_exit.py +0 -0
  149. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/threading.py +0 -0
  150. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/tornado.py +0 -0
  151. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/trytond.py +0 -0
  152. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/typer.py +0 -0
  153. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/unleash.py +0 -0
  154. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/integrations/wsgi.py +0 -0
  155. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/logger.py +0 -0
  156. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/metrics.py +0 -0
  157. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/monitor.py +0 -0
  158. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/profiler/__init__.py +0 -0
  159. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/profiler/continuous_profiler.py +0 -0
  160. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/profiler/utils.py +0 -0
  161. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/py.typed +0 -0
  162. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/scope.py +0 -0
  163. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/scrubber.py +0 -0
  164. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/serializer.py +0 -0
  165. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/session.py +0 -0
  166. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/sessions.py +0 -0
  167. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/spotlight.py +0 -0
  168. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/tracing_utils.py +0 -0
  169. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/transport.py +0 -0
  170. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/types.py +0 -0
  171. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/utils.py +0 -0
  172. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk/worker.py +0 -0
  173. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk.egg-info/dependency_links.txt +0 -0
  174. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk.egg-info/entry_points.txt +0 -0
  175. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk.egg-info/not-zip-safe +0 -0
  176. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/sentry_sdk.egg-info/top_level.txt +0 -0
  177. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/setup.cfg +0 -0
  178. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_ai_monitoring.py +0 -0
  179. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_api.py +0 -0
  180. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_client.py +0 -0
  181. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_conftest.py +0 -0
  182. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_crons.py +0 -0
  183. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_dsc.py +0 -0
  184. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_envelope.py +0 -0
  185. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_exceptiongroup.py +0 -0
  186. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_feature_flags.py +0 -0
  187. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_full_stack_frames.py +0 -0
  188. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_gevent.py +0 -0
  189. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_import.py +0 -0
  190. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_logs.py +0 -0
  191. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_lru_cache.py +0 -0
  192. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_metrics.py +0 -0
  193. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_monitor.py +0 -0
  194. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_propagationcontext.py +0 -0
  195. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_scope.py +0 -0
  196. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_scrubber.py +0 -0
  197. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_serializer.py +0 -0
  198. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_sessions.py +0 -0
  199. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_spotlight.py +0 -0
  200. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_tracing_utils.py +0 -0
  201. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_transport.py +0 -0
  202. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_types.py +0 -0
  203. {sentry_sdk-2.35.2 → sentry_sdk-2.37.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-sdk
3
- Version: 2.35.2
3
+ Version: 2.37.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
@@ -72,6 +72,8 @@ Provides-Extra: huggingface-hub
72
72
  Requires-Dist: huggingface_hub>=0.22; extra == "huggingface-hub"
73
73
  Provides-Extra: langchain
74
74
  Requires-Dist: langchain>=0.0.210; extra == "langchain"
75
+ Provides-Extra: langgraph
76
+ Requires-Dist: langgraph>=0.6.6; extra == "langgraph"
75
77
  Provides-Extra: launchdarkly
76
78
  Requires-Dist: launchdarkly-server-sdk>=9.8.0; extra == "launchdarkly"
77
79
  Provides-Extra: litestar
@@ -130,6 +130,10 @@ ignore_missing_imports = true
130
130
  module = "langchain.*"
131
131
  ignore_missing_imports = true
132
132
 
133
+ [[tool.mypy.overrides]]
134
+ module = "langgraph.*"
135
+ ignore_missing_imports = true
136
+
133
137
  [[tool.mypy.overrides]]
134
138
  module = "executing.*"
135
139
  ignore_missing_imports = true
@@ -10,7 +10,9 @@ from sentry_sdk.utils import ContextVar
10
10
  from typing import TYPE_CHECKING
11
11
 
12
12
  if TYPE_CHECKING:
13
- from typing import Optional, Callable, Any
13
+ from typing import Optional, Callable, Awaitable, Any, Union, TypeVar
14
+
15
+ F = TypeVar("F", bound=Union[Callable[..., Any], Callable[..., Awaitable[Any]]])
14
16
 
15
17
  _ai_pipeline_name = ContextVar("ai_pipeline_name", default=None)
16
18
 
@@ -26,9 +28,9 @@ def get_ai_pipeline_name():
26
28
 
27
29
 
28
30
  def ai_track(description, **span_kwargs):
29
- # type: (str, Any) -> Callable[..., Any]
31
+ # type: (str, Any) -> Callable[[F], F]
30
32
  def decorator(f):
31
- # type: (Callable[..., Any]) -> Callable[..., Any]
33
+ # type: (F) -> F
32
34
  def sync_wrapped(*args, **kwargs):
33
35
  # type: (Any, Any) -> Any
34
36
  curr_pipeline = _ai_pipeline_name.get()
@@ -88,9 +90,9 @@ def ai_track(description, **span_kwargs):
88
90
  return res
89
91
 
90
92
  if inspect.iscoroutinefunction(f):
91
- return wraps(f)(async_wrapped)
93
+ return wraps(f)(async_wrapped) # type: ignore
92
94
  else:
93
- return wraps(f)(sync_wrapped)
95
+ return wraps(f)(sync_wrapped) # type: ignore
94
96
 
95
97
  return decorator
96
98
 
@@ -1,30 +1,33 @@
1
+ import json
2
+
1
3
  from typing import TYPE_CHECKING
2
4
 
3
5
  if TYPE_CHECKING:
4
6
  from typing import Any
7
+ from sentry_sdk.tracing import Span
5
8
 
6
- from sentry_sdk.tracing import Span
7
9
  from sentry_sdk.utils import logger
8
10
 
9
11
 
10
12
  def _normalize_data(data, unpack=True):
11
13
  # type: (Any, bool) -> Any
12
-
13
14
  # convert pydantic data (e.g. OpenAI v1+) to json compatible format
14
15
  if hasattr(data, "model_dump"):
15
16
  try:
16
- return data.model_dump()
17
+ return _normalize_data(data.model_dump(), unpack=unpack)
17
18
  except Exception as e:
18
19
  logger.warning("Could not convert pydantic data to JSON: %s", e)
19
- return data
20
+ return data if isinstance(data, (int, float, bool, str)) else str(data)
21
+
20
22
  if isinstance(data, list):
21
23
  if unpack and len(data) == 1:
22
24
  return _normalize_data(data[0], unpack=unpack) # remove empty dimensions
23
25
  return list(_normalize_data(x, unpack=unpack) for x in data)
26
+
24
27
  if isinstance(data, dict):
25
28
  return {k: _normalize_data(v, unpack=unpack) for (k, v) in data.items()}
26
29
 
27
- return data
30
+ return data if isinstance(data, (int, float, bool, str)) else str(data)
28
31
 
29
32
 
30
33
  def set_data_normalized(span, key, value, unpack=True):
@@ -33,4 +36,4 @@ def set_data_normalized(span, key, value, unpack=True):
33
36
  if isinstance(normalized, (int, float, bool, str)):
34
37
  span.set_data(key, normalized)
35
38
  else:
36
- span.set_data(key, str(normalized))
39
+ span.set_data(key, json.dumps(normalized))
@@ -792,6 +792,7 @@ class OP:
792
792
  FUNCTION_AWS = "function.aws"
793
793
  FUNCTION_GCP = "function.gcp"
794
794
  GEN_AI_CHAT = "gen_ai.chat"
795
+ GEN_AI_CREATE_AGENT = "gen_ai.create_agent"
795
796
  GEN_AI_EMBEDDINGS = "gen_ai.embeddings"
796
797
  GEN_AI_EXECUTE_TOOL = "gen_ai.execute_tool"
797
798
  GEN_AI_HANDOFF = "gen_ai.handoff"
@@ -1329,4 +1330,4 @@ DEFAULT_OPTIONS = _get_default_options()
1329
1330
  del _get_default_options
1330
1331
 
1331
1332
 
1332
- VERSION = "2.35.2"
1333
+ VERSION = "2.37.0"
@@ -95,6 +95,7 @@ _AUTO_ENABLING_INTEGRATIONS = [
95
95
  "sentry_sdk.integrations.huey.HueyIntegration",
96
96
  "sentry_sdk.integrations.huggingface_hub.HuggingfaceHubIntegration",
97
97
  "sentry_sdk.integrations.langchain.LangchainIntegration",
98
+ "sentry_sdk.integrations.langgraph.LanggraphIntegration",
98
99
  "sentry_sdk.integrations.litestar.LitestarIntegration",
99
100
  "sentry_sdk.integrations.loguru.LoguruIntegration",
100
101
  "sentry_sdk.integrations.openai.OpenAIIntegration",
@@ -141,7 +142,8 @@ _MIN_VERSIONS = {
141
142
  "graphene": (3, 3),
142
143
  "grpc": (1, 32, 0), # grpcio
143
144
  "huggingface_hub": (0, 22),
144
- "langchain": (0, 0, 210),
145
+ "langchain": (0, 1, 0),
146
+ "langgraph": (0, 6, 6),
145
147
  "launchdarkly": (9, 8, 0),
146
148
  "loguru": (0, 7, 0),
147
149
  "openai": (1, 0, 0),
@@ -51,7 +51,6 @@ DATA_FIELDS = {
51
51
  "presence_penalty": SPANDATA.GEN_AI_REQUEST_PRESENCE_PENALTY,
52
52
  "temperature": SPANDATA.GEN_AI_REQUEST_TEMPERATURE,
53
53
  "tool_calls": SPANDATA.GEN_AI_RESPONSE_TOOL_CALLS,
54
- "tools": SPANDATA.GEN_AI_REQUEST_AVAILABLE_TOOLS,
55
54
  "top_k": SPANDATA.GEN_AI_REQUEST_TOP_K,
56
55
  "top_p": SPANDATA.GEN_AI_REQUEST_TOP_P,
57
56
  }
@@ -203,8 +202,12 @@ class SentryLangchainCallback(BaseCallbackHandler): # type: ignore[misc]
203
202
  if key in all_params and all_params[key] is not None:
204
203
  set_data_normalized(span, attribute, all_params[key], unpack=False)
205
204
 
205
+ _set_tools_on_span(span, all_params.get("tools"))
206
+
206
207
  if should_send_default_pii() and self.include_prompts:
207
- set_data_normalized(span, SPANDATA.GEN_AI_REQUEST_MESSAGES, prompts)
208
+ set_data_normalized(
209
+ span, SPANDATA.GEN_AI_REQUEST_MESSAGES, prompts, unpack=False
210
+ )
208
211
 
209
212
  def on_chat_model_start(self, serialized, messages, *, run_id, **kwargs):
210
213
  # type: (SentryLangchainCallback, Dict[str, Any], List[List[BaseMessage]], UUID, Any) -> Any
@@ -246,14 +249,20 @@ class SentryLangchainCallback(BaseCallbackHandler): # type: ignore[misc]
246
249
  if key in all_params and all_params[key] is not None:
247
250
  set_data_normalized(span, attribute, all_params[key], unpack=False)
248
251
 
252
+ _set_tools_on_span(span, all_params.get("tools"))
253
+
249
254
  if should_send_default_pii() and self.include_prompts:
255
+ normalized_messages = []
256
+ for list_ in messages:
257
+ for message in list_:
258
+ normalized_messages.append(
259
+ self._normalize_langchain_message(message)
260
+ )
250
261
  set_data_normalized(
251
262
  span,
252
263
  SPANDATA.GEN_AI_REQUEST_MESSAGES,
253
- [
254
- [self._normalize_langchain_message(x) for x in list_]
255
- for list_ in messages
256
- ],
264
+ normalized_messages,
265
+ unpack=False,
257
266
  )
258
267
 
259
268
  def on_chat_model_end(self, response, *, run_id, **kwargs):
@@ -351,9 +360,7 @@ class SentryLangchainCallback(BaseCallbackHandler): # type: ignore[misc]
351
360
 
352
361
  if should_send_default_pii() and self.include_prompts:
353
362
  set_data_normalized(
354
- span,
355
- SPANDATA.GEN_AI_RESPONSE_TEXT,
356
- finish.return_values.items(),
363
+ span, SPANDATA.GEN_AI_RESPONSE_TEXT, finish.return_values.items()
357
364
  )
358
365
 
359
366
  self._exit_span(span_data, run_id)
@@ -473,13 +480,11 @@ def _get_token_usage(obj):
473
480
  if usage is not None:
474
481
  return usage
475
482
 
476
- # check for usage in the object itself
477
483
  for name in possible_names:
478
484
  usage = _get_value(obj, name)
479
485
  if usage is not None:
480
486
  return usage
481
487
 
482
- # no usage found anywhere
483
488
  return None
484
489
 
485
490
 
@@ -531,6 +536,87 @@ def _get_request_data(obj, args, kwargs):
531
536
  return (agent_name, tools)
532
537
 
533
538
 
539
+ def _simplify_langchain_tools(tools):
540
+ # type: (Any) -> Optional[List[Any]]
541
+ """Parse and simplify tools into a cleaner format."""
542
+ if not tools:
543
+ return None
544
+
545
+ if not isinstance(tools, (list, tuple)):
546
+ return None
547
+
548
+ simplified_tools = []
549
+ for tool in tools:
550
+ try:
551
+ if isinstance(tool, dict):
552
+
553
+ if "function" in tool and isinstance(tool["function"], dict):
554
+ func = tool["function"]
555
+ simplified_tool = {
556
+ "name": func.get("name"),
557
+ "description": func.get("description"),
558
+ }
559
+ if simplified_tool["name"]:
560
+ simplified_tools.append(simplified_tool)
561
+ elif "name" in tool:
562
+ simplified_tool = {
563
+ "name": tool.get("name"),
564
+ "description": tool.get("description"),
565
+ }
566
+ simplified_tools.append(simplified_tool)
567
+ else:
568
+ name = (
569
+ tool.get("name")
570
+ or tool.get("tool_name")
571
+ or tool.get("function_name")
572
+ )
573
+ if name:
574
+ simplified_tools.append(
575
+ {
576
+ "name": name,
577
+ "description": tool.get("description")
578
+ or tool.get("desc"),
579
+ }
580
+ )
581
+ elif hasattr(tool, "name"):
582
+ simplified_tool = {
583
+ "name": getattr(tool, "name", None),
584
+ "description": getattr(tool, "description", None)
585
+ or getattr(tool, "desc", None),
586
+ }
587
+ if simplified_tool["name"]:
588
+ simplified_tools.append(simplified_tool)
589
+ elif hasattr(tool, "__name__"):
590
+ simplified_tools.append(
591
+ {
592
+ "name": tool.__name__,
593
+ "description": getattr(tool, "__doc__", None),
594
+ }
595
+ )
596
+ else:
597
+ tool_str = str(tool)
598
+ if tool_str and tool_str != "":
599
+ simplified_tools.append({"name": tool_str, "description": None})
600
+ except Exception:
601
+ continue
602
+
603
+ return simplified_tools if simplified_tools else None
604
+
605
+
606
+ def _set_tools_on_span(span, tools):
607
+ # type: (Span, Any) -> None
608
+ """Set available tools data on a span if tools are provided."""
609
+ if tools is not None:
610
+ simplified_tools = _simplify_langchain_tools(tools)
611
+ if simplified_tools:
612
+ set_data_normalized(
613
+ span,
614
+ SPANDATA.GEN_AI_REQUEST_AVAILABLE_TOOLS,
615
+ simplified_tools,
616
+ unpack=False,
617
+ )
618
+
619
+
534
620
  def _wrap_configure(f):
535
621
  # type: (Callable[..., Any]) -> Callable[..., Any]
536
622
 
@@ -601,7 +687,7 @@ def _wrap_configure(f):
601
687
  ]
602
688
  elif isinstance(local_callbacks, BaseCallbackHandler):
603
689
  local_callbacks = [local_callbacks, sentry_handler]
604
- else: # local_callbacks is a list
690
+ else:
605
691
  local_callbacks = [*local_callbacks, sentry_handler]
606
692
 
607
693
  return f(
@@ -638,10 +724,7 @@ def _wrap_agent_executor_invoke(f):
638
724
  span.set_data(SPANDATA.GEN_AI_OPERATION_NAME, "invoke_agent")
639
725
  span.set_data(SPANDATA.GEN_AI_RESPONSE_STREAMING, False)
640
726
 
641
- if tools:
642
- set_data_normalized(
643
- span, SPANDATA.GEN_AI_REQUEST_AVAILABLE_TOOLS, tools, unpack=False
644
- )
727
+ _set_tools_on_span(span, tools)
645
728
 
646
729
  # Run the agent
647
730
  result = f(self, *args, **kwargs)
@@ -653,11 +736,7 @@ def _wrap_agent_executor_invoke(f):
653
736
  and integration.include_prompts
654
737
  ):
655
738
  set_data_normalized(
656
- span,
657
- SPANDATA.GEN_AI_REQUEST_MESSAGES,
658
- [
659
- input,
660
- ],
739
+ span, SPANDATA.GEN_AI_REQUEST_MESSAGES, [input], unpack=False
661
740
  )
662
741
 
663
742
  output = result.get("output")
@@ -666,7 +745,7 @@ def _wrap_agent_executor_invoke(f):
666
745
  and should_send_default_pii()
667
746
  and integration.include_prompts
668
747
  ):
669
- span.set_data(SPANDATA.GEN_AI_RESPONSE_TEXT, output)
748
+ set_data_normalized(span, SPANDATA.GEN_AI_RESPONSE_TEXT, output)
670
749
 
671
750
  return result
672
751
 
@@ -698,10 +777,7 @@ def _wrap_agent_executor_stream(f):
698
777
  span.set_data(SPANDATA.GEN_AI_OPERATION_NAME, "invoke_agent")
699
778
  span.set_data(SPANDATA.GEN_AI_RESPONSE_STREAMING, True)
700
779
 
701
- if tools:
702
- set_data_normalized(
703
- span, SPANDATA.GEN_AI_REQUEST_AVAILABLE_TOOLS, tools, unpack=False
704
- )
780
+ _set_tools_on_span(span, tools)
705
781
 
706
782
  input = args[0].get("input") if len(args) >= 1 else None
707
783
  if (
@@ -710,11 +786,7 @@ def _wrap_agent_executor_stream(f):
710
786
  and integration.include_prompts
711
787
  ):
712
788
  set_data_normalized(
713
- span,
714
- SPANDATA.GEN_AI_REQUEST_MESSAGES,
715
- [
716
- input,
717
- ],
789
+ span, SPANDATA.GEN_AI_REQUEST_MESSAGES, [input], unpack=False
718
790
  )
719
791
 
720
792
  # Run the agent
@@ -737,7 +809,7 @@ def _wrap_agent_executor_stream(f):
737
809
  and should_send_default_pii()
738
810
  and integration.include_prompts
739
811
  ):
740
- span.set_data(SPANDATA.GEN_AI_RESPONSE_TEXT, output)
812
+ set_data_normalized(span, SPANDATA.GEN_AI_RESPONSE_TEXT, output)
741
813
 
742
814
  span.__exit__(None, None, None)
743
815
 
@@ -756,7 +828,7 @@ def _wrap_agent_executor_stream(f):
756
828
  and should_send_default_pii()
757
829
  and integration.include_prompts
758
830
  ):
759
- span.set_data(SPANDATA.GEN_AI_RESPONSE_TEXT, output)
831
+ set_data_normalized(span, SPANDATA.GEN_AI_RESPONSE_TEXT, output)
760
832
 
761
833
  span.__exit__(None, None, None)
762
834