File size: 661 Bytes
e92d49a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from __future__ import annotations

from functools import lru_cache
from langchain_community.retrievers import BM25Retriever
from langchain_classic.retrievers import EnsembleRetriever
from .config import settings
from .splitter import documents
from .vectorstore import get_vectorstore


@lru_cache(maxsize=1)
def get_retriever() -> EnsembleRetriever:
    bm25_retriever = BM25Retriever.from_documents(documents)
    bm25_retriever.k = settings.top_k

    dense_retriever = get_vectorstore().as_retriever(search_kwargs={"k": settings.top_k})

    return EnsembleRetriever(
        retrievers=[bm25_retriever, dense_retriever],
        weights=[0.5, 0.5],
    )