promptfoo 0.94.5 → 0.95.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 (145) hide show
  1. package/dist/drizzle/0010_needy_bishop.sql +11 -0
  2. package/dist/drizzle/meta/0010_snapshot.json +691 -0
  3. package/dist/drizzle/meta/_journal.json +7 -0
  4. package/dist/package.json +15 -15
  5. package/dist/src/app/assets/{index-DPkfMrKn.css → index-YwjS5Vq2.css} +1 -1
  6. package/dist/src/app/assets/index-zXzgAsKj.js +769 -0
  7. package/dist/src/app/assets/{index.es-C1C9rdhp.js → index.es-Jztl1qad.js} +1 -1
  8. package/dist/src/app/assets/{sync-DMqxyaVi.js → sync-BJBBGzPI.js} +1 -1
  9. package/dist/src/app/index.html +2 -2
  10. package/dist/src/assertions/index.d.ts.map +1 -1
  11. package/dist/src/assertions/index.js +2 -0
  12. package/dist/src/assertions/index.js.map +1 -1
  13. package/dist/src/cache.d.ts +1 -1
  14. package/dist/src/cache.d.ts.map +1 -1
  15. package/dist/src/cache.js +2 -1
  16. package/dist/src/cache.js.map +1 -1
  17. package/dist/src/commands/auth.d.ts.map +1 -1
  18. package/dist/src/commands/auth.js +38 -0
  19. package/dist/src/commands/auth.js.map +1 -1
  20. package/dist/src/commands/eval.d.ts.map +1 -1
  21. package/dist/src/commands/eval.js +35 -20
  22. package/dist/src/commands/eval.js.map +1 -1
  23. package/dist/src/database/tables.d.ts +103 -0
  24. package/dist/src/database/tables.d.ts.map +1 -1
  25. package/dist/src/database/tables.js +17 -1
  26. package/dist/src/database/tables.js.map +1 -1
  27. package/dist/src/evaluator.d.ts.map +1 -1
  28. package/dist/src/evaluator.js +30 -8
  29. package/dist/src/evaluator.js.map +1 -1
  30. package/dist/src/models/eval.d.ts +2 -0
  31. package/dist/src/models/eval.d.ts.map +1 -1
  32. package/dist/src/models/eval.js +13 -1
  33. package/dist/src/models/eval.js.map +1 -1
  34. package/dist/src/models/evalResult.d.ts +6 -1
  35. package/dist/src/models/evalResult.d.ts.map +1 -1
  36. package/dist/src/models/evalResult.js +21 -2
  37. package/dist/src/models/evalResult.js.map +1 -1
  38. package/dist/src/prompts/grading.js +4 -4
  39. package/dist/src/providers/bedrock.d.ts.map +1 -1
  40. package/dist/src/providers/bedrock.js +13 -4
  41. package/dist/src/providers/bedrock.js.map +1 -1
  42. package/dist/src/providers/http.d.ts.map +1 -1
  43. package/dist/src/providers/http.js +1 -2
  44. package/dist/src/providers/http.js.map +1 -1
  45. package/dist/src/providers/promptfoo.d.ts +1 -1
  46. package/dist/src/providers/promptfoo.d.ts.map +1 -1
  47. package/dist/src/providers.d.ts.map +1 -1
  48. package/dist/src/providers.js +12 -8
  49. package/dist/src/providers.js.map +1 -1
  50. package/dist/src/redteam/commands/generate.d.ts.map +1 -1
  51. package/dist/src/redteam/commands/generate.js +6 -4
  52. package/dist/src/redteam/commands/generate.js.map +1 -1
  53. package/dist/src/redteam/commands/run.d.ts.map +1 -1
  54. package/dist/src/redteam/commands/run.js +9 -3
  55. package/dist/src/redteam/commands/run.js.map +1 -1
  56. package/dist/src/redteam/constants.d.ts +2 -2
  57. package/dist/src/redteam/constants.d.ts.map +1 -1
  58. package/dist/src/redteam/constants.js +8 -3
  59. package/dist/src/redteam/constants.js.map +1 -1
  60. package/dist/src/redteam/index.d.ts.map +1 -1
  61. package/dist/src/redteam/index.js +6 -2
  62. package/dist/src/redteam/index.js.map +1 -1
  63. package/dist/src/redteam/plugins/bfla.d.ts.map +1 -1
  64. package/dist/src/redteam/plugins/bfla.js +14 -2
  65. package/dist/src/redteam/plugins/bfla.js.map +1 -1
  66. package/dist/src/redteam/plugins/competitors.d.ts.map +1 -1
  67. package/dist/src/redteam/plugins/competitors.js +2 -6
  68. package/dist/src/redteam/plugins/competitors.js.map +1 -1
  69. package/dist/src/redteam/plugins/debugAccess.d.ts.map +1 -1
  70. package/dist/src/redteam/plugins/debugAccess.js +20 -1
  71. package/dist/src/redteam/plugins/debugAccess.js.map +1 -1
  72. package/dist/src/redteam/plugins/pii.d.ts.map +1 -1
  73. package/dist/src/redteam/plugins/pii.js +39 -41
  74. package/dist/src/redteam/plugins/pii.js.map +1 -1
  75. package/dist/src/redteam/plugins/sqlInjection.d.ts.map +1 -1
  76. package/dist/src/redteam/plugins/sqlInjection.js +18 -1
  77. package/dist/src/redteam/plugins/sqlInjection.js.map +1 -1
  78. package/dist/src/redteam/providers/goat.d.ts +12 -0
  79. package/dist/src/redteam/providers/goat.d.ts.map +1 -0
  80. package/dist/src/redteam/providers/goat.js +70 -0
  81. package/dist/src/redteam/providers/goat.js.map +1 -0
  82. package/dist/src/redteam/strategies/goat.d.ts +3 -0
  83. package/dist/src/redteam/strategies/goat.d.ts.map +1 -0
  84. package/dist/src/redteam/strategies/goat.js +24 -0
  85. package/dist/src/redteam/strategies/goat.js.map +1 -0
  86. package/dist/src/redteam/strategies/index.d.ts.map +1 -1
  87. package/dist/src/redteam/strategies/index.js +10 -0
  88. package/dist/src/redteam/strategies/index.js.map +1 -1
  89. package/dist/src/redteam/types.d.ts +1 -0
  90. package/dist/src/redteam/types.d.ts.map +1 -1
  91. package/dist/src/server/routes/configs.d.ts +2 -0
  92. package/dist/src/server/routes/configs.d.ts.map +1 -0
  93. package/dist/src/server/routes/configs.js +100 -0
  94. package/dist/src/server/routes/configs.js.map +1 -0
  95. package/dist/src/server/routes/eval.js +48 -0
  96. package/dist/src/server/routes/eval.js.map +1 -1
  97. package/dist/src/server/server.d.ts.map +1 -1
  98. package/dist/src/server/server.js +3 -0
  99. package/dist/src/server/server.js.map +1 -1
  100. package/dist/src/types/index.d.ts +6 -1
  101. package/dist/src/types/index.d.ts.map +1 -1
  102. package/dist/src/types/index.js +1 -1
  103. package/dist/src/types/index.js.map +1 -1
  104. package/dist/src/types/providers.d.ts +1 -0
  105. package/dist/src/types/providers.d.ts.map +1 -1
  106. package/dist/src/types/providers.js.map +1 -1
  107. package/dist/src/util/exportToFile/index.d.ts +43 -0
  108. package/dist/src/util/exportToFile/index.d.ts.map +1 -0
  109. package/dist/src/util/exportToFile/index.js +98 -0
  110. package/dist/src/util/exportToFile/index.js.map +1 -0
  111. package/dist/src/util/exportToFile/writeToFile.d.ts +8 -0
  112. package/dist/src/util/exportToFile/writeToFile.d.ts.map +1 -0
  113. package/dist/src/util/exportToFile/writeToFile.js +30 -0
  114. package/dist/src/util/exportToFile/writeToFile.js.map +1 -0
  115. package/dist/src/util/index.d.ts.map +1 -1
  116. package/dist/src/util/index.js +35 -9
  117. package/dist/src/util/index.js.map +1 -1
  118. package/dist/test/assertions/index.test.js +86 -48
  119. package/dist/test/assertions/index.test.js.map +1 -1
  120. package/dist/test/evaluator.test.js +14 -6
  121. package/dist/test/evaluator.test.js.map +1 -1
  122. package/dist/test/factories/evalFactory.d.ts.map +1 -1
  123. package/dist/test/factories/evalFactory.js +26 -1
  124. package/dist/test/factories/evalFactory.js.map +1 -1
  125. package/dist/test/providers/http.test.js +1 -0
  126. package/dist/test/providers/http.test.js.map +1 -1
  127. package/dist/test/providers/index.test.js +8 -0
  128. package/dist/test/providers/index.test.js.map +1 -1
  129. package/dist/test/redteam/providers/goat.test.d.ts +2 -0
  130. package/dist/test/redteam/providers/goat.test.d.ts.map +1 -0
  131. package/dist/test/redteam/providers/goat.test.js +67 -0
  132. package/dist/test/redteam/providers/goat.test.js.map +1 -0
  133. package/dist/test/redteam/strategies/goat.test.d.ts +2 -0
  134. package/dist/test/redteam/strategies/goat.test.d.ts.map +1 -0
  135. package/dist/test/redteam/strategies/goat.test.js +47 -0
  136. package/dist/test/redteam/strategies/goat.test.js.map +1 -0
  137. package/dist/test/server/eval.test.d.ts +2 -0
  138. package/dist/test/server/eval.test.d.ts.map +1 -0
  139. package/dist/test/server/eval.test.js +155 -0
  140. package/dist/test/server/eval.test.js.map +1 -0
  141. package/dist/test/util/index.test.js +13 -0
  142. package/dist/test/util/index.test.js.map +1 -1
  143. package/dist/tsconfig.tsbuildinfo +1 -1
  144. package/package.json +15 -15
  145. package/dist/src/app/assets/index-DD2hujB4.js +0 -769
@@ -2151,17 +2151,21 @@ describe('runAssertion', () => {
2151
2151
  type: 'javascript',
2152
2152
  value: 'file:///path/to/assert.js',
2153
2153
  };
2154
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2155
+ const providerResponse = { output };
2154
2156
  const result = await (0, assertions_1.runAssertion)({
2155
2157
  prompt: 'Some prompt',
2156
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2158
+ provider,
2157
2159
  assertion: fileAssertion,
2158
2160
  test: {},
2159
- providerResponse: { output },
2161
+ providerResponse,
2160
2162
  });
2161
2163
  expect(mockFn).toHaveBeenCalledWith('Expected output', {
2162
2164
  prompt: 'Some prompt',
2163
2165
  vars: {},
2164
2166
  test: {},
2167
+ provider,
2168
+ providerResponse,
2165
2169
  });
2166
2170
  expect(result).toMatchObject({
2167
2171
  pass: expectedPass,
@@ -2214,17 +2218,21 @@ describe('runAssertion', () => {
2214
2218
  type: 'javascript',
2215
2219
  value: 'package:@promptfoo/fake:assertionFunction',
2216
2220
  };
2221
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2222
+ const providerResponse = { output };
2217
2223
  const result = await (0, assertions_1.runAssertion)({
2218
2224
  prompt: 'Some prompt',
2219
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2225
+ provider,
2220
2226
  assertion: fileAssertion,
2221
2227
  test: {},
2222
- providerResponse: { output },
2228
+ providerResponse,
2223
2229
  });
2224
2230
  expect(mockFn).toHaveBeenCalledWith('Expected output', {
2225
2231
  prompt: 'Some prompt',
2226
2232
  vars: {},
2227
2233
  test: {},
2234
+ provider,
2235
+ providerResponse,
2228
2236
  });
2229
2237
  expect(result).toMatchObject({
2230
2238
  pass: expectedPass,
@@ -2239,17 +2247,21 @@ describe('runAssertion', () => {
2239
2247
  type: 'javascript',
2240
2248
  value: 'file://./path/to/assert.js',
2241
2249
  };
2250
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2251
+ const providerResponse = { output };
2242
2252
  const result = await (0, assertions_1.runAssertion)({
2243
2253
  prompt: 'Some prompt',
2244
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2254
+ provider,
2245
2255
  assertion: fileAssertion,
2246
2256
  test: {},
2247
- providerResponse: { output },
2257
+ providerResponse,
2248
2258
  });
2249
2259
  expect(mockFn).toHaveBeenCalledWith('Expected output', {
2250
2260
  prompt: 'Some prompt',
2251
2261
  vars: {},
2252
2262
  test: {},
2263
+ provider,
2264
+ providerResponse,
2253
2265
  });
2254
2266
  expect(result).toMatchObject({
2255
2267
  pass: true,
@@ -2264,17 +2276,19 @@ describe('runAssertion', () => {
2264
2276
  type: 'python',
2265
2277
  value: expectedPythonValue,
2266
2278
  };
2279
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2280
+ const providerResponse = { output };
2267
2281
  const result = await (0, assertions_1.runAssertion)({
2268
2282
  prompt: 'Some prompt',
2269
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2283
+ provider,
2270
2284
  assertion: pythonAssertion,
2271
2285
  test: {},
2272
- providerResponse: { output },
2286
+ providerResponse,
2273
2287
  });
2274
2288
  expect(wrapper_1.runPythonCode).toHaveBeenCalledTimes(1);
2275
2289
  expect(wrapper_1.runPythonCode).toHaveBeenCalledWith(expect.anything(), 'main', [
2276
2290
  output,
2277
- { prompt: 'Some prompt', test: {}, vars: {} },
2291
+ { prompt: 'Some prompt', test: {}, vars: {}, provider, providerResponse },
2278
2292
  ]);
2279
2293
  expect(result).toMatchObject({
2280
2294
  pass: true,
@@ -2327,17 +2341,19 @@ describe('runAssertion', () => {
2327
2341
  threshold,
2328
2342
  };
2329
2343
  jest.mocked(wrapper_1.runPythonCode).mockResolvedValueOnce(resolvedValue);
2344
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2345
+ const providerResponse = { output };
2330
2346
  const result = await (0, assertions_1.runAssertion)({
2331
2347
  prompt: 'Some prompt',
2332
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2348
+ provider,
2333
2349
  assertion: pythonAssertion,
2334
2350
  test: {},
2335
- providerResponse: { output },
2351
+ providerResponse,
2336
2352
  });
2337
2353
  expect(wrapper_1.runPythonCode).toHaveBeenCalledTimes(1);
2338
2354
  expect(wrapper_1.runPythonCode).toHaveBeenCalledWith(expect.anything(), 'main', [
2339
2355
  output,
2340
- { prompt: 'Some prompt', test: {}, vars: {} },
2356
+ { prompt: 'Some prompt', test: {}, vars: {}, provider, providerResponse },
2341
2357
  ]);
2342
2358
  expect(result).toMatchObject({
2343
2359
  pass: expectedPass,
@@ -2371,12 +2387,14 @@ describe('runAssertion', () => {
2371
2387
  type: 'python',
2372
2388
  value: 'file:///path/to/assert.py',
2373
2389
  };
2390
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2391
+ const providerResponse = { output };
2374
2392
  const result = await (0, assertions_1.runAssertion)({
2375
2393
  prompt: 'Some prompt that includes "double quotes" and \'single quotes\'',
2376
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2394
+ provider,
2377
2395
  assertion: fileAssertion,
2378
2396
  test: {},
2379
- providerResponse: { output },
2397
+ providerResponse,
2380
2398
  });
2381
2399
  expect(pythonUtils_1.runPython).toHaveBeenCalledWith(path.resolve('/path/to/assert.py'), 'get_assert', [
2382
2400
  output,
@@ -2384,6 +2402,8 @@ describe('runAssertion', () => {
2384
2402
  prompt: 'Some prompt that includes "double quotes" and \'single quotes\'',
2385
2403
  vars: {},
2386
2404
  test: {},
2405
+ provider,
2406
+ providerResponse,
2387
2407
  },
2388
2408
  ]);
2389
2409
  expect(result).toMatchObject({
@@ -2401,12 +2421,14 @@ describe('runAssertion', () => {
2401
2421
  type: 'python',
2402
2422
  value: 'file:///path/to/assert.py',
2403
2423
  };
2424
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2425
+ const providerResponse = { output };
2404
2426
  const result = await (0, assertions_1.runAssertion)({
2405
2427
  prompt: 'Some prompt that includes "double quotes" and \'single quotes\'',
2406
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2428
+ provider,
2407
2429
  assertion: fileAssertion,
2408
2430
  test: {},
2409
- providerResponse: { output },
2431
+ providerResponse,
2410
2432
  });
2411
2433
  expect(pythonUtils_1.runPython).toHaveBeenCalledTimes(1);
2412
2434
  expect(result).toEqual({
@@ -2422,16 +2444,18 @@ describe('runAssertion', () => {
2422
2444
  describe('latency assertion', () => {
2423
2445
  it('should pass when the latency assertion passes', async () => {
2424
2446
  const output = 'Expected output';
2447
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2448
+ const providerResponse = { output };
2425
2449
  const result = await (0, assertions_1.runAssertion)({
2426
2450
  prompt: 'Some prompt',
2427
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2451
+ provider,
2428
2452
  assertion: {
2429
2453
  type: 'latency',
2430
2454
  threshold: 100,
2431
2455
  },
2432
2456
  latencyMs: 50,
2433
2457
  test: {},
2434
- providerResponse: { output },
2458
+ providerResponse,
2435
2459
  });
2436
2460
  expect(result).toMatchObject({
2437
2461
  pass: true,
@@ -2440,16 +2464,18 @@ describe('runAssertion', () => {
2440
2464
  });
2441
2465
  it('should fail when the latency assertion fails', async () => {
2442
2466
  const output = 'Expected output';
2467
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2468
+ const providerResponse = { output };
2443
2469
  const result = await (0, assertions_1.runAssertion)({
2444
2470
  prompt: 'Some prompt',
2445
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2471
+ provider,
2446
2472
  assertion: {
2447
2473
  type: 'latency',
2448
2474
  threshold: 100,
2449
2475
  },
2450
2476
  latencyMs: 1000,
2451
2477
  test: {},
2452
- providerResponse: { output },
2478
+ providerResponse,
2453
2479
  });
2454
2480
  expect(result).toMatchObject({
2455
2481
  pass: false,
@@ -2471,16 +2497,18 @@ describe('runAssertion', () => {
2471
2497
  });
2472
2498
  it('should pass when the latency is 0ms', async () => {
2473
2499
  const output = 'Expected output';
2500
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2501
+ const providerResponse = { output };
2474
2502
  const result = await (0, assertions_1.runAssertion)({
2475
2503
  prompt: 'Some prompt',
2476
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2504
+ provider,
2477
2505
  assertion: {
2478
2506
  type: 'latency',
2479
2507
  threshold: 100,
2480
2508
  },
2481
2509
  latencyMs: 0,
2482
2510
  test: {},
2483
- providerResponse: { output },
2511
+ providerResponse,
2484
2512
  });
2485
2513
  expect(result).toMatchObject({
2486
2514
  pass: true,
@@ -2502,16 +2530,18 @@ describe('runAssertion', () => {
2502
2530
  });
2503
2531
  it('should handle latency equal to threshold', async () => {
2504
2532
  const output = 'Expected output';
2533
+ const provider = new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini');
2534
+ const providerResponse = { output };
2505
2535
  const result = await (0, assertions_1.runAssertion)({
2506
2536
  prompt: 'Some prompt',
2507
- provider: new openai_1.OpenAiChatCompletionProvider('gpt-4o-mini'),
2537
+ provider,
2508
2538
  assertion: {
2509
2539
  type: 'latency',
2510
2540
  threshold: 100,
2511
2541
  },
2512
2542
  latencyMs: 100,
2513
2543
  test: {},
2514
- providerResponse: { output },
2544
+ providerResponse,
2515
2545
  });
2516
2546
  expect(result).toMatchObject({
2517
2547
  pass: true,
@@ -2525,6 +2555,7 @@ describe('runAssertion', () => {
2525
2555
  const provider = {
2526
2556
  callApi: jest.fn().mockResolvedValue({ logProbs }),
2527
2557
  };
2558
+ const providerResponse = { output: 'Some output', logProbs };
2528
2559
  const result = await (0, assertions_1.runAssertion)({
2529
2560
  prompt: 'Some prompt',
2530
2561
  provider,
@@ -2533,7 +2564,7 @@ describe('runAssertion', () => {
2533
2564
  threshold: 2,
2534
2565
  },
2535
2566
  test: {},
2536
- providerResponse: { output: 'Some output', logProbs },
2567
+ providerResponse,
2537
2568
  });
2538
2569
  expect(result).toMatchObject({
2539
2570
  pass: true,
@@ -2545,6 +2576,7 @@ describe('runAssertion', () => {
2545
2576
  const provider = {
2546
2577
  callApi: jest.fn().mockResolvedValue({ logProbs }),
2547
2578
  };
2579
+ const providerResponse = { output: 'Some output', logProbs };
2548
2580
  const result = await (0, assertions_1.runAssertion)({
2549
2581
  prompt: 'Some prompt',
2550
2582
  provider,
@@ -2553,7 +2585,7 @@ describe('runAssertion', () => {
2553
2585
  threshold: 0.2,
2554
2586
  },
2555
2587
  test: {},
2556
- providerResponse: { output: 'Some output', logProbs },
2588
+ providerResponse,
2557
2589
  });
2558
2590
  expect(result).toMatchObject({
2559
2591
  pass: false,
@@ -2567,6 +2599,7 @@ describe('runAssertion', () => {
2567
2599
  const provider = {
2568
2600
  callApi: jest.fn().mockResolvedValue({ logProbs }),
2569
2601
  };
2602
+ const providerResponse = { output: 'Some output', logProbs };
2570
2603
  const result = await (0, assertions_1.runAssertion)({
2571
2604
  prompt: 'Some prompt',
2572
2605
  provider,
@@ -2575,7 +2608,7 @@ describe('runAssertion', () => {
2575
2608
  threshold: 0.25,
2576
2609
  },
2577
2610
  test: {},
2578
- providerResponse: { output: 'Some output', logProbs },
2611
+ providerResponse,
2579
2612
  });
2580
2613
  expect(result).toMatchObject({
2581
2614
  pass: true,
@@ -2587,6 +2620,7 @@ describe('runAssertion', () => {
2587
2620
  const provider = {
2588
2621
  callApi: jest.fn().mockResolvedValue({ logProbs }),
2589
2622
  };
2623
+ const providerResponse = { output: 'Some output', logProbs };
2590
2624
  const result = await (0, assertions_1.runAssertion)({
2591
2625
  prompt: 'Some prompt',
2592
2626
  provider,
@@ -2595,7 +2629,7 @@ describe('runAssertion', () => {
2595
2629
  threshold: 0.5,
2596
2630
  },
2597
2631
  test: {},
2598
- providerResponse: { output: 'Some output', logProbs },
2632
+ providerResponse,
2599
2633
  });
2600
2634
  expect(result).toMatchObject({
2601
2635
  pass: false,
@@ -2609,6 +2643,7 @@ describe('runAssertion', () => {
2609
2643
  const provider = {
2610
2644
  callApi: jest.fn().mockResolvedValue({ cost }),
2611
2645
  };
2646
+ const providerResponse = { output: 'Some output', cost };
2612
2647
  const result = await (0, assertions_1.runAssertion)({
2613
2648
  prompt: 'Some prompt',
2614
2649
  provider,
@@ -2617,7 +2652,7 @@ describe('runAssertion', () => {
2617
2652
  threshold: 0.001,
2618
2653
  },
2619
2654
  test: {},
2620
- providerResponse: { output: 'Some output', cost },
2655
+ providerResponse,
2621
2656
  });
2622
2657
  expect(result).toMatchObject({
2623
2658
  pass: true,
@@ -2629,6 +2664,7 @@ describe('runAssertion', () => {
2629
2664
  const provider = {
2630
2665
  callApi: jest.fn().mockResolvedValue({ cost }),
2631
2666
  };
2667
+ const providerResponse = { output: 'Some output', cost };
2632
2668
  const result = await (0, assertions_1.runAssertion)({
2633
2669
  prompt: 'Some prompt',
2634
2670
  provider,
@@ -2637,7 +2673,7 @@ describe('runAssertion', () => {
2637
2673
  threshold: 0.001,
2638
2674
  },
2639
2675
  test: {},
2640
- providerResponse: { output: 'Some output', cost },
2676
+ providerResponse,
2641
2677
  });
2642
2678
  expect(result).toMatchObject({
2643
2679
  pass: false,
@@ -2648,30 +2684,32 @@ describe('runAssertion', () => {
2648
2684
  describe('is-valid-openai-function-call assertion', () => {
2649
2685
  it('should pass for a valid function call with correct arguments', async () => {
2650
2686
  const output = { arguments: '{"x": 10, "y": 20}', name: 'add' };
2651
- const result = await (0, assertions_1.runAssertion)({
2652
- prompt: 'Some prompt',
2653
- provider: new openai_1.OpenAiChatCompletionProvider('foo', {
2654
- config: {
2655
- functions: [
2656
- {
2657
- name: 'add',
2658
- parameters: {
2659
- type: 'object',
2660
- properties: {
2661
- x: { type: 'number' },
2662
- y: { type: 'number' },
2663
- },
2664
- required: ['x', 'y'],
2687
+ const provider = new openai_1.OpenAiChatCompletionProvider('foo', {
2688
+ config: {
2689
+ functions: [
2690
+ {
2691
+ name: 'add',
2692
+ parameters: {
2693
+ type: 'object',
2694
+ properties: {
2695
+ x: { type: 'number' },
2696
+ y: { type: 'number' },
2665
2697
  },
2698
+ required: ['x', 'y'],
2666
2699
  },
2667
- ],
2668
- },
2669
- }),
2700
+ },
2701
+ ],
2702
+ },
2703
+ });
2704
+ const providerResponse = { output };
2705
+ const result = await (0, assertions_1.runAssertion)({
2706
+ prompt: 'Some prompt',
2707
+ provider,
2670
2708
  assertion: {
2671
2709
  type: 'is-valid-openai-function-call',
2672
2710
  },
2673
2711
  test: {},
2674
- providerResponse: { output },
2712
+ providerResponse,
2675
2713
  });
2676
2714
  expect(result).toMatchObject({
2677
2715
  pass: true,