Skip to content

Commit 159418e

Browse files
committed
Add test for the use of the 'vertex_ai' system, and improve how this system is determined.
1 parent 07cbf2f commit 159418e

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

instrumentation-genai/opentelemetry-instrumentation-google-genai/src/opentelemetry/instrumentation/google_genai/generate_content.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,25 @@ def _guess_genai_system_from_env():
9191
return _get_gemini_system_name()
9292

9393

94+
def _get_is_vertexai(models_object: Union[Models, AsyncModels]):
95+
# Since commit 8e561de04965bb8766db87ad8eea7c57c1040442 of "googleapis/python-genai",
96+
# it is possible to obtain the information using a documented property.
97+
if hasattr(models_object, 'vertexai'):
98+
vertexai_attr = getattr(models_object, 'vertexai')
99+
if vertexai_attr is not None:
100+
return vertexai_attr
101+
# For earlier revisions, it is necessary to deeply inspect the internals.
102+
if hasattr(models_object, '_api_client'):
103+
client = getattr(models_object, "_api_client")
104+
if not client:
105+
return None
106+
if hasattr(client, 'vertexai'):
107+
return getattr(client, "vertexai")
108+
return None
109+
94110

95111
def _determine_genai_system(models_object: Union[Models, AsyncModels]):
96-
client = getattr(models_object, "_api_client")
97-
if not client:
98-
return _guess_genai_system_from_env()
99-
vertexai_attr = getattr(client, "vertexai")
112+
vertexai_attr = _get_is_vertexai(models_object)
100113
if vertexai_attr is None:
101114
return _guess_genai_system_from_env()
102115
if vertexai_attr:

instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/generate_content/test_sync_nonstreaming.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,17 @@ def test_generated_span_has_minimal_genai_attributes(self):
7575
self.assertEqual(span.attributes["gen_ai.system"], "gemini")
7676
self.assertEqual(span.attributes["gen_ai.operation.name"], "GenerateContent")
7777

78+
def test_generated_span_has_vertex_ai_system_when_configured(self):
79+
self.set_use_vertex(True)
80+
self.configure_valid_response(response_text="Yep, it works!")
81+
self.generate_content(
82+
model="gemini-2.0-flash",
83+
contents="Does this work?")
84+
self.otel.assert_has_span_named("google.genai.Models.generate_content")
85+
span = self.otel.get_span_named("google.genai.Models.generate_content")
86+
self.assertEqual(span.attributes["gen_ai.system"], "vertex_ai")
87+
self.assertEqual(span.attributes["gen_ai.operation.name"], "GenerateContent")
88+
7889
def test_generated_span_counts_tokens(self):
7990
self.configure_valid_response(input_tokens=123, output_tokens=456)
8091
self.generate_content(

0 commit comments

Comments
 (0)