axiom
Version:
Axiom AI SDK provides - an API to wrap your AI calls with observability instrumentation. - offline evals - online evals
96 lines (64 loc) • 2.62 kB
Markdown
[**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