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