import httpx
import logging
import json
from typing import final
from app.core.providers.base import LLMProvider
from app.config import settings
@final
class GeminiProvider(LLMProvider):
"""Provider for the Google Gemini API."""
def __init__(self, api_url: str):
self.url = api_url
async def generate_response(self, prompt: str) -> str:
payload = {"contents": [{"parts": [{"text": prompt}]}]}
headers = {"Content-Type": "application/json"}
try:
async with httpx.AsyncClient() as client:
response = await client.post(self.url, json=payload, headers=headers)
response.raise_for_status()
# Await the async `json` method
data = response.json()
return data['candidates'][0]['content']['parts'][0]['text']
except Exception as e:
logging.error("Gemini Provider Error", exc_info=True)
raise