axiom
Version:
Axiom AI SDK provides - an API to wrap your AI calls with observability instrumentation. - offline evals - online evals
119 lines (114 loc) • 2.89 kB
TypeScript
import { Aggregation } from './scorers/aggregations.js';
type Score<TMetadata extends Record<string, any> = Record<string, any>> = {
score: number | boolean | null;
metadata?: TMetadata;
};
type ScoreWithName<TMetadata extends Record<string, any> = Record<string, any>> = Score<TMetadata> & {
name: string;
/** Per-trial scores when running multiple trials */
trials?: number[];
/** Aggregation type used (e.g., 'mean', 'pass@k') */
aggregation?: string;
/** Threshold for pass-based aggregations */
threshold?: number;
};
/**
* Configuration options for a scorer.
*/
type ScorerOptions = {
/**
* Aggregation function for combining scores across multiple trials.
* Defaults to Mean() if not specified.
*/
aggregation?: Aggregation;
};
type ScorerLike<TInput = any, TExpected = any, TOutput = any, TExtra extends Record<string, any> = {}, TMetadata extends Record<string, any> = Record<string, any>, TReturn extends Score<TMetadata> | Promise<Score<TMetadata>> = Score<TMetadata> | Promise<Score<TMetadata>>> = (args: {
input?: TInput;
expected?: TExpected;
output: TOutput;
/** Current trial index (0-based) when running multiple trials */
trialIndex?: number;
} & TExtra) => TReturn;
type Scorer<TInput = any, TExpected = any, TOutput = any, TExtra extends Record<string, any> = {}, TMetadata extends Record<string, any> = Record<string, any>, TReturn extends Score<TMetadata> | Promise<Score<TMetadata>> = Score<TMetadata> | Promise<Score<TMetadata>>> = ScorerLike<TInput, TExpected, TOutput, TExtra, TMetadata, TReturn> & {
readonly name: string;
readonly aggregation?: Aggregation;
};
type ValidChars =
| 'a'
| 'b'
| 'c'
| 'd'
| 'e'
| 'f'
| 'g'
| 'h'
| 'i'
| 'j'
| 'k'
| 'l'
| 'm'
| 'n'
| 'o'
| 'p'
| 'q'
| 'r'
| 's'
| 't'
| 'u'
| 'v'
| 'w'
| 'x'
| 'y'
| 'z'
| 'A'
| 'B'
| 'C'
| 'D'
| 'E'
| 'F'
| 'G'
| 'H'
| 'I'
| 'J'
| 'K'
| 'L'
| 'M'
| 'N'
| 'O'
| 'P'
| 'Q'
| 'R'
| 'S'
| 'T'
| 'U'
| 'V'
| 'W'
| 'X'
| 'Y'
| 'Z'
| '0'
| '1'
| '2'
| '3'
| '4'
| '5'
| '6'
| '7'
| '8'
| '9'
| '-'
| '_';
type ValidateName<T extends string, Original extends string = T> =
// For widened strings, don't attempt validation – let them flow through unchanged
string extends T // string is not wider than T, ie T is string
? T
: T extends ''
? Original extends ''
? '❌ Name cannot be empty'
: Original
: T extends `${infer First}${infer Rest}`
? First extends ValidChars
? ValidateName<Rest, Original>
: `❌ Invalid character in "${Original}". Only A-Z, a-z, 0-9, -, _ allowed`
: never;
export type { Score as S, ValidateName as V, ScorerOptions as a, Scorer as b, ScoreWithName as c, ScorerLike as d };