{-# LANGUAGE TypeFamilies #-}
module Langchain.Retriever.Core
( Retriever (..)
, VectorStoreRetriever (..)
) where
import Langchain.DocumentLoader.Core (Document)
import Langchain.Runnable.Core
import Langchain.VectorStore.Core
import Data.Text (Text)
class Retriever a where
_get_relevant_documents :: a -> Text -> IO (Either String [Document])
newtype VectorStore a => VectorStoreRetriever a = VectorStoreRetriever {forall a. VectorStore a => VectorStoreRetriever a -> a
vs :: a}
deriving (VectorStoreRetriever a -> VectorStoreRetriever a -> Bool
(VectorStoreRetriever a -> VectorStoreRetriever a -> Bool)
-> (VectorStoreRetriever a -> VectorStoreRetriever a -> Bool)
-> Eq (VectorStoreRetriever a)
forall a.
Eq a =>
VectorStoreRetriever a -> VectorStoreRetriever a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a.
Eq a =>
VectorStoreRetriever a -> VectorStoreRetriever a -> Bool
== :: VectorStoreRetriever a -> VectorStoreRetriever a -> Bool
$c/= :: forall a.
Eq a =>
VectorStoreRetriever a -> VectorStoreRetriever a -> Bool
/= :: VectorStoreRetriever a -> VectorStoreRetriever a -> Bool
Eq, Int -> VectorStoreRetriever a -> ShowS
[VectorStoreRetriever a] -> ShowS
VectorStoreRetriever a -> String
(Int -> VectorStoreRetriever a -> ShowS)
-> (VectorStoreRetriever a -> String)
-> ([VectorStoreRetriever a] -> ShowS)
-> Show (VectorStoreRetriever a)
forall a.
(VectorStore a, Show a) =>
Int -> VectorStoreRetriever a -> ShowS
forall a.
(VectorStore a, Show a) =>
[VectorStoreRetriever a] -> ShowS
forall a.
(VectorStore a, Show a) =>
VectorStoreRetriever a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a.
(VectorStore a, Show a) =>
Int -> VectorStoreRetriever a -> ShowS
showsPrec :: Int -> VectorStoreRetriever a -> ShowS
$cshow :: forall a.
(VectorStore a, Show a) =>
VectorStoreRetriever a -> String
show :: VectorStoreRetriever a -> String
$cshowList :: forall a.
(VectorStore a, Show a) =>
[VectorStoreRetriever a] -> ShowS
showList :: [VectorStoreRetriever a] -> ShowS
Show)
instance VectorStore a => Retriever (VectorStoreRetriever a) where
_get_relevant_documents :: VectorStoreRetriever a -> Text -> IO (Either String [Document])
_get_relevant_documents (VectorStoreRetriever a
v) Text
query = a -> Text -> Int -> IO (Either String [Document])
forall m.
VectorStore m =>
m -> Text -> Int -> IO (Either String [Document])
similaritySearch a
v Text
query Int
5
instance VectorStore a => Runnable (VectorStoreRetriever a) where
type RunnableInput (VectorStoreRetriever a) = Text
type RunnableOutput (VectorStoreRetriever a) = [Document]
invoke :: VectorStoreRetriever a
-> RunnableInput (VectorStoreRetriever a)
-> IO (Either String (RunnableOutput (VectorStoreRetriever a)))
invoke VectorStoreRetriever a
retriever RunnableInput (VectorStoreRetriever a)
query = VectorStoreRetriever a -> Text -> IO (Either String [Document])
forall a. Retriever a => a -> Text -> IO (Either String [Document])
_get_relevant_documents VectorStoreRetriever a
retriever Text
RunnableInput (VectorStoreRetriever a)
query