File size: 1,529 Bytes
2fd8a33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
927e5fe
 
 
 
 
2fd8a33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""Abstract interface for vector database operations."""

from typing import Any, Protocol


class VectorDatabase(Protocol):
    """Protocol defining the interface for vector database operations."""

    def upsert(self, vectors: list[dict[str, Any]], batch_size: int = 100) -> dict[str, Any]:
        """
        Upsert vectors to the database.

        Args:
            vectors: List of dicts with {id, values, metadata}
            batch_size: Number of vectors per batch

        Returns:
            Dict with at least:
            - batches: Number of batches processed
            - total_vectors: Number of input vectors
            Implementations may include additional fields like:
            - upserted_count: Actual count from database (may differ if errors occur)
        """
        ...

    def query(
        self,
        vector: list[float],
        top_k: int = 5,
        filter: dict[str, Any] | None = None,
        include_metadata: bool = True,
    ) -> dict[str, Any]:
        """
        Query database for similar vectors.

        Args:
            vector: Query embedding vector
            top_k: Number of results to return
            filter: Metadata filter
            include_metadata: Include metadata in response

        Returns:
            Query results from database
        """
        ...

    def delete_all(self) -> None:
        """Delete all vectors from the database."""
        ...

    def get_stats(self) -> dict[str, Any]:
        """Get database statistics."""
        ...