JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 149
  • Score
    100M100P100Q76683F
  • License MIT

A minimalistic experiment runner for AI tasks

Package Exports

  • ai-experiments

Readme

ai-experiments

A minimalistic experiment runner for AI tasks.

Installation

npm install ai-experiments
# or
yarn add ai-experiments
# or
pnpm add ai-experiments

Usage

Basic Example

import { Experiment } from 'ai-experiments';

const result = await Experiment('simple-test', {
  models: ['gpt-4o'],
  temperature: 0.7,
  prompt: 'What is the capital of France?',
});

console.log(result);

Using Parameter Combinations

import { Experiment } from 'ai-experiments';

const result = await Experiment('temperature-comparison', {
  models: ['gpt-4o', 'gpt-4o-mini'],
  temperature: [0, 0.3, 0.7, 1.0],
  prompt: 'Generate a creative story about a robot.',
});

// This will run 8 combinations (2 models × 4 temperatures)
console.log(result);

Using the Cartesian Function Directly

import { cartesian } from 'ai-experiments';

const combinations = cartesian({
  model: ['gpt-4o', 'gpt-4o-mini'],
  temperature: [0, 0.7],
  maxTokens: [100, 500]
});

// Returns:
// [
//   { model: 'gpt-4o', temperature: 0, maxTokens: 100 },
//   { model: 'gpt-4o', temperature: 0, maxTokens: 500 },
//   { model: 'gpt-4o', temperature: 0.7, maxTokens: 100 },
//   { model: 'gpt-4o', temperature: 0.7, maxTokens: 500 },
//   { model: 'gpt-4o-mini', temperature: 0, maxTokens: 100 },
//   { model: 'gpt-4o-mini', temperature: 0, maxTokens: 500 },
//   { model: 'gpt-4o-mini', temperature: 0.7, maxTokens: 100 },
//   { model: 'gpt-4o-mini', temperature: 0.7, maxTokens: 500 }
// ]

Using the Runner

// vitest.config.ts
import { defineConfig } from 'vitest/config';
import { createRunner } from 'ai-experiments';

export default createRunner({
  outputDir: '.ai/experiments',
  testMatch: ['**/*experiment*.(js|ts|mjs|cjs)'],
  watch: false,
});

API Reference

Experiment

function Experiment<T = any, E = any>(
  name: string,
  config: ExperimentConfig<T, E>
): Promise<ExperimentResult>

Parameters

  • name: Name of the experiment
  • config: Configuration object with the following properties:
    • models: Array of model names to use
    • temperature: Number or array of temperature values
    • seed (optional): Number or array of seed values
    • prompt (optional): String or function that generates prompts
    • inputs (optional): Array or function that returns input values
    • expected (optional): Expected output for validation
    • schema (optional): Schema for structured output

Returns

Promise that resolves to an ExperimentResult object with:

  • name: Name of the experiment
  • results: Array of results for each parameter combination
  • totalTime: Total time taken for the experiment
  • timestamp: ISO string of when the experiment was run

cartesian

function cartesian<T extends Record<string, readonly any[]>>(
  spec: T
): Array<{ [K in keyof T]: T[K][number] }>

Parameters

  • spec: Object with keys mapping to arrays of values

Returns

Array of objects representing all possible combinations of the input values.

createRunner

function createRunner(config?: RunnerConfig): VitestConfig

Parameters

  • config (optional): Configuration object with the following properties:
    • outputDir (optional): Directory where experiment results will be saved
    • testMatch (optional): Custom test matcher pattern
    • watch (optional): Whether to watch for file changes

Returns

A Vitest configuration function that can be used in vitest.config.ts.