diff --git a/sentry_sdk/integrations/openai_agents/spans/ai_client.py b/sentry_sdk/integrations/openai_agents/spans/ai_client.py index f4f02cb674..4edec05770 100644 --- a/sentry_sdk/integrations/openai_agents/spans/ai_client.py +++ b/sentry_sdk/integrations/openai_agents/spans/ai_client.py @@ -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 ( @@ -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, @@ -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 diff --git a/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py b/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py index c21145ac4a..908910e177 100644 --- a/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py +++ b/sentry_sdk/integrations/openai_agents/spans/invoke_agent.py @@ -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( @@ -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: @@ -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 diff --git a/sentry_sdk/integrations/openai_agents/utils.py b/sentry_sdk/integrations/openai_agents/utils.py index 224a5f66ba..08cc076510 100644 --- a/sentry_sdk/integrations/openai_agents/utils.py +++ b/sentry_sdk/integrations/openai_agents/utils.py @@ -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" diff --git a/tests/integrations/openai_agents/test_openai_agents.py b/tests/integrations/openai_agents/test_openai_agents.py index d8afab98a4..4ed618cf6f 100644 --- a/tests/integrations/openai_agents/test_openai_agents.py +++ b/tests/integrations/openai_agents/test_openai_agents.py @@ -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 @@ -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 @@ -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