Skip to main content

Overview

Adapters allow Geval to work with different eval tool formats. Geval includes built-in adapters for popular tools and provides a generic adapter for custom formats.

Built-in Adapters

GenericAdapter

Works with any JSON format that matches Geval’s normalized structure.
import { GenericAdapter } from "@geval-labs/core";

const adapter = new GenericAdapter();
const evalData = {
  evalName: "my-eval",
  runId: "run-123",
  metrics: {
    accuracy: 0.95,
    latency: 200
  }
};

const result = adapter.parse(evalData);

PromptfooAdapter

Automatically detects and parses Promptfoo output format.
import { PromptfooAdapter } from "@geval-labs/core";

const adapter = new PromptfooAdapter();
const promptfooOutput = {
  // Promptfoo format
};

const result = adapter.parse(promptfooOutput);

LangSmithAdapter

Parses LangSmith CSV exports.
import { LangSmithAdapter } from "@geval-labs/core";

const adapter = new LangSmithAdapter();
const langsmithCsv = `id,accuracy,latency
1,0.95,200
2,0.92,180`;

const result = adapter.parse(langsmithCsv);

OpenEvalsAdapter

Parses OpenEvals JSON format.
import { OpenEvalsAdapter } from "@geval-labs/core";

const adapter = new OpenEvalsAdapter();
const openevalsData = {
  // OpenEvals format
};

const result = adapter.parse(openevalsData);

Auto-Detection

Geval can automatically detect the format:
import { detectAdapter, parseWithAdapter } from "@geval-labs/core";

// Detect adapter
const adapterName = detectAdapter(evalData);

// Parse with detected adapter
const result = parseWithAdapter(evalData, adapterName);

Using Adapters

With parseEvalResult

parseEvalResult automatically detects and uses the appropriate adapter:
import { parseEvalResult } from "@geval-labs/core";

// Auto-detects format and uses appropriate adapter
const result = parseEvalResult(anyEvalData);

Explicit Adapter Usage

Use a specific adapter when you know the format:
import { PromptfooAdapter } from "@geval-labs/core";

const adapter = new PromptfooAdapter();
const result = adapter.parse(promptfooOutput);

Custom Formats

For custom formats, use the GenericAdapter with source configuration:
import { parseEvalSource } from "@geval-labs/core";

const csvContent = readFileSync("custom-export.csv", "utf-8");
const sourceConfig = {
  type: "csv",
  metrics: [
    { column: "score", aggregate: "avg" },
    { column: "passed", aggregate: "pass_rate" }
  ],
  evalName: { fixed: "custom-eval" }
};

const result = parseEvalSource(csvContent, sourceConfig);

Adapter Reference

AdapterFormatAuto-Detected
GenericAdapterNormalized JSON
PromptfooAdapterPromptfoo JSON
LangSmithAdapterLangSmith CSV
OpenEvalsAdapterOpenEvals JSON

Examples

Working with Multiple Formats

import {
  parseEvalResult,
  PromptfooAdapter,
  LangSmithAdapter,
} from "@geval-labs/core";

// Auto-detect
const result1 = parseEvalResult(promptfooData);

// Explicit adapter
const promptfooAdapter = new PromptfooAdapter();
const result2 = promptfooAdapter.parse(promptfooData);

// LangSmith CSV
const langsmithAdapter = new LangSmithAdapter();
const result3 = langsmithAdapter.parse(langsmithCsv);

Custom CSV Parsing

import { parseEvalSource } from "@geval-labs/core";

const customCsv = `id,my_score,status
1,0.95,pass
2,0.88,fail`;

const sourceConfig = {
  type: "csv",
  metrics: [
    { column: "my_score", aggregate: "avg", as: "average_score" },
    { column: "status", aggregate: "pass_rate", as: "success_rate" }
  ],
  evalName: { fixed: "custom-eval" }
};

const result = parseEvalSource(customCsv, sourceConfig);