promptfoo 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/assertions.d.ts.map +1 -1
  3. package/dist/src/assertions.js +2 -1
  4. package/dist/src/assertions.js.map +1 -1
  5. package/dist/src/cache.d.ts.map +1 -1
  6. package/dist/src/cache.js +3 -2
  7. package/dist/src/cache.js.map +1 -1
  8. package/dist/src/evaluator.d.ts +2 -2
  9. package/dist/src/evaluator.d.ts.map +1 -1
  10. package/dist/src/evaluator.js +19 -5
  11. package/dist/src/evaluator.js.map +1 -1
  12. package/dist/src/fetch.d.ts +5 -0
  13. package/dist/src/fetch.d.ts.map +1 -0
  14. package/dist/src/fetch.js +57 -0
  15. package/dist/src/fetch.js.map +1 -0
  16. package/dist/src/index.d.ts.map +1 -1
  17. package/dist/src/index.js +2 -1
  18. package/dist/src/index.js.map +1 -1
  19. package/dist/src/main.js +8 -8
  20. package/dist/src/main.js.map +1 -1
  21. package/dist/src/matchers.d.ts.map +1 -1
  22. package/dist/src/matchers.js +16 -2
  23. package/dist/src/matchers.js.map +1 -1
  24. package/dist/src/onboarding.d.ts +1 -1
  25. package/dist/src/onboarding.d.ts.map +1 -1
  26. package/dist/src/onboarding.js +1 -1
  27. package/dist/src/prompts.d.ts +3 -0
  28. package/dist/src/prompts.d.ts.map +1 -1
  29. package/dist/src/prompts.js +193 -1
  30. package/dist/src/prompts.js.map +1 -1
  31. package/dist/src/telemetry.d.ts.map +1 -1
  32. package/dist/src/telemetry.js +2 -1
  33. package/dist/src/telemetry.js.map +1 -1
  34. package/dist/src/testCases.d.ts +9 -0
  35. package/dist/src/testCases.d.ts.map +1 -0
  36. package/dist/src/testCases.js +193 -0
  37. package/dist/src/testCases.js.map +1 -0
  38. package/dist/src/types.d.ts +3 -0
  39. package/dist/src/types.d.ts.map +1 -1
  40. package/dist/src/updates.js +2 -2
  41. package/dist/src/updates.js.map +1 -1
  42. package/dist/src/util.d.ts +1 -15
  43. package/dist/src/util.d.ts.map +1 -1
  44. package/dist/src/util.js +3 -334
  45. package/dist/src/util.js.map +1 -1
  46. package/dist/src/web/nextui/404/index.html +1 -1
  47. package/dist/src/web/nextui/404.html +1 -1
  48. package/dist/src/web/nextui/_next/static/chunks/webpack-58dcaba0d76eb1cc.js +1 -0
  49. package/dist/src/web/nextui/_next/static/css/3290c2c69da16f4f.css +1 -0
  50. package/dist/src/web/nextui/_next/static/css/9f930133a80febed.css +1 -0
  51. package/dist/src/web/nextui/eval/index.html +1 -1
  52. package/dist/src/web/nextui/eval/index.txt +6 -6
  53. package/dist/src/web/nextui/index.html +1 -1
  54. package/dist/src/web/nextui/index.txt +3 -3
  55. package/dist/src/web/nextui/setup/index.html +2 -2
  56. package/dist/src/web/nextui/setup/index.txt +4 -4
  57. package/package.json +1 -1
  58. package/dist/src/web/nextui/_next/static/chunks/webpack-dcf86e6c452ed420.js +0 -1
  59. package/dist/src/web/nextui/_next/static/css/7265c36d84346934.css +0 -1
  60. package/dist/src/web/nextui/_next/static/css/fc460b8a7cadb952.css +0 -1
  61. /package/dist/src/web/nextui/_next/static/{DnQDUETrvmnRwmEIY4Deh → 3sTGUbKaVsN4gM4m5QDuJ}/_buildManifest.js +0 -0
  62. /package/dist/src/web/nextui/_next/static/{DnQDUETrvmnRwmEIY4Deh → 3sTGUbKaVsN4gM4m5QDuJ}/_ssgManifest.js +0 -0
  63. /package/dist/src/web/nextui/_next/static/chunks/app/eval/[id]/{page-f49f9dde02e0609a.js → page-f5dfa4c42e382526.js} +0 -0
  64. /package/dist/src/web/nextui/_next/static/chunks/app/eval/{page-e7a68ae4a30dd34a.js → page-e8bda1754a10633a.js} +0 -0
@@ -1,22 +1,11 @@
1
1
  import nunjucks from 'nunjucks';
2
- import type { RequestInfo, RequestInit, Response } from 'node-fetch';
3
- import type { CsvRow, EvaluateSummary, UnifiedConfig, TestCase, Prompt, TestSuite } from './types';
4
- export declare function readProviderPromptMap(config: Partial<UnifiedConfig>, parsedPrompts: Prompt[]): TestSuite['providerPromptMap'];
2
+ import type { EvaluateSummary, UnifiedConfig } from './types';
5
3
  export declare function resetGlobalConfig(): void;
6
4
  export declare function readGlobalConfig(): any;
7
5
  export declare function maybeRecordFirstRun(): boolean;
8
6
  export declare function maybeReadConfig(configPath: string): Promise<UnifiedConfig | undefined>;
9
7
  export declare function readConfig(configPath: string): Promise<UnifiedConfig>;
10
- export declare function readPrompts(promptPathOrGlobs: string | string[] | Record<string, string>, basePath?: string): Prompt[];
11
- export declare function fetchCsvFromGoogleSheet(url: string): Promise<string>;
12
- export declare function readVarsFiles(pathOrGlobs: string | string[], basePath?: string): Promise<Record<string, string | string[] | object>>;
13
- export declare function readTestsFile(varsPath: string, basePath?: string): Promise<CsvRow[]>;
14
- type TestCaseWithVarsFile = TestCase<Record<string, string | string[] | object> | string | string[]>;
15
- export declare function readTest(test: string | TestCaseWithVarsFile, basePath?: string): Promise<TestCase>;
16
- export declare function readTests(tests: string | string[] | TestCase[] | undefined, basePath?: string): Promise<TestCase[]>;
17
8
  export declare function writeOutput(outputPath: string, results: EvaluateSummary, config: Partial<UnifiedConfig>, shareableUrl: string | null): void;
18
- export declare function fetchWithTimeout(url: RequestInfo, options: RequestInit | undefined, timeout: number): Promise<Response>;
19
- export declare function fetchWithRetries(url: RequestInfo, options: RequestInit | undefined, timeout: number, retries?: number): Promise<Response>;
20
9
  export declare function getConfigDirectoryPath(): string;
21
10
  export declare function getLatestResultsPath(): string;
22
11
  export declare function writeLatestResults(results: EvaluateSummary, config: Partial<UnifiedConfig>): void;
@@ -30,8 +19,5 @@ export declare function readLatestResults(): {
30
19
  results: EvaluateSummary;
31
20
  config: Partial<UnifiedConfig>;
32
21
  } | undefined;
33
- export declare function cosineSimilarity(vecA: number[], vecB: number[]): number;
34
- export declare function testCaseFromCsvRow(row: CsvRow): TestCase;
35
22
  export declare function getNunjucksEngine(): typeof nunjucks;
36
- export {};
37
23
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAMA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAMhC,OAAO,KAAK,EAAE,eAAe,EAAuB,aAAa,EAAE,MAAM,SAAS,CAAC;AAInF,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAgB,gBAAgB,IAAI,GAAG,CAiBtC;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAa7C;AAED,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAK5F;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgB3E;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,EAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,IAAI,CA8BN;AAID,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,QAkC1F;AAED,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAU9C;AAED,wBAAgB,iBAAiB,CAAC,SAAS,SAAwB,QAKlE;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,GACX;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;CAAE,GAAG,SAAS,CAS1E;AAED,wBAAgB,iBAAiB,IAC7B;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;CAAE,GAC5D,SAAS,CAEZ;AAED,wBAAgB,iBAAiB,oBAKhC"}
package/dist/src/util.js CHANGED
@@ -26,65 +26,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.getNunjucksEngine = exports.testCaseFromCsvRow = exports.cosineSimilarity = exports.readLatestResults = exports.readResult = exports.cleanupOldResults = exports.listPreviousResults = exports.writeLatestResults = exports.getLatestResultsPath = exports.getConfigDirectoryPath = exports.fetchWithRetries = exports.fetchWithTimeout = exports.writeOutput = exports.readTests = exports.readTest = exports.readTestsFile = exports.readVarsFiles = exports.fetchCsvFromGoogleSheet = exports.readPrompts = exports.readConfig = exports.maybeReadConfig = exports.maybeRecordFirstRun = exports.readGlobalConfig = exports.resetGlobalConfig = exports.readProviderPromptMap = void 0;
29
+ exports.getNunjucksEngine = exports.readLatestResults = exports.readResult = exports.cleanupOldResults = exports.listPreviousResults = exports.writeLatestResults = exports.getLatestResultsPath = exports.getConfigDirectoryPath = exports.writeOutput = exports.readConfig = exports.maybeReadConfig = exports.maybeRecordFirstRun = exports.readGlobalConfig = exports.resetGlobalConfig = void 0;
30
30
  const fs = __importStar(require("fs"));
31
31
  const path = __importStar(require("path"));
32
32
  const os = __importStar(require("os"));
33
- const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
34
33
  const json_schema_ref_parser_1 = __importDefault(require("@apidevtools/json-schema-ref-parser"));
35
- const node_fetch_1 = __importDefault(require("node-fetch"));
36
34
  const js_yaml_1 = __importDefault(require("js-yaml"));
37
35
  const nunjucks_1 = __importDefault(require("nunjucks"));
38
- const glob_1 = require("glob");
39
- const path_1 = require("path");
40
- const sync_1 = require("csv-parse/sync");
41
- const sync_2 = require("csv-stringify/sync");
36
+ const sync_1 = require("csv-stringify/sync");
42
37
  const logger_1 = __importDefault(require("./logger"));
43
38
  const esm_1 = require("./esm");
44
- function readProviderPromptMap(config, parsedPrompts) {
45
- const ret = {};
46
- if (!config.providers) {
47
- return ret;
48
- }
49
- const allPrompts = [];
50
- for (const prompt of parsedPrompts) {
51
- allPrompts.push(prompt.display);
52
- }
53
- if (typeof config.providers === 'string') {
54
- return { [config.providers]: allPrompts };
55
- }
56
- if (typeof config.providers === 'function') {
57
- return { 'Custom function': allPrompts };
58
- }
59
- for (const provider of config.providers) {
60
- if (typeof provider === 'object') {
61
- // It's either a ProviderOptionsMap or a ProviderOptions
62
- if (provider.id) {
63
- const rawProvider = provider;
64
- (0, tiny_invariant_1.default)(rawProvider.id, 'You must specify an `id` on the Provider when you override options.prompts');
65
- ret[rawProvider.id] = rawProvider.prompts || allPrompts;
66
- }
67
- else {
68
- const rawProvider = provider;
69
- const originalId = Object.keys(rawProvider)[0];
70
- const providerObject = rawProvider[originalId];
71
- const id = providerObject.id || originalId;
72
- ret[id] = rawProvider[originalId].prompts || allPrompts;
73
- }
74
- }
75
- }
76
- return ret;
77
- }
78
- exports.readProviderPromptMap = readProviderPromptMap;
79
- const PROMPT_DELIMITER = '---';
80
- function parseJson(json) {
81
- try {
82
- return JSON.parse(json);
83
- }
84
- catch (err) {
85
- return undefined;
86
- }
87
- }
88
39
  let globalConfigCache = null;
89
40
  function resetGlobalConfig() {
90
41
  globalConfigCache = null;
@@ -149,224 +100,11 @@ async function readConfig(configPath) {
149
100
  }
150
101
  }
151
102
  exports.readConfig = readConfig;
152
- var PromptInputType;
153
- (function (PromptInputType) {
154
- PromptInputType[PromptInputType["STRING"] = 1] = "STRING";
155
- PromptInputType[PromptInputType["ARRAY"] = 2] = "ARRAY";
156
- PromptInputType[PromptInputType["NAMED"] = 3] = "NAMED";
157
- })(PromptInputType || (PromptInputType = {}));
158
- function readPrompts(promptPathOrGlobs, basePath = '') {
159
- let promptPaths = [];
160
- let promptContents = [];
161
- let inputType;
162
- let resolvedPath;
163
- const resolvedPathToDisplay = new Map();
164
- if (typeof promptPathOrGlobs === 'string') {
165
- resolvedPath = path.resolve(basePath, promptPathOrGlobs);
166
- promptPaths = [resolvedPath];
167
- resolvedPathToDisplay.set(resolvedPath, promptPathOrGlobs);
168
- inputType = PromptInputType.STRING;
169
- }
170
- else if (Array.isArray(promptPathOrGlobs)) {
171
- promptPaths = promptPathOrGlobs.flatMap((pathOrGlob) => {
172
- resolvedPath = path.resolve(basePath, pathOrGlob);
173
- resolvedPathToDisplay.set(resolvedPath, pathOrGlob);
174
- return (0, glob_1.globSync)(resolvedPath);
175
- });
176
- inputType = PromptInputType.ARRAY;
177
- }
178
- else if (typeof promptPathOrGlobs === 'object') {
179
- promptPaths = Object.keys(promptPathOrGlobs).map((key) => {
180
- resolvedPath = path.resolve(basePath, key);
181
- resolvedPathToDisplay.set(resolvedPath, promptPathOrGlobs[key]);
182
- return resolvedPath;
183
- });
184
- inputType = PromptInputType.NAMED;
185
- }
186
- for (const promptPath of promptPaths) {
187
- const stat = fs.statSync(promptPath);
188
- if (stat.isDirectory()) {
189
- // FIXME(ian): Make directory handling share logic with file handling.
190
- const filesInDirectory = fs.readdirSync(promptPath);
191
- const fileContents = filesInDirectory.map((fileName) => {
192
- const joinedPath = path.join(promptPath, fileName);
193
- resolvedPath = path.resolve(basePath, joinedPath);
194
- resolvedPathToDisplay.set(resolvedPath, joinedPath);
195
- return fs.readFileSync(resolvedPath, 'utf-8');
196
- });
197
- promptContents.push(...fileContents.map((content) => ({ raw: content, display: content })));
198
- }
199
- else {
200
- const fileContent = fs.readFileSync(promptPath, 'utf-8');
201
- let display;
202
- if (inputType === PromptInputType.NAMED) {
203
- display = resolvedPathToDisplay.get(promptPath) || promptPath;
204
- }
205
- else {
206
- display = fileContent.length > 200 ? promptPath : fileContent;
207
- const ext = path.parse(promptPath).ext;
208
- if (ext === '.jsonl') {
209
- // Special case for JSONL file
210
- const jsonLines = fileContent.split(/\r?\n/).filter((line) => line.length > 0);
211
- for (const json of jsonLines) {
212
- promptContents.push({ raw: json, display: json });
213
- }
214
- continue;
215
- }
216
- }
217
- promptContents.push({ raw: fileContent, display });
218
- }
219
- }
220
- if (promptContents.length === 1 && inputType !== PromptInputType.NAMED) {
221
- const content = promptContents[0].raw;
222
- promptContents = content
223
- .split(PROMPT_DELIMITER)
224
- .map((p) => ({ raw: p.trim(), display: p.trim() }));
225
- }
226
- if (promptContents.length === 0) {
227
- throw new Error(`There are no prompts in ${JSON.stringify(promptPathOrGlobs)}`);
228
- }
229
- return promptContents;
230
- }
231
- exports.readPrompts = readPrompts;
232
- async function fetchCsvFromGoogleSheet(url) {
233
- const csvUrl = url.replace(/\/edit.*$/, '/export?format=csv');
234
- const response = await (0, node_fetch_1.default)(csvUrl);
235
- if (response.status !== 200) {
236
- throw new Error(`Failed to fetch CSV from Google Sheets URL: ${url}`);
237
- }
238
- const csvData = await response.text();
239
- return csvData;
240
- }
241
- exports.fetchCsvFromGoogleSheet = fetchCsvFromGoogleSheet;
242
- async function readVarsFiles(pathOrGlobs, basePath = '') {
243
- if (typeof pathOrGlobs === 'string') {
244
- pathOrGlobs = [pathOrGlobs];
245
- }
246
- const ret = {};
247
- for (const pathOrGlob of pathOrGlobs) {
248
- const resolvedPath = path.resolve(basePath, pathOrGlob);
249
- const paths = (0, glob_1.globSync)(resolvedPath);
250
- for (const p of paths) {
251
- const yamlData = js_yaml_1.default.load(fs.readFileSync(p, 'utf-8'));
252
- Object.assign(ret, yamlData);
253
- }
254
- }
255
- return ret;
256
- }
257
- exports.readVarsFiles = readVarsFiles;
258
- async function readTestsFile(varsPath, basePath = '') {
259
- // This function is confusingly named - it reads a CSV, JSON, or YAML file of
260
- // TESTS or test equivalents.
261
- const resolvedVarsPath = path.resolve(basePath, varsPath);
262
- const fileExtension = (0, path_1.parse)(varsPath).ext.slice(1);
263
- let rows = [];
264
- if (fileExtension === 'csv') {
265
- if (varsPath.startsWith('https://docs.google.com/spreadsheets/')) {
266
- const csvData = await fetchCsvFromGoogleSheet(varsPath);
267
- rows = (0, sync_1.parse)(csvData, { columns: true });
268
- }
269
- else {
270
- rows = (0, sync_1.parse)(fs.readFileSync(resolvedVarsPath, 'utf-8'), { columns: true });
271
- }
272
- }
273
- else if (fileExtension === 'json') {
274
- rows = parseJson(fs.readFileSync(resolvedVarsPath, 'utf-8'));
275
- }
276
- else if (fileExtension === 'yaml' || fileExtension === 'yml') {
277
- rows = js_yaml_1.default.load(fs.readFileSync(resolvedVarsPath, 'utf-8'));
278
- }
279
- return rows;
280
- }
281
- exports.readTestsFile = readTestsFile;
282
- async function readTest(test, basePath = '') {
283
- const loadTestWithVars = async (testCase, testBasePath) => {
284
- const ret = { ...testCase, vars: undefined };
285
- if (typeof testCase.vars === 'string' || Array.isArray(testCase.vars)) {
286
- ret.vars = await readVarsFiles(testCase.vars, testBasePath);
287
- }
288
- else if (typeof testCase.vars === 'object') {
289
- const vars = {};
290
- for (const [key, value] of Object.entries(testCase.vars)) {
291
- if (typeof value === 'string' && value.startsWith('file://')) {
292
- // Load file from disk.
293
- vars[key] = js_yaml_1.default.load(fs.readFileSync(value.slice('file://'.length), 'utf-8'));
294
- }
295
- else {
296
- // This is a normal key:value.
297
- vars[key] = value;
298
- }
299
- }
300
- ret.vars = vars;
301
- }
302
- return ret;
303
- };
304
- let testCase;
305
- if (typeof test === 'string') {
306
- const testFilePath = path.resolve(basePath, test);
307
- const testBasePath = path.dirname(testFilePath);
308
- const rawTestCase = js_yaml_1.default.load(fs.readFileSync(testFilePath, 'utf-8'));
309
- testCase = await loadTestWithVars(rawTestCase, testBasePath);
310
- }
311
- else {
312
- testCase = await loadTestWithVars(test, basePath);
313
- }
314
- // Validation of the shape of test
315
- if (!testCase.assert && !testCase.vars) {
316
- throw new Error(`Test case must have either "assert" or "vars" property. Instead got ${JSON.stringify(testCase, null, 2)}`);
317
- }
318
- return testCase;
319
- }
320
- exports.readTest = readTest;
321
- async function readTests(tests, basePath = '') {
322
- const ret = [];
323
- const loadTestsFromGlob = async (loadTestsGlob) => {
324
- const resolvedPath = path.resolve(basePath, loadTestsGlob);
325
- const testFiles = (0, glob_1.globSync)(resolvedPath);
326
- const ret = [];
327
- for (const testFile of testFiles) {
328
- const testFileContent = js_yaml_1.default.load(fs.readFileSync(testFile, 'utf-8'));
329
- for (const testCase of testFileContent) {
330
- ret.push(await readTest(testCase, path.dirname(testFile)));
331
- }
332
- }
333
- return ret;
334
- };
335
- if (typeof tests === 'string') {
336
- if (tests.endsWith('yaml') || tests.endsWith('yml')) {
337
- // Points to a tests file with multiple test cases
338
- return loadTestsFromGlob(tests);
339
- }
340
- else {
341
- // Points to a legacy vars.csv
342
- const vars = await readTestsFile(tests, basePath);
343
- return vars.map((row, idx) => {
344
- const test = testCaseFromCsvRow(row);
345
- test.description = `Row #${idx + 1}`;
346
- return test;
347
- });
348
- }
349
- }
350
- else if (Array.isArray(tests)) {
351
- for (const globOrTest of tests) {
352
- if (typeof globOrTest === 'string') {
353
- // Resolve globs
354
- ret.push(...(await loadTestsFromGlob(globOrTest)));
355
- }
356
- else {
357
- // It's just a TestCase
358
- ret.push(await readTest(globOrTest, basePath));
359
- }
360
- }
361
- }
362
- return ret;
363
- }
364
- exports.readTests = readTests;
365
103
  function writeOutput(outputPath, results, config, shareableUrl) {
366
104
  const outputExtension = outputPath.split('.').pop()?.toLowerCase();
367
105
  const outputToSimpleString = (output) => `${output.pass ? '[PASS]' : '[FAIL]'} (${output.score.toFixed(2)}) ${output.text}`;
368
106
  if (outputExtension === 'csv' || outputExtension === 'txt') {
369
- const csvOutput = (0, sync_2.stringify)([
107
+ const csvOutput = (0, sync_1.stringify)([
370
108
  [...results.table.head.prompts, ...results.table.head.vars],
371
109
  ...results.table.body.map((row) => [...row.outputs.map(outputToSimpleString), ...row.vars]),
372
110
  ]);
@@ -395,45 +133,6 @@ function writeOutput(outputPath, results, config, shareableUrl) {
395
133
  }
396
134
  }
397
135
  exports.writeOutput = writeOutput;
398
- function fetchWithTimeout(url, options = {}, timeout) {
399
- return new Promise((resolve, reject) => {
400
- const controller = new AbortController();
401
- const { signal } = controller;
402
- options.signal = signal;
403
- const timeoutId = setTimeout(() => {
404
- controller.abort();
405
- reject(new Error(`Request timed out after ${timeout} ms`));
406
- }, timeout);
407
- (0, node_fetch_1.default)(url, options)
408
- .then((response) => {
409
- clearTimeout(timeoutId);
410
- resolve(response);
411
- })
412
- .catch((error) => {
413
- clearTimeout(timeoutId);
414
- reject(error);
415
- });
416
- });
417
- }
418
- exports.fetchWithTimeout = fetchWithTimeout;
419
- async function fetchWithRetries(url, options = {}, timeout, retries = 4) {
420
- let lastError;
421
- const backoff = process.env.PROMPTFOO_REQUEST_BACKOFF_MS
422
- ? parseInt(process.env.PROMPTFOO_REQUEST_BACKOFF_MS, 10)
423
- : 5000;
424
- for (let i = 0; i < retries; i++) {
425
- try {
426
- return await fetchWithTimeout(url, options, timeout);
427
- }
428
- catch (error) {
429
- lastError = error;
430
- const waitTime = Math.pow(2, i) * (backoff + 1000 * Math.random());
431
- await new Promise((resolve) => setTimeout(resolve, waitTime));
432
- }
433
- }
434
- throw new Error(`Request failed after ${retries} retries: ${lastError.message}`);
435
- }
436
- exports.fetchWithRetries = fetchWithRetries;
437
136
  const RESULT_HISTORY_LENGTH = parseInt(process.env.RESULT_HISTORY_LENGTH || '', 10) || 50;
438
137
  function getConfigDirectoryPath() {
439
138
  return path.join(os.homedir(), '.promptfoo');
@@ -505,36 +204,6 @@ function readLatestResults() {
505
204
  return JSON.parse(fs.readFileSync(getLatestResultsPath(), 'utf-8'));
506
205
  }
507
206
  exports.readLatestResults = readLatestResults;
508
- function cosineSimilarity(vecA, vecB) {
509
- if (vecA.length !== vecB.length) {
510
- throw new Error('Vectors must be of equal length');
511
- }
512
- const dotProduct = vecA.reduce((acc, val, idx) => acc + val * vecB[idx], 0);
513
- const vecAMagnitude = Math.sqrt(vecA.reduce((acc, val) => acc + val * val, 0));
514
- const vecBMagnitude = Math.sqrt(vecB.reduce((acc, val) => acc + val * val, 0));
515
- return dotProduct / (vecAMagnitude * vecBMagnitude);
516
- }
517
- exports.cosineSimilarity = cosineSimilarity;
518
- function testCaseFromCsvRow(row) {
519
- const vars = {};
520
- const asserts = [];
521
- for (const [key, value] of Object.entries(row)) {
522
- if (key === '__expected') {
523
- if (value.trim() !== '') {
524
- const { assertionFromString } = require('./assertions');
525
- asserts.push(assertionFromString(value));
526
- }
527
- }
528
- else {
529
- vars[key] = value;
530
- }
531
- }
532
- return {
533
- vars,
534
- assert: asserts,
535
- };
536
- }
537
- exports.testCaseFromCsvRow = testCaseFromCsvRow;
538
207
  function getNunjucksEngine() {
539
208
  nunjucks_1.default.configure({
540
209
  autoescape: false,
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/_next/static/chunks/webpack-dcf86e6c452ed420.js" defer=""></script><script src="/_next/static/chunks/framework-8883d1e9be70c3da.js" defer=""></script><script src="/_next/static/chunks/main-8ea85465d428ecfe.js" defer=""></script><script src="/_next/static/chunks/pages/_app-52924524f99094ab.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c92d5c4bb2b49926.js" defer=""></script><script src="/_next/static/DnQDUETrvmnRwmEIY4Deh/_buildManifest.js" defer=""></script><script src="/_next/static/DnQDUETrvmnRwmEIY4Deh/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"DnQDUETrvmnRwmEIY4Deh","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/_next/static/chunks/webpack-58dcaba0d76eb1cc.js" defer=""></script><script src="/_next/static/chunks/framework-8883d1e9be70c3da.js" defer=""></script><script src="/_next/static/chunks/main-8ea85465d428ecfe.js" defer=""></script><script src="/_next/static/chunks/pages/_app-52924524f99094ab.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c92d5c4bb2b49926.js" defer=""></script><script src="/_next/static/3sTGUbKaVsN4gM4m5QDuJ/_buildManifest.js" defer=""></script><script src="/_next/static/3sTGUbKaVsN4gM4m5QDuJ/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"3sTGUbKaVsN4gM4m5QDuJ","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/_next/static/chunks/webpack-dcf86e6c452ed420.js" defer=""></script><script src="/_next/static/chunks/framework-8883d1e9be70c3da.js" defer=""></script><script src="/_next/static/chunks/main-8ea85465d428ecfe.js" defer=""></script><script src="/_next/static/chunks/pages/_app-52924524f99094ab.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c92d5c4bb2b49926.js" defer=""></script><script src="/_next/static/DnQDUETrvmnRwmEIY4Deh/_buildManifest.js" defer=""></script><script src="/_next/static/DnQDUETrvmnRwmEIY4Deh/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"DnQDUETrvmnRwmEIY4Deh","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/_next/static/chunks/webpack-58dcaba0d76eb1cc.js" defer=""></script><script src="/_next/static/chunks/framework-8883d1e9be70c3da.js" defer=""></script><script src="/_next/static/chunks/main-8ea85465d428ecfe.js" defer=""></script><script src="/_next/static/chunks/pages/_app-52924524f99094ab.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c92d5c4bb2b49926.js" defer=""></script><script src="/_next/static/3sTGUbKaVsN4gM4m5QDuJ/_buildManifest.js" defer=""></script><script src="/_next/static/3sTGUbKaVsN4gM4m5QDuJ/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"3sTGUbKaVsN4gM4m5QDuJ","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1 @@
1
+ !function(){"use strict";var e,t,n,r,o,u,i,c,f,a={},l={};function s(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}},r=!0;try{a[e].call(n.exports,n,n.exports,s),r=!1}finally{r&&delete l[e]}return n.exports}s.m=a,e=[],s.O=function(t,n,r,o){if(n){o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o];return}for(var i=1/0,u=0;u<e.length;u++){for(var n=e[u][0],r=e[u][1],o=e[u][2],c=!0,f=0;f<n.length;f++)i>=o&&Object.keys(s.O).every(function(e){return s.O[e](n[f])})?n.splice(f--,1):(c=!1,o<i&&(i=o));if(c){e.splice(u--,1);var a=r();void 0!==a&&(t=a)}}return t},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},s.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var o=Object.create(null);s.r(o);var u={};t=t||[null,n({}),n([]),n(n)];for(var i=2&r&&e;"object"==typeof i&&!~t.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach(function(t){u[t]=function(){return e[t]}});return u.default=function(){return e},s.d(o,u),o},s.d=function(e,t){for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce(function(t,n){return s.f[n](e,t),t},[]))},s.u=function(e){return"static/chunks/"+e+"-501c32916b785ef1.js"},s.miniCssF=function(e){return"static/css/"+({11:"9f930133a80febed",185:"ff2293947f885320",413:"16c1dd82fc87c9d7",421:"3290c2c69da16f4f",466:"48d388184a2f4ce3",931:"8119d8bd13a8adab"})[e]+".css"},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="_N_E:",s.l=function(e,t,n,u){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var i,c,f=document.getElementsByTagName("script"),a=0;a<f.length;a++){var l=f[a];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==o+n){i=l;break}}i||(c=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,s.nc&&i.setAttribute("nonce",s.nc),i.setAttribute("data-webpack",o+n),i.src=s.tu(e)),r[e]=[t];var d=function(t,n){i.onerror=i.onload=null,clearTimeout(p);var o=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),c&&document.head.appendChild(i)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.tt=function(){return void 0===u&&(u={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(u=trustedTypes.createPolicy("nextjs#bundler",u))),u},s.tu=function(e){return s.tt().createScriptURL(e)},s.p="/_next/",i={272:0},s.f.j=function(e,t){var n=s.o(i,e)?i[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(272!=e){var r=new Promise(function(t,r){n=i[e]=[t,r]});t.push(n[2]=r);var o=s.p+s.u(e),u=Error();s.l(o,function(t){if(s.o(i,e)&&(0!==(n=i[e])&&(i[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;u.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",u.name="ChunkLoadError",u.type=r,u.request=o,n[1](u)}},"chunk-"+e,e)}else i[e]=0}},s.O.j=function(e){return 0===i[e]},c=function(e,t){var n,r,o=t[0],u=t[1],c=t[2],f=0;if(o.some(function(e){return 0!==i[e]})){for(n in u)s.o(u,n)&&(s.m[n]=u[n]);if(c)var a=c(s)}for(e&&e(t);f<o.length;f++)r=o[f],s.o(i,r)&&i[r]&&i[r][0](),i[r]=0;return s.O(a)},(f=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(c.bind(null,0)),f.push=c.bind(null,f.push.bind(f))}();
@@ -0,0 +1 @@
1
+ .divTable,table{border:1px solid var(--table-border-color);border-collapse:collapse;width:100%;margin:1rem 0;box-shadow:0 2px 4px rgba(0,0,0,.1)}ins{background-color:var(--insert-highlight-color);text-decoration:none}del{background-color:var(--delete-highlight-color);-webkit-text-decoration:strikethrough;text-decoration:strikethrough}.tr{display:flex}.tr,tr{width:-moz-fit-content;width:fit-content}.tr:hover,tr:hover{background-color:rgba(0,0,0,.05)}.td,.th,td,th{position:relative;box-shadow:inset 0 0 0 1px var(--border-color);vertical-align:top;padding:1.5rem}.td.variable,.th.variable,td.variable,th.variable{background-color:var(--variable-background-color)}tr.header{background-color:var(--header-background-color)}.th,th{padding:1rem;position:relative;vertical-align:bottom;text-align:left;white-space:pre-wrap}th .action{cursor:pointer;margin-left:.5rem}tr .cell-actions{display:flex;gap:.5rem;bottom:1.25rem;right:0;line-height:0;font-size:1.75rem}tr .cell-actions,tr .cell-detail{visibility:hidden;position:absolute}tr .cell-detail{bottom:.25rem;margin-top:1rem;font-size:.75rem;color:#888}tr:hover .cell-actions,tr:hover .cell-detail{visibility:visible}tr .cell-actions .action{cursor:pointer}th .smalltext{visibility:hidden;font-weight:400;font-size:.75rem;color:var(--smalltext-color)}th:hover .smalltext{visibility:visible}th .summary{font-weight:400;font-size:.8rem;padding:.25rem}th .summary.highlight{background-color:var(--success-background-color)}td .status{margin-bottom:.5rem;font-weight:700}td .score{font-weight:400}td .pass{color:var(--pass-color)}td .fail{color:var(--fail-color)}.first-prompt-col{border-left:2px solid #888}.first-prompt-row{border-top:2px solid #888}.resizer{position:absolute;right:0;top:0;height:100%;width:5px;cursor:col-resize;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:none;background:var(--text-color);opacity:.5}.resizer.isResizing{background:var(--text-color);opacity:1}@media (hover:hover){.resizer{opacity:0}:hover>.resizer{opacity:1}}body{background-color:var(--background-color);color:var(--text-color)}.error,.loading{display:flex;flex-direction:column;gap:1.5rem;justify-content:center;align-items:center;height:9rem}.error{font-size:1.5rem}
@@ -0,0 +1 @@
1
+ .divTable,table{border:1px solid var(--table-border-color);border-collapse:collapse;width:100%;margin:1rem 0;box-shadow:0 2px 4px rgba(0,0,0,.1)}ins{background-color:var(--insert-highlight-color);text-decoration:none}del{background-color:var(--delete-highlight-color);-webkit-text-decoration:strikethrough;text-decoration:strikethrough}.tr{display:flex}.tr,tr{width:-moz-fit-content;width:fit-content}.tr:hover,tr:hover{background-color:rgba(0,0,0,.05)}.td,.th,td,th{position:relative;box-shadow:inset 0 0 0 1px var(--border-color);vertical-align:top;padding:1.5rem}.td.variable,.th.variable,td.variable,th.variable{background-color:var(--variable-background-color)}tr.header{background-color:var(--header-background-color)}.th,th{padding:1rem;position:relative;vertical-align:bottom;text-align:left;white-space:pre-wrap}th .action{cursor:pointer;margin-left:.5rem}tr .cell-actions{display:flex;gap:.5rem;bottom:1.25rem;right:0;line-height:0;font-size:1.75rem}tr .cell-actions,tr .cell-detail{visibility:hidden;position:absolute}tr .cell-detail{bottom:.25rem;margin-top:1rem;font-size:.75rem;color:#888}tr:hover .cell-actions,tr:hover .cell-detail{visibility:visible}tr .cell-actions .action{cursor:pointer}th .smalltext{visibility:hidden;font-weight:400;font-size:.75rem;color:var(--smalltext-color)}th:hover .smalltext{visibility:visible}th .summary{font-weight:400;font-size:.8rem;padding:.25rem}th .summary.highlight{background-color:var(--success-background-color)}td .status{margin-bottom:.5rem;font-weight:700}td .score{font-weight:400}td .pass{color:var(--pass-color)}td .fail{color:var(--fail-color)}.first-prompt-col{border-left:2px solid #888}.first-prompt-row{border-top:2px solid #888}.resizer{position:absolute;right:0;top:0;height:100%;width:5px;cursor:col-resize;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:none;background:var(--text-color);opacity:.5}.resizer.isResizing{background:var(--text-color);opacity:1}@media (hover:hover){.resizer{opacity:0}:hover>.resizer{opacity:1}}body{background-color:var(--background-color);color:var(--text-color)}.loading{display:flex;flex-direction:column;gap:1.5rem;justify-content:center;align-items:center;height:9rem}
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><link rel="preload" as="font" href="/_next/static/media/0e4fe491bf84089c-s.p.woff2" crossorigin="" type="font/woff2"/><link rel="preload" as="font" href="/_next/static/media/627622453ef56b0d-s.p.woff2" crossorigin="" type="font/woff2"/><link rel="preload" as="font" href="/_next/static/media/934c4b7cb736f2a3-s.p.woff2" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/ff2293947f885320.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/fc460b8a7cadb952.css" data-precedence="next"/><link rel="preload" href="/_next/static/chunks/webpack-dcf86e6c452ed420.js" as="script"/><link rel="preload" href="/_next/static/chunks/fd9d1056-fba4b53a2f01213b.js" as="script"/><link rel="preload" href="/_next/static/chunks/596-297f7ff4a0436e87.js" as="script"/><link rel="preload" href="/_next/static/chunks/main-app-a18517c2b68322ff.js" as="script"/><title>promptfoo</title><meta name="description" content="LLM testing and evaluation"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta property="og:image" content="https://www.promptfoo.dev/img/thumbnail.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://www.promptfoo.dev/img/thumbnail.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js" noModule=""></script></head><body class="__className_979022"><div><style data-emotion="css jj2ztu">.css-jj2ztu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}.css-jj2ztu>:not(style):not(style){margin:0;}.css-jj2ztu>:not(style)~:not(style){margin-left:16px;}</style><div class="MuiStack-root nav css-jj2ztu"><div class="logo MuiBox-root css-0"><img alt="Promptfoo logo" loading="lazy" width="25" height="25" decoding="async" data-nimg="1" style="color:transparent" src="/logo.svg"/> <span>promptfoo</span></div><a href="/setup/">New Eval</a><a href="/eval/">View Evals</a><div class="dark-mode-toggle"><style data-emotion="css vubbuv">.css-vubbuv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;fill:currentColor;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1.5rem;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-vubbuv" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="LightModeIcon"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z"></path></svg></div></div><div><div class="loading"><div><style data-emotion="css z01bqi animation-61bdi0">.css-z01bqi{display:inline-block;color:#1976d2;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorPrimary css-z01bqi" style="width:22px;height:22px" role="progressbar"><style data-emotion="css 13o7eu2">.css-13o7eu2{display:block;}</style><svg class="MuiCircularProgress-svg css-13o7eu2" viewBox="22 22 44 44"><style data-emotion="css 14891ef animation-1p2h4ri">.css-14891ef{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1p2h4ri 1.4s ease-in-out infinite;animation:animation-1p2h4ri 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1p2h4ri{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:100px,200px;stroke-dashoffset:-125px;}}@keyframes animation-1p2h4ri{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:100px,200px;stroke-dashoffset:-125px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-14891ef" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></div><div>Loading eval data</div></div></div></div><script src="/_next/static/chunks/webpack-dcf86e6c452ed420.js" async=""></script><script src="/_next/static/chunks/fd9d1056-fba4b53a2f01213b.js" async=""></script><script src="/_next/static/chunks/596-297f7ff4a0436e87.js" async=""></script><script src="/_next/static/chunks/main-app-a18517c2b68322ff.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/0e4fe491bf84089c-s.p.woff2\",{\"as\":\"font\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/media/627622453ef56b0d-s.p.woff2\",{\"as\":\"font\",\"type\":\"font/woff2\"}]\n3:HL[\"/_next/static/media/934c4b7cb736f2a3-s.p.woff2\",{\"as\":\"font\",\"type\":\"font/woff2\"}]\n4:HL[\"/_next/static/css/ff2293947f885320.css\",{\"as\":\"style\"}]\n0:\"$L5\"\n"])</script><script>self.__next_f.push([1,"6:HL[\"/_next/static/css/fc460b8a7cadb952.css\",{\"as\":\"style\"}]\n"])</script><script>self.__next_f.push([1,"7:I{\"id\":7948,\"chunks\":[\"272:static/chunks/webpack-dcf86e6c452ed420.js\",\"971:static/chunks/fd9d1056-fba4b53a2f01213b.js\",\"596:static/chunks/596-297f7ff4a0436e87.js\"],\"name\":\"default\",\"async\":false}\n9:I{\"id\":6628,\"chunks\":[\"272:static/chunks/webpack-dcf86e6c452ed420.js\",\"971:static/chunks/fd9d1056-fba4b53a2f01213b.js\",\"596:static/chunks/596-297f7ff4a0436e87.js\"],\"name\":\"\",\"async\":false}\na:I{\"id\":898,\"chunks\":[\"706:static/chunks/706-be905c29f0baf0b7.js\",\"396:static/chunks/396-0a51429a01e24cdd.js\",\"613:static/"])</script><script>self.__next_f.push([1,"chunks/613-b8dbbee738eefa17.js\",\"185:static/chunks/app/layout-d60ac3764e5cf889.js\"],\"name\":\"PageShell\",\"async\":false}\nb:I{\"id\":7767,\"chunks\":[\"272:static/chunks/webpack-dcf86e6c452ed420.js\",\"971:static/chunks/fd9d1056-fba4b53a2f01213b.js\",\"596:static/chunks/596-297f7ff4a0436e87.js\"],\"name\":\"default\",\"async\":false}\nc:I{\"id\":7920,\"chunks\":[\"272:static/chunks/webpack-dcf86e6c452ed420.js\",\"971:static/chunks/fd9d1056-fba4b53a2f01213b.js\",\"596:static/chunks/596-297f7ff4a0436e87.js\"],\"name\":\"default\",\"async\":false"])</script><script>self.__next_f.push([1,"}\ne:I{\"id\":6891,\"chunks\":[\"674:static/chunks/ca377847-26b462611379a4f7.js\",\"706:static/chunks/706-be905c29f0baf0b7.js\",\"249:static/chunks/249-ea9c0f034888ccff.js\",\"226:static/chunks/226-7bbb6c98a19542fd.js\",\"891:static/chunks/891-edb1eb13e9d8fd36.js\",\"11:static/chunks/app/eval/page-e7a68ae4a30dd34a.js\"],\"name\":\"\",\"async\":false}\n"])</script><script>self.__next_f.push([1,"5:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ff2293947f885320.css\",\"precedence\":\"next\"}]],[\"$\",\"$L7\",null,{\"buildId\":\"DnQDUETrvmnRwmEIY4Deh\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/eval/\",\"initialTree\":[\"\",{\"children\":[\"eval\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialHead\":\"$L8\",\"globalErrorComponent\":\"$9\",\"children\":[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__className_979022\",\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"hasLoading\":false,\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":\"$undefined\",\"childProp\":{\"current\":[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"eval\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"hasLoading\":false,\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"childProp\":{\"current\":[\"$Ld\",[\"$\",\"$Le\",null,{}],null],\"segment\":\"__PAGE__\"},\"styles\":[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/fc460b8a7cadb952.css\",\"precedence\":\"next\"}]]}],\"segment\":\"eval\"},\"styles\":[]}]}]}]}],null]}]]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"1\",{\"children\":\"promptfoo\"}],[\"$\",\"meta\",\"2\",{\"name\":\"description\",\"content\":\"LLM testing and evaluation\"}],[\"$\",\"meta\",\"3\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:image\",\"content\":\"https://www.promptfoo.dev/img/thumbnail.png\"}],[\"$\",\"meta\",\"5\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"6\",{\"name\":\"twitter:image\",\"content\":\"https://www.promptfoo.dev/img/thumbnail.png\"}],[\"$\",\"meta\",\"7\",{\"name\":\"next-size-adjust\"}]]\n"])</script><script>self.__next_f.push([1,"d:null\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><link rel="preload" as="font" href="/_next/static/media/0e4fe491bf84089c-s.p.woff2" crossorigin="" type="font/woff2"/><link rel="preload" as="font" href="/_next/static/media/627622453ef56b0d-s.p.woff2" crossorigin="" type="font/woff2"/><link rel="preload" as="font" href="/_next/static/media/934c4b7cb736f2a3-s.p.woff2" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/ff2293947f885320.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/9f930133a80febed.css" data-precedence="next"/><link rel="preload" href="/_next/static/chunks/webpack-58dcaba0d76eb1cc.js" as="script"/><link rel="preload" href="/_next/static/chunks/fd9d1056-fba4b53a2f01213b.js" as="script"/><link rel="preload" href="/_next/static/chunks/596-297f7ff4a0436e87.js" as="script"/><link rel="preload" href="/_next/static/chunks/main-app-a18517c2b68322ff.js" as="script"/><title>promptfoo</title><meta name="description" content="LLM testing and evaluation"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta property="og:image" content="https://www.promptfoo.dev/img/thumbnail.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://www.promptfoo.dev/img/thumbnail.png"/><meta name="next-size-adjust"/><script src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js" noModule=""></script></head><body class="__className_979022"><div><style data-emotion="css jj2ztu">.css-jj2ztu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}.css-jj2ztu>:not(style):not(style){margin:0;}.css-jj2ztu>:not(style)~:not(style){margin-left:16px;}</style><div class="MuiStack-root nav css-jj2ztu"><div class="logo MuiBox-root css-0"><img alt="Promptfoo logo" loading="lazy" width="25" height="25" decoding="async" data-nimg="1" style="color:transparent" src="/logo.svg"/> <span>promptfoo</span></div><a href="/setup/">New Eval</a><a href="/eval/">View Evals</a><div class="dark-mode-toggle"><style data-emotion="css vubbuv">.css-vubbuv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;fill:currentColor;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;font-size:1.5rem;}</style><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-vubbuv" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="LightModeIcon"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zM2 13h2c.55 0 1-.45 1-1s-.45-1-1-1H2c-.55 0-1 .45-1 1s.45 1 1 1zm18 0h2c.55 0 1-.45 1-1s-.45-1-1-1h-2c-.55 0-1 .45-1 1s.45 1 1 1zM11 2v2c0 .55.45 1 1 1s1-.45 1-1V2c0-.55-.45-1-1-1s-1 .45-1 1zm0 18v2c0 .55.45 1 1 1s1-.45 1-1v-2c0-.55-.45-1-1-1s-1 .45-1 1zM5.99 4.58c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0s.39-1.03 0-1.41L5.99 4.58zm12.37 12.37c-.39-.39-1.03-.39-1.41 0-.39.39-.39 1.03 0 1.41l1.06 1.06c.39.39 1.03.39 1.41 0 .39-.39.39-1.03 0-1.41l-1.06-1.06zm1.06-10.96c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06zM7.05 18.36c.39-.39.39-1.03 0-1.41-.39-.39-1.03-.39-1.41 0l-1.06 1.06c-.39.39-.39 1.03 0 1.41s1.03.39 1.41 0l1.06-1.06z"></path></svg></div></div><div><div class="loading"><div><style data-emotion="css z01bqi animation-61bdi0">.css-z01bqi{display:inline-block;color:#1976d2;-webkit-animation:animation-61bdi0 1.4s linear infinite;animation:animation-61bdi0 1.4s linear infinite;}@-webkit-keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes animation-61bdi0{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}</style><span class="MuiCircularProgress-root MuiCircularProgress-indeterminate MuiCircularProgress-colorPrimary css-z01bqi" style="width:22px;height:22px" role="progressbar"><style data-emotion="css 13o7eu2">.css-13o7eu2{display:block;}</style><svg class="MuiCircularProgress-svg css-13o7eu2" viewBox="22 22 44 44"><style data-emotion="css 14891ef animation-1p2h4ri">.css-14891ef{stroke:currentColor;stroke-dasharray:80px,200px;stroke-dashoffset:0;-webkit-animation:animation-1p2h4ri 1.4s ease-in-out infinite;animation:animation-1p2h4ri 1.4s ease-in-out infinite;}@-webkit-keyframes animation-1p2h4ri{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:100px,200px;stroke-dashoffset:-125px;}}@keyframes animation-1p2h4ri{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0;}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px;}100%{stroke-dasharray:100px,200px;stroke-dashoffset:-125px;}}</style><circle class="MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate css-14891ef" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></span></div><div>Loading eval data</div></div></div></div><script src="/_next/static/chunks/webpack-58dcaba0d76eb1cc.js" async=""></script><script src="/_next/static/chunks/fd9d1056-fba4b53a2f01213b.js" async=""></script><script src="/_next/static/chunks/596-297f7ff4a0436e87.js" async=""></script><script src="/_next/static/chunks/main-app-a18517c2b68322ff.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/0e4fe491bf84089c-s.p.woff2\",{\"as\":\"font\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/media/627622453ef56b0d-s.p.woff2\",{\"as\":\"font\",\"type\":\"font/woff2\"}]\n3:HL[\"/_next/static/media/934c4b7cb736f2a3-s.p.woff2\",{\"as\":\"font\",\"type\":\"font/woff2\"}]\n4:HL[\"/_next/static/css/ff2293947f885320.css\",{\"as\":\"style\"}]\n0:\"$L5\"\n"])</script><script>self.__next_f.push([1,"6:HL[\"/_next/static/css/9f930133a80febed.css\",{\"as\":\"style\"}]\n"])</script><script>self.__next_f.push([1,"7:I{\"id\":7948,\"chunks\":[\"272:static/chunks/webpack-58dcaba0d76eb1cc.js\",\"971:static/chunks/fd9d1056-fba4b53a2f01213b.js\",\"596:static/chunks/596-297f7ff4a0436e87.js\"],\"name\":\"default\",\"async\":false}\n9:I{\"id\":6628,\"chunks\":[\"272:static/chunks/webpack-58dcaba0d76eb1cc.js\",\"971:static/chunks/fd9d1056-fba4b53a2f01213b.js\",\"596:static/chunks/596-297f7ff4a0436e87.js\"],\"name\":\"\",\"async\":false}\na:I{\"id\":898,\"chunks\":[\"706:static/chunks/706-be905c29f0baf0b7.js\",\"396:static/chunks/396-0a51429a01e24cdd.js\",\"613:static/"])</script><script>self.__next_f.push([1,"chunks/613-b8dbbee738eefa17.js\",\"185:static/chunks/app/layout-d60ac3764e5cf889.js\"],\"name\":\"PageShell\",\"async\":false}\nb:I{\"id\":7767,\"chunks\":[\"272:static/chunks/webpack-58dcaba0d76eb1cc.js\",\"971:static/chunks/fd9d1056-fba4b53a2f01213b.js\",\"596:static/chunks/596-297f7ff4a0436e87.js\"],\"name\":\"default\",\"async\":false}\nc:I{\"id\":7920,\"chunks\":[\"272:static/chunks/webpack-58dcaba0d76eb1cc.js\",\"971:static/chunks/fd9d1056-fba4b53a2f01213b.js\",\"596:static/chunks/596-297f7ff4a0436e87.js\"],\"name\":\"default\",\"async\":false"])</script><script>self.__next_f.push([1,"}\ne:I{\"id\":6891,\"chunks\":[\"674:static/chunks/ca377847-26b462611379a4f7.js\",\"706:static/chunks/706-be905c29f0baf0b7.js\",\"249:static/chunks/249-ea9c0f034888ccff.js\",\"226:static/chunks/226-7bbb6c98a19542fd.js\",\"891:static/chunks/891-edb1eb13e9d8fd36.js\",\"11:static/chunks/app/eval/page-e8bda1754a10633a.js\"],\"name\":\"\",\"async\":false}\n"])</script><script>self.__next_f.push([1,"5:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ff2293947f885320.css\",\"precedence\":\"next\"}]],[\"$\",\"$L7\",null,{\"buildId\":\"3sTGUbKaVsN4gM4m5QDuJ\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/eval/\",\"initialTree\":[\"\",{\"children\":[\"eval\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialHead\":\"$L8\",\"globalErrorComponent\":\"$9\",\"children\":[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"__className_979022\",\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"hasLoading\":false,\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":\"$undefined\",\"childProp\":{\"current\":[\"$\",\"$Lb\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"eval\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"hasLoading\":false,\"template\":[\"$\",\"$Lc\",null,{}],\"templateStyles\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"childProp\":{\"current\":[\"$Ld\",[\"$\",\"$Le\",null,{}],null],\"segment\":\"__PAGE__\"},\"styles\":[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9f930133a80febed.css\",\"precedence\":\"next\"}]]}],\"segment\":\"eval\"},\"styles\":[]}]}]}]}],null]}]]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"1\",{\"children\":\"promptfoo\"}],[\"$\",\"meta\",\"2\",{\"name\":\"description\",\"content\":\"LLM testing and evaluation\"}],[\"$\",\"meta\",\"3\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:image\",\"content\":\"https://www.promptfoo.dev/img/thumbnail.png\"}],[\"$\",\"meta\",\"5\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"6\",{\"name\":\"twitter:image\",\"content\":\"https://www.promptfoo.dev/img/thumbnail.png\"}],[\"$\",\"meta\",\"7\",{\"name\":\"next-size-adjust\"}]]\n"])</script><script>self.__next_f.push([1,"d:null\n"])</script></body></html>