kikikita's picture
fix: refactor API key handling and improve music generation logic
0845b6c
"""Utility functions for working with the language model."""
import logging
from langchain_google_genai import ChatGoogleGenerativeAI
from config import settings
logger = logging.getLogger(__name__)
_API_KEYS: list[str] = []
_current_key_idx = 0
MODEL_NAME = "gemini-2.5-flash-preview-05-20"
def _get_api_key() -> str:
"""Return an API key using round-robin selection."""
global _API_KEYS, _current_key_idx
if not _API_KEYS:
keys_str = settings.gemini_api_key.get_secret_value()
if keys_str:
_API_KEYS = [k.strip() for k in keys_str.split(",") if k.strip()]
if not _API_KEYS:
msg = "Google API keys are not configured or invalid"
logger.error(msg)
raise ValueError(msg)
key = _API_KEYS[_current_key_idx]
_current_key_idx = (_current_key_idx + 1) % len(_API_KEYS)
logger.debug("Using Google API key index %s", _current_key_idx)
return key
def create_llm(
temperature: float = settings.temperature,
top_p: float = settings.top_p,
) -> ChatGoogleGenerativeAI:
"""Create a standard LLM instance."""
return ChatGoogleGenerativeAI(
model=MODEL_NAME,
google_api_key=_get_api_key(),
temperature=temperature,
top_p=top_p,
thinking_budget=1024,
)
def create_light_llm(temperature: float = settings.temperature, top_p: float = settings.top_p):
return ChatGoogleGenerativeAI(
model="gemini-2.0-flash",
google_api_key=_get_api_key(),
temperature=temperature,
top_p=top_p
)
def create_precise_llm() -> ChatGoogleGenerativeAI:
"""Return an LLM tuned for deterministic output."""
return create_llm(temperature=0, top_p=1)