Skip to main content

examples/retrieval_indexing_agent.exs

alias BeamWeaver.Core.Document
alias BeamWeaver.Core.Message
alias BeamWeaver.DocumentIndex
alias BeamWeaver.DocumentLoader
alias BeamWeaver.DocumentTransformer
alias BeamWeaver.Models.FakeEmbeddingModel
alias BeamWeaver.Retriever
alias BeamWeaver.VectorStore
alias BeamWeaver.VectorStore.ETS, as: VectorETS

store = VectorETS.new(embedding: %FakeEmbeddingModel{})

index =
  DocumentIndex.new(
    loader: DocumentLoader.text("BeamWeaver uses explicit retrievers.", metadata: %{source: "guide"}),
    transformers: [DocumentTransformer.metadata_map(&Map.put(&1, :tenant, "demo"))],
    vector_store: store
  )

{:ok, %{added: 1}} = DocumentIndex.run(index)
retriever = VectorStore.as_retriever(store, k: 1)
{:ok, [%Document{} = doc]} = Retriever.retrieve(retriever, "retrievers")

IO.puts(Message.text(Message.assistant(doc.content)))