Spaces:
Sleeping
Sleeping
from langchain.vectorstores import VectorStore | |
from typing import Iterable, List, Any | |
from langchain.docstore.document import Document | |
from langchain.embeddings.base import Embeddings | |
from langchain.embeddings.fake import FakeEmbeddings as FakeEmbeddingsBase | |
from langchain.chat_models.fake import FakeListChatModel | |
from typing import Optional | |
class FakeChatModel(FakeListChatModel): | |
def __init__(self, **kwargs): | |
responses = ["The answer is 42. SOURCES: 1, 2, 3, 4"] | |
super().__init__(responses=responses, **kwargs) | |
class FakeEmbeddings(FakeEmbeddingsBase): | |
def __init__(self, **kwargs): | |
super().__init__(size=4, **kwargs) | |
class FakeVectorStore(VectorStore): | |
"""Fake vector store for testing purposes.""" | |
def __init__(self, texts: List[str]): | |
self.texts: List[str] = texts | |
def add_texts( | |
self, texts: Iterable[str], metadatas: List[dict] | None = None, **kwargs: Any | |
) -> List[str]: | |
self.texts.extend(texts) | |
return self.texts | |
def from_texts( | |
cls, | |
texts: List[str], | |
embedding: Embeddings, | |
metadatas: Optional[List[dict]] = None, | |
**kwargs: Any, | |
) -> "FakeVectorStore": | |
return cls(texts=list(texts)) | |
def similarity_search( | |
self, query: str, k: int = 4, **kwargs: Any | |
) -> List[Document]: | |
return [ | |
Document(page_content=text, metadata={"source": f"{i+1}-{1}"}) | |
for i, text in enumerate(self.texts) | |
] | |