Spaces:
Running
on
Zero
Running
on
Zero
| """Embedding utilities (OpenAI-compatible, API-first).""" | |
| from __future__ import annotations | |
| from dataclasses import dataclass | |
| from langchain_openai import OpenAIEmbeddings | |
| class EmbeddingConfig: | |
| base_url: str | |
| api_key: str | |
| model_name: str | |
| batch_size: int = 32 | |
| class EmbeddingClient: | |
| """Thin wrapper over LangChain OpenAIEmbeddings.""" | |
| def __init__(self, cfg: EmbeddingConfig): | |
| self.cfg = cfg | |
| self._emb = OpenAIEmbeddings( | |
| base_url=cfg.base_url, | |
| api_key=cfg.api_key, | |
| model=cfg.model_name, | |
| chunk_size=int(cfg.batch_size or 32), | |
| ) | |
| def embed_query(self, text: str) -> list[float]: | |
| return self._emb.embed_query(text) | |
| def embed_documents(self, texts: list[str]) -> list[list[float]]: | |
| return self._emb.embed_documents(texts) | |
| def langchain_embeddings(self) -> OpenAIEmbeddings: | |
| """Expose the underlying LangChain embeddings for Chroma.""" | |
| return self._emb | |