chore: Defer import of live, Client and _transformers in google.genai

Co-authored-by: Liang Wu <wuliang@google.com>
PiperOrigin-RevId: 831444358
This commit is contained in:
Liang Wu
2025-11-12 10:27:56 -08:00
committed by Copybara-Service
parent a19be12c1f
commit 22c6dbe83c
6 changed files with 26 additions and 12 deletions
@@ -19,7 +19,6 @@ from __future__ import annotations
from typing import AsyncGenerator
from typing import TYPE_CHECKING
from google.genai import _transformers
from typing_extensions import override
from ...agents.readonly_context import ReadonlyContext
@@ -85,6 +84,8 @@ class _InstructionsLlmRequestProcessor(BaseLlmRequestProcessor):
# Handle static_instruction - add via append_instructions
if agent.static_instruction:
from google.genai import _transformers
# Convert ContentUnion to Content using genai transformer
static_content = _transformers.t_content(agent.static_instruction)
llm_request.append_instructions(static_content)
+4 -2
View File
@@ -18,12 +18,10 @@ from __future__ import annotations
from functools import cached_property
import logging
import os
import re
from typing import Optional
from typing import TYPE_CHECKING
from google.adk import version as adk_version
from google.genai import Client
from google.genai import types
from typing_extensions import override
@@ -31,8 +29,11 @@ from ..utils.env_utils import is_env_enabled
from .google_llm import Gemini
if TYPE_CHECKING:
from google.genai import Client
from .llm_request import LlmRequest
logger = logging.getLogger('google_adk.' + __name__)
_APIGEE_PROXY_URL_ENV_VARIABLE_NAME = 'APIGEE_PROXY_URL'
@@ -137,6 +138,7 @@ class ApigeeLlm(Gemini):
Returns:
The api client.
"""
from google.genai import Client
kwargs_for_http_options = {}
if self._api_version:
@@ -21,8 +21,8 @@ import json
import logging
import time
from typing import Optional
from typing import TYPE_CHECKING
from google.genai import Client
from google.genai import types
from ..utils.feature_decorator import experimental
@@ -32,6 +32,9 @@ from .llm_response import LlmResponse
logger = logging.getLogger("google_adk." + __name__)
if TYPE_CHECKING:
from google.genai import Client
@experimental
class GeminiContextCacheManager:
@@ -18,7 +18,6 @@ import logging
from typing import AsyncGenerator
from typing import Union
from google.genai import live
from google.genai import types
from ..utils.context_utils import Aclosing
@@ -28,6 +27,10 @@ from .llm_response import LlmResponse
logger = logging.getLogger('google_adk.' + __name__)
RealtimeInput = Union[types.Blob, types.ActivityStart, types.ActivityEnd]
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from google.genai import live
class GeminiLlmConnection(BaseLlmConnection):
+6 -1
View File
@@ -27,7 +27,6 @@ from typing import Optional
from typing import TYPE_CHECKING
from typing import Union
from google.genai import Client
from google.genai import types
from typing_extensions import override
@@ -41,6 +40,8 @@ from .gemini_llm_connection import GeminiLlmConnection
from .llm_response import LlmResponse
if TYPE_CHECKING:
from google.genai import Client
from .llm_request import LlmRequest
logger = logging.getLogger('google_adk.' + __name__)
@@ -200,6 +201,8 @@ class Gemini(BaseLlm):
Returns:
The api client.
"""
from google.genai import Client
return Client(
http_options=types.HttpOptions(
headers=self._tracking_headers,
@@ -239,6 +242,8 @@ class Gemini(BaseLlm):
@cached_property
def _live_api_client(self) -> Client:
from google.genai import Client
return Client(
http_options=types.HttpOptions(
headers=self._tracking_headers, api_version=self._live_api_version
+6 -6
View File
@@ -46,7 +46,7 @@ def llm_request():
@pytest.mark.asyncio
@mock.patch('google.adk.models.apigee_llm.Client')
@mock.patch('google.genai.Client')
async def test_generate_content_async_non_streaming(
mock_client_constructor, llm_request
):
@@ -96,7 +96,7 @@ async def test_generate_content_async_non_streaming(
@pytest.mark.asyncio
@mock.patch('google.adk.models.apigee_llm.Client')
@mock.patch('google.genai.Client')
async def test_generate_content_async_streaming(
mock_client_constructor, llm_request
):
@@ -167,7 +167,7 @@ async def test_generate_content_async_streaming(
@pytest.mark.asyncio
@mock.patch('google.adk.models.apigee_llm.Client')
@mock.patch('google.genai.Client')
async def test_generate_content_async_with_custom_headers(
mock_client_constructor, llm_request
):
@@ -207,7 +207,7 @@ async def test_generate_content_async_with_custom_headers(
@pytest.mark.asyncio
@mock.patch('google.adk.models.apigee_llm.Client')
@mock.patch('google.genai.Client')
async def test_vertex_model_path_parsing(mock_client_constructor):
"""Tests that Vertex AI model paths are parsed correctly."""
apigee_llm = ApigeeLlm(model=APIGEE_VERTEX_MODEL_ID, proxy_url=PROXY_URL)
@@ -249,7 +249,7 @@ async def test_vertex_model_path_parsing(mock_client_constructor):
@pytest.mark.asyncio
@mock.patch('google.adk.models.apigee_llm.Client')
@mock.patch('google.genai.Client')
async def test_proxy_url_from_env_variable(mock_client_constructor):
"""Tests that proxy_url is read from environment variable."""
with mock.patch.dict(
@@ -381,7 +381,7 @@ def test_vertex_model_missing_project_or_location_raises_error(
),
],
)
@mock.patch('google.adk.models.apigee_llm.Client')
@mock.patch('google.genai.Client')
async def test_model_string_parsing_and_client_initialization(
mock_client_constructor,
model_string,