Demos / backend /classes /generative_model.py
nikhile-galileo's picture
Adding finance protect demo
e68d535
raw
history blame
2.06 kB
from google import genai
from pydantic import BaseModel
from typing import Union, List, Any
import itertools
from google.genai.types import GenerateContentConfig
from openai import OpenAI
class GenerativeModelConfig(BaseModel):
"""Base configuration for vector databases."""
model_name: str
class GenerativeModel:
"""Abstract base class for vector databases."""
def __init__(self, config: Any):
self.config = config
class GeminiModelConfig(BaseModel):
# Example field for model settings
model_name: str
api_keys: List[str]
temperature: float = 0.0
class OpenAIModelConfig(BaseModel):
model_name: str
api_key: str
temperature: float = 0.0
class GeminiModel(GenerativeModel):
def __init__(self, config: GeminiModelConfig):
super().__init__(config)
self.config.api_keys = list(set(config.api_keys))
self.clients = [genai.Client(api_key=api_key) for api_key in self.config.api_keys]
self._client_cycle = itertools.cycle(self.clients)
def generate_response(
self,
prompt: str,
) -> str:
"""Generate a response by calling the model selected."""
client = next(self._client_cycle)
response = client.models.generate_content(
model=self.config.model_name,
contents=prompt,
config=GenerateContentConfig(temperature=self.config.temperature),
)
return response.text
class OpenAIModel(GenerativeModel):
def __init__(self, config: OpenAIModelConfig):
super().__init__(config)
self.client = OpenAI(api_key=config.api_key)
def generate_response(self, prompt: str, temperature: float = None) -> str:
if temperature is None:
temperature = self.config.temperature
response = self.client.chat.completions.create(
model=self.config.model_name,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
)
return response.choices[0].message.content