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..9a15c0b2dc 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,10 @@ 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.genai" not in sys.modules