fix for issue #821: deferring optional SDK imports to runtime for provider modules (#828)

This commit is contained in:
Syed Ishmum Ahnaf 2026-04-18 16:14:52 +06:00 committed by Cyber MacGeddon
parent 3505bfdd25
commit 81cde7baf9
5 changed files with 39 additions and 31 deletions

View file

@ -12,11 +12,6 @@ Input is prompt, output is response.
# TrustGraph implements in the trustgraph-vertexai package.
#
from google import genai
from google.genai import types
from google.genai.types import HarmCategory, HarmBlockThreshold
from google.genai.errors import ClientError
from google.api_core.exceptions import ResourceExhausted
import os
import logging
@ -42,6 +37,18 @@ class Processor(LlmService):
temperature = params.get("temperature", default_temperature)
max_output = params.get("max_output", default_max_output)
from google import genai
from google.genai import types
from google.genai.types import HarmCategory, HarmBlockThreshold
from google.genai.errors import ClientError
from google.api_core.exceptions import ResourceExhausted
self.genai = genai
self.types = types
self.HarmCategory = HarmCategory
self.HarmBlockThreshold = HarmBlockThreshold
self.ClientError = ClientError
self.ResourceExhausted = ResourceExhausted
if api_key is None:
raise RuntimeError("Google AI Studio API key not specified")
@ -53,7 +60,7 @@ class Processor(LlmService):
}
)
self.client = genai.Client(api_key=api_key, vertexai=False)
self.client = self.genai.Client(api_key=api_key, vertexai=False)
self.default_model = model
self.temperature = temperature
self.max_output = max_output
@ -61,23 +68,23 @@ class Processor(LlmService):
# Cache for generation configs per model
self.generation_configs = {}
block_level = HarmBlockThreshold.BLOCK_ONLY_HIGH
block_level = self.HarmBlockThreshold.BLOCK_ONLY_HIGH
self.safety_settings = [
types.SafetySetting(
category = HarmCategory.HARM_CATEGORY_HATE_SPEECH,
self.types.SafetySetting(
category = self.HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold = block_level,
),
types.SafetySetting(
category = HarmCategory.HARM_CATEGORY_HARASSMENT,
self.types.SafetySetting(
category = self.HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold = block_level,
),
types.SafetySetting(
category = HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
self.types.SafetySetting(
category = self.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
threshold = block_level,
),
types.SafetySetting(
category = HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
self.types.SafetySetting(
category = self.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
threshold = block_level,
),
# There is a documentation conflict on whether or not
@ -97,7 +104,7 @@ class Processor(LlmService):
if cache_key not in self.generation_configs:
logger.info(f"Creating generation config for '{model_name}' with temperature {effective_temperature}")
self.generation_configs[cache_key] = types.GenerateContentConfig(
self.generation_configs[cache_key] = self.types.GenerateContentConfig(
temperature = effective_temperature,
top_p = 1,
top_k = 40,
@ -146,14 +153,14 @@ class Processor(LlmService):
return resp
except ResourceExhausted as e:
except self.ResourceExhausted as e:
logger.warning("Rate limit exceeded")
# Leave rate limit retries to the default handler
raise TooManyRequests()
except ClientError as e:
except self.ClientError as e:
# google-genai SDK throws ClientError for 4xx errors
if e.code == 429:
logger.warning(f"Rate limit exceeded (ClientError 429): {e}")
@ -222,11 +229,11 @@ class Processor(LlmService):
logger.debug("Streaming complete")
except ResourceExhausted:
except self.ResourceExhausted:
logger.warning("Rate limit exceeded during streaming")
raise TooManyRequests()
except ClientError as e:
except self.ClientError as e:
# google-genai SDK throws ClientError for 4xx errors
if e.code == 429:
logger.warning(f"Rate limit exceeded during streaming (ClientError 429): {e}")