Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 1 addition & 16 deletions sentry_sdk/integrations/openai_agents/patches/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from ..spans import ai_client_span, update_ai_client_span

if TYPE_CHECKING:
from typing import Any, Callable, Optional, Union
from typing import Any, Callable, Union

from sentry_sdk.tracing import Span

Expand All @@ -28,19 +28,6 @@
raise DidNotEnable("OpenAI Agents not installed")


def _set_response_model_on_agent_span(
agent: "agents.Agent", response_model: "Optional[str]"
) -> None:
"""Set the response model on the agent's invoke_agent span if available."""
if response_model:
agent_span = getattr(agent, "_sentry_agent_span", None)
if agent_span:
if isinstance(agent_span, StreamedSpan):
agent_span.set_attribute(SPANDATA.GEN_AI_RESPONSE_MODEL, response_model)
else:
agent_span.set_data(SPANDATA.GEN_AI_RESPONSE_MODEL, response_model)


def _inject_trace_propagation_headers(
hosted_tool: "HostedMCPTool", span: "Union[Span, StreamedSpan]"
) -> None:
Expand Down Expand Up @@ -123,7 +110,6 @@ async def wrapped_get_response(*args: "Any", **kwargs: "Any") -> "Any":
if response_model:
delattr(agent, "_sentry_response_model")

_set_response_model_on_agent_span(agent, response_model)
update_ai_client_span(span, result, response_model, agent)

return result
Expand Down Expand Up @@ -187,7 +173,6 @@ async def wrapped_stream_response(*args: "Any", **kwargs: "Any") -> "Any":
and streaming_response.model
else None
)
_set_response_model_on_agent_span(agent, response_model)
update_ai_client_span(
span, streaming_response, response_model, agent
)
Expand Down
46 changes: 0 additions & 46 deletions tests/integrations/openai_agents/test_openai_agents.py
Original file line number Diff line number Diff line change
Expand Up @@ -4881,23 +4881,10 @@ async def test_invoke_agent_span_includes_response_model(

sentry_sdk.flush()
spans = [item.payload for item in items if item.type == "span"]
invoke_agent_span = next(
span
for span in spans
if span["attributes"]["sentry.op"] == OP.GEN_AI_INVOKE_AGENT
)
ai_client_span = next(
span for span in spans if span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT
)

# Verify invoke_agent span has response model from API
assert invoke_agent_span["name"] == "invoke_agent test_agent"
assert "gen_ai.response.model" in invoke_agent_span["attributes"]
assert (
invoke_agent_span["attributes"]["gen_ai.response.model"]
== "gpt-4.1-2025-04-14"
)

# Also verify ai_client span has it
assert "gen_ai.response.model" in ai_client_span["attributes"]
assert (
Expand Down Expand Up @@ -4926,18 +4913,8 @@ async def test_invoke_agent_span_includes_response_model(

(transaction,) = events
spans = transaction["spans"]
invoke_agent_span = next(
span for span in spans if span["op"] == OP.GEN_AI_INVOKE_AGENT
)
ai_client_span = next(span for span in spans if span["op"] == OP.GEN_AI_CHAT)

# Verify invoke_agent span has response model from API
assert invoke_agent_span["description"] == "invoke_agent test_agent"
assert "gen_ai.response.model" in invoke_agent_span["data"]
assert (
invoke_agent_span["data"]["gen_ai.response.model"] == "gpt-4.1-2025-04-14"
)

# Also verify ai_client span has it
assert "gen_ai.response.model" in ai_client_span["data"]
assert ai_client_span["data"]["gen_ai.response.model"] == "gpt-4.1-2025-04-14"
Expand Down Expand Up @@ -5071,17 +5048,9 @@ def calculator(a: int, b: int) -> int:
sentry_sdk.flush()
spans = [item.payload for item in items]

invoke_agent_span = spans[3]
first_ai_client_span = spans[0]
second_ai_client_span = spans[2] # After tool span

# Invoke_agent span uses the LAST response model
assert "gen_ai.response.model" in invoke_agent_span["attributes"]
assert (
invoke_agent_span["attributes"]["gen_ai.response.model"]
== "gpt-4.1-2025-04-14"
)

# Each ai_client span has its own response model from the API
assert (
first_ai_client_span["attributes"]["gen_ai.response.model"] == "gpt-4-0613"
Expand Down Expand Up @@ -5115,17 +5084,9 @@ def calculator(a: int, b: int) -> int:

spans = [item.payload for item in items if item.type == "span"]

invoke_agent_span = spans[0]
first_ai_client_span = spans[1]
second_ai_client_span = spans[3] # After tool span

# Invoke_agent span uses the LAST response model
assert "gen_ai.response.model" in invoke_agent_span["attributes"]
assert (
invoke_agent_span["attributes"]["gen_ai.response.model"]
== "gpt-4.1-2025-04-14"
)

# Each ai_client span has its own response model from the API
assert (
first_ai_client_span["attributes"]["gen_ai.response.model"] == "gpt-4-0613"
Expand Down Expand Up @@ -5159,16 +5120,9 @@ def calculator(a: int, b: int) -> int:
(transaction,) = events
spans = transaction["spans"]

invoke_agent_span = spans[0]
first_ai_client_span = spans[1]
second_ai_client_span = spans[3] # After tool span

# Invoke_agent span uses the LAST response model
assert "gen_ai.response.model" in invoke_agent_span["data"]
assert (
invoke_agent_span["data"]["gen_ai.response.model"] == "gpt-4.1-2025-04-14"
)

# Each ai_client span has its own response model from the API
assert first_ai_client_span["data"]["gen_ai.response.model"] == "gpt-4-0613"
assert (
Expand Down
Loading