[**axiom v0.51.1**](../../../README.md)

***

[axiom](../../../README.md) / [evals/online](../README.md) / onlineEval

# Function: onlineEval()

> **onlineEval**\<`TInput`, `TOutput`, `Name`, `TScorers`\>(`name`, `params`): `Promise`\<`Partial`\<`Record`\<`Extract`\<`InferScorerName`\<`TScorers`\[`number`\]\>, `string`\>, `InferOnlineEvalResult`\<`TScorers`\>\>\>\>

Run online evaluation scorers against production outputs.

Returns a promise that resolves to scorer results. Use `void onlineEval(...)`
for fire-and-forget, or `await onlineEval(...)` when you need to wait for
completion (e.g., before flushing telemetry in short-lived processes).

Each eval span links back to the originating generation span via an
OpenTelemetry span link. Parent/child hierarchy follows natural context
propagation — inside `withSpan` the eval is a child, outside it depends
on the active context.

## Usage Patterns

**Inside withSpan (recommended):**
Active span is automatically detected and linked.
```ts
await withSpan({ capability: 'qa', step: 'answer' }, async () => {
  const response = await generateText({ ... });
  void onlineEval(
    'my-eval',
    { capability: 'qa', step: 'answer' },
    { output: response.text, scorers: [formatScorer] }
  );
  return response.text;
});
```

**Deferred evaluation with explicit link:**
Pass the originating span's context for linking when evaluating later.
Supports single or multiple span contexts.
```ts
let spanCtx: SpanContext;
const result = await withSpan({ ... }, async (span) => {
  spanCtx = span.spanContext();
  return await generateText({ ... });
});
void onlineEval('my-eval', { ..., links: spanCtx }, { output: result, scorers });

// Or link to multiple spans:
void onlineEval('my-eval', { ..., links: [spanCtx1, spanCtx2] }, { output, scorers });
```

**Awaiting for flush (short-lived processes):**
```ts
await onlineEval('my-eval', { ... }, { output, scorers });
await flushTelemetry();
```

## Type Parameters

### TInput

`TInput`

### TOutput

`TOutput`

### Name

`Name` *extends* `string`

### TScorers

`TScorers` *extends* readonly `ScorerEntry`\<`TInput`, `TOutput`\>[]

## Parameters

### name

`ValidateName`\<`Name`\>

Eval name (A-Z, a-z, 0-9, -, _ only). Used as the span name and `eval.name` attribute.

### params

[`OnlineEvalParams`](../type-aliases/OnlineEvalParams.md)\<`TInput`, `TOutput`, `TScorers`\>

Evaluation configuration

## Returns

`Promise`\<`Partial`\<`Record`\<`Extract`\<`InferScorerName`\<`TScorers`\[`number`\]\>, `string`\>, `InferOnlineEvalResult`\<`TScorers`\>\>\>\>

Promise resolving to scorer results keyed by scorer name
