packages feed

langchain-hs-0.0.5.0: src/Langchain/VectorStore/Core.hs

{-# LANGUAGE FlexibleContexts #-}

{- |
Module      : Langchain.VectorStore.Core
Description : Effect-polymorphic vector store abstraction for semantic search
Copyright   : (c) 2025-2026 Tushar Adhatrao
License     : MIT
Maintainer  : Tushar Adhatrao <tusharadhatrao@gmail.com>
Stability   : experimental

Effect-polymorphic VectorStore typeclass supporting document insertion,
deletion, and vector/text similarity search.
-}
module Langchain.VectorStore.Core
  ( VectorStore (..)
  ) where

import Control.Monad.Except (MonadError)
import Control.Monad.IO.Class (MonadIO)
import Data.Int (Int64)
import Data.Text (Text)

import Langchain.Core.Error (LangchainError)
import Langchain.DocumentLoader.Core (Document)

-- | Effect-polymorphic VectorStore typeclass
class VectorStore vs where
  -- | Add documents with generated embeddings
  addDocuments ::
    (MonadIO m, MonadError LangchainError m) =>
    vs ->
    [Document] ->
    m vs

  -- | Delete documents by unique integer ID
  delete ::
    (MonadIO m, MonadError LangchainError m) =>
    vs ->
    [Int64] ->
    m vs

  -- | Semantic similarity search using text query
  similaritySearch ::
    (MonadIO m, MonadError LangchainError m) =>
    vs ->
    Text ->
    Int ->
    m [Document]

  -- | Direct similarity search using embedding vector
  similaritySearchByVector ::
    (MonadIO m, MonadError LangchainError m) =>
    vs ->
    [Float] ->
    Int ->
    m [Document]