> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omnia-voice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Import logs

> Run your first bake-off from a JSONL export of your current provider's traffic — no routing, no integration, and your current model's stored answers become the baseline.

You don't need to route traffic through Omnia to run your first bake-off.
**Evals → Import logs** accepts a JSONL export (or a single JSON array) from
wherever you run today, and turns it into a dataset you can screen, grade,
and judge.

## What the importer recognizes

Each line (or array element) is matched against known shapes and normalized
to chat format:

| Shape                                                          | Typical source                                                                     |
| -------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| `{"messages": [...]}`                                          | Chat/fine-tuning exports. Content-block arrays (text parts) are flattened to text. |
| `{"request": {"messages": ...}, "response": ...}`              | Request/response capture logs.                                                     |
| `{"custom_id": ..., "body": {"messages": ...}}`                | Batch API input files.                                                             |
| `{"prompt": ..., "completion" \| "response" \| "output": ...}` | Simple prompt/answer pairs.                                                        |
| `{"input": ..., "output": ...}`                                | Same, alternate keys.                                                              |

Batch **output** lines (`{"custom_id", "response": {...}}`) carry no prompt,
so they are skipped, with the reason counted. **Tool calls are preserved
verbatim**: agent runs fail at the tool layer (wrong tool, wrong arguments,
ignored result), Omnia's judges read tool calls, and an import that dropped
them would leave an agent bake-off blind to exactly what distinguishes
quality.

Conversion happens **in your browser**, before any upload: malformed files
fail fast, and the result shows a per-format breakdown with counted skips
("974 chat, 3 skipped" reads very differently from "977 prompt/answer").
Nothing is dropped silently.

## Stored answers become the baseline

A trailing assistant message is deliberately **kept**: it is your incumbent
model's production answer. In an eval against the stored baseline
(`baseline_model: "__stored__"`, with `sample_filters.dataset_id` set to the
imported dataset), the judge grades what your current model actually shipped
against fresh answers from catalog candidates, without Omnia ever calling
your closed model. The incumbent is measured at its production best.

The one-call version, using [screening mode](/reference/evals):

```bash theme={null}
curl -X POST https://gateway.omnia-voice.com/v1/evals \
  -H "Authorization: Bearer $OMNIA_API_KEY" \
  -d '{"screening": true, "sample_filters": {"dataset_id": "<imported-dataset-id>"}}'
```

The server auto-fills the rest: your stored answers become the baseline,
cheap challengers are picked from the catalog, and the report places each
candidate on quality vs cost with a recommendation. "Keep what you have" is a
first-class outcome.

## Grade and calibrate before trusting results

Imported logs carry no grades, so any judge starts uncalibrated. Grade 30
imported exchanges in the [review queue](/judges/grading) and
[calibrate your judge](/judges/calibration) first; then the bake-off reports
[corrected rates with intervals](/evaluate/corrected-rates) instead of raw
judge scores. Thirty is the platform floor for calibration to run at all, not
a suggestion.

<Note>
  Import is a one-shot snapshot, not a pipeline. For continuous capture, pick
  one of the [integration paths](/capture/overview): imported data is enough to
  prove whether a switch is worth it, and an integration path is how you keep
  measuring after you switch.
</Note>
