Spaces:
Sleeping
Sleeping
File size: 1,506 Bytes
ee39cc9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# ────────────────────────────── 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 |