Skip to content
reaatechREAATECH

@reaatech/pi-bench-corpus

pending npm

Generates and validates datasets of prompt injection attacks using a template-based engine that applies obfuscation strategies like synonym replacement and character manipulation. It provides factory functions to create builders and validators that ensure balanced, versioned, and reproducible corpora for security testing.

@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