from __future__ import annotations from typing import List from langchain_core.embeddings import Embeddings class ConsistentFakeEmbeddings(Embeddings): """Fake embeddings functionality for testing.""" def __init__(self, dimensionality: int = 10) -> None: self.known_texts: List[str] = [] self.dimensionality = dimensionality def embed_documents(self, texts: List[str]) -> List[List[float]]: """Return consistent embeddings for each text seen so far.""" out_vectors = [] for text in texts: if text not in self.known_texts: self.known_texts.append(text) vector = [float(1.0)] * (self.dimensionality - 1) + [ float(self.known_texts.index(text)) ] out_vectors.append(vector) return out_vectors def embed_query(self, text: str) -> List[float]: """Return consistent embeddings for the text, if seen before, or a constant one if the text is unknown.""" return self.embed_documents([text])[0] async def aembed_documents(self, texts: List[str]) -> List[List[float]]: return self.embed_documents(texts) async def aembed_query(self, text: str) -> List[float]: return self.embed_query(text)