rag-embedder / utils /embedder.py
jackenmail's picture
Upload 4 files
e6a70ac verified
# ─────────────────────────────────────────────────────────────
# utils/embedder.py
# Handles all embedding calls via your Gradio Space API
# ─────────────────────────────────────────────────────────────
import numpy as np
from gradio_client import Client
import os
class HFEmbedder:
"""
Calls your HF Gradio Space to get embeddings.
No local model download needed β€” works like an API.
"""
def __init__(self, space: str = None):
self.space = space or os.getenv("GRADIO_SPACE", "your-username/rag-embedder-app")
self.client = None
self._connect()
def _connect(self):
print(f"Connecting to Gradio Space: {self.space}")
self.client = Client(self.space)
print("Embedder ready!")
def embed(self, text: str) -> np.ndarray:
"""Embed a single text string."""
result = self.client.predict(text, api_name="/predict")
return np.array(result, dtype=np.float32)
def embed_batch(self, texts: list) -> np.ndarray:
"""Embed a list of texts."""
print(f"Embedding {len(texts)} documents...")
vectors = [self.embed(t) for t in texts]
print("Embedding complete!")
return np.array(vectors, dtype=np.float32)
# ── Quick test ────────────────────────────────────────────────
if __name__ == "__main__":
embedder = HFEmbedder()
vec = embedder.embed("Hello world")
print(f"Vector shape : {vec.shape}")
print(f"First 5 values: {vec[:5]}")