File size: 457 Bytes
ba550a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
"""Shared contract for all retriever implementations."""

from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import Any


@dataclass
class RetrievalResult:
    content: str
    metadata: dict[str, Any]
    score: float
    source_type: str  # "document" | "database"


class BaseRetriever(ABC):
    @abstractmethod
    async def retrieve(
        self, query: str, user_id: str, k: int = 5
    ) -> list[RetrievalResult]: ...