Spaces:
Running
Running
| """Gemini API client for embeddings.""" | |
| import google.generativeai as genai | |
| import hashlib | |
| from src.config.settings import settings | |
| # Initialize Gemini for embeddings | |
| if settings.GEMINI_API_KEY: | |
| genai.configure(api_key=settings.GEMINI_API_KEY) | |
| GEMINI_EMBEDDING_MODEL = "models/gemini-embedding-001" | |
| EMBEDDING_DIMENSION = 3072 | |
| else: | |
| GEMINI_EMBEDDING_MODEL = None | |
| EMBEDDING_DIMENSION = 768 | |
| def simple_embedding(text: str, dim: int = 768) -> list[float]: | |
| """Generate simple hash-based embedding as fallback. | |
| Args: | |
| text: Text to generate embedding for. | |
| dim: Dimension of the embedding vector. | |
| Returns: | |
| List of floats representing a simple embedding vector. | |
| """ | |
| # Create deterministic hash-based vector | |
| hash_obj = hashlib.sha256(text.encode()) | |
| hash_bytes = hash_obj.digest() | |
| vector = [] | |
| for i in range(dim): | |
| # Normalize to [-1, 1] range | |
| vector.append((hash_bytes[i % len(hash_bytes)] - 128) / 128.0) | |
| return vector | |
| def get_embedding(text: str) -> list[float]: | |
| """Generate embedding for text using Gemini or fallback. | |
| Args: | |
| text: Text to generate embedding for. | |
| Returns: | |
| List of floats representing the embedding vector (768 dimensions). | |
| """ | |
| try: | |
| if GEMINI_EMBEDDING_MODEL: | |
| result = genai.embed_content( | |
| model=GEMINI_EMBEDDING_MODEL, | |
| content=text, | |
| task_type="retrieval_query" | |
| ) | |
| return result['embedding'] | |
| else: | |
| return simple_embedding(text) | |
| except Exception as e: | |
| print(f"Gemini Embedding API error: {e}, using fallback embedding") | |
| return simple_embedding(text) | |
| def get_document_embedding(text: str) -> list[float]: | |
| """Generate embedding for document text using Gemini or fallback. | |
| Args: | |
| text: Document text to generate embedding for. | |
| Returns: | |
| List of floats representing the embedding vector (768 dimensions). | |
| """ | |
| try: | |
| if GEMINI_EMBEDDING_MODEL: | |
| result = genai.embed_content( | |
| model=GEMINI_EMBEDDING_MODEL, | |
| content=text, | |
| task_type="retrieval_document" | |
| ) | |
| return result['embedding'] | |
| else: | |
| return simple_embedding(text) | |
| except Exception as e: | |
| print(f"Gemini Embedding API error: {e}, using fallback embedding") | |
| return simple_embedding(text) | |