Spaces:
Sleeping
Sleeping
| # ────────────────────────────── utils/embeddings.py ────────────────────────────── | |
| import os | |
| from typing import List | |
| import requests | |
| from utils.logger import get_logger | |
| logger = get_logger("EMBED", __name__) | |
| class EmbeddingClient: | |
| """Embedding client that calls external embedding service via HTTP. | |
| Expects environment variable EMBEDDER_BASE_URL pointing at an API with: | |
| POST /embed {"texts": [..]} -> {"vectors": [[..], ...], "model": "..."} | |
| """ | |
| def __init__(self, base_url: str = None): | |
| self.base_url = (base_url or os.getenv("EMBEDDER_BASE_URL", "")).rstrip("/") | |
| if not self.base_url: | |
| logger.warning("EMBEDDER_BASE_URL not set; embedding calls will fail.") | |
| def embed(self, texts: List[str]) -> List[list]: | |
| if not texts: | |
| return [] | |
| if not self.base_url: | |
| raise RuntimeError("EMBEDDER_BASE_URL not configured") | |
| url = f"{self.base_url}/embed" | |
| try: | |
| resp = requests.post(url, json={"texts": texts}, timeout=60) | |
| if resp.status_code >= 400: | |
| raise RuntimeError(f"Embedding API error {resp.status_code}: {resp.text[:200]}") | |
| data = resp.json() | |
| vectors = data.get("vectors") or [] | |
| return vectors | |
| except Exception as e: | |
| logger.warning(f"Embedding API failed: {e}") | |
| raise |