Arcana.Rewriters (Arcana v2.0.1)

Copy Markdown View Source

Built-in query rewriter helpers for common rewriting strategies.

Each helper can be used in two ways:

  1. Direct call with a query: {:ok, rewritten} = Rewriters.expand("ML models", llm: my_llm_fn)

  2. As a rewriter function for Arcana.search/2: rewriter = Rewriters.expand(llm: my_llm_fn) {:ok, results} = Arcana.search("ML models", repo: Repo, rewriter: rewriter)

The :llm option accepts any type implementing the Arcana.LLM protocol, including anonymous functions and LangChain chat models.

All helpers accept a :prompt option to customize the prompt template. Use {query} as a placeholder for the original query.

Summary

Functions

Decomposes a complex question into simpler sub-queries.

Expands a query with synonyms and related terms.

Extracts key search terms from a query.

Functions

decompose(opts)

decompose(query, opts)

Decomposes a complex question into simpler sub-queries.

Options

  • :llm - LLM function fn(prompt) -> {:ok, result} | {:error, reason} (required)

  • :prompt - Custom prompt template with {query} placeholder

Examples

{:ok, sub_queries} = Rewriters.decompose("Complex multi-part question?", llm: my_llm)

expand(opts)

expand(query, opts)

Expands a query with synonyms and related terms.

Options

  • :llm - LLM function fn(prompt) -> {:ok, result} | {:error, reason} (required)

  • :prompt - Custom prompt template with {query} placeholder

Examples

# Direct use
{:ok, expanded} = Rewriters.expand("ML", llm: my_llm)

# As rewriter function
rewriter = Rewriters.expand(llm: my_llm)
{:ok, results} = Arcana.search("ML", repo: Repo, rewriter: rewriter)

keywords(opts)

keywords(query, opts)

Extracts key search terms from a query.

Options

  • :llm - LLM function fn(prompt) -> {:ok, result} | {:error, reason} (required)

  • :prompt - Custom prompt template with {query} placeholder

Examples

{:ok, keywords} = Rewriters.keywords("What are the best practices?", llm: my_llm)