@arizeai/phoenix-client
Version:
A client for the Phoenix API
138 lines • 5.67 kB
TypeScript
import { AsyncLocalStorage } from "node:async_hooks";
import type { GlobalTracerProviderRegistration, NodeTracerProvider, Tracer } from "@arizeai/phoenix-otel";
import type { PhoenixClient } from "../index.js";
import type { AcceptanceResult, Annotation, KVMap, SuiteConfig, TestParams } from "./types.js";
/**
* State for a single `describe()` block. Created during test collection
* and shared across all tests in the suite.
*/
export interface SuiteState {
/** The user-facing suite (and dataset/experiment) name. */
name: string;
config: SuiteConfig;
/**
* Map of test name → registered example metadata. Filled as tests are
* declared inside the describe callback. Keys are test names.
*/
registeredExamples: Map<string, RegisteredExample>;
/**
* Map of test name → resolved server-side example id. Populated after the
* dataset is synced.
*/
exampleIdsByTest: Map<string, {
exampleId: string;
nodeId: string;
}>;
/** Phoenix dataset id (after upload). */
datasetId?: string;
/** Phoenix experiment id (created at suite start). */
experimentId?: string;
/** Phoenix project name used for the experiment. */
projectName?: string;
/** Phoenix client used for this suite (resolved lazily). */
client?: PhoenixClient;
/** OpenInference tracer for task spans. */
tracer?: Tracer;
/** OpenInference tracer for evaluator spans. */
evaluatorTracer?: Tracer;
/** Tracer provider owned by this suite (cleaned up at suite end). */
tracerProvider?: NodeTracerProvider;
/** Global tracer registration owned by this suite (if any). */
globalRegistration?: GlobalTracerProviderRegistration | null;
/** Whether sync to Phoenix is disabled for this run. */
trackingDisabled: boolean;
/** Recorded test results for the reporter / summary. */
results: TestResult[];
/** Computed aggregate acceptance results for this suite. */
acceptanceResults?: AcceptanceResult[];
/** Links printed at the end of the suite (Phoenix dataset / experiment URLs). */
links: Array<{
label: string;
url: string;
}>;
/** Reason the suite became inert (no tracking), if applicable. */
trackingDisabledReason?: string;
/** Setup error captured during suite initialization. */
setupError?: Error;
/** Count of best-effort POSTs (runs + annotations) that failed during upload. */
uploadFailureCount?: number;
/**
* Highest per-test repetition count seen in this suite. Used as the
* experiment's `repetitions` value (informational; runs are keyed by
* example + repetition number regardless).
*/
maxRepetitions?: number;
}
/** Per-test registration captured when `test()` is declared. */
export interface RegisteredExample {
testName: string;
params: TestParams;
}
/** Run-time state attached via AsyncLocalStorage to each running test. */
export interface RunState {
suite: SuiteState;
/** Runner-facing test name (may include a `[rep i/N]` suffix). */
testName: string;
/** The logical test name; the key into `registeredExamples`. */
logicalName: string;
/** 1-based repetition index for this run. */
repetitionNumber: number;
/** When true, this run is local-only: no dataset example, no upload. */
dryRun: boolean;
params: TestParams;
output?: unknown;
outputSet: boolean;
annotations: Annotation[];
startTime: Date;
/** End time for the task span/run, which may be before the test body ends. */
taskEndTime?: Date;
endTime?: Date;
traceId?: string;
runId?: string;
error?: string;
/** Optional metadata accumulated during the test. */
runMetadata: KVMap;
}
/** A single test outcome surfaced to the reporter / summary printer. */
export interface TestResult {
suiteName: string;
testName: string;
status: "passed" | "failed" | "skipped";
output?: unknown;
annotations: Annotation[];
error?: string;
durationMs: number;
/** 1-based repetition index, when the test ran more than once. */
repetitionNumber?: number;
/** Total repetitions configured for this test (≥ 1). */
repetitions?: number;
/** True when this test ran local-only (not uploaded to Phoenix). */
dryRun?: boolean;
/**
* OpenInference trace id for the task span, when the run was traced. Surfaced
* in the reporter's failure detail so an agent can pull the exact trace from
* Phoenix (e.g. `px`/GraphQL) to see what the task actually did.
*/
traceId?: string;
/** Phoenix experiment run id, when the run was uploaded. */
runId?: string;
/** Phoenix dataset example id this run was scored against, when synced. */
exampleId?: string;
}
/**
* AsyncLocalStorage that lets `logOutput` / `logAnnotation` / `evaluate`
* reach the running test's state without threading it through arguments.
*/
export declare const runStorage: AsyncLocalStorage<RunState>;
/** Push a suite onto the stack as we enter its `describe` callback. */
export declare function pushSuite(suite: SuiteState): void;
/** Pop the current suite as we leave its `describe` callback. */
export declare function popSuite(): SuiteState | undefined;
/** The suite currently being declared, or `undefined` outside any `describe`. */
export declare function currentSuite(): SuiteState | undefined;
/**
* The state for the test currently executing, or `undefined` when called
* outside a Phoenix test body. Backed by {@link runStorage}.
*/
export declare function currentRun(): RunState | undefined;
//# sourceMappingURL=state.d.ts.map