Skip to content

Commit f005b38

Browse files
Merge branch 'master' into webb/populate-tox/transitive-dependencies
2 parents 00e90a6 + fbaf664 commit f005b38

2 files changed

Lines changed: 24 additions & 9 deletions

File tree

sentry_sdk/integrations/pydantic_ai/__init__.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import functools
22

33
from sentry_sdk.integrations import DidNotEnable, Integration
4-
from sentry_sdk.utils import capture_internal_exceptions
4+
from sentry_sdk.utils import capture_internal_exceptions, parse_version
55

66
try:
77
import pydantic_ai # type: ignore # noqa: F401
@@ -10,6 +10,7 @@
1010
raise DidNotEnable("pydantic-ai not installed")
1111

1212

13+
from importlib.metadata import PackageNotFoundError, version
1314
from typing import TYPE_CHECKING
1415

1516
from .patches import (
@@ -128,7 +129,7 @@ class PydanticAIIntegration(Integration):
128129

129130
identifier = "pydantic_ai"
130131
origin = f"auto.ai.{identifier}"
131-
are_request_hooks_available = True
132+
using_request_hooks = False
132133

133134
def __init__(
134135
self, include_prompts: bool = True, handled_tool_call_exceptions: bool = True
@@ -158,15 +159,29 @@ def setup_once() -> None:
158159
_patch_agent_run()
159160
_patch_tool_execution()
160161

162+
PydanticAIIntegration.using_request_hooks = False
161163
try:
162-
from pydantic_ai.capabilities import Hooks
163-
except ImportError:
164-
Hooks = None
165-
PydanticAIIntegration.are_request_hooks_available = False
164+
PYDANTIC_AI_VERSION = version("pydantic-ai-slim")
165+
except PackageNotFoundError:
166+
return
167+
168+
PYDANTIC_AI_VERSION = parse_version(PYDANTIC_AI_VERSION)
169+
if PYDANTIC_AI_VERSION is None:
170+
return
166171

167-
if Hooks is None:
172+
# ModelRequestContext.model added in https://github.com/pydantic/pydantic-ai/commit/f1260dfe09907f17688eee1646daf898fc428d4c
173+
if PYDANTIC_AI_VERSION < (
174+
1,
175+
73,
176+
):
168177
_patch_graph_nodes()
169178
return
170179

180+
try:
181+
from pydantic_ai.capabilities import Hooks
182+
except ImportError:
183+
return
184+
185+
PydanticAIIntegration.using_request_hooks = True
171186
hooks = Hooks()
172187
register_hooks(hooks)

sentry_sdk/integrations/pydantic_ai/patches/agent_run.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ async def wrapper(self: "Any", *args: "Any", **kwargs: "Any") -> "Any":
109109
model = kwargs.get("model")
110110
model_settings = kwargs.get("model_settings")
111111

112-
if PydanticAIIntegration.are_request_hooks_available:
112+
if PydanticAIIntegration.using_request_hooks:
113113
metadata = kwargs.get("metadata")
114114
if metadata is None:
115115
kwargs["metadata"] = {"_sentry_span": None}
@@ -158,7 +158,7 @@ def wrapper(self: "Any", *args: "Any", **kwargs: "Any") -> "Any":
158158
model = kwargs.get("model")
159159
model_settings = kwargs.get("model_settings")
160160

161-
if PydanticAIIntegration.are_request_hooks_available:
161+
if PydanticAIIntegration.using_request_hooks:
162162
metadata = kwargs.get("metadata")
163163
if metadata is None:
164164
kwargs["metadata"] = {"_sentry_span": None}

0 commit comments

Comments
 (0)