# What happens internally:
candidates = ["output_1", "output_2", "output_3"]
scores = [metric(item, c) for c in candidates]  # [0.7, 0.9, 0.6]
best_idx = argmax(scores)  # 1
final_output = candidates[best_idx]  # "output_2"
```

The trace metadata includes:

* `n_requested`: Number of completions requested
* `candidates_scored`: Number of candidates evaluated
* `candidate_scores`: List of all scores (best\_by\_metric only)
* `candidate_logprobs`: List of logprob scores (max\_logprob only)
* `chosen_index`: Index of the selected candidate

## Cost Considerations

<Warning>
  Using `n > 1` increases API costs proportionally. With `n=3`, you pay roughly 3x the completion tokens per evaluation call.
</Warning>

| n value | Relative cost | Variance reduction |
| ------- | ------------- | ------------------ |
| 1       | 1x            | Baseline           |
| 3       | \~3x          | Significant        |