promptfoo 0.103.13 → 0.103.15

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/package.json +19 -18
  2. package/dist/src/app/assets/{index-CNZfEf8i.js → index-CejUHECf.js} +276 -275
  3. package/dist/src/app/assets/{index.es-vrsSPryr.js → index.es-DWMnMsuU.js} +1 -1
  4. package/dist/src/app/assets/{sync-B_Y0n4tJ.js → sync-OIzapIKF.js} +1 -1
  5. package/dist/src/app/index.html +1 -1
  6. package/dist/src/assertions/refusal.d.ts.map +1 -1
  7. package/dist/src/assertions/refusal.js +14 -3
  8. package/dist/src/assertions/refusal.js.map +1 -1
  9. package/dist/src/fetch.d.ts +2 -0
  10. package/dist/src/fetch.d.ts.map +1 -1
  11. package/dist/src/fetch.js +2 -1
  12. package/dist/src/fetch.js.map +1 -1
  13. package/dist/src/index.d.ts +1 -0
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/providers/adaline.gateway.d.ts +13 -1
  16. package/dist/src/providers/adaline.gateway.d.ts.map +1 -1
  17. package/dist/src/providers/adaline.gateway.js +4 -2
  18. package/dist/src/providers/adaline.gateway.js.map +1 -1
  19. package/dist/src/providers/azure.d.ts.map +1 -1
  20. package/dist/src/providers/azure.js +22 -5
  21. package/dist/src/providers/azure.js.map +1 -1
  22. package/dist/src/providers/cloudera.d.ts +15 -0
  23. package/dist/src/providers/cloudera.d.ts.map +1 -0
  24. package/dist/src/providers/cloudera.js +22 -0
  25. package/dist/src/providers/cloudera.js.map +1 -0
  26. package/dist/src/providers/http.d.ts +5 -3
  27. package/dist/src/providers/http.d.ts.map +1 -1
  28. package/dist/src/providers/http.js +7 -6
  29. package/dist/src/providers/http.js.map +1 -1
  30. package/dist/src/providers/openai.d.ts.map +1 -1
  31. package/dist/src/providers/openai.js +7 -0
  32. package/dist/src/providers/openai.js.map +1 -1
  33. package/dist/src/providers/portkey.d.ts +3 -2
  34. package/dist/src/providers/portkey.d.ts.map +1 -1
  35. package/dist/src/providers/portkey.js +1 -0
  36. package/dist/src/providers/portkey.js.map +1 -1
  37. package/dist/src/providers/watsonx.d.ts +2 -2
  38. package/dist/src/providers.d.ts +2 -0
  39. package/dist/src/providers.d.ts.map +1 -1
  40. package/dist/src/providers.js +36 -3
  41. package/dist/src/providers.js.map +1 -1
  42. package/dist/src/redteam/commands/generate.d.ts.map +1 -1
  43. package/dist/src/redteam/commands/generate.js +31 -10
  44. package/dist/src/redteam/commands/generate.js.map +1 -1
  45. package/dist/src/redteam/commands/run.d.ts.map +1 -1
  46. package/dist/src/redteam/commands/run.js +1 -1
  47. package/dist/src/redteam/commands/run.js.map +1 -1
  48. package/dist/src/redteam/graders.d.ts.map +1 -1
  49. package/dist/src/redteam/graders.js +13 -13
  50. package/dist/src/redteam/graders.js.map +1 -1
  51. package/dist/src/redteam/index.d.ts +1 -0
  52. package/dist/src/redteam/index.d.ts.map +1 -1
  53. package/dist/src/redteam/index.js +1 -1
  54. package/dist/src/redteam/index.js.map +1 -1
  55. package/dist/src/redteam/plugins/harmful/graders.d.ts +52 -0
  56. package/dist/src/redteam/plugins/harmful/graders.d.ts.map +1 -1
  57. package/dist/src/redteam/plugins/harmful/graders.js +577 -22
  58. package/dist/src/redteam/plugins/harmful/graders.js.map +1 -1
  59. package/dist/src/redteam/providers/crescendo/index.d.ts +2 -1
  60. package/dist/src/redteam/providers/crescendo/index.d.ts.map +1 -1
  61. package/dist/src/redteam/providers/crescendo/index.js +5 -5
  62. package/dist/src/redteam/providers/crescendo/index.js.map +1 -1
  63. package/dist/src/redteam/providers/goat.d.ts +2 -1
  64. package/dist/src/redteam/providers/goat.d.ts.map +1 -1
  65. package/dist/src/redteam/providers/goat.js +5 -5
  66. package/dist/src/redteam/providers/goat.js.map +1 -1
  67. package/dist/src/redteam/providers/shared.js +1 -1
  68. package/dist/src/redteam/providers/shared.js.map +1 -1
  69. package/dist/src/redteam/sharedFrontend.d.ts.map +1 -1
  70. package/dist/src/redteam/sharedFrontend.js +18 -2
  71. package/dist/src/redteam/sharedFrontend.js.map +1 -1
  72. package/dist/src/redteam/types.d.ts +1 -0
  73. package/dist/src/redteam/types.d.ts.map +1 -1
  74. package/dist/src/redteam/util.d.ts.map +1 -1
  75. package/dist/src/redteam/util.js +2 -0
  76. package/dist/src/redteam/util.js.map +1 -1
  77. package/dist/src/server/server.d.ts.map +1 -1
  78. package/dist/src/server/server.js +1 -7
  79. package/dist/src/server/server.js.map +1 -1
  80. package/dist/src/validators/redteam.d.ts +3 -0
  81. package/dist/src/validators/redteam.d.ts.map +1 -1
  82. package/dist/src/validators/redteam.js +2 -0
  83. package/dist/src/validators/redteam.js.map +1 -1
  84. package/dist/test/assertions/answerRelevance.test.d.ts +2 -0
  85. package/dist/test/assertions/answerRelevance.test.d.ts.map +1 -0
  86. package/dist/test/assertions/answerRelevance.test.js +177 -0
  87. package/dist/test/assertions/answerRelevance.test.js.map +1 -0
  88. package/dist/test/assertions/contextFaithfulness.test.d.ts +2 -0
  89. package/dist/test/assertions/contextFaithfulness.test.d.ts.map +1 -0
  90. package/dist/test/assertions/contextFaithfulness.test.js +226 -0
  91. package/dist/test/assertions/contextFaithfulness.test.js.map +1 -0
  92. package/dist/test/assertions/contextRecall.test.d.ts +2 -0
  93. package/dist/test/assertions/contextRecall.test.d.ts.map +1 -0
  94. package/dist/test/assertions/contextRecall.test.js +243 -0
  95. package/dist/test/assertions/contextRecall.test.js.map +1 -0
  96. package/dist/test/assertions/contextRelevance.test.d.ts +2 -0
  97. package/dist/test/assertions/contextRelevance.test.d.ts.map +1 -0
  98. package/dist/test/assertions/contextRelevance.test.js +238 -0
  99. package/dist/test/assertions/contextRelevance.test.js.map +1 -0
  100. package/dist/test/assertions/geval.test.d.ts +2 -0
  101. package/dist/test/assertions/geval.test.d.ts.map +1 -0
  102. package/dist/test/assertions/geval.test.js +222 -0
  103. package/dist/test/assertions/geval.test.js.map +1 -0
  104. package/dist/test/assertions/modelGradedClosedQa.test.d.ts +2 -0
  105. package/dist/test/assertions/modelGradedClosedQa.test.d.ts.map +1 -0
  106. package/dist/test/assertions/modelGradedClosedQa.test.js +200 -0
  107. package/dist/test/assertions/modelGradedClosedQa.test.js.map +1 -0
  108. package/dist/test/assertions/refusal.test.d.ts +2 -0
  109. package/dist/test/assertions/refusal.test.d.ts.map +1 -0
  110. package/dist/test/assertions/refusal.test.js +300 -0
  111. package/dist/test/assertions/refusal.test.js.map +1 -0
  112. package/dist/test/fetch.test.js +66 -18
  113. package/dist/test/fetch.test.js.map +1 -1
  114. package/dist/test/providers/adaline.gateway.test.d.ts +2 -0
  115. package/dist/test/providers/adaline.gateway.test.d.ts.map +1 -0
  116. package/dist/test/providers/adaline.gateway.test.js +245 -0
  117. package/dist/test/providers/adaline.gateway.test.js.map +1 -0
  118. package/dist/test/providers/azure.test.js +73 -12
  119. package/dist/test/providers/azure.test.js.map +1 -1
  120. package/dist/test/providers/http.test.js +70 -2
  121. package/dist/test/providers/http.test.js.map +1 -1
  122. package/dist/test/providers/index.test.js +35 -459
  123. package/dist/test/providers/index.test.js.map +1 -1
  124. package/dist/test/providers/openai.test.js +509 -0
  125. package/dist/test/providers/openai.test.js.map +1 -1
  126. package/dist/test/providers/portkey.test.js +57 -0
  127. package/dist/test/providers/portkey.test.js.map +1 -1
  128. package/dist/test/providers/simulatedUser.test.js +1 -0
  129. package/dist/test/providers/simulatedUser.test.js.map +1 -1
  130. package/dist/test/providers.test.js +10 -0
  131. package/dist/test/providers.test.js.map +1 -1
  132. package/dist/test/redteam/commands/generate.test.js +7 -0
  133. package/dist/test/redteam/commands/generate.test.js.map +1 -1
  134. package/dist/test/redteam/extraction/purpose.test.js +1 -0
  135. package/dist/test/redteam/extraction/purpose.test.js.map +1 -1
  136. package/dist/test/redteam/plugins/asciiSmuggling.test.d.ts +2 -0
  137. package/dist/test/redteam/plugins/asciiSmuggling.test.d.ts.map +1 -0
  138. package/dist/test/redteam/plugins/asciiSmuggling.test.js +75 -0
  139. package/dist/test/redteam/plugins/asciiSmuggling.test.js.map +1 -0
  140. package/dist/test/redteam/providers/crescendo/index.test.js +3 -3
  141. package/dist/test/redteam/providers/crescendo/index.test.js.map +1 -1
  142. package/dist/test/redteam/strategies/index.test.js +1 -0
  143. package/dist/test/redteam/strategies/index.test.js.map +1 -1
  144. package/dist/tsconfig.tsbuildinfo +1 -1
  145. package/package.json +19 -18
@@ -9,11 +9,15 @@ const openai_2 = require("../../src/providers/openai");
9
9
  jest.mock('../../src/cache');
10
10
  jest.mock('../../src/globalConfig/globalConfig');
11
11
  jest.mock('../../src/logger');
12
+ const mockFetchWithCache = jest.mocked(cache_1.fetchWithCache);
12
13
  describe('OpenAI Provider', () => {
13
14
  beforeEach(() => {
14
15
  jest.resetAllMocks();
15
16
  (0, cache_1.disableCache)();
16
17
  });
18
+ afterEach(() => {
19
+ (0, cache_1.enableCache)();
20
+ });
17
21
  describe('failApiCall', () => {
18
22
  it('should format OpenAI API errors', () => {
19
23
  const error = new openai_1.default.APIError(400, {
@@ -139,5 +143,510 @@ describe('OpenAI Provider', () => {
139
143
  expect(cost).toBeUndefined();
140
144
  });
141
145
  });
146
+ describe('OpenAiChatCompletionProvider', () => {
147
+ it('should call API successfully', async () => {
148
+ const mockResponse = {
149
+ data: {
150
+ choices: [{ message: { content: 'Test output' } }],
151
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
152
+ },
153
+ cached: false,
154
+ status: 200,
155
+ statusText: 'OK',
156
+ };
157
+ mockFetchWithCache.mockResolvedValue(mockResponse);
158
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini');
159
+ const result = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt' }]));
160
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
161
+ expect(result.output).toBe('Test output');
162
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
163
+ });
164
+ it('should handle caching correctly', async () => {
165
+ const mockResponse = {
166
+ data: {
167
+ choices: [{ message: { content: 'Test output 2' } }],
168
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
169
+ },
170
+ cached: false,
171
+ status: 200,
172
+ statusText: 'OK',
173
+ };
174
+ mockFetchWithCache.mockResolvedValue(mockResponse);
175
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini');
176
+ const result = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt 2' }]));
177
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
178
+ expect(result.output).toBe('Test output 2');
179
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
180
+ const cachedResponse = {
181
+ ...mockResponse,
182
+ cached: true,
183
+ };
184
+ mockFetchWithCache.mockResolvedValue(cachedResponse);
185
+ const result2 = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt 2' }]));
186
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(2);
187
+ expect(result2.output).toBe('Test output 2');
188
+ expect(result2.tokenUsage).toEqual({ total: 10, cached: 10 });
189
+ });
190
+ it('should handle disabled cache correctly', async () => {
191
+ const mockResponse = {
192
+ data: {
193
+ choices: [{ message: { content: 'Test output' } }],
194
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
195
+ },
196
+ cached: false,
197
+ status: 200,
198
+ statusText: 'OK',
199
+ };
200
+ mockFetchWithCache.mockResolvedValue(mockResponse);
201
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini');
202
+ const result = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt' }]));
203
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
204
+ expect(result.output).toBe('Test output');
205
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
206
+ (0, cache_1.disableCache)();
207
+ const result2 = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt' }]));
208
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(2);
209
+ expect(result2.output).toBe('Test output');
210
+ expect(result2.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
211
+ (0, cache_1.enableCache)();
212
+ });
213
+ it('constructor should handle config correctly', async () => {
214
+ const config = {
215
+ temperature: 3.1415926,
216
+ max_tokens: 201,
217
+ };
218
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini', { config });
219
+ const prompt = 'Test prompt';
220
+ const mockResponse = {
221
+ data: {
222
+ choices: [{ message: { content: 'Test output' } }],
223
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
224
+ },
225
+ cached: false,
226
+ status: 200,
227
+ statusText: 'OK',
228
+ };
229
+ mockFetchWithCache.mockResolvedValue(mockResponse);
230
+ await provider.callApi(prompt);
231
+ const call = mockFetchWithCache.mock.calls[0];
232
+ const requestBody = JSON.parse(call[1].body);
233
+ expect(requestBody).toMatchObject({
234
+ temperature: 3.1415926,
235
+ max_tokens: 201,
236
+ });
237
+ expect(provider.config.temperature).toBe(config.temperature);
238
+ expect(provider.config.max_tokens).toBe(config.max_tokens);
239
+ });
240
+ it('should handle structured output correctly', async () => {
241
+ const mockResponse = {
242
+ data: {
243
+ choices: [{ message: { content: '{"name": "John", "age": 30}' } }],
244
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
245
+ },
246
+ cached: false,
247
+ status: 200,
248
+ statusText: 'OK',
249
+ };
250
+ mockFetchWithCache.mockResolvedValue(mockResponse);
251
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini', {
252
+ config: {
253
+ response_format: {
254
+ type: 'json_schema',
255
+ json_schema: {
256
+ name: 'person',
257
+ strict: true,
258
+ schema: {
259
+ type: 'object',
260
+ properties: {
261
+ name: { type: 'string' },
262
+ age: { type: 'number' },
263
+ },
264
+ required: ['name', 'age'],
265
+ additionalProperties: false,
266
+ },
267
+ },
268
+ },
269
+ },
270
+ });
271
+ const result = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Get me a person' }]));
272
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
273
+ expect(result.output).toEqual({ name: 'John', age: 30 });
274
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
275
+ });
276
+ it('should handle model refusals correctly', async () => {
277
+ const mockResponse = {
278
+ data: {
279
+ choices: [{ message: { refusal: 'Content policy violation' } }],
280
+ usage: { total_tokens: 5, prompt_tokens: 5, completion_tokens: 0 },
281
+ },
282
+ cached: false,
283
+ status: 200,
284
+ statusText: 'OK',
285
+ };
286
+ mockFetchWithCache.mockResolvedValue(mockResponse);
287
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini');
288
+ const result = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Generate inappropriate content' }]));
289
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
290
+ expect(result.output).toBe('Content policy violation');
291
+ expect(result.tokenUsage).toEqual({ total: 5, prompt: 5, completion: 0 });
292
+ expect(result.isRefusal).toBe(true);
293
+ });
294
+ it('should handle function tool callbacks correctly', async () => {
295
+ const mockResponse = {
296
+ data: {
297
+ choices: [
298
+ {
299
+ message: {
300
+ content: null,
301
+ tool_calls: [
302
+ {
303
+ function: {
304
+ name: 'get_weather',
305
+ arguments: '{"location":"New York"}',
306
+ },
307
+ },
308
+ ],
309
+ },
310
+ },
311
+ ],
312
+ usage: { total_tokens: 15, prompt_tokens: 10, completion_tokens: 5 },
313
+ },
314
+ cached: false,
315
+ status: 200,
316
+ statusText: 'OK',
317
+ };
318
+ mockFetchWithCache.mockResolvedValue(mockResponse);
319
+ const mockWeatherFunction = jest.fn().mockResolvedValue('Sunny, 25°C');
320
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini', {
321
+ config: {
322
+ tools: [
323
+ {
324
+ type: 'function',
325
+ function: {
326
+ name: 'get_weather',
327
+ description: 'Get the weather for a location',
328
+ parameters: {
329
+ type: 'object',
330
+ properties: {
331
+ location: { type: 'string' },
332
+ },
333
+ required: ['location'],
334
+ },
335
+ },
336
+ },
337
+ ],
338
+ functionToolCallbacks: {
339
+ get_weather: mockWeatherFunction,
340
+ },
341
+ },
342
+ });
343
+ const result = await provider.callApi(JSON.stringify([{ role: 'user', content: "What's the weather in New York?" }]));
344
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
345
+ expect(mockWeatherFunction).toHaveBeenCalledWith('{"location":"New York"}');
346
+ expect(result.output).toBe('Sunny, 25°C');
347
+ expect(result.tokenUsage).toEqual({ total: 15, prompt: 10, completion: 5 });
348
+ });
349
+ it('should handle multiple function tool calls', async () => {
350
+ const mockResponse = {
351
+ data: {
352
+ choices: [
353
+ {
354
+ message: {
355
+ content: null,
356
+ tool_calls: [
357
+ {
358
+ function: {
359
+ name: 'addNumbers',
360
+ arguments: '{"a":5,"b":6}',
361
+ },
362
+ },
363
+ {
364
+ function: {
365
+ name: 'multiplyNumbers',
366
+ arguments: '{"x":2,"y":3}',
367
+ },
368
+ },
369
+ ],
370
+ },
371
+ },
372
+ ],
373
+ usage: { total_tokens: 15, prompt_tokens: 7, completion_tokens: 8 },
374
+ },
375
+ cached: false,
376
+ status: 200,
377
+ statusText: 'OK',
378
+ };
379
+ mockFetchWithCache.mockResolvedValue(mockResponse);
380
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini', {
381
+ config: {
382
+ tools: [
383
+ {
384
+ type: 'function',
385
+ function: {
386
+ name: 'addNumbers',
387
+ description: 'Add two numbers together',
388
+ parameters: {
389
+ type: 'object',
390
+ properties: {
391
+ a: { type: 'number' },
392
+ b: { type: 'number' },
393
+ },
394
+ required: ['a', 'b'],
395
+ },
396
+ },
397
+ },
398
+ {
399
+ type: 'function',
400
+ function: {
401
+ name: 'multiplyNumbers',
402
+ description: 'Multiply two numbers',
403
+ parameters: {
404
+ type: 'object',
405
+ properties: {
406
+ x: { type: 'number' },
407
+ y: { type: 'number' },
408
+ },
409
+ required: ['x', 'y'],
410
+ },
411
+ },
412
+ },
413
+ ],
414
+ functionToolCallbacks: {
415
+ addNumbers: (parametersJsonString) => {
416
+ const { a, b } = JSON.parse(parametersJsonString);
417
+ return Promise.resolve(JSON.stringify(a + b));
418
+ },
419
+ multiplyNumbers: (parametersJsonString) => {
420
+ const { x, y } = JSON.parse(parametersJsonString);
421
+ return Promise.resolve(JSON.stringify(x * y));
422
+ },
423
+ },
424
+ },
425
+ });
426
+ const result = await provider.callApi('Add 5 and 6, then multiply 2 and 3');
427
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
428
+ expect(result.output).toBe('11\n6');
429
+ expect(result.tokenUsage).toEqual({ total: 15, prompt: 7, completion: 8 });
430
+ });
431
+ it('should handle errors in function tool callbacks', async () => {
432
+ const mockResponse = {
433
+ data: {
434
+ choices: [
435
+ {
436
+ message: {
437
+ content: null,
438
+ function_call: {
439
+ name: 'errorFunction',
440
+ arguments: '{}',
441
+ },
442
+ },
443
+ },
444
+ ],
445
+ usage: { total_tokens: 5, prompt_tokens: 2, completion_tokens: 3 },
446
+ },
447
+ cached: false,
448
+ status: 200,
449
+ statusText: 'OK',
450
+ };
451
+ mockFetchWithCache.mockResolvedValue(mockResponse);
452
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini', {
453
+ config: {
454
+ tools: [
455
+ {
456
+ type: 'function',
457
+ function: {
458
+ name: 'errorFunction',
459
+ description: 'A function that always throws an error',
460
+ parameters: {
461
+ type: 'object',
462
+ properties: {},
463
+ },
464
+ },
465
+ },
466
+ ],
467
+ functionToolCallbacks: {
468
+ errorFunction: () => {
469
+ throw new Error('Test error');
470
+ },
471
+ },
472
+ },
473
+ });
474
+ const result = await provider.callApi('Call the error function');
475
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
476
+ expect(result.output).toEqual({ arguments: '{}', name: 'errorFunction' });
477
+ expect(result.tokenUsage).toEqual({ total: 5, prompt: 2, completion: 3 });
478
+ });
479
+ it('should prioritize response_format from prompt config over provider config', async () => {
480
+ const providerResponseFormat = {
481
+ type: 'json_object',
482
+ };
483
+ const promptResponseFormat = {
484
+ type: 'json_schema',
485
+ json_schema: {
486
+ name: 'test_schema',
487
+ strict: true,
488
+ schema: {
489
+ type: 'object',
490
+ properties: { key2: { type: 'string' } },
491
+ additionalProperties: false,
492
+ },
493
+ },
494
+ };
495
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini', {
496
+ config: {
497
+ response_format: providerResponseFormat,
498
+ },
499
+ });
500
+ const mockResponse = {
501
+ data: {
502
+ choices: [{ message: { content: '{"key2": "value2"}' } }],
503
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
504
+ },
505
+ cached: false,
506
+ status: 200,
507
+ statusText: 'OK',
508
+ };
509
+ mockFetchWithCache.mockResolvedValue(mockResponse);
510
+ const result = await provider.callApi('Test prompt', {
511
+ vars: {},
512
+ prompt: {
513
+ raw: 'Test prompt',
514
+ label: 'Test prompt',
515
+ config: {
516
+ response_format: promptResponseFormat,
517
+ },
518
+ },
519
+ });
520
+ const call = mockFetchWithCache.mock.calls[0];
521
+ const requestBody = JSON.parse(call[1].body);
522
+ expect(requestBody.response_format).toEqual(promptResponseFormat);
523
+ expect(result.output).toEqual({ key2: 'value2' });
524
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
525
+ });
526
+ it('should use provider config response_format when prompt config is not provided', async () => {
527
+ const providerResponseFormat = {
528
+ type: 'json_object',
529
+ };
530
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini', {
531
+ config: {
532
+ response_format: providerResponseFormat,
533
+ },
534
+ });
535
+ const mockResponse = {
536
+ data: {
537
+ choices: [{ message: { content: '{"key1": "value1"}' } }],
538
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
539
+ },
540
+ cached: false,
541
+ status: 200,
542
+ statusText: 'OK',
543
+ };
544
+ mockFetchWithCache.mockResolvedValue(mockResponse);
545
+ const result = await provider.callApi('Test prompt', {
546
+ vars: {},
547
+ prompt: {
548
+ raw: 'Test prompt',
549
+ label: 'Test prompt',
550
+ },
551
+ });
552
+ const call = mockFetchWithCache.mock.calls[0];
553
+ const requestBody = JSON.parse(call[1].body);
554
+ expect(requestBody.response_format).toEqual(providerResponseFormat);
555
+ expect(result.output).toBe('{"key1": "value1"}');
556
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
557
+ });
558
+ it('should call API with basic chat completion', async () => {
559
+ const mockResponse = {
560
+ data: {
561
+ choices: [{ message: { content: 'Test output' } }],
562
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
563
+ },
564
+ cached: false,
565
+ status: 200,
566
+ statusText: 'OK',
567
+ severity: 'info',
568
+ };
569
+ mockFetchWithCache.mockResolvedValue(mockResponse);
570
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini');
571
+ const result = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt' }]));
572
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
573
+ expect(result.output).toBe('Test output');
574
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
575
+ });
576
+ it('should handle caching correctly with multiple chat calls', async () => {
577
+ const mockResponse = {
578
+ data: {
579
+ choices: [{ message: { content: 'Test output 2' } }],
580
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
581
+ },
582
+ cached: false,
583
+ status: 200,
584
+ statusText: 'OK',
585
+ severity: 'info',
586
+ };
587
+ mockFetchWithCache.mockResolvedValue(mockResponse);
588
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini');
589
+ const result = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt 2' }]));
590
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
591
+ expect(result.output).toBe('Test output 2');
592
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
593
+ const cachedResponse = {
594
+ ...mockResponse,
595
+ cached: true,
596
+ status: 200,
597
+ statusText: 'OK',
598
+ severity: 'info',
599
+ };
600
+ mockFetchWithCache.mockResolvedValue(cachedResponse);
601
+ const result2 = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt 2' }]));
602
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(2);
603
+ expect(result2.output).toBe('Test output 2');
604
+ expect(result2.tokenUsage).toEqual({ total: 10, cached: 10 });
605
+ });
606
+ it('should handle disabled cache correctly for chat completion', async () => {
607
+ const mockResponse = {
608
+ data: {
609
+ choices: [{ message: { content: 'Test output' } }],
610
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
611
+ },
612
+ cached: false,
613
+ status: 200,
614
+ statusText: 'OK',
615
+ severity: 'info',
616
+ };
617
+ mockFetchWithCache.mockResolvedValue(mockResponse);
618
+ const provider = new openai_2.OpenAiChatCompletionProvider('gpt-4o-mini');
619
+ const result = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt' }]));
620
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
621
+ expect(result.output).toBe('Test output');
622
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
623
+ (0, cache_1.disableCache)();
624
+ const result2 = await provider.callApi(JSON.stringify([{ role: 'user', content: 'Test prompt' }]));
625
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(2);
626
+ expect(result2.output).toBe('Test output');
627
+ expect(result2.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
628
+ (0, cache_1.enableCache)();
629
+ });
630
+ });
631
+ describe('OpenAiCompletionProvider', () => {
632
+ it('should call API successfully with text completion', async () => {
633
+ const mockResponse = {
634
+ data: {
635
+ choices: [{ text: 'Test output' }],
636
+ usage: { total_tokens: 10, prompt_tokens: 5, completion_tokens: 5 },
637
+ },
638
+ cached: false,
639
+ status: 200,
640
+ statusText: 'OK',
641
+ severity: 'info',
642
+ };
643
+ mockFetchWithCache.mockResolvedValue(mockResponse);
644
+ const provider = new openai_2.OpenAiCompletionProvider('text-davinci-003');
645
+ const result = await provider.callApi('Test prompt');
646
+ expect(mockFetchWithCache).toHaveBeenCalledTimes(1);
647
+ expect(result.output).toBe('Test output');
648
+ expect(result.tokenUsage).toEqual({ total: 10, prompt: 5, completion: 5 });
649
+ });
650
+ });
142
651
  });
143
652
  //# sourceMappingURL=openai.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.test.js","sourceRoot":"","sources":["../../../test/providers/openai.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.test.js","sourceRoot":"","sources":["../../../test/providers/openai.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const portkey_1 = require("../../src/providers/portkey");
4
+ describe('toKebabCase', () => {
5
+ it('should convert simple camelCase to kebab-case', () => {
6
+ expect((0, portkey_1.toKebabCase)('camelCase')).toBe('camel-case');
7
+ expect((0, portkey_1.toKebabCase)('thisIsSimple')).toBe('this-is-simple');
8
+ });
9
+ it('should handle empty string', () => {
10
+ expect((0, portkey_1.toKebabCase)('')).toBe('');
11
+ });
12
+ it('should handle single word', () => {
13
+ expect((0, portkey_1.toKebabCase)('word')).toBe('word');
14
+ expect((0, portkey_1.toKebabCase)('WORD')).toBe('word');
15
+ });
16
+ it('should preserve existing kebab-case', () => {
17
+ expect((0, portkey_1.toKebabCase)('already-kebab-case')).toBe('already-kebab-case');
18
+ });
19
+ it('should handle single letters', () => {
20
+ expect((0, portkey_1.toKebabCase)('a')).toBe('a');
21
+ expect((0, portkey_1.toKebabCase)('A')).toBe('a');
22
+ });
23
+ });
4
24
  describe('getPortkeyHeaders', () => {
5
25
  it('should return headers with correct format for portkey config keys', () => {
6
26
  const config = {
@@ -42,5 +62,42 @@ describe('getPortkeyHeaders', () => {
42
62
  customHost: 'custom.host.com',
43
63
  });
44
64
  });
65
+ it('should handle mixed portkey and non-portkey config keys', () => {
66
+ const config = {
67
+ portkeyApiKey: 'test-portkey',
68
+ apiKey: 'test-regular',
69
+ portkeyCustomHost: 'custom.host.com',
70
+ regularSetting: 'value',
71
+ };
72
+ const headers = (0, portkey_1.getPortkeyHeaders)(config);
73
+ expect(headers).toEqual({
74
+ 'x-portkey-api-key': 'test-portkey',
75
+ apiKey: 'test-regular',
76
+ 'x-portkey-custom-host': 'custom.host.com',
77
+ regularSetting: 'value',
78
+ });
79
+ });
80
+ it('should handle boolean values', () => {
81
+ const config = {
82
+ portkeyFeatureFlag: true,
83
+ portkeyAnotherFlag: false,
84
+ };
85
+ const headers = (0, portkey_1.getPortkeyHeaders)(config);
86
+ expect(headers).toEqual({
87
+ 'x-portkey-feature-flag': 'true',
88
+ 'x-portkey-another-flag': 'false',
89
+ });
90
+ });
91
+ it('should handle numeric values', () => {
92
+ const config = {
93
+ portkeyTimeout: 1000,
94
+ portkeyRetries: 3,
95
+ };
96
+ const headers = (0, portkey_1.getPortkeyHeaders)(config);
97
+ expect(headers).toEqual({
98
+ 'x-portkey-timeout': '1000',
99
+ 'x-portkey-retries': '3',
100
+ });
101
+ });
45
102
  });
46
103
  //# sourceMappingURL=portkey.test.js.map