Datasets
Loading Data into Evaluator
EvalSharp’s Evaluator class provides several static methods to load datasets in various formats and wire them up to your evaluation pipeline. Below is a guide to each loader and how to define the mapping to EvaluatorTestData.
1. FromData (In-Memory Collection)
Use when you already have a collection of EvaluatorTestData or another type that can be mapped directly.
// For EvaluatorTestData collection (no mapping needed)
var evaluator = Evaluator.FromData(chatClient, myTestDataList);
// For custom DTOs, map to EvaluatorTestData
var evaluator2 = Evaluator.FromData<MyDTO>(
chatClient,
DTOList,
// Map each DTO to EvaluatorTestData
DTO => new EvaluatorTestData {
InitialInput = DTO.Prompt,
ExpectedOutput = DTO.Expected,
Context = DTO.GoldContext,
RetrievalContext = DTO.RetrievedDocs
}
);
2. FromJson (Single JSON String)
Deserialize a JSON array of objects into your type, then map.
string json = File.ReadAllText("test-cases.json");
var evaluator = Evaluator.FromJson<MyRecord>(
chatClient,
json,
record => new EvaluatorTestData {
InitialInput = record.Question,
ExpectedOutput = record.Answer,
Context = record.ReferenceSnippets
}
);
- jsonOptions (optional): pass
JsonSerializerOptionsfor casing or custom converters.
3. FromJsonLines (NDJSON / JSON Lines)
Load newline-delimited JSON (one object per line).
IEnumerable<string> lines = File.ReadLines("ndjson.txt");
var evaluator = Evaluator.FromJsonLines<MyRecord>(
chatClient,
lines,
record => new EvaluatorTestData {
InitialInput = record.Input,
ExpectedOutput = record.Output
}
);
4. FromJsonFile (JSON File)
Shortcut to read and parse a JSON file in one call.
var evaluator = Evaluator.FromJsonFile<MyRecord>(
chatClient,
filePath: "data/test-cases.json",
map: record => new EvaluatorTestData {
InitialInput = record.Query,
ExpectedOutput = record.Result
}
);
5. FromCsv (CSV String)
Parse CSV text into your DTO, then map.
string csv = File.ReadAllText("cases.csv");
var evaluator = Evaluator.FromCsv<MyCsvModel>(
chatClient,
csv,
csvModel => new EvaluatorTestData {
InitialInput = csvModel.Prompt,
ExpectedOutput = csvModel.Expected
},
config: new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
);
6. FromCsvFile (CSV File)
Load and parse a CSV file directly.
var evaluator = Evaluator.FromCsvFile<MyCsvModel>(
chatClient,
filePath: "cases.csv",
map: csvModel => new EvaluatorTestData {
InitialInput = csvModel.Question,
ExpectedOutput = csvModel.Answer,
Context = csvModel.GoldContext.Split("|").ToList()
}
);
Mapping Tips
- Type parameter
Tcan beEvaluatorTestDataitself, in which case your map expression can bec => c. - Use C# 9 record types or DTO classes with properties matching your file schema.
- If your data type already is
EvaluatorTestData, preferFromData(chatClient, data)to skip mapping.
With these loaders, you can seamlessly plug in any data source—JSON, CSV, or in-memory collections—into EvalSharp’s evaluation engine.