Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
1afe5d6
feat(openai): Set gen_ai.tool.definitions attribute
alexander-alderman-webb Jul 30, 2026
33faef1
add type
alexander-alderman-webb Jul 30, 2026
9ba36b2
feat(openai): Set attribute for the Responses API
alexander-alderman-webb Jul 30, 2026
7398e26
make iteration safer
alexander-alderman-webb Jul 30, 2026
0cd572b
clean up test
alexander-alderman-webb Jul 30, 2026
6d8546a
clean up
alexander-alderman-webb Jul 30, 2026
54ca1d9
higher version bound
alexander-alderman-webb Jul 30, 2026
f94e12e
fix import error
alexander-alderman-webb Jul 30, 2026
9f5b9ed
merge
alexander-alderman-webb Jul 30, 2026
8048f1d
fix import
alexander-alderman-webb Jul 30, 2026
e8f202e
Merge branch 'webb/openai-completions-gen-ai-tool-definitions' into w…
alexander-alderman-webb Jul 30, 2026
a9e263c
more import problems
alexander-alderman-webb Jul 30, 2026
2ceb5ef
restore import changes
alexander-alderman-webb Jul 30, 2026
ee8639e
Merge branch 'webb/openai-completions-gen-ai-tool-definitions' into w…
alexander-alderman-webb Jul 30, 2026
7c30a05
ref(openai-agents): Stop setting gen_ai.request.available_tools on Ex…
alexander-alderman-webb Jul 30, 2026
74b0823
type safety
alexander-alderman-webb Jul 30, 2026
7496d8e
Merge branch 'webb/openai-responses-gen-ai-tool-definitions' into web…
alexander-alderman-webb Jul 30, 2026
89f78bf
add quotes around type annotation
alexander-alderman-webb Jul 31, 2026
a15f21b
Merge branch 'webb/openai-responses-gen-ai-tool-definitions' into web…
alexander-alderman-webb Jul 31, 2026
23696f3
gate custom access
alexander-alderman-webb Jul 31, 2026
53ae691
Merge branch 'webb/openai-completions-gen-ai-tool-definitions' into w…
alexander-alderman-webb Jul 31, 2026
adf5e38
Merge branch 'webb/openai-responses-gen-ai-tool-definitions' into web…
alexander-alderman-webb Jul 31, 2026
a096645
merge master
alexander-alderman-webb Jul 31, 2026
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
12 changes: 12 additions & 0 deletions sentry_sdk/integrations/openai_agents/spans/ai_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from sentry_sdk.consts import OP, SPANDATA
from sentry_sdk.traces import StreamedSpan
from sentry_sdk.tracing_utils import has_span_streaming_enabled
from sentry_sdk.utils import safe_serialize

from ..consts import SPAN_ORIGIN
from ..utils import (
Expand Down Expand Up @@ -40,6 +41,8 @@ def ai_client_span(
SPANDATA.GEN_AI_OPERATION_NAME: "chat",
},
)

set_on_span = span.set_attribute
else:
span = sentry_sdk.start_span(
op=OP.GEN_AI_CHAT,
Expand All @@ -49,7 +52,16 @@ def ai_client_span(
# TODO-anton: remove hardcoded stuff and replace something that also works for embedding and so on
span.set_data(SPANDATA.GEN_AI_OPERATION_NAME, "chat")

set_on_span = span.set_data

_set_agent_data(span, agent)

if len(agent.tools) > 0:
set_on_span(
SPANDATA.GEN_AI_REQUEST_AVAILABLE_TOOLS,
safe_serialize([vars(tool) for tool in agent.tools]),
)

_set_input_data(span, get_response_kwargs)

return span
Expand Down
10 changes: 10 additions & 0 deletions sentry_sdk/integrations/openai_agents/spans/invoke_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ def invoke_agent_span(
SPANDATA.GEN_AI_OPERATION_NAME: "invoke_agent",
},
)

set_on_span = span.set_attribute
else:
start_span_function = get_start_span_function()
span = start_span_function(
Expand All @@ -49,6 +51,8 @@ def invoke_agent_span(

span.set_data(SPANDATA.GEN_AI_OPERATION_NAME, "invoke_agent")

set_on_span = span.set_data

if should_send_default_pii():
messages = []
if agent.instructions:
Expand Down Expand Up @@ -97,6 +101,12 @@ def invoke_agent_span(

_set_agent_data(span, agent)

if len(agent.tools) > 0:
set_on_span(
SPANDATA.GEN_AI_REQUEST_AVAILABLE_TOOLS,
safe_serialize([vars(tool) for tool in agent.tools]),
)

return span


Expand Down
6 changes: 0 additions & 6 deletions sentry_sdk/integrations/openai_agents/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,6 @@ def _set_agent_data(
agent.model_settings.frequency_penalty,
)

if len(agent.tools) > 0:
set_on_span(
SPANDATA.GEN_AI_REQUEST_AVAILABLE_TOOLS,
safe_serialize([vars(tool) for tool in agent.tools]),
)


def _set_usage_data(
span: "Union[sentry_sdk.tracing.Span, StreamedSpan]", usage: "Usage"
Expand Down
17 changes: 0 additions & 17 deletions tests/integrations/openai_agents/test_openai_agents.py
Original file line number Diff line number Diff line change
Expand Up @@ -2067,12 +2067,6 @@ def simple_test_tool(message: str) -> str:
assert tool_span["attributes"]["gen_ai.agent.name"] == "test_agent"
assert tool_span["attributes"]["gen_ai.operation.name"] == "execute_tool"

tool_span_available_tool = json.loads(
tool_span["attributes"]["gen_ai.request.available_tools"]
)[0]

assert all(tool_span_available_tool[k] == v for k, v in available_tool.items())

assert tool_span["attributes"]["gen_ai.request.max_tokens"] == 100
assert tool_span["attributes"]["gen_ai.request.model"] == "gpt-4"
assert tool_span["attributes"]["gen_ai.request.temperature"] == 0.7
Expand Down Expand Up @@ -2299,12 +2293,6 @@ def simple_test_tool(message: str) -> str:
assert tool_span["attributes"]["gen_ai.agent.name"] == "test_agent"
assert tool_span["attributes"]["gen_ai.operation.name"] == "execute_tool"

tool_span_available_tool = json.loads(
tool_span["attributes"]["gen_ai.request.available_tools"]
)[0]

assert all(tool_span_available_tool[k] == v for k, v in available_tool.items())

assert tool_span["attributes"]["gen_ai.request.max_tokens"] == 100
assert tool_span["attributes"]["gen_ai.request.model"] == "gpt-4"
assert tool_span["attributes"]["gen_ai.request.temperature"] == 0.7
Expand Down Expand Up @@ -2519,11 +2507,6 @@ def simple_test_tool(message: str) -> str:
assert tool_span["data"]["gen_ai.agent.name"] == "test_agent"
assert tool_span["data"]["gen_ai.operation.name"] == "execute_tool"

tool_span_available_tool = json.loads(
tool_span["data"]["gen_ai.request.available_tools"]
)[0]
assert all(tool_span_available_tool[k] == v for k, v in available_tool.items())

assert tool_span["data"]["gen_ai.request.max_tokens"] == 100
assert tool_span["data"]["gen_ai.request.model"] == "gpt-4"
assert tool_span["data"]["gen_ai.request.temperature"] == 0.7
Expand Down
Loading