diff --git a/sentry_sdk/integrations/anthropic.py b/sentry_sdk/integrations/anthropic.py index 0193f8497b..bc6eec5b54 100644 --- a/sentry_sdk/integrations/anthropic.py +++ b/sentry_sdk/integrations/anthropic.py @@ -455,7 +455,7 @@ def _set_common_input_data( """ Set input data for the span based on the provided keyword arguments for the anthropic message creation. """ - span.set_attribute(SPANDATA.GEN_AI_SYSTEM, "anthropic") + span.set_attribute(SPANDATA.GEN_AI_PROVIDER_NAME, "anthropic") span.set_attribute(SPANDATA.GEN_AI_OPERATION_NAME, "chat") if max_tokens is not None and _is_given(max_tokens): diff --git a/sentry_sdk/integrations/google_genai/__init__.py b/sentry_sdk/integrations/google_genai/__init__.py index 2aeb2a94a6..5e2e33ef5b 100644 --- a/sentry_sdk/integrations/google_genai/__init__.py +++ b/sentry_sdk/integrations/google_genai/__init__.py @@ -83,7 +83,7 @@ def new_generate_content_stream( "sentry.op": OP.GEN_AI_CHAT, "sentry.origin": ORIGIN, SPANDATA.GEN_AI_OPERATION_NAME: "chat", - SPANDATA.GEN_AI_SYSTEM: GEN_AI_SYSTEM, + SPANDATA.GEN_AI_PROVIDER_NAME: GEN_AI_SYSTEM, SPANDATA.GEN_AI_REQUEST_MODEL: model_name, SPANDATA.GEN_AI_RESPONSE_STREAMING: True, }, @@ -144,7 +144,7 @@ async def new_async_generate_content_stream( "sentry.op": OP.GEN_AI_CHAT, "sentry.origin": ORIGIN, SPANDATA.GEN_AI_OPERATION_NAME: "chat", - SPANDATA.GEN_AI_SYSTEM: GEN_AI_SYSTEM, + SPANDATA.GEN_AI_PROVIDER_NAME: GEN_AI_SYSTEM, SPANDATA.GEN_AI_REQUEST_MODEL: model_name, SPANDATA.GEN_AI_RESPONSE_STREAMING: True, }, @@ -201,7 +201,7 @@ def new_generate_content(self: "Any", *args: "Any", **kwargs: "Any") -> "Any": "sentry.op": OP.GEN_AI_CHAT, "sentry.origin": ORIGIN, SPANDATA.GEN_AI_OPERATION_NAME: "chat", - SPANDATA.GEN_AI_SYSTEM: GEN_AI_SYSTEM, + SPANDATA.GEN_AI_PROVIDER_NAME: GEN_AI_SYSTEM, SPANDATA.GEN_AI_REQUEST_MODEL: model_name, }, ) as chat_span: @@ -241,7 +241,7 @@ async def new_async_generate_content( "sentry.op": OP.GEN_AI_CHAT, "sentry.origin": ORIGIN, SPANDATA.GEN_AI_OPERATION_NAME: "chat", - SPANDATA.GEN_AI_SYSTEM: GEN_AI_SYSTEM, + SPANDATA.GEN_AI_PROVIDER_NAME: GEN_AI_SYSTEM, SPANDATA.GEN_AI_REQUEST_MODEL: model_name, }, ) as chat_span: @@ -278,7 +278,7 @@ def new_embed_content(self: "Any", *args: "Any", **kwargs: "Any") -> "Any": "sentry.op": OP.GEN_AI_EMBEDDINGS, "sentry.origin": ORIGIN, SPANDATA.GEN_AI_OPERATION_NAME: "embeddings", - SPANDATA.GEN_AI_SYSTEM: GEN_AI_SYSTEM, + SPANDATA.GEN_AI_PROVIDER_NAME: GEN_AI_SYSTEM, SPANDATA.GEN_AI_REQUEST_MODEL: model_name, }, ) as span: @@ -316,7 +316,7 @@ async def new_async_embed_content( "sentry.op": OP.GEN_AI_EMBEDDINGS, "sentry.origin": ORIGIN, SPANDATA.GEN_AI_OPERATION_NAME: "embeddings", - SPANDATA.GEN_AI_SYSTEM: GEN_AI_SYSTEM, + SPANDATA.GEN_AI_PROVIDER_NAME: GEN_AI_SYSTEM, SPANDATA.GEN_AI_REQUEST_MODEL: model_name, }, ) as span: diff --git a/sentry_sdk/integrations/google_genai/utils.py b/sentry_sdk/integrations/google_genai/utils.py index 5def5be34c..27ba665d2e 100644 --- a/sentry_sdk/integrations/google_genai/utils.py +++ b/sentry_sdk/integrations/google_genai/utils.py @@ -907,7 +907,7 @@ def set_span_data_for_request( ) -> None: """Set span data for the request.""" client = sentry_sdk.get_client() - span.set_attribute(SPANDATA.GEN_AI_SYSTEM, GEN_AI_SYSTEM) + span.set_attribute(SPANDATA.GEN_AI_PROVIDER_NAME, GEN_AI_SYSTEM) span.set_attribute(SPANDATA.GEN_AI_REQUEST_MODEL, model) if kwargs.get("stream", False): diff --git a/sentry_sdk/integrations/langchain.py b/sentry_sdk/integrations/langchain.py index 36451b936a..8daed9052f 100644 --- a/sentry_sdk/integrations/langchain.py +++ b/sentry_sdk/integrations/langchain.py @@ -384,7 +384,7 @@ def on_llm_start( ai_system = _get_ai_system(all_params) if ai_system: - span.set_attribute(SPANDATA.GEN_AI_SYSTEM, ai_system) + span.set_attribute(SPANDATA.GEN_AI_PROVIDER_NAME, ai_system) client = sentry_sdk.get_client() @@ -466,7 +466,7 @@ def on_chat_model_start( ai_system = _get_ai_system(all_params) if ai_system: - span.set_attribute(SPANDATA.GEN_AI_SYSTEM, ai_system) + span.set_attribute(SPANDATA.GEN_AI_PROVIDER_NAME, ai_system) agent_metadata = kwargs.get("metadata") if isinstance(agent_metadata, dict) and "lc_agent_name" in agent_metadata: diff --git a/sentry_sdk/integrations/litellm.py b/sentry_sdk/integrations/litellm.py index cd9d3dba69..7ca8894aed 100644 --- a/sentry_sdk/integrations/litellm.py +++ b/sentry_sdk/integrations/litellm.py @@ -110,7 +110,7 @@ def _input_callback(kwargs: "Dict[str, Any]") -> None: _store_span(kwargs, span) # Set basic data - set_data_normalized(span, SPANDATA.GEN_AI_SYSTEM, provider) + set_data_normalized(span, SPANDATA.GEN_AI_PROVIDER_NAME, provider) set_data_normalized(span, SPANDATA.GEN_AI_OPERATION_NAME, operation) # Record input/messages if allowed diff --git a/sentry_sdk/integrations/openai.py b/sentry_sdk/integrations/openai.py index 0dcd95aec5..48223e7041 100644 --- a/sentry_sdk/integrations/openai.py +++ b/sentry_sdk/integrations/openai.py @@ -798,7 +798,7 @@ def _new_sync_chat_completion( attributes={ "sentry.op": consts.OP.GEN_AI_CHAT, "sentry.origin": OpenAIIntegration.origin, - SPANDATA.GEN_AI_SYSTEM: "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", SPANDATA.GEN_AI_RESPONSE_STREAMING: is_streaming_response, }, ) @@ -873,7 +873,7 @@ async def _new_async_chat_completion( attributes={ "sentry.op": consts.OP.GEN_AI_CHAT, "sentry.origin": OpenAIIntegration.origin, - SPANDATA.GEN_AI_SYSTEM: "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", SPANDATA.GEN_AI_RESPONSE_STREAMING: is_streaming_response, }, ) @@ -1299,7 +1299,7 @@ def _new_sync_embeddings_create(f: "Any", *args: "Any", **kwargs: "Any") -> "Any attributes={ "sentry.op": consts.OP.GEN_AI_EMBEDDINGS, "sentry.origin": OpenAIIntegration.origin, - SPANDATA.GEN_AI_SYSTEM: "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", }, ) as span: _set_embeddings_input_data(span, kwargs, integration) @@ -1336,7 +1336,7 @@ async def _new_async_embeddings_create( attributes={ "sentry.op": consts.OP.GEN_AI_EMBEDDINGS, "sentry.origin": OpenAIIntegration.origin, - SPANDATA.GEN_AI_SYSTEM: "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", }, ) as span: _set_embeddings_input_data(span, kwargs, integration) @@ -1400,7 +1400,7 @@ def _new_sync_responses_create( attributes={ "sentry.op": consts.OP.GEN_AI_RESPONSES, "sentry.origin": OpenAIIntegration.origin, - SPANDATA.GEN_AI_SYSTEM: "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", SPANDATA.GEN_AI_RESPONSE_STREAMING: is_streaming_response, }, ) @@ -1465,7 +1465,7 @@ async def _new_async_responses_create( attributes={ "sentry.op": consts.OP.GEN_AI_RESPONSES, "sentry.origin": OpenAIIntegration.origin, - SPANDATA.GEN_AI_SYSTEM: "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", SPANDATA.GEN_AI_RESPONSE_STREAMING: is_streaming_response, }, ) diff --git a/sentry_sdk/integrations/openai_agents/utils.py b/sentry_sdk/integrations/openai_agents/utils.py index c27cea970e..3e384d745b 100644 --- a/sentry_sdk/integrations/openai_agents/utils.py +++ b/sentry_sdk/integrations/openai_agents/utils.py @@ -48,7 +48,7 @@ def _capture_exception(exc: "Any") -> None: def _set_agent_data(span: "StreamedSpan", agent: "agents.Agent") -> None: span.set_attribute( - SPANDATA.GEN_AI_SYSTEM, "openai" + SPANDATA.GEN_AI_PROVIDER_NAME, "openai" ) # See footnote for https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-system for explanation why. span.set_attribute(SPANDATA.GEN_AI_AGENT_NAME, agent.name) diff --git a/sentry_sdk/integrations/pydantic_ai/utils.py b/sentry_sdk/integrations/pydantic_ai/utils.py index 29f7da3558..d6bf7a8872 100644 --- a/sentry_sdk/integrations/pydantic_ai/utils.py +++ b/sentry_sdk/integrations/pydantic_ai/utils.py @@ -115,7 +115,7 @@ def _set_model_data( if model_obj: # Set system from model if hasattr(model_obj, "system"): - span.set_attribute(SPANDATA.GEN_AI_SYSTEM, model_obj.system) + span.set_attribute(SPANDATA.GEN_AI_PROVIDER_NAME, model_obj.system) # Set model name model_name = _get_model_name(model_obj) diff --git a/tests/integrations/anthropic/test_anthropic.py b/tests/integrations/anthropic/test_anthropic.py index eef7771359..b8dcb6245c 100644 --- a/tests/integrations/anthropic/test_anthropic.py +++ b/tests/integrations/anthropic/test_anthropic.py @@ -189,7 +189,7 @@ def test_nonstreaming_create_message( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -295,7 +295,7 @@ def test_nonstreaming_create_message_data_collection( (span,) = [s for s in spans if s["attributes"]["sentry.op"] == OP.GEN_AI_CHAT] span_data = span["attributes"] - assert span_data[SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span_data[SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span_data[SPANDATA.GEN_AI_REQUEST_MODEL] == "model" assert span_data[SPANDATA.GEN_AI_REQUEST_MAX_TOKENS] == 1024 @@ -443,7 +443,7 @@ async def test_nonstreaming_create_message_data_collection_async( (span,) = [s for s in spans if s["attributes"]["sentry.op"] == OP.GEN_AI_CHAT] span_data = span["attributes"] - assert span_data[SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span_data[SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span_data[SPANDATA.GEN_AI_REQUEST_MODEL] == "model" assert span_data[SPANDATA.GEN_AI_REQUEST_MAX_TOKENS] == 1024 @@ -731,7 +731,7 @@ async def test_nonstreaming_create_message_async( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -857,7 +857,7 @@ def test_streaming_create_message( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -992,7 +992,7 @@ def test_streaming_create_message_data_collection( (span,) = [s for s in spans if s["attributes"]["sentry.op"] == OP.GEN_AI_CHAT] span_data = span["attributes"] - assert span_data[SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span_data[SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span_data[SPANDATA.GEN_AI_REQUEST_MODEL] == "model" assert span_data[SPANDATA.GEN_AI_REQUEST_MAX_TOKENS] == 1024 @@ -1218,7 +1218,7 @@ def test_streaming_create_message_close( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -1318,7 +1318,7 @@ def test_streaming_create_message_api_error( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -1436,7 +1436,7 @@ def test_stream_messages( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -1683,7 +1683,7 @@ def test_stream_messages_close( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -1783,7 +1783,7 @@ def test_stream_messages_api_error( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -1906,7 +1906,7 @@ async def test_streaming_create_message_async( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -2158,7 +2158,7 @@ async def test_streaming_create_message_async_close( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -2262,7 +2262,7 @@ async def test_streaming_create_message_async_api_error( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -2385,7 +2385,7 @@ async def test_stream_message_async( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -2634,7 +2634,7 @@ async def test_stream_messages_async_api_error( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -2750,7 +2750,7 @@ async def test_stream_messages_async_close( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -2896,7 +2896,7 @@ def test_streaming_create_message_with_input_json_delta( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -3045,7 +3045,7 @@ def test_stream_messages_with_input_json_delta( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -3201,7 +3201,7 @@ async def test_streaming_create_message_with_input_json_delta_async( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -3359,7 +3359,7 @@ async def test_stream_message_with_input_json_delta_async( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -3439,7 +3439,7 @@ def test_span_status_error( sentry_sdk.flush() spans = [item.payload for item in items if item.type == "span"] assert spans[0]["status"] == "error" - assert spans[0]["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert spans[0]["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert spans[0]["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" @@ -3473,7 +3473,7 @@ async def test_span_status_error_async( sentry_sdk.flush() spans = [item.payload for item in items if item.type == "span"] assert spans[0]["status"] == "error" - assert spans[0]["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert spans[0]["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert spans[0]["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" @@ -3533,7 +3533,7 @@ def test_span_origin( sentry_sdk.flush() spans = [item.payload for item in items] assert spans[0]["attributes"]["sentry.origin"] == "auto.ai.anthropic" - assert spans[0]["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert spans[0]["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert spans[0]["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" @@ -3565,7 +3565,7 @@ async def test_span_origin_async( sentry_sdk.flush() spans = [item.payload for item in items] assert spans[0]["attributes"]["sentry.origin"] == "auto.ai.anthropic" - assert spans[0]["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert spans[0]["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert spans[0]["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" @@ -3691,7 +3691,7 @@ def mock_messages_create(*args, **kwargs): # Verify that the span was created correctly assert span["attributes"]["sentry.op"] == "gen_ai.chat" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert SPANDATA.GEN_AI_REQUEST_MESSAGES in span["attributes"] @@ -3757,7 +3757,7 @@ def test_nonstreaming_create_message_with_system_prompt( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -3847,7 +3847,7 @@ async def test_nonstreaming_create_message_with_system_prompt_async( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -3977,7 +3977,7 @@ def test_streaming_create_message_with_system_prompt( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -4104,7 +4104,7 @@ def test_stream_messages_with_system_prompt( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -4234,7 +4234,7 @@ async def test_stream_message_with_system_prompt_async( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -4367,7 +4367,7 @@ async def test_streaming_create_message_with_system_prompt_async( assert span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert span["name"] == "chat model" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "model" @@ -4442,7 +4442,7 @@ def test_system_prompt_with_complex_structure( (span,) = spans - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "anthropic" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "anthropic" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" assert SPANDATA.GEN_AI_SYSTEM_INSTRUCTIONS in span["attributes"] diff --git a/tests/integrations/google_genai/test_google_genai.py b/tests/integrations/google_genai/test_google_genai.py index 845d7a971e..e2332770b6 100644 --- a/tests/integrations/google_genai/test_google_genai.py +++ b/tests/integrations/google_genai/test_google_genai.py @@ -165,7 +165,7 @@ def test_nonstreaming_generate_content( assert chat_span["attributes"]["sentry.op"] == OP.GEN_AI_CHAT assert chat_span["name"] == "chat gemini-1.5-flash" assert chat_span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" - assert chat_span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "gcp.gemini" + assert chat_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "gcp.gemini" assert chat_span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "gemini-1.5-flash" if send_default_pii and include_prompts: @@ -1075,7 +1075,7 @@ def test_embed_content( assert embed_span["attributes"]["sentry.op"] == OP.GEN_AI_EMBEDDINGS assert embed_span["name"] == "embeddings text-embedding-004" assert embed_span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "embeddings" - assert embed_span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "gcp.gemini" + assert embed_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "gcp.gemini" assert ( embed_span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "text-embedding-004" ) @@ -1307,7 +1307,7 @@ async def test_async_embed_content( assert embed_span["attributes"]["sentry.op"] == OP.GEN_AI_EMBEDDINGS assert embed_span["name"] == "embeddings text-embedding-004" assert embed_span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "embeddings" - assert embed_span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "gcp.gemini" + assert embed_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "gcp.gemini" assert ( embed_span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "text-embedding-004" ) @@ -2488,7 +2488,7 @@ def test_generate_content_data_collection( assert key not in span_data, f"{key} should not have been collected" # Data collection never gates non-PII attributes - assert span_data[SPANDATA.GEN_AI_SYSTEM] == "gcp.gemini" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "gcp.gemini" assert span_data[SPANDATA.GEN_AI_REQUEST_MODEL] == "gemini-1.5-flash" assert span_data[SPANDATA.GEN_AI_REQUEST_TEMPERATURE] == 0.7 assert span_data[SPANDATA.GEN_AI_REQUEST_MAX_TOKENS] == 100 diff --git a/tests/integrations/langchain/test_langchain.py b/tests/integrations/langchain/test_langchain.py index 89086e4120..0faca35740 100644 --- a/tests/integrations/langchain/test_langchain.py +++ b/tests/integrations/langchain/test_langchain.py @@ -348,7 +348,7 @@ def test_langchain_text_completion( llm_span = llm_spans[0] assert llm_span["name"] == "text_completion gpt-3.5-turbo" - assert llm_span["attributes"]["gen_ai.system"] == "openai" + assert llm_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert llm_span["attributes"]["gen_ai.function_id"] == "my-snazzy-pipeline" assert llm_span["attributes"]["gen_ai.request.model"] == "gpt-3.5-turbo" assert ( @@ -626,7 +626,7 @@ def test_langchain_create_agent( assert len(chat_spans) == 1 assert chat_spans[0]["attributes"]["sentry.origin"] == "auto.ai.langchain" - assert chat_spans[0]["attributes"]["gen_ai.system"] == "openai-chat" + assert chat_spans[0]["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai-chat" assert chat_spans[0]["attributes"]["gen_ai.agent.name"] == "word_length_agent" assert chat_spans[0]["attributes"]["gen_ai.usage.input_tokens"] == 10 @@ -823,7 +823,7 @@ def test_tool_execution_span( assert ( chat_spans[0]["attributes"][SPANDATA.GEN_AI_USAGE_REASONING_OUTPUT_TOKENS] == 10 ) - assert chat_spans[0]["attributes"]["gen_ai.system"] == "openai-chat" + assert chat_spans[0]["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai-chat" assert chat_spans[1]["attributes"]["gen_ai.usage.input_tokens"] == 89 assert chat_spans[1]["attributes"]["gen_ai.usage.output_tokens"] == 28 @@ -838,7 +838,7 @@ def test_tool_execution_span( assert ( chat_spans[1]["attributes"][SPANDATA.GEN_AI_USAGE_REASONING_OUTPUT_TOKENS] == 11 ) - assert chat_spans[1]["attributes"]["gen_ai.system"] == "openai-chat" + assert chat_spans[1]["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai-chat" if LANGCHAIN_OPENAI_VERSION >= (0, 3, 13): assert ( @@ -3237,9 +3237,9 @@ def test_langchain_ai_system_detection( llm_span = llm_spans[0] if expected_system is not None: - assert llm_span["attributes"][SPANDATA.GEN_AI_SYSTEM] == expected_system + assert llm_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == expected_system else: - assert SPANDATA.GEN_AI_SYSTEM not in llm_span.get("attributes", {}) + assert SPANDATA.GEN_AI_PROVIDER_NAME not in llm_span.get("attributes", {}) class TestTransformLangchainMessageContent: @@ -3543,7 +3543,7 @@ def test_langchain_chat_data_collection( # Data collection never gates non-PII attributes assert span_data[SPANDATA.GEN_AI_REQUEST_MODEL] == "gpt-3.5-turbo" - assert span_data[SPANDATA.GEN_AI_SYSTEM] == "openai-chat" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "openai-chat" assert span_data[SPANDATA.GEN_AI_USAGE_TOTAL_TOKENS] == 30 @@ -3737,7 +3737,7 @@ def test_langchain_text_completion_data_collection( # Data collection never gates non-PII attributes assert span_data[SPANDATA.GEN_AI_REQUEST_MODEL] == "gpt-3.5-turbo" - assert span_data[SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span_data[SPANDATA.GEN_AI_REQUEST_TEMPERATURE] == 0.7 assert span_data[SPANDATA.GEN_AI_USAGE_TOTAL_TOKENS] == 25 diff --git a/tests/integrations/litellm/test_litellm.py b/tests/integrations/litellm/test_litellm.py index f22505e271..920122d546 100644 --- a/tests/integrations/litellm/test_litellm.py +++ b/tests/integrations/litellm/test_litellm.py @@ -212,7 +212,7 @@ def test_nonstreaming_chat_completion( assert span["name"] == "chat gpt-3.5-turbo" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "gpt-3.5-turbo" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_MODEL] == "gpt-3.5-turbo" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" if send_default_pii and include_prompts: @@ -312,7 +312,7 @@ async def test_async_nonstreaming_chat_completion( assert span["name"] == "chat gpt-3.5-turbo" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "gpt-3.5-turbo" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_MODEL] == "gpt-3.5-turbo" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_OPERATION_NAME] == "chat" if send_default_pii and include_prompts: @@ -1094,7 +1094,7 @@ def test_multiple_providers( spans = [item.payload for item in items] for span in spans: # The provider should be detected by litellm.get_llm_provider - assert SPANDATA.GEN_AI_SYSTEM in span["attributes"] + assert SPANDATA.GEN_AI_PROVIDER_NAME in span["attributes"] @pytest.mark.asyncio(loop_scope="session") @@ -1199,7 +1199,7 @@ async def test_async_multiple_providers( spans = [item.payload for item in items] for span in spans: # The provider should be detected by litellm.get_llm_provider - assert SPANDATA.GEN_AI_SYSTEM in span["attributes"] + assert SPANDATA.GEN_AI_PROVIDER_NAME in span["attributes"] def test_additional_parameters( diff --git a/tests/integrations/openai/test_openai.py b/tests/integrations/openai/test_openai.py index aa527b17b4..ac90597d13 100644 --- a/tests/integrations/openai/test_openai.py +++ b/tests/integrations/openai/test_openai.py @@ -315,7 +315,7 @@ def test_nonstreaming_chat_completion_no_prompts( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.chat" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_STREAMING] is False assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "some-model" @@ -461,7 +461,7 @@ def test_nonstreaming_chat_completion( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.chat" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_STREAMING] is False assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "some-model" @@ -594,7 +594,7 @@ def test_completions_api_data_collection( assert span_data[SPANDATA.GEN_AI_REQUEST_FREQUENCY_PENALTY] == 0.2 assert span_data[SPANDATA.GEN_AI_REQUEST_TEMPERATURE] == 0.7 assert span_data[SPANDATA.GEN_AI_REQUEST_TOP_P] == 0.9 - assert span_data[SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" for key, value in expected_present.items(): assert span_data[key] == value @@ -1064,7 +1064,7 @@ async def test_nonstreaming_chat_completion_async_no_prompts( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.chat" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_STREAMING] is False assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "some-model" @@ -1208,7 +1208,7 @@ async def test_nonstreaming_chat_completion_async( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.chat" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_STREAMING] is False assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "some-model" @@ -1349,7 +1349,7 @@ def test_streaming_chat_completion_no_prompts( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.chat" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_STREAMING] is True assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "some-model" @@ -1852,7 +1852,7 @@ def test_streaming_chat_completion( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.chat" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_STREAMING] is True assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "some-model" @@ -2002,7 +2002,7 @@ async def test_streaming_chat_completion_async_no_prompts( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.chat" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_STREAMING] is True assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "some-model" @@ -2215,7 +2215,7 @@ async def test_streaming_chat_completion_async( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.chat" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_RESPONSE_STREAMING] is True assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "some-model" @@ -2388,7 +2388,7 @@ def test_embeddings_create_no_pii( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.embeddings" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "text-embedding-3-large" assert SPANDATA.GEN_AI_EMBEDDINGS_INPUT not in span["attributes"] @@ -2504,7 +2504,7 @@ def test_embeddings_create( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.embeddings" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "text-embedding-3-large" assert ( @@ -2604,7 +2604,7 @@ def test_embeddings_create_data_collection( lambda: client.embeddings.create(input="hello", model="text-embedding-3-large"), ) - assert span_data[SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span_data[SPANDATA.GEN_AI_OPERATION_NAME] == "embeddings" assert span_data[SPANDATA.GEN_AI_REQUEST_MODEL] == "text-embedding-3-large" @@ -2715,7 +2715,7 @@ async def test_embeddings_create_async_no_pii( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.embeddings" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "text-embedding-3-large" assert SPANDATA.GEN_AI_EMBEDDINGS_INPUT not in span["attributes"] @@ -2832,7 +2832,7 @@ async def test_embeddings_create_async( sentry_sdk.flush() span = next(item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.embeddings" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MODEL] == "text-embedding-3-large" assert ( @@ -2921,7 +2921,7 @@ async def test_embeddings_create_async_data_collection( assert span["attributes"]["sentry.op"] == "gen_ai.embeddings" span_data = span["attributes"] - assert span_data[SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span_data[SPANDATA.GEN_AI_OPERATION_NAME] == "embeddings" assert span_data[SPANDATA.GEN_AI_REQUEST_MODEL] == "text-embedding-3-large" @@ -3680,7 +3680,7 @@ def test_ai_client_span_responses_api_no_pii( "gen_ai.request.model": "gpt-4o", "gen_ai.response.model": "response-model-id", "gen_ai.response.streaming": False, - "gen_ai.system": "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", "gen_ai.usage.input_tokens": 20, "gen_ai.usage.input_tokens.cached": 5, "gen_ai.usage.output_tokens": 10, @@ -3951,7 +3951,7 @@ def test_ai_client_span_responses_api( "gen_ai.request.temperature": 0.7, "gen_ai.request.top_p": 0.9, "gen_ai.request.reasoning.level": "high", - "gen_ai.system": "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", "gen_ai.response.model": "response-model-id", "gen_ai.response.streaming": False, "gen_ai.usage.input_tokens": 20, @@ -4144,7 +4144,7 @@ def test_responses_api_data_collection( assert span_data["gen_ai.request.temperature"] == 0.7 assert span_data["gen_ai.request.top_p"] == 0.9 assert span_data["gen_ai.request.reasoning.level"] == "high" - assert span_data["gen_ai.system"] == "openai" + assert span_data[SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" for key, value in expected_present.items(): assert span_data[key] == value @@ -4763,7 +4763,7 @@ async def test_ai_client_span_responses_async_api( "gen_ai.request.model": "gpt-4o", "gen_ai.response.model": "response-model-id", "gen_ai.response.streaming": False, - "gen_ai.system": "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", "gen_ai.usage.input_tokens": 20, "gen_ai.usage.input_tokens.cached": 5, "gen_ai.usage.output_tokens": 10, @@ -4990,7 +4990,7 @@ async def test_ai_client_span_streaming_responses_async_api( "gen_ai.request.reasoning.level": "high", "gen_ai.response.model": "response-model-id", "gen_ai.response.streaming": True, - "gen_ai.system": "openai", + SPANDATA.GEN_AI_PROVIDER_NAME: "openai", "gen_ai.response.time_to_first_token": mock.ANY, "gen_ai.usage.input_tokens": 20, "gen_ai.usage.input_tokens.cached": 5, @@ -5185,7 +5185,7 @@ def test_streaming_responses_api( sentry_sdk.flush() (span,) = (item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.responses" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MAX_TOKENS] == 100 assert span["attributes"][SPANDATA.GEN_AI_REQUEST_TEMPERATURE] == 0.7 assert span["attributes"][SPANDATA.GEN_AI_REQUEST_TOP_P] == 0.9 @@ -5263,7 +5263,7 @@ async def test_streaming_responses_api_async( sentry_sdk.flush() (span,) = (item.payload for item in items) assert span["attributes"]["sentry.op"] == "gen_ai.responses" - assert span["attributes"][SPANDATA.GEN_AI_SYSTEM] == "openai" + assert span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert span["attributes"][SPANDATA.GEN_AI_REQUEST_MAX_TOKENS] == 100 assert span["attributes"][SPANDATA.GEN_AI_REQUEST_TEMPERATURE] == 0.7 assert span["attributes"][SPANDATA.GEN_AI_REQUEST_TOP_P] == 0.9 diff --git a/tests/integrations/openai_agents/test_openai_agents.py b/tests/integrations/openai_agents/test_openai_agents.py index b47659fadd..fa5c253eae 100644 --- a/tests/integrations/openai_agents/test_openai_agents.py +++ b/tests/integrations/openai_agents/test_openai_agents.py @@ -480,7 +480,7 @@ async def test_agent_invocation_span_no_pii( assert "gen_ai.response.text" not in invoke_agent_span["attributes"] assert invoke_agent_span["attributes"]["gen_ai.operation.name"] == "invoke_agent" - assert invoke_agent_span["attributes"]["gen_ai.system"] == "openai" + assert invoke_agent_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert invoke_agent_span["attributes"]["gen_ai.agent.name"] == "test_agent" assert invoke_agent_span["attributes"]["gen_ai.request.max_tokens"] == 100 assert invoke_agent_span["attributes"]["gen_ai.request.model"] == "gpt-4" @@ -489,7 +489,7 @@ async def test_agent_invocation_span_no_pii( assert ai_client_span["name"] == "chat gpt-4" assert ai_client_span["attributes"]["gen_ai.operation.name"] == "chat" - assert ai_client_span["attributes"]["gen_ai.system"] == "openai" + assert ai_client_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert ai_client_span["attributes"]["gen_ai.agent.name"] == "test_agent" assert ai_client_span["attributes"]["gen_ai.request.max_tokens"] == 100 assert ai_client_span["attributes"]["gen_ai.request.model"] == "gpt-4" @@ -1228,7 +1228,7 @@ async def test_agent_invocation_span( ) assert invoke_agent_span["attributes"]["gen_ai.operation.name"] == "invoke_agent" - assert invoke_agent_span["attributes"]["gen_ai.system"] == "openai" + assert invoke_agent_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert invoke_agent_span["attributes"]["gen_ai.agent.name"] == "test_agent" assert invoke_agent_span["attributes"]["gen_ai.request.max_tokens"] == 100 assert invoke_agent_span["attributes"]["gen_ai.request.model"] == "gpt-4" @@ -1237,7 +1237,7 @@ async def test_agent_invocation_span( assert ai_client_span["name"] == "chat gpt-4" assert ai_client_span["attributes"]["gen_ai.operation.name"] == "chat" - assert ai_client_span["attributes"]["gen_ai.system"] == "openai" + assert ai_client_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert ai_client_span["attributes"]["gen_ai.agent.name"] == "test_agent" assert ai_client_span["attributes"]["gen_ai.request.max_tokens"] == 100 assert ai_client_span["attributes"]["gen_ai.request.model"] == "gpt-4" @@ -1350,7 +1350,7 @@ def test_agent_invocation_span_sync_no_pii( assert invoke_agent_span["name"] == "invoke_agent test_agent" assert invoke_agent_span["attributes"]["gen_ai.operation.name"] == "invoke_agent" - assert invoke_agent_span["attributes"]["gen_ai.system"] == "openai" + assert invoke_agent_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert invoke_agent_span["attributes"]["gen_ai.agent.name"] == "test_agent" assert invoke_agent_span["attributes"]["gen_ai.request.max_tokens"] == 100 assert invoke_agent_span["attributes"]["gen_ai.request.model"] == "gpt-4" @@ -1359,7 +1359,7 @@ def test_agent_invocation_span_sync_no_pii( assert ai_client_span["name"] == "chat gpt-4" assert ai_client_span["attributes"]["gen_ai.operation.name"] == "chat" - assert ai_client_span["attributes"]["gen_ai.system"] == "openai" + assert ai_client_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert ai_client_span["attributes"]["gen_ai.agent.name"] == "test_agent" assert ai_client_span["attributes"]["gen_ai.request.max_tokens"] == 100 assert ai_client_span["attributes"]["gen_ai.request.model"] == "gpt-4" @@ -1614,7 +1614,7 @@ def test_agent_invocation_span_sync( assert invoke_agent_span["name"] == "invoke_agent test_agent" assert invoke_agent_span["attributes"]["gen_ai.operation.name"] == "invoke_agent" - assert invoke_agent_span["attributes"]["gen_ai.system"] == "openai" + assert invoke_agent_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert invoke_agent_span["attributes"]["gen_ai.agent.name"] == "test_agent" assert invoke_agent_span["attributes"]["gen_ai.request.max_tokens"] == 100 assert invoke_agent_span["attributes"]["gen_ai.request.model"] == "gpt-4" @@ -1623,7 +1623,7 @@ def test_agent_invocation_span_sync( assert ai_client_span["name"] == "chat gpt-4" assert ai_client_span["attributes"]["gen_ai.operation.name"] == "chat" - assert ai_client_span["attributes"]["gen_ai.system"] == "openai" + assert ai_client_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert ai_client_span["attributes"]["gen_ai.agent.name"] == "test_agent" assert ai_client_span["attributes"]["gen_ai.request.max_tokens"] == 100 assert ai_client_span["attributes"]["gen_ai.request.model"] == "gpt-4" @@ -2039,11 +2039,11 @@ async def test_tool_execution_span( assert agent_span["attributes"]["gen_ai.request.model"] == "gpt-4" assert agent_span["attributes"]["gen_ai.request.temperature"] == 0.7 assert agent_span["attributes"]["gen_ai.request.top_p"] == 1.0 - assert agent_span["attributes"]["gen_ai.system"] == "openai" + assert agent_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert ai_client_span1["name"] == "chat gpt-4" assert ai_client_span1["attributes"]["gen_ai.operation.name"] == "chat" - assert ai_client_span1["attributes"]["gen_ai.system"] == "openai" + assert ai_client_span1["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert ai_client_span1["attributes"]["gen_ai.agent.name"] == "test_agent" ai_client_span1_available_tool = json.loads( @@ -2100,7 +2100,7 @@ async def test_tool_execution_span( assert tool_span["attributes"]["gen_ai.request.model"] == "gpt-4" assert tool_span["attributes"]["gen_ai.request.temperature"] == 0.7 assert tool_span["attributes"]["gen_ai.request.top_p"] == 1.0 - assert tool_span["attributes"]["gen_ai.system"] == "openai" + assert tool_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert tool_span["attributes"]["gen_ai.tool.description"] == "A simple tool" assert tool_span["attributes"]["gen_ai.tool.input"] == '{"message": "hello"}' assert tool_span["attributes"]["gen_ai.tool.name"] == "simple_test_tool" @@ -2157,7 +2157,7 @@ async def test_tool_execution_span( ai_client_span2["attributes"]["gen_ai.response.text"] == "Task completed using the tool" ) - assert ai_client_span2["attributes"]["gen_ai.system"] == "openai" + assert ai_client_span2["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert ai_client_span2["attributes"]["gen_ai.usage.input_tokens.cached"] == 0 assert ai_client_span2["attributes"]["gen_ai.usage.input_tokens"] == 15 assert ai_client_span2["attributes"]["gen_ai.usage.output_tokens.reasoning"] == 0 @@ -2289,7 +2289,7 @@ async def test_run_streamed_tool_execution_span( assert agent_span["attributes"]["gen_ai.request.model"] == "gpt-4" assert agent_span["attributes"]["gen_ai.request.temperature"] == 0.7 assert agent_span["attributes"]["gen_ai.request.top_p"] == 1.0 - assert agent_span["attributes"]["gen_ai.system"] == "openai" + assert agent_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert tool_span["name"] == "execute_tool simple_test_tool" assert tool_span["attributes"]["gen_ai.agent.name"] == "test_agent" @@ -2299,7 +2299,7 @@ async def test_run_streamed_tool_execution_span( assert tool_span["attributes"]["gen_ai.request.model"] == "gpt-4" assert tool_span["attributes"]["gen_ai.request.temperature"] == 0.7 assert tool_span["attributes"]["gen_ai.request.top_p"] == 1.0 - assert tool_span["attributes"]["gen_ai.system"] == "openai" + assert tool_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "openai" assert tool_span["attributes"]["gen_ai.tool.description"] == "A simple tool" assert tool_span["attributes"]["gen_ai.tool.input"] == '{"message": "hello"}' assert tool_span["attributes"]["gen_ai.tool.name"] == "simple_test_tool" diff --git a/tests/integrations/pydantic_ai/test_pydantic_ai.py b/tests/integrations/pydantic_ai/test_pydantic_ai.py index 8255ab3386..904a616a7c 100644 --- a/tests/integrations/pydantic_ai/test_pydantic_ai.py +++ b/tests/integrations/pydantic_ai/test_pydantic_ai.py @@ -932,8 +932,8 @@ async def test_gen_ai_system( chat_span = chat_spans[0] # gen_ai.system should be set from the model (TestModel -> 'test') - assert "gen_ai.system" in chat_span["attributes"] - assert chat_span["attributes"]["gen_ai.system"] == "test" + assert SPANDATA.GEN_AI_PROVIDER_NAME in chat_span["attributes"] + assert chat_span["attributes"][SPANDATA.GEN_AI_PROVIDER_NAME] == "test" @pytest.mark.asyncio