From b0b0afeb42aa2f713492393f52d505da6d5e4dd1 Mon Sep 17 00:00:00 2001 From: Tim Paine <3105306+timkpaine@users.noreply.github.com> Date: Sun, 13 Jul 2025 22:22:48 -0400 Subject: [PATCH 1/2] fix: defer google-generativeai imports --- .../instrumentation/google_generativeai/__init__.py | 11 +++++++---- .../tests/test_generate_content.py | 8 ++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/__init__.py b/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/__init__.py index 1dd276623e..9e7ce0b46f 100644 --- a/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/__init__.py +++ b/packages/opentelemetry-instrumentation-google-generativeai/opentelemetry/instrumentation/google_generativeai/__init__.py @@ -2,9 +2,8 @@ import logging import types -from typing import Collection +from typing import Collection, TYPE_CHECKING -from google.genai.types import GenerateContentResponse from opentelemetry import context as context_api from opentelemetry._events import get_event_logger from opentelemetry.instrumentation.google_generativeai.config import Config @@ -33,6 +32,10 @@ from opentelemetry.trace import SpanKind, get_tracer from wrapt import wrap_function_wrapper +if TYPE_CHECKING: + from google.genai.types import GenerateContentResponse + + logger = logging.getLogger(__name__) WRAPPED_METHODS = [ @@ -61,7 +64,7 @@ def is_async_streaming_response(response): def _build_from_streaming_response( span, - response: GenerateContentResponse, + response: "GenerateContentResponse", llm_model, event_logger, ): @@ -81,7 +84,7 @@ def _build_from_streaming_response( async def _abuild_from_streaming_response( - span, response: GenerateContentResponse, llm_model, event_logger + span, response: "GenerateContentResponse", llm_model, event_logger ): complete_response = "" async for item in response: diff --git a/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py b/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py index 11a9787e60..c867991160 100644 --- a/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py +++ b/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py @@ -1,3 +1,5 @@ +import sys + from opentelemetry.sdk._logs import LogData from opentelemetry.semconv._incubating.attributes import ( event_attributes as EventAttributes, @@ -163,3 +165,9 @@ def assert_message_in_logs(log: LogData, event_name: str, expected_content: dict else: assert log.log_record.body assert dict(log.log_record.body) == expected_content + +def test_imports(): + # Ensure heavy dependencies are not accidentally imported + import opentelemetry.instrumentation.google_generativeai # noqa: F401 + + assert "google.generai" not in sys.modules From 490213fa32a95aece2722f34594560c1a7f93da9 Mon Sep 17 00:00:00 2001 From: Tim Paine <3105306+timkpaine@users.noreply.github.com> Date: Thu, 21 Aug 2025 15:03:25 -0400 Subject: [PATCH 2/2] Update imports to reflect google submodule change --- .../tests/test_generate_content.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py b/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py index c867991160..9a15c0b2dc 100644 --- a/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py +++ b/packages/opentelemetry-instrumentation-google-generativeai/tests/test_generate_content.py @@ -166,8 +166,9 @@ def assert_message_in_logs(log: LogData, event_name: str, expected_content: dict assert log.log_record.body assert dict(log.log_record.body) == expected_content + def test_imports(): # Ensure heavy dependencies are not accidentally imported import opentelemetry.instrumentation.google_generativeai # noqa: F401 - assert "google.generai" not in sys.modules + assert "google.genai" not in sys.modules