Skip to content
reaatech

@reaatech/pi-bench-corpus

npm v1.0.1

A corpus builder, validator, and variant generation engine for prompt-injection-bench that produces balanced injection samples from YAML templates using synonym replacement, Unicode homoglyphs, and other obfuscation strategies. Exports factory functions (`createCorpusBuilder`, `createCorpusValidator`) and a `generateDefaultCorpus` function.

@reaatech/pi-bench-corpus

npm version License: MIT CI

Status: Pre-1.0 — APIs may change in minor versions. Pin to a specific version in production.

Attack corpus builder, validator, and variant generation engine for prompt-injection-bench. Generates balanced, validated injection samples from YAML templates with synonym and obfuscation strategies.

Installation

terminal
npm install @reaatech/pi-bench-corpus
# or
pnpm add @reaatech/pi-bench-corpus

Feature Overview

  • Template-based generation — Build corpora from YAML attack templates with variable substitution
  • Variant strategies — Synonym replacement, Unicode homoglyphs, whitespace tricks, case manipulation, comment injection
  • Automatic balancing — Ensure even distribution across all 8 attack categories
  • Validation — Detect duplicate samples, harmful content patterns, severity distribution gaps
  • Manifest generation — Versioned snapshots with hash proofs for reproducibility
  • Dual ESM/CJS output — works with import and require

Quick Start

typescript
import {
  generateDefaultCorpus,
  createCorpusBuilder,
  createCorpusValidator,
} from "@reaatech/pi-bench-corpus";
 
// Generate a balanced 40-sample-per-category default corpus
const corpus = generateDefaultCorpus();
console.log(`Generated ${corpus.length} injection samples`);
 
// Build a custom corpus
const builder = createCorpusBuilder({ samplesPerCategory: 100, minSeverity: "medium" });
builder.generateFromTemplates(customTemplates);
builder.balance();
const samples = builder.getSamples();
const manifest = builder.getManifest();
 
// Validate
const validator = createCorpusValidator();
const result = validator.validate(samples);
if (!result.valid) {
  for (const err of result.errors) console.error(err);
}

API Reference

CorpusBuilder

MethodDescription
addSamples(samples)Add pre-built samples to the corpus
generateFromTemplates(templates)Generate samples from attack template definitions
balance()Trim categories to equal size for even distribution
getSamples()Return all corpus samples
getSamplesByCategory(category)Filter samples by attack category
getManifest()Generate a CorpusManifest with counts and distribution

CorpusConfig

PropertyTypeDefaultDescription
versionstring2026.04Corpus version identifier
samplesPerCategorynumber40Target samples per category
minSeveritySeverityLevellowMinimum severity to include

createCorpusBuilder(config?)

Factory function. Returns a CorpusBuilder instance.

CorpusValidator

MethodDescription
validate(samples)Run full validation suite, returns ValidationResult

ValidationResult

PropertyTypeDescription
validbooleanWhether the corpus passes all checks
errorsstring[]Blocking validation errors
warningsstring[]Non-blocking warnings
statsobjectSample counts, severity and category breakdowns

createCorpusValidator(config?)

Factory function.

TemplateEngine

ExportDescription
generateVariants(template)Generate variant strings from an AttackTemplate
templateToSample(template, index)Convert template + variant index into an InjectionSample
generateSamplesFromTemplate(template)Generate all samples for a single template
validateTemplate(unknown)Validate a raw template object
createTemplate(definition)Build a template from a definition object
applyVariantStrategies(prompt, strategies)Apply obfuscation strategies to a prompt

Usage Patterns

Loading from YAML Templates

typescript
import { parse } from "yaml";
import { readFileSync } from "node:fs";
import { createCorpusBuilder } from "@reaatech/pi-bench-corpus";
 
const raw = readFileSync("corpus/examples/role-playing.yaml", "utf8");
const templates = parse(raw).templates;
 
const builder = createCorpusBuilder({ samplesPerCategory: 20 });
builder.generateFromTemplates(templates);

Validation in CI

typescript
import { generateDefaultCorpus, createCorpusValidator } from "@reaatech/pi-bench-corpus";
 
const corpus = generateDefaultCorpus();
const result = createCorpusValidator().validate(corpus);
 
if (!result.valid) {
  console.error("Corpus validation failed");
  process.exit(1);
}

License

MIT