Skip to main content

Retriever

Retriever typeclass provides an even more generic interface to retrieve documents than vectorStore.

Supported Integrations

At this moment, following integrations available,

  • VectorStoreRetriever
  • More to come...

Custom Retriever

It is also possible to create your own type and implement Retriever typeclass.

data CustomRetriever = CustomRetriever {
apiKey :: Text,
apiUrl :: Text,
model :: Text
}
instance Retriever CustomRetriever where
_get_relevant_documents (CustomRetriever apiKey apiUrl model) query = do
-- Your implementation here
return $ Right []

Example

{-# LANGUAGE OverloadedStrings #-}

module RetrieverExample (runApp) where

import Langchain.DocumentLoader.Core
import Langchain.DocumentLoader.PdfLoader
import Langchain.Embeddings.Ollama
import Langchain.Retriever.Core (Retriever (_get_relevant_documents), VectorStoreRetriever (VectorStoreRetriever))
import Langchain.VectorStore.InMemory (fromDocuments)

runApp :: IO ()
runApp = do
let pdf = PdfLoader "/home/user/Documents/TS/langchain/SOP.pdf"
eDocs <- load pdf
case eDocs of
Left err -> putStrLn $ "Error while reading docs: " <> err
Right docs -> do
let ollamaEmb =
OllamaEmbeddings
{ model = "nomic-embed-text:latest"
, defaultTruncate = Just True
, defaultKeepAlive = Just "5m"
}
eInMemVS <- fromDocuments ollamaEmb docs
case eInMemVS of
Left err -> putStrLn $ "Error while initiating Vector Store: " <> err
Right inMemVS -> do
let vsRetriever = VectorStoreRetriever inMemVS
eRes <-
_get_relevant_documents
vsRetriever
"I am having with accessing the vendor portal. I have been unable to log in to my account."
print eRes