sentry-sdk 2.37.1__tar.gz → 2.39.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.
- {sentry_sdk-2.37.1/sentry_sdk.egg-info → sentry_sdk-2.39.0}/PKG-INFO +1 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/__init__.py +4 -2
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_types.py +1 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/ai/utils.py +11 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/consts.py +5 -2
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/envelope.py +1 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/__init__.py +2 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/anthropic.py +65 -15
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/asyncio.py +2 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/cohere.py +4 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/dedupe.py +19 -3
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/gql.py +22 -5
- sentry_sdk-2.39.0/sentry_sdk/integrations/huggingface_hub.py +378 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/langchain.py +17 -14
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai.py +13 -8
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/agent_run.py +4 -4
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/agent_workflow.py +2 -2
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/execute_tool.py +1 -1
- sentry_sdk-2.39.0/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +78 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/utils.py +3 -10
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/threading.py +1 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/profiler/continuous_profiler.py +13 -3
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/serializer.py +12 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/tracing.py +3 -3
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/tracing_utils.py +32 -23
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/utils.py +6 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0/sentry_sdk.egg-info}/PKG-INFO +1 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/setup.py +1 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_dsc.py +1 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_envelope.py +22 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_monitor.py +1 -1
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_propagationcontext.py +10 -7
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_transport.py +38 -1
- sentry_sdk-2.37.1/sentry_sdk/integrations/huggingface_hub.py +0 -181
- sentry_sdk-2.37.1/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +0 -34
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/LICENSE +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/MANIFEST.in +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/README.md +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/pyproject.toml +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_compat.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_init_implementation.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_log_batcher.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_lru_cache.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_queue.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/_werkzeug.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/ai/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/ai/monitoring.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/api.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/attachments.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/client.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/crons/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/crons/api.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/crons/consts.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/crons/decorator.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/debug.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/feature_flags.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/hub.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/_asgi_common.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/_wsgi_common.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/aiohttp.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/argv.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/ariadne.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/arq.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/asgi.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/asyncpg.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/atexit.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/aws_lambda.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/beam.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/boto3.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/bottle.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/celery/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/celery/beat.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/celery/utils.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/chalice.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/clickhouse_driver.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/cloud_resource_context.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/asgi.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/caching.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/middleware.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/signals_handlers.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/templates.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/transactions.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/django/views.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/dramatiq.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/excepthook.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/executing.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/falcon.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/fastapi.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/flask.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/gcp.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/gnu_backtrace.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/graphene.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/aio/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/aio/client.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/aio/server.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/client.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/consts.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/grpc/server.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/httpx.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/huey.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/langgraph.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/launchdarkly.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/litestar.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/logging.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/loguru.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/modules.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/consts.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/models.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/runner.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/patches/tools.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/ai_client.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openai_agents/spans/handoff.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/openfeature.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/consts.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/integration.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/propagator.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/opentelemetry/span_processor.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/pure_eval.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/pymongo.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/pyramid.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/quart.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/ray.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/_async_common.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/_sync_common.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/consts.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/modules/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/modules/caches.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/modules/queries.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/rb.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/redis.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/redis_cluster.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/redis_py_cluster_legacy.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/redis/utils.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/rq.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/rust_tracing.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/sanic.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/serverless.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/socket.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/spark/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/spark/spark_driver.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/spark/spark_worker.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/sqlalchemy.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/starlette.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/starlite.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/statsig.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/stdlib.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/strawberry.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/sys_exit.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/tornado.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/trytond.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/typer.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/unleash.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/unraisablehook.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/integrations/wsgi.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/logger.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/metrics.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/monitor.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/profiler/__init__.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/profiler/transaction_profiler.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/profiler/utils.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/py.typed +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/scope.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/scrubber.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/session.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/sessions.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/spotlight.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/transport.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/types.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk/worker.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/SOURCES.txt +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/dependency_links.txt +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/entry_points.txt +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/not-zip-safe +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/requires.txt +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/sentry_sdk.egg-info/top_level.txt +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/setup.cfg +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_ai_monitoring.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_api.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_basics.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_client.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_conftest.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_crons.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_exceptiongroup.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_feature_flags.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_full_stack_frames.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_gevent.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_import.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_logs.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_lru_cache.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_metrics.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_scope.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_scrubber.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_serializer.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_sessions.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_spotlight.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_tracing_utils.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_types.py +0 -0
- {sentry_sdk-2.37.1 → sentry_sdk-2.39.0}/tests/test_utils.py +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
from sentry_sdk import profiler
|
|
1
2
|
from sentry_sdk.scope import Scope
|
|
2
3
|
from sentry_sdk.transport import Transport, HttpTransport
|
|
3
4
|
from sentry_sdk.client import Client
|
|
4
5
|
|
|
5
6
|
from sentry_sdk.api import * # noqa
|
|
6
|
-
|
|
7
|
-
from sentry_sdk.consts import VERSION # noqa
|
|
7
|
+
from sentry_sdk.consts import VERSION
|
|
8
8
|
|
|
9
9
|
__all__ = [ # noqa
|
|
10
10
|
"Hub",
|
|
@@ -12,6 +12,7 @@ __all__ = [ # noqa
|
|
|
12
12
|
"Client",
|
|
13
13
|
"Transport",
|
|
14
14
|
"HttpTransport",
|
|
15
|
+
"VERSION",
|
|
15
16
|
"integrations",
|
|
16
17
|
# From sentry_sdk.api
|
|
17
18
|
"init",
|
|
@@ -47,6 +48,7 @@ __all__ = [ # noqa
|
|
|
47
48
|
"trace",
|
|
48
49
|
"monitor",
|
|
49
50
|
"logger",
|
|
51
|
+
"profiler",
|
|
50
52
|
"start_session",
|
|
51
53
|
"end_session",
|
|
52
54
|
"set_transaction_name",
|
|
@@ -3,9 +3,10 @@ import json
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
4
|
|
|
5
5
|
if TYPE_CHECKING:
|
|
6
|
-
from typing import Any
|
|
6
|
+
from typing import Any, Callable
|
|
7
7
|
from sentry_sdk.tracing import Span
|
|
8
8
|
|
|
9
|
+
import sentry_sdk
|
|
9
10
|
from sentry_sdk.utils import logger
|
|
10
11
|
|
|
11
12
|
|
|
@@ -37,3 +38,12 @@ def set_data_normalized(span, key, value, unpack=True):
|
|
|
37
38
|
span.set_data(key, normalized)
|
|
38
39
|
else:
|
|
39
40
|
span.set_data(key, json.dumps(normalized))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def get_start_span_function():
|
|
44
|
+
# type: () -> Callable[..., Any]
|
|
45
|
+
current_span = sentry_sdk.get_current_span()
|
|
46
|
+
transaction_exists = (
|
|
47
|
+
current_span is not None and current_span.containing_transaction is not None
|
|
48
|
+
)
|
|
49
|
+
return sentry_sdk.start_span if transaction_exists else sentry_sdk.start_transaction
|
|
@@ -765,11 +765,12 @@ class SPANSTATUS:
|
|
|
765
765
|
CANCELLED = "cancelled"
|
|
766
766
|
DATA_LOSS = "data_loss"
|
|
767
767
|
DEADLINE_EXCEEDED = "deadline_exceeded"
|
|
768
|
+
ERROR = "error" # OTel status code: https://opentelemetry.io/docs/concepts/signals/traces/#span-status
|
|
768
769
|
FAILED_PRECONDITION = "failed_precondition"
|
|
769
770
|
INTERNAL_ERROR = "internal_error"
|
|
770
771
|
INVALID_ARGUMENT = "invalid_argument"
|
|
771
772
|
NOT_FOUND = "not_found"
|
|
772
|
-
OK = "ok"
|
|
773
|
+
OK = "ok" # HTTP 200 and OTel status code: https://opentelemetry.io/docs/concepts/signals/traces/#span-status
|
|
773
774
|
OUT_OF_RANGE = "out_of_range"
|
|
774
775
|
PERMISSION_DENIED = "permission_denied"
|
|
775
776
|
RESOURCE_EXHAUSTED = "resource_exhausted"
|
|
@@ -777,6 +778,7 @@ class SPANSTATUS:
|
|
|
777
778
|
UNAVAILABLE = "unavailable"
|
|
778
779
|
UNIMPLEMENTED = "unimplemented"
|
|
779
780
|
UNKNOWN_ERROR = "unknown_error"
|
|
781
|
+
UNSET = "unset" # OTel status code: https://opentelemetry.io/docs/concepts/signals/traces/#span-status
|
|
780
782
|
|
|
781
783
|
|
|
782
784
|
class OP:
|
|
@@ -795,6 +797,7 @@ class OP:
|
|
|
795
797
|
GEN_AI_CREATE_AGENT = "gen_ai.create_agent"
|
|
796
798
|
GEN_AI_EMBEDDINGS = "gen_ai.embeddings"
|
|
797
799
|
GEN_AI_EXECUTE_TOOL = "gen_ai.execute_tool"
|
|
800
|
+
GEN_AI_GENERATE_TEXT = "gen_ai.generate_text"
|
|
798
801
|
GEN_AI_HANDOFF = "gen_ai.handoff"
|
|
799
802
|
GEN_AI_PIPELINE = "gen_ai.pipeline"
|
|
800
803
|
GEN_AI_INVOKE_AGENT = "gen_ai.invoke_agent"
|
|
@@ -1330,4 +1333,4 @@ DEFAULT_OPTIONS = _get_default_options()
|
|
|
1330
1333
|
del _get_default_options
|
|
1331
1334
|
|
|
1332
1335
|
|
|
1333
|
-
VERSION = "2.
|
|
1336
|
+
VERSION = "2.39.0"
|
|
@@ -141,7 +141,8 @@ _MIN_VERSIONS = {
|
|
|
141
141
|
"gql": (3, 4, 1),
|
|
142
142
|
"graphene": (3, 3),
|
|
143
143
|
"grpc": (1, 32, 0), # grpcio
|
|
144
|
-
"
|
|
144
|
+
"httpx": (0, 16, 0),
|
|
145
|
+
"huggingface_hub": (0, 24, 7),
|
|
145
146
|
"langchain": (0, 1, 0),
|
|
146
147
|
"langgraph": (0, 6, 6),
|
|
147
148
|
"launchdarkly": (9, 8, 0),
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from functools import wraps
|
|
2
|
-
import json
|
|
3
2
|
from typing import TYPE_CHECKING
|
|
4
3
|
|
|
5
4
|
import sentry_sdk
|
|
6
5
|
from sentry_sdk.ai.monitoring import record_token_usage
|
|
7
|
-
from sentry_sdk.ai.utils import set_data_normalized
|
|
8
|
-
from sentry_sdk.consts import OP, SPANDATA
|
|
6
|
+
from sentry_sdk.ai.utils import set_data_normalized, get_start_span_function
|
|
7
|
+
from sentry_sdk.consts import OP, SPANDATA, SPANSTATUS
|
|
9
8
|
from sentry_sdk.integrations import _check_minimum_version, DidNotEnable, Integration
|
|
10
9
|
from sentry_sdk.scope import should_send_default_pii
|
|
10
|
+
from sentry_sdk.tracing_utils import set_span_errored
|
|
11
11
|
from sentry_sdk.utils import (
|
|
12
12
|
capture_internal_exceptions,
|
|
13
13
|
event_from_exception,
|
|
@@ -53,6 +53,8 @@ class AnthropicIntegration(Integration):
|
|
|
53
53
|
|
|
54
54
|
def _capture_exception(exc):
|
|
55
55
|
# type: (Any) -> None
|
|
56
|
+
set_span_errored()
|
|
57
|
+
|
|
56
58
|
event, hint = event_from_exception(
|
|
57
59
|
exc,
|
|
58
60
|
client_options=sentry_sdk.get_client().options,
|
|
@@ -117,8 +119,29 @@ def _set_input_data(span, kwargs, integration):
|
|
|
117
119
|
and should_send_default_pii()
|
|
118
120
|
and integration.include_prompts
|
|
119
121
|
):
|
|
122
|
+
normalized_messages = []
|
|
123
|
+
for message in messages:
|
|
124
|
+
if (
|
|
125
|
+
message.get("role") == "user"
|
|
126
|
+
and "content" in message
|
|
127
|
+
and isinstance(message["content"], (list, tuple))
|
|
128
|
+
):
|
|
129
|
+
for item in message["content"]:
|
|
130
|
+
if item.get("type") == "tool_result":
|
|
131
|
+
normalized_messages.append(
|
|
132
|
+
{
|
|
133
|
+
"role": "tool",
|
|
134
|
+
"content": {
|
|
135
|
+
"tool_use_id": item.get("tool_use_id"),
|
|
136
|
+
"output": item.get("content"),
|
|
137
|
+
},
|
|
138
|
+
}
|
|
139
|
+
)
|
|
140
|
+
else:
|
|
141
|
+
normalized_messages.append(message)
|
|
142
|
+
|
|
120
143
|
set_data_normalized(
|
|
121
|
-
span, SPANDATA.GEN_AI_REQUEST_MESSAGES,
|
|
144
|
+
span, SPANDATA.GEN_AI_REQUEST_MESSAGES, normalized_messages, unpack=False
|
|
122
145
|
)
|
|
123
146
|
|
|
124
147
|
set_data_normalized(
|
|
@@ -159,12 +182,29 @@ def _set_output_data(
|
|
|
159
182
|
Set output data for the span based on the AI response."""
|
|
160
183
|
span.set_data(SPANDATA.GEN_AI_RESPONSE_MODEL, model)
|
|
161
184
|
if should_send_default_pii() and integration.include_prompts:
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
185
|
+
output_messages = {
|
|
186
|
+
"response": [],
|
|
187
|
+
"tool": [],
|
|
188
|
+
} # type: (dict[str, list[Any]])
|
|
189
|
+
|
|
190
|
+
for output in content_blocks:
|
|
191
|
+
if output["type"] == "text":
|
|
192
|
+
output_messages["response"].append(output["text"])
|
|
193
|
+
elif output["type"] == "tool_use":
|
|
194
|
+
output_messages["tool"].append(output)
|
|
195
|
+
|
|
196
|
+
if len(output_messages["tool"]) > 0:
|
|
197
|
+
set_data_normalized(
|
|
198
|
+
span,
|
|
199
|
+
SPANDATA.GEN_AI_RESPONSE_TOOL_CALLS,
|
|
200
|
+
output_messages["tool"],
|
|
201
|
+
unpack=False,
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
if len(output_messages["response"]) > 0:
|
|
205
|
+
set_data_normalized(
|
|
206
|
+
span, SPANDATA.GEN_AI_RESPONSE_TEXT, output_messages["response"]
|
|
207
|
+
)
|
|
168
208
|
|
|
169
209
|
record_token_usage(
|
|
170
210
|
span,
|
|
@@ -172,8 +212,6 @@ def _set_output_data(
|
|
|
172
212
|
output_tokens=output_tokens,
|
|
173
213
|
)
|
|
174
214
|
|
|
175
|
-
# TODO: GEN_AI_RESPONSE_TOOL_CALLS ?
|
|
176
|
-
|
|
177
215
|
if finish_span:
|
|
178
216
|
span.__exit__(None, None, None)
|
|
179
217
|
|
|
@@ -194,7 +232,7 @@ def _sentry_patched_create_common(f, *args, **kwargs):
|
|
|
194
232
|
|
|
195
233
|
model = kwargs.get("model", "")
|
|
196
234
|
|
|
197
|
-
span =
|
|
235
|
+
span = get_start_span_function()(
|
|
198
236
|
op=OP.GEN_AI_CHAT,
|
|
199
237
|
name=f"chat {model}".strip(),
|
|
200
238
|
origin=AnthropicIntegration.origin,
|
|
@@ -322,7 +360,13 @@ def _wrap_message_create(f):
|
|
|
322
360
|
integration = sentry_sdk.get_client().get_integration(AnthropicIntegration)
|
|
323
361
|
kwargs["integration"] = integration
|
|
324
362
|
|
|
325
|
-
|
|
363
|
+
try:
|
|
364
|
+
return _execute_sync(f, *args, **kwargs)
|
|
365
|
+
finally:
|
|
366
|
+
span = sentry_sdk.get_current_span()
|
|
367
|
+
if span is not None and span.status == SPANSTATUS.ERROR:
|
|
368
|
+
with capture_internal_exceptions():
|
|
369
|
+
span.__exit__(None, None, None)
|
|
326
370
|
|
|
327
371
|
return _sentry_patched_create_sync
|
|
328
372
|
|
|
@@ -355,6 +399,12 @@ def _wrap_message_create_async(f):
|
|
|
355
399
|
integration = sentry_sdk.get_client().get_integration(AnthropicIntegration)
|
|
356
400
|
kwargs["integration"] = integration
|
|
357
401
|
|
|
358
|
-
|
|
402
|
+
try:
|
|
403
|
+
return await _execute_async(f, *args, **kwargs)
|
|
404
|
+
finally:
|
|
405
|
+
span = sentry_sdk.get_current_span()
|
|
406
|
+
if span is not None and span.status == SPANSTATUS.ERROR:
|
|
407
|
+
with capture_internal_exceptions():
|
|
408
|
+
span.__exit__(None, None, None)
|
|
359
409
|
|
|
360
410
|
return _sentry_patched_create_async
|
|
@@ -7,6 +7,8 @@ from sentry_sdk.ai.utils import set_data_normalized
|
|
|
7
7
|
|
|
8
8
|
from typing import TYPE_CHECKING
|
|
9
9
|
|
|
10
|
+
from sentry_sdk.tracing_utils import set_span_errored
|
|
11
|
+
|
|
10
12
|
if TYPE_CHECKING:
|
|
11
13
|
from typing import Any, Callable, Iterator
|
|
12
14
|
from sentry_sdk.tracing import Span
|
|
@@ -84,6 +86,8 @@ class CohereIntegration(Integration):
|
|
|
84
86
|
|
|
85
87
|
def _capture_exception(exc):
|
|
86
88
|
# type: (Any) -> None
|
|
89
|
+
set_span_errored()
|
|
90
|
+
|
|
87
91
|
event, hint = event_from_exception(
|
|
88
92
|
exc,
|
|
89
93
|
client_options=sentry_sdk.get_client().options,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import weakref
|
|
2
|
+
|
|
1
3
|
import sentry_sdk
|
|
2
|
-
from sentry_sdk.utils import ContextVar
|
|
4
|
+
from sentry_sdk.utils import ContextVar, logger
|
|
3
5
|
from sentry_sdk.integrations import Integration
|
|
4
6
|
from sentry_sdk.scope import add_global_event_processor
|
|
5
7
|
|
|
@@ -35,10 +37,24 @@ class DedupeIntegration(Integration):
|
|
|
35
37
|
if exc_info is None:
|
|
36
38
|
return event
|
|
37
39
|
|
|
40
|
+
last_seen = integration._last_seen.get(None)
|
|
41
|
+
if last_seen is not None:
|
|
42
|
+
# last_seen is either a weakref or the original instance
|
|
43
|
+
last_seen = (
|
|
44
|
+
last_seen() if isinstance(last_seen, weakref.ref) else last_seen
|
|
45
|
+
)
|
|
46
|
+
|
|
38
47
|
exc = exc_info[1]
|
|
39
|
-
if
|
|
48
|
+
if last_seen is exc:
|
|
49
|
+
logger.info("DedupeIntegration dropped duplicated error event %s", exc)
|
|
40
50
|
return None
|
|
41
|
-
|
|
51
|
+
|
|
52
|
+
# we can only weakref non builtin types
|
|
53
|
+
try:
|
|
54
|
+
integration._last_seen.set(weakref.ref(exc))
|
|
55
|
+
except TypeError:
|
|
56
|
+
integration._last_seen.set(exc)
|
|
57
|
+
|
|
42
58
|
return event
|
|
43
59
|
|
|
44
60
|
@staticmethod
|
|
@@ -18,6 +18,13 @@ try:
|
|
|
18
18
|
)
|
|
19
19
|
from gql.transport import Transport, AsyncTransport # type: ignore[import-not-found]
|
|
20
20
|
from gql.transport.exceptions import TransportQueryError # type: ignore[import-not-found]
|
|
21
|
+
|
|
22
|
+
try:
|
|
23
|
+
# gql 4.0+
|
|
24
|
+
from gql import GraphQLRequest
|
|
25
|
+
except ImportError:
|
|
26
|
+
GraphQLRequest = None
|
|
27
|
+
|
|
21
28
|
except ImportError:
|
|
22
29
|
raise DidNotEnable("gql is not installed")
|
|
23
30
|
|
|
@@ -92,13 +99,13 @@ def _patch_execute():
|
|
|
92
99
|
real_execute = gql.Client.execute
|
|
93
100
|
|
|
94
101
|
@ensure_integration_enabled(GQLIntegration, real_execute)
|
|
95
|
-
def sentry_patched_execute(self,
|
|
102
|
+
def sentry_patched_execute(self, document_or_request, *args, **kwargs):
|
|
96
103
|
# type: (gql.Client, DocumentNode, Any, Any) -> Any
|
|
97
104
|
scope = sentry_sdk.get_isolation_scope()
|
|
98
|
-
scope.add_event_processor(_make_gql_event_processor(self,
|
|
105
|
+
scope.add_event_processor(_make_gql_event_processor(self, document_or_request))
|
|
99
106
|
|
|
100
107
|
try:
|
|
101
|
-
return real_execute(self,
|
|
108
|
+
return real_execute(self, document_or_request, *args, **kwargs)
|
|
102
109
|
except TransportQueryError as e:
|
|
103
110
|
event, hint = event_from_exception(
|
|
104
111
|
e,
|
|
@@ -112,8 +119,8 @@ def _patch_execute():
|
|
|
112
119
|
gql.Client.execute = sentry_patched_execute
|
|
113
120
|
|
|
114
121
|
|
|
115
|
-
def _make_gql_event_processor(client,
|
|
116
|
-
# type: (gql.Client, DocumentNode) -> EventProcessor
|
|
122
|
+
def _make_gql_event_processor(client, document_or_request):
|
|
123
|
+
# type: (gql.Client, Union[DocumentNode, gql.GraphQLRequest]) -> EventProcessor
|
|
117
124
|
def processor(event, hint):
|
|
118
125
|
# type: (Event, dict[str, Any]) -> Event
|
|
119
126
|
try:
|
|
@@ -130,6 +137,16 @@ def _make_gql_event_processor(client, document):
|
|
|
130
137
|
)
|
|
131
138
|
|
|
132
139
|
if should_send_default_pii():
|
|
140
|
+
if GraphQLRequest is not None and isinstance(
|
|
141
|
+
document_or_request, GraphQLRequest
|
|
142
|
+
):
|
|
143
|
+
# In v4.0.0, gql moved to using GraphQLRequest instead of
|
|
144
|
+
# DocumentNode in execute
|
|
145
|
+
# https://github.com/graphql-python/gql/pull/556
|
|
146
|
+
document = document_or_request.document
|
|
147
|
+
else:
|
|
148
|
+
document = document_or_request
|
|
149
|
+
|
|
133
150
|
request["data"] = _data_from_document(document)
|
|
134
151
|
contexts = event.setdefault("contexts", {})
|
|
135
152
|
response = contexts.setdefault("response", {})
|