duongtruongbinh's picture
Init project
16fa4e7
"""LLM invocation through Gemini API (google-genai)."""
from __future__ import annotations
from contextvars import ContextVar
from google import genai
from google.genai import types
from src.config import settings
_runtime_api_key: ContextVar[str | None] = ContextVar("runtime_gemini_api_key", default=None)
def set_runtime_gemini_api_key(api_key: str | None) -> None:
_runtime_api_key.set(api_key.strip() if isinstance(api_key, str) else None)
def invoke_llm(prompt: str) -> str:
"""Invoke the configured chat model and return plain text.
Args: prompt.
Returns: assistant text content.
Raises: RuntimeError if the API key is missing or response is empty.
"""
api_key = _runtime_api_key.get() or settings.gemini_api_key
if not api_key:
raise RuntimeError("Missing Gemini API key. Please provide it in the UI (or set GEMINI_API_KEY).")
client = genai.Client(api_key=api_key)
resp = client.models.generate_content(
model=settings.llm_model,
contents=prompt,
config=types.GenerateContentConfig(
temperature=settings.llm_temperature,
max_output_tokens=settings.llm_max_new_tokens,
),
)
text = (resp.text or "").strip()
if not text:
raise RuntimeError("Empty response from Gemini.")
return text