View Source SwarmEx.Tools.Retrieval (SwarmEx v0.2.0)

DEPRECATED: This module is deprecated. Use a regular module with functions instead.

Migration Guide

Instead of using the Tool behavior, implement retrieval as regular functions:

defmodule MyRetrieval do
  @type query :: %{
          query: String.t(),
          data_source: atom(),
          limit: integer(),
          filters: map()
        }

  @type retrieval_result :: %{
          content: String.t(),
          source: String.t(),
          relevance_score: float(),
          metadata: map()
        }

  def search(query, data_source, opts \ []) do
    with :ok <- validate_query(query),
         :ok <- validate_data_source(data_source) do
      do_search(query, data_source, opts)
    end
  end

  def search_vector_store(query, opts \ []) do
    # Implement vector store search
    {:error, :not_implemented}
  end

  def search_document_store(query, opts \ []) do
    # Implement document store search
    {:error, :not_implemented}
  end

  def search_knowledge_base(query, opts \ []) do
    # Implement knowledge base search
    {:error, :not_implemented}
  end

  defp do_search(query, data_source, opts) do
    case data_source do
      :vector_store -> search_vector_store(query, opts)
      :document_store -> search_document_store(query, opts)
      :knowledge_base -> search_knowledge_base(query, opts)
      _ -> {:error, :unsupported_data_source}
    end
  end

  defp validate_query(query) when is_binary(query), do: :ok
  defp validate_query(_), do: {:error, :invalid_query}

  defp validate_data_source(source)
       when source in [:vector_store, :document_store, :knowledge_base],
       do: :ok
  defp validate_data_source(_), do: {:error, :invalid_data_source}
end

Then use it directly in your agent:

defmodule MyAgent do
  use SwarmEx.Agent

  def handle_message(%{query: query, source: source} = msg, state) do
    case MyRetrieval.search(query, source) do
      {:ok, results} -> {:ok, results, state}
      error -> error
    end
  end
end

Summary

Types

@type query() :: %{
  query: String.t(),
  data_source: atom(),
  limit: integer(),
  filters: map()
}
@type retrieval_result() :: %{
  content: String.t(),
  source: String.t(),
  relevance_score: float(),
  metadata: map()
}