Spaces:
Runtime error
Runtime error
| 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 |