@elsium-ai/testing 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,26 @@
1
+ import type { CompletionRequest, TokenUsage } from '@elsium-ai/core';
2
+ import type { LLMProvider } from '@elsium-ai/gateway';
3
+ export interface MockResponseConfig {
4
+ content?: string;
5
+ toolCalls?: Array<{
6
+ id?: string;
7
+ name: string;
8
+ arguments: Record<string, unknown>;
9
+ }>;
10
+ stopReason?: 'end_turn' | 'tool_use' | 'max_tokens' | 'stop_sequence';
11
+ usage?: Partial<TokenUsage>;
12
+ model?: string;
13
+ delay?: number;
14
+ }
15
+ export interface MockProviderOptions {
16
+ responses?: MockResponseConfig[];
17
+ defaultResponse?: MockResponseConfig;
18
+ onRequest?: (request: CompletionRequest) => void;
19
+ }
20
+ export interface MockProvider extends LLMProvider {
21
+ readonly calls: CompletionRequest[];
22
+ readonly callCount: number;
23
+ reset(): void;
24
+ }
25
+ export declare function mockProvider(options?: MockProviderOptions): MockProvider;
26
+ //# sourceMappingURL=mock-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-provider.d.ts","sourceRoot":"","sources":["../src/mock-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAwB,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,WAAW,kBAAkB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAA;IACpF,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,eAAe,CAAA;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IACnC,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAChC,eAAe,CAAC,EAAE,kBAAkB,CAAA;IACpC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAChD;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAChD,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,KAAK,IAAI,IAAI,CAAA;CACb;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAiI5E"}
@@ -0,0 +1,30 @@
1
+ export interface Pin {
2
+ promptHash: string;
3
+ configHash: string;
4
+ outputHash: string;
5
+ outputText: string;
6
+ model?: string;
7
+ createdAt: number;
8
+ }
9
+ export interface PinStore {
10
+ get(key: string): Pin | undefined;
11
+ set(key: string, pin: Pin): void;
12
+ delete(key: string): boolean;
13
+ getAll(): Pin[];
14
+ toJSON(): string;
15
+ }
16
+ export interface PinResult {
17
+ status: 'new' | 'match' | 'mismatch';
18
+ pin: Pin;
19
+ previousPin?: Pin;
20
+ }
21
+ export declare function createPinStore(existing?: Pin[]): PinStore;
22
+ export declare function pinOutput(name: string, store: PinStore, runner: () => Promise<string>, config: {
23
+ prompt: string;
24
+ model?: string;
25
+ temperature?: number;
26
+ seed?: number;
27
+ }, options?: {
28
+ assert?: boolean;
29
+ }): Promise<PinResult>;
30
+ //# sourceMappingURL=pinning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinning.d.ts","sourceRoot":"","sources":["../src/pinning.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,GAAG;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAA;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,CAAA;IAChC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IAC5B,MAAM,IAAI,GAAG,EAAE,CAAA;IACf,MAAM,IAAI,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAA;IACpC,GAAG,EAAE,GAAG,CAAA;IACR,WAAW,CAAC,EAAE,GAAG,CAAA;CACjB;AAMD,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,QAAQ,CA+BzD;AAED,wBAAsB,SAAS,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/E,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC,SAAS,CAAC,CA0CpB"}
@@ -0,0 +1,33 @@
1
+ export interface PromptDefinition {
2
+ name: string;
3
+ version: string;
4
+ content: string;
5
+ variables: string[];
6
+ metadata?: Record<string, unknown>;
7
+ }
8
+ export interface PromptDiff {
9
+ name: string;
10
+ fromVersion: string;
11
+ toVersion: string;
12
+ changes: DiffLine[];
13
+ }
14
+ export interface DiffLine {
15
+ type: 'added' | 'removed' | 'unchanged';
16
+ lineNumber: number;
17
+ content: string;
18
+ }
19
+ export interface PromptRegistry {
20
+ register(name: string, prompt: PromptDefinition): void;
21
+ get(name: string, version?: string): PromptDefinition | undefined;
22
+ getLatest(name: string): PromptDefinition | undefined;
23
+ list(): Array<{
24
+ name: string;
25
+ versions: string[];
26
+ }>;
27
+ diff(name: string, fromVersion: string, toVersion: string): PromptDiff | null;
28
+ render(name: string, variables: Record<string, string>, version?: string): string;
29
+ getVersions(name: string): string[];
30
+ }
31
+ export declare function definePrompt(config: PromptDefinition): PromptDefinition;
32
+ export declare function createPromptRegistry(): PromptRegistry;
33
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,QAAQ,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAAA;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACtD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAA;IACjE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAA;IACrD,IAAI,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAA;IACnD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAA;IAC7E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACjF,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACnC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAEvE;AAiCD,wBAAgB,oBAAoB,IAAI,cAAc,CAwFrD"}
@@ -0,0 +1,37 @@
1
+ export interface RegressionBaseline {
2
+ name: string;
3
+ cases: Array<{
4
+ input: string;
5
+ output: string;
6
+ score: number;
7
+ timestamp: number;
8
+ }>;
9
+ createdAt: number;
10
+ updatedAt: number;
11
+ }
12
+ export interface RegressionResult {
13
+ name: string;
14
+ totalCases: number;
15
+ regressions: RegressionDetail[];
16
+ improvements: RegressionDetail[];
17
+ unchanged: number;
18
+ overallScore: number;
19
+ baselineScore: number;
20
+ }
21
+ export interface RegressionDetail {
22
+ input: string;
23
+ baselineOutput: string;
24
+ currentOutput: string;
25
+ baselineScore: number;
26
+ currentScore: number;
27
+ delta: number;
28
+ }
29
+ export interface RegressionSuite {
30
+ load(path: string): Promise<void>;
31
+ save(path: string): Promise<void>;
32
+ run(runner: (input: string) => Promise<string>, scorer?: (input: string, output: string) => Promise<number>): Promise<RegressionResult>;
33
+ addCase(input: string, output: string, score: number): void;
34
+ readonly baseline: RegressionBaseline | null;
35
+ }
36
+ export declare function createRegressionSuite(name: string): RegressionSuite;
37
+ //# sourceMappingURL=regression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regression.d.ts","sourceRoot":"","sources":["../src/regression.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;KACjB,CAAC,CAAA;IACF,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,gBAAgB,EAAE,CAAA;IAC/B,YAAY,EAAE,gBAAgB,EAAE,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,GAAG,CACF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAC1C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACzD,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC5B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3D,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAC5C;AAyFD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CA6DnE"}
@@ -0,0 +1,19 @@
1
+ import type { CompletionRequest, LLMResponse } from '@elsium-ai/core';
2
+ export interface ReplayEntry {
3
+ request: CompletionRequest;
4
+ response: LLMResponse;
5
+ timestamp: number;
6
+ }
7
+ export interface ReplayRecorder {
8
+ wrap(completeFn: (req: CompletionRequest) => Promise<LLMResponse>): (req: CompletionRequest) => Promise<LLMResponse>;
9
+ getEntries(): ReplayEntry[];
10
+ toJSON(): string;
11
+ clear(): void;
12
+ }
13
+ export interface ReplayPlayer {
14
+ complete(request: CompletionRequest): Promise<LLMResponse>;
15
+ readonly remaining: number;
16
+ }
17
+ export declare function createReplayRecorder(): ReplayRecorder;
18
+ export declare function createReplayPlayer(entriesOrJson: ReplayEntry[] | string): ReplayPlayer;
19
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAErE,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,iBAAiB,CAAA;IAC1B,QAAQ,EAAE,WAAW,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,CACH,UAAU,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,WAAW,CAAC,GAC1D,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD,UAAU,IAAI,WAAW,EAAE,CAAA;IAC3B,MAAM,IAAI,MAAM,CAAA;IAChB,KAAK,IAAI,IAAI,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC1B;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CA8BrD;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,YAAY,CAsBtF"}
@@ -0,0 +1,31 @@
1
+ import type { CompletionRequest } from '@elsium-ai/core';
2
+ export interface PromptSnapshot {
3
+ name: string;
4
+ request: {
5
+ system?: string;
6
+ messages: Array<{
7
+ role: string;
8
+ content: string;
9
+ }>;
10
+ model?: string;
11
+ };
12
+ outputHash: string;
13
+ timestamp: string;
14
+ }
15
+ export interface SnapshotStore {
16
+ get(name: string): PromptSnapshot | undefined;
17
+ set(name: string, snapshot: PromptSnapshot): void;
18
+ getAll(): PromptSnapshot[];
19
+ toJSON(): string;
20
+ }
21
+ export declare function createSnapshotStore(existing?: PromptSnapshot[]): SnapshotStore;
22
+ export declare function hashOutput(output: string): string;
23
+ export interface SnapshotTestResult {
24
+ name: string;
25
+ status: 'new' | 'match' | 'changed';
26
+ previousHash?: string;
27
+ currentHash: string;
28
+ output: string;
29
+ }
30
+ export declare function testSnapshot(name: string, store: SnapshotStore, runner: () => Promise<string>, request?: Partial<CompletionRequest>): Promise<SnapshotTestResult>;
31
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAClD,KAAK,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAA;IAC7C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAA;IACjD,MAAM,IAAI,cAAc,EAAE,CAAA;IAC1B,MAAM,IAAI,MAAM,CAAA;CAChB;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,GAAG,aAAa,CA0B9E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,CAAA;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,YAAY,CACjC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC7B,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAClC,OAAO,CAAC,kBAAkB,CAAC,CA2C7B"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@elsium-ai/testing",
3
+ "version": "0.1.6",
4
+ "description": "Testing utilities, mock providers, fixtures, and eval framework for ElsiumAI",
5
+ "license": "MIT",
6
+ "author": "Eric Utrera <ebutrera9103@gmail.com>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/elsium-ai/elsium-ai",
10
+ "directory": "packages/testing"
11
+ },
12
+ "type": "module",
13
+ "main": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "import": "./dist/index.js",
18
+ "types": "./dist/index.d.ts"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "scripts": {
25
+ "build": "bun build ./src/index.ts --outdir ./dist --target bun && bun x tsc -p tsconfig.build.json --emitDeclarationOnly",
26
+ "dev": "bun --watch src/index.ts"
27
+ },
28
+ "dependencies": {
29
+ "@elsium-ai/core": "workspace:*",
30
+ "@elsium-ai/gateway": "workspace:*",
31
+ "@elsium-ai/agents": "workspace:*",
32
+ "@elsium-ai/tools": "workspace:*"
33
+ },
34
+ "devDependencies": {
35
+ "bun-types": "^1.3.0",
36
+ "typescript": "^5.7.0"
37
+ }
38
+ }