Spaces:
Sleeping
Sleeping
| import os | |
| import logging | |
| from typing import List, Optional | |
| logger = logging.getLogger("embedding_service") | |
| class EmbeddingService: | |
| def __init__(self, api_key: Optional[str] = None): | |
| self.api_key = api_key or os.environ.get("GEMINI_API_KEY") | |
| if not self.api_key: | |
| raise ValueError("Gemini API key is required to generate embeddings.") | |
| from google import genai | |
| self.client = genai.Client(api_key=self.api_key) | |
| def embed_text(self, text: str) -> List[float]: | |
| """Generates embedding for a single text string.""" | |
| try: | |
| response = self.client.models.embed_content( | |
| model='text-embedding-004', | |
| contents=text | |
| ) | |
| if response.embeddings and len(response.embeddings) > 0: | |
| return response.embeddings[0].values | |
| raise ValueError("No embeddings returned from Gemini API.") | |
| except Exception as e: | |
| logger.error(f"Error generating embedding: {e}") | |
| raise e | |
| def embed_texts(self, texts: List[str]) -> List[List[float]]: | |
| """Generates embeddings for a batch list of text strings.""" | |
| if not texts: | |
| return [] | |
| try: | |
| # Check length to prevent massive batch issues; text-embedding-004 supports bulk | |
| response = self.client.models.embed_content( | |
| model='text-embedding-004', | |
| contents=texts | |
| ) | |
| if response.embeddings and len(response.embeddings) == len(texts): | |
| return [e.values for e in response.embeddings] | |
| elif response.embeddings: | |
| return [e.values for e in response.embeddings] | |
| raise ValueError("No embeddings returned from batch API call.") | |
| except Exception as e: | |
| logger.error(f"Error generating batch embeddings: {e}") | |
| raise e | |