"""MiniCPM-Embedding client — runs on Modal GPU (NF4 4-bit).""" from typing import List from config import settings from models.modal_client import get_embedder class MiniCPMEmbedder: def __init__(self): self._remote = get_embedder() def embed_documents(self, texts: List[str]) -> List[List[float]]: if not texts: return [] batch_size = settings.EMBED_BATCH_SIZE if len(texts) <= batch_size: return self._remote.embed_documents.remote(texts) vectors: List[List[float]] = [] for start in range(0, len(texts), batch_size): batch = texts[start : start + batch_size] vectors.extend(self._remote.embed_documents.remote(batch)) return vectors def embed_query(self, query: str) -> List[float]: return self._remote.embed_query.remote(query) def get_embedding_dim(self) -> int: return 2304