참고소스 수정본

This commit is contained in:
LASTA_DEV01\lasta
2026-05-12 19:40:31 +09:00
parent 0f34a451fc
commit 2e9204243d
8708 changed files with 3259488 additions and 869 deletions

View File

@@ -0,0 +1,95 @@
from abc import ABC, abstractmethod
from typing import Any, List, Optional
from guardrails.embedding import EmbeddingBase
# TODO Parameterize the init with the distance algorithm to use: cosine, L2, etc.
class VectorDBBase(ABC):
"""Base class for vector databases."""
def __init__(self, embedder: EmbeddingBase, path: Optional[str] = None) -> None:
"""Creates a new VectorDBBase.
Args:
embedder: EmbeddingBase instance to use for embedding the text.
path: Path to store or load the vector database.
"""
self._embedder = embedder
self._path = path
@abstractmethod
def add_vectors(self, vectors: List[List[float]]) -> None:
"""Adds a list of vectors to the store.
Args:
vectors: List of vectors to add.
Returns:
None
"""
...
@abstractmethod
def similarity_search_vector(self, vector: List[float], k: int) -> List[int]:
"""Searches for vectors which are similar to the given vector.
Args:
vector: Vector to search for.
k: Number of similar vectors to return.
"""
...
@abstractmethod
def similarity_search_vector_with_threshold(
self, vector: List[float], k: int, threshold: float
) -> List[int]:
"""Searches for vectors which are similar to the given vector.
Args:
vector: Vector to search for.
k: Number of similar vectors to return.
threshold: Minimum similarity threshold to return.
"""
...
def similarity_search(self, text: str, k: int) -> List[int]:
"""Searches for vectors which are similar to the given text.
Args:
text: Text to search for.
k: Number of similar vectors to return.
Returns:
List[int] List of indexes of the similar vectors."""
vector = self._embedder.embed_query(text)
return self.similarity_search_vector(vector, k)
def similarity_search_with_threshold(
self, text: str, k: int, threshold: float
) -> List[int]:
vector = self._embedder.embed_query(text)
return self.similarity_search_vector_with_threshold(vector, k, threshold)
def add_texts(self, texts: List[str], ids: Optional[List[Any]] = None) -> None:
"""Adds a list of texts to the store.
Args:
texts: List of texts to add.
ids: List of ids to associate with the texts.
"""
vectors = self._embedder.embed(texts)
self.add_vectors(vectors)
@abstractmethod
def save(self, path: Optional[str] = None):
"""Saves the vector database to the given path."""
...
@classmethod
def load(cls, path: str):
"""Loads the vector database from the given path."""
...
@abstractmethod
def last_index(self) -> int:
"""Returns the last index of the vector database."""
...