Arcana.Evaluation (Arcana v2.0.1)

Copy Markdown View Source

Retrieval evaluation for measuring search quality.

Generates synthetic test cases from your document chunks and evaluates retrieval performance with standard IR metrics.

Usage

# Generate test cases from chunks
{:ok, test_cases} = Arcana.Evaluation.generate_test_cases(
  repo: MyApp.Repo,
  llm: my_llm,
  sample_size: 50
)

# Run evaluation
{:ok, run} = Arcana.Evaluation.run(repo: MyApp.Repo, mode: :vector)

# View metrics
run.metrics
# => %{recall_at_5: 0.84, precision_at_5: 0.68, mrr: 0.76, ...}

Summary

Functions

Returns count of test cases.

Creates a manual test case.

Deletes an evaluation run.

Deletes a test case.

Generates synthetic test cases from existing chunks.

Gets a single evaluation run by ID.

Gets a single test case by ID.

Lists past evaluation runs.

Lists all test cases.

Runs evaluation against existing test cases.

Functions

count_test_cases(opts)

Returns count of test cases.

create_test_case(opts)

Creates a manual test case.

Options

  • :repo - Ecto repo (required)
  • :question - The question text (required)
  • :relevant_chunk_ids - List of chunk IDs considered relevant (required)
  • :reference_answer - Optional ground-truth answer text, used by correctness scoring in run/1 when an :answerer is configured.

delete_run(id, opts)

Deletes an evaluation run.

delete_test_case(id, opts)

Deletes a test case.

generate_test_cases(opts)

Generates synthetic test cases from existing chunks.

Samples chunks randomly and uses an LLM to generate questions that should retrieve those chunks.

Options

  • :repo - Ecto repo (required)
  • :llm - LLM implementing Arcana.LLM protocol (required)
  • :sample_size - Number of chunks to sample (default: 50)
  • :source_id - Limit to chunks from specific source
  • :prompt - Custom prompt template

get_run(id, opts)

Gets a single evaluation run by ID.

get_test_case(id, opts)

Gets a single test case by ID.

list_runs(opts)

Lists past evaluation runs.

Options

  • :repo - Ecto repo (required)
  • :limit - Maximum runs to return (default: 20)

list_test_cases(opts)

Lists all test cases.

Options

  • :repo - Ecto repo (required)
  • :source_id - Filter by source (optional)

run(opts)

Runs evaluation against existing test cases.

Options

  • :repo - Ecto repo (required)
  • :mode - Search mode :vector | :keyword | :hybrid (default: :vector). :semantic and :fulltext are deprecated aliases and log a warning.

  • :source_id - Limit evaluation to specific source
  • :evaluate_answers - When true, also evaluates answer quality (default: false)
  • :llm - LLM function (required when evaluate_answers is true)
  • :retriever - Custom retriever function (question, opts) -> {:ok, chunks}. Defaults to Arcana.search/2. Use this to evaluate alternative retrieval strategies (e.g., Arcana.Loop) against the same test set with the same metrics. The chunks returned must be maps with :id so the metrics can match them against the test case's relevant_chunks.