Built-in query rewriter helpers for common rewriting strategies.
Each helper can be used in two ways:
Direct call with a query: {:ok, rewritten} = Rewriters.expand("ML models", llm: my_llm_fn)
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
Decomposes a complex question into simpler sub-queries.
Options
:llm- LLM functionfn(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)
Expands a query with synonyms and related terms.
Options
:llm- LLM functionfn(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)
Extracts key search terms from a query.
Options
:llm- LLM functionfn(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)