promptfoo 0.94.2 → 0.94.4

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 (103) hide show
  1. package/dist/package.json +12 -1
  2. package/dist/src/app/assets/{index-DzFOW2sr.js → index-kiRqtGJ5.js} +3 -3
  3. package/dist/src/app/assets/{index.es-DHZ-d3WX.js → index.es-BPtsk-Gq.js} +1 -1
  4. package/dist/src/app/assets/{sync-BXQkLspz.js → sync-ePlbCE3C.js} +1 -1
  5. package/dist/src/app/index.html +1 -1
  6. package/dist/src/assertions/index.d.ts.map +1 -1
  7. package/dist/src/assertions/index.js +9 -0
  8. package/dist/src/assertions/index.js.map +1 -1
  9. package/dist/src/commands/eval.d.ts.map +1 -1
  10. package/dist/src/commands/eval.js +3 -1
  11. package/dist/src/commands/eval.js.map +1 -1
  12. package/dist/src/commands/init.js +2 -2
  13. package/dist/src/commands/init.js.map +1 -1
  14. package/dist/src/envars.d.ts +1 -0
  15. package/dist/src/envars.d.ts.map +1 -1
  16. package/dist/src/envars.js.map +1 -1
  17. package/dist/src/evaluator.d.ts.map +1 -1
  18. package/dist/src/evaluator.js +8 -6
  19. package/dist/src/evaluator.js.map +1 -1
  20. package/dist/src/evaluatorHelpers.d.ts.map +1 -1
  21. package/dist/src/evaluatorHelpers.js +12 -0
  22. package/dist/src/evaluatorHelpers.js.map +1 -1
  23. package/dist/src/fetch.d.ts +2 -0
  24. package/dist/src/fetch.d.ts.map +1 -1
  25. package/dist/src/fetch.js +35 -4
  26. package/dist/src/fetch.js.map +1 -1
  27. package/dist/src/onboarding.d.ts +1 -1
  28. package/dist/src/onboarding.d.ts.map +1 -1
  29. package/dist/src/onboarding.js +1 -2
  30. package/dist/src/onboarding.js.map +1 -1
  31. package/dist/src/providers/adaline.gateway.d.ts +74 -0
  32. package/dist/src/providers/adaline.gateway.d.ts.map +1 -0
  33. package/dist/src/providers/adaline.gateway.js +565 -0
  34. package/dist/src/providers/adaline.gateway.js.map +1 -0
  35. package/dist/src/providers/anthropic.d.ts +2 -0
  36. package/dist/src/providers/anthropic.d.ts.map +1 -1
  37. package/dist/src/providers/anthropic.js +6 -0
  38. package/dist/src/providers/anthropic.js.map +1 -1
  39. package/dist/src/providers/azureopenai.d.ts +1 -0
  40. package/dist/src/providers/azureopenai.d.ts.map +1 -1
  41. package/dist/src/providers/azureopenai.js +38 -28
  42. package/dist/src/providers/azureopenai.js.map +1 -1
  43. package/dist/src/providers/groq.d.ts +2 -0
  44. package/dist/src/providers/groq.d.ts.map +1 -1
  45. package/dist/src/providers/groq.js +5 -2
  46. package/dist/src/providers/groq.js.map +1 -1
  47. package/dist/src/providers/openai.d.ts +4 -0
  48. package/dist/src/providers/openai.d.ts.map +1 -1
  49. package/dist/src/providers/openai.js +11 -5
  50. package/dist/src/providers/openai.js.map +1 -1
  51. package/dist/src/providers/packageParser.d.ts +2 -0
  52. package/dist/src/providers/packageParser.d.ts.map +1 -1
  53. package/dist/src/providers/packageParser.js +27 -25
  54. package/dist/src/providers/packageParser.js.map +1 -1
  55. package/dist/src/providers/promptfoo.d.ts +12 -0
  56. package/dist/src/providers/promptfoo.d.ts.map +1 -1
  57. package/dist/src/providers/promptfoo.js +46 -1
  58. package/dist/src/providers/promptfoo.js.map +1 -1
  59. package/dist/src/providers/simulatedUser.d.ts +27 -0
  60. package/dist/src/providers/simulatedUser.d.ts.map +1 -0
  61. package/dist/src/providers/simulatedUser.js +64 -0
  62. package/dist/src/providers/simulatedUser.js.map +1 -0
  63. package/dist/src/providers/watsonx.d.ts +2 -2
  64. package/dist/src/providers.d.ts.map +1 -1
  65. package/dist/src/providers.js +20 -0
  66. package/dist/src/providers.js.map +1 -1
  67. package/dist/src/redteam/commands/init.d.ts.map +1 -1
  68. package/dist/src/redteam/commands/init.js +11 -6
  69. package/dist/src/redteam/commands/init.js.map +1 -1
  70. package/dist/src/redteam/plugins/base.d.ts.map +1 -1
  71. package/dist/src/redteam/plugins/base.js +2 -1
  72. package/dist/src/redteam/plugins/base.js.map +1 -1
  73. package/dist/src/redteam/plugins/harmful.d.ts.map +1 -1
  74. package/dist/src/redteam/plugins/harmful.js +2 -1
  75. package/dist/src/redteam/plugins/harmful.js.map +1 -1
  76. package/dist/src/testCases.d.ts.map +1 -1
  77. package/dist/src/testCases.js +10 -3
  78. package/dist/src/testCases.js.map +1 -1
  79. package/dist/src/util/templates.d.ts.map +1 -1
  80. package/dist/src/util/templates.js +4 -2
  81. package/dist/src/util/templates.js.map +1 -1
  82. package/dist/src/util/time.d.ts +1 -0
  83. package/dist/src/util/time.d.ts.map +1 -1
  84. package/dist/src/util/time.js +3 -0
  85. package/dist/src/util/time.js.map +1 -1
  86. package/dist/test/assertions/index.test.js +72 -0
  87. package/dist/test/assertions/index.test.js.map +1 -1
  88. package/dist/test/evaluatorHelpers.test.js +27 -0
  89. package/dist/test/evaluatorHelpers.test.js.map +1 -1
  90. package/dist/test/fetch.test.d.ts +2 -0
  91. package/dist/test/fetch.test.d.ts.map +1 -0
  92. package/dist/test/fetch.test.js +307 -0
  93. package/dist/test/fetch.test.js.map +1 -0
  94. package/dist/test/providers/azure.test.js +98 -0
  95. package/dist/test/providers/azure.test.js.map +1 -1
  96. package/dist/test/providers/packageParser.test.js +81 -29
  97. package/dist/test/providers/packageParser.test.js.map +1 -1
  98. package/dist/test/testCases.test.js +1 -1
  99. package/dist/test/testCases.test.js.map +1 -1
  100. package/dist/test/util/templates.test.js +26 -0
  101. package/dist/test/util/templates.test.js.map +1 -1
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +12 -1
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const proxy_agent_1 = require("proxy-agent");
7
+ const envars_1 = require("../src/envars");
8
+ const fetch_1 = require("../src/fetch");
9
+ const logger_1 = __importDefault(require("../src/logger"));
10
+ const time_1 = require("../src/util/time");
11
+ jest.mock('../src/util/time', () => ({
12
+ sleep: jest.fn().mockResolvedValue(undefined),
13
+ }));
14
+ jest.mock('proxy-agent');
15
+ jest.mock('../src/logger');
16
+ jest.mock('../src/envars', () => ({
17
+ ...jest.requireActual('../src/envars'),
18
+ getEnvInt: jest.fn().mockReturnValue(100),
19
+ getEnvBool: jest.fn().mockReturnValue(false),
20
+ }));
21
+ jest.mock('../src/fetch', () => ({
22
+ ...jest.requireActual('../src/fetch'),
23
+ sleep: jest.fn(),
24
+ }));
25
+ function createMockResponse(options = {}) {
26
+ return {
27
+ ok: true,
28
+ status: 200,
29
+ statusText: 'OK',
30
+ headers: new Headers(),
31
+ redirected: false,
32
+ type: 'basic',
33
+ url: 'https://example.com',
34
+ json: () => Promise.resolve({}),
35
+ text: () => Promise.resolve(''),
36
+ blob: () => Promise.resolve(new Blob()),
37
+ arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)),
38
+ formData: () => Promise.resolve(new FormData()),
39
+ bodyUsed: false,
40
+ body: null,
41
+ clone() {
42
+ return createMockResponse(this);
43
+ },
44
+ ...options,
45
+ };
46
+ }
47
+ describe('fetchWithProxy', () => {
48
+ beforeEach(() => {
49
+ jest.spyOn(global, 'fetch').mockImplementation();
50
+ jest.mocked(proxy_agent_1.ProxyAgent).mockClear();
51
+ });
52
+ afterEach(() => {
53
+ jest.clearAllMocks();
54
+ });
55
+ it('should handle URLs with basic auth credentials', async () => {
56
+ const url = 'https://username:password@example.com/api';
57
+ const options = { headers: { 'Content-Type': 'application/json' } };
58
+ await (0, fetch_1.fetchWithProxy)(url, options);
59
+ expect(global.fetch).toHaveBeenCalledWith('https://example.com/api', expect.objectContaining({
60
+ headers: {
61
+ 'Content-Type': 'application/json',
62
+ Authorization: 'Basic dXNlcm5hbWU6cGFzc3dvcmQ=',
63
+ },
64
+ }));
65
+ });
66
+ it('should handle URLs without auth credentials', async () => {
67
+ const url = 'https://example.com/api';
68
+ const options = { headers: { 'Content-Type': 'application/json' } };
69
+ await (0, fetch_1.fetchWithProxy)(url, options);
70
+ expect(global.fetch).toHaveBeenCalledWith(url, expect.objectContaining({
71
+ headers: {
72
+ 'Content-Type': 'application/json',
73
+ },
74
+ }));
75
+ });
76
+ it('should handle invalid URLs gracefully', async () => {
77
+ const invalidUrl = 'not-a-url';
78
+ await (0, fetch_1.fetchWithProxy)(invalidUrl);
79
+ expect(logger_1.default.debug).toHaveBeenCalledWith(expect.stringMatching(/URL parsing failed in fetchWithProxy: TypeError/));
80
+ expect(global.fetch).toHaveBeenCalledWith(invalidUrl, expect.any(Object));
81
+ });
82
+ it('should preserve existing Authorization headers when no URL credentials', async () => {
83
+ const url = 'https://example.com/api';
84
+ const options = {
85
+ headers: {
86
+ Authorization: 'Bearer token123',
87
+ 'Content-Type': 'application/json',
88
+ },
89
+ };
90
+ await (0, fetch_1.fetchWithProxy)(url, options);
91
+ expect(global.fetch).toHaveBeenCalledWith(url, expect.objectContaining({
92
+ headers: {
93
+ Authorization: 'Bearer token123',
94
+ 'Content-Type': 'application/json',
95
+ },
96
+ }));
97
+ });
98
+ it('should warn and prefer existing Authorization header over URL credentials', async () => {
99
+ const url = 'https://username:password@example.com/api';
100
+ const options = {
101
+ headers: {
102
+ Authorization: 'Bearer token123',
103
+ },
104
+ };
105
+ await (0, fetch_1.fetchWithProxy)(url, options);
106
+ expect(logger_1.default.warn).toHaveBeenCalledWith(expect.stringContaining('Both URL credentials and Authorization header present'));
107
+ expect(global.fetch).toHaveBeenCalledWith('https://example.com/api', expect.objectContaining({
108
+ headers: {
109
+ Authorization: 'Bearer token123',
110
+ },
111
+ }));
112
+ });
113
+ it('should handle empty username or password in URL', async () => {
114
+ const url = 'https://:password@example.com/api';
115
+ await (0, fetch_1.fetchWithProxy)(url);
116
+ expect(global.fetch).toHaveBeenCalledWith('https://example.com/api', expect.objectContaining({
117
+ headers: {
118
+ Authorization: 'Basic OnBhc3N3b3Jk',
119
+ },
120
+ }));
121
+ });
122
+ it('should handle URLs with only username', async () => {
123
+ const url = 'https://username@example.com/api';
124
+ await (0, fetch_1.fetchWithProxy)(url);
125
+ expect(global.fetch).toHaveBeenCalledWith('https://example.com/api', expect.objectContaining({
126
+ headers: {
127
+ Authorization: 'Basic dXNlcm5hbWU6', // Base64 encoded 'username:'
128
+ },
129
+ }));
130
+ });
131
+ it('should preserve existing headers when adding Authorization from URL credentials', async () => {
132
+ const url = 'https://username:password@example.com/api';
133
+ const options = {
134
+ headers: {
135
+ 'Content-Type': 'application/json',
136
+ 'X-Custom-Header': 'value',
137
+ },
138
+ };
139
+ await (0, fetch_1.fetchWithProxy)(url, options);
140
+ expect(global.fetch).toHaveBeenCalledWith('https://example.com/api', expect.objectContaining({
141
+ headers: {
142
+ 'Content-Type': 'application/json',
143
+ 'X-Custom-Header': 'value',
144
+ Authorization: 'Basic dXNlcm5hbWU6cGFzc3dvcmQ=',
145
+ },
146
+ }));
147
+ });
148
+ });
149
+ describe('fetchWithTimeout', () => {
150
+ beforeEach(() => {
151
+ jest.useFakeTimers();
152
+ jest.spyOn(global, 'fetch').mockImplementation();
153
+ });
154
+ afterEach(() => {
155
+ jest.useRealTimers();
156
+ });
157
+ it('should resolve when fetch completes before timeout', async () => {
158
+ const mockResponse = createMockResponse({ ok: true });
159
+ jest.mocked(global.fetch).mockImplementationOnce(() => Promise.resolve(mockResponse));
160
+ const fetchPromise = (0, fetch_1.fetchWithTimeout)('https://example.com', {}, 5000);
161
+ await expect(fetchPromise).resolves.toBe(mockResponse);
162
+ });
163
+ it('should reject when request times out', async () => {
164
+ jest
165
+ .mocked(global.fetch)
166
+ .mockImplementationOnce(() => new Promise((resolve) => setTimeout(resolve, 6000)));
167
+ const fetchPromise = (0, fetch_1.fetchWithTimeout)('https://example.com', {}, 5000);
168
+ jest.advanceTimersByTime(5000);
169
+ await expect(fetchPromise).rejects.toThrow('Request timed out after 5000 ms');
170
+ });
171
+ });
172
+ describe('isRateLimited', () => {
173
+ it('should detect standard rate limit headers', () => {
174
+ const response = createMockResponse({
175
+ headers: new Headers({
176
+ 'X-RateLimit-Remaining': '0',
177
+ }),
178
+ status: 200,
179
+ });
180
+ expect((0, fetch_1.isRateLimited)(response)).toBe(true);
181
+ });
182
+ it('should detect 429 status code', () => {
183
+ const response = createMockResponse({
184
+ status: 429,
185
+ });
186
+ expect((0, fetch_1.isRateLimited)(response)).toBe(true);
187
+ });
188
+ it('should detect OpenAI specific rate limits', () => {
189
+ const response = createMockResponse({
190
+ headers: new Headers({
191
+ 'x-ratelimit-remaining-requests': '0',
192
+ }),
193
+ });
194
+ expect((0, fetch_1.isRateLimited)(response)).toBe(true);
195
+ const tokenResponse = createMockResponse({
196
+ headers: new Headers({
197
+ 'x-ratelimit-remaining-tokens': '0',
198
+ }),
199
+ });
200
+ expect((0, fetch_1.isRateLimited)(tokenResponse)).toBe(true);
201
+ });
202
+ it('should return false when not rate limited', () => {
203
+ const response = createMockResponse({
204
+ headers: new Headers({
205
+ 'X-RateLimit-Remaining': '10',
206
+ }),
207
+ status: 200,
208
+ });
209
+ expect((0, fetch_1.isRateLimited)(response)).toBe(false);
210
+ });
211
+ });
212
+ describe('handleRateLimit', () => {
213
+ beforeEach(() => {
214
+ jest.useFakeTimers();
215
+ jest.mocked(time_1.sleep).mockClear();
216
+ });
217
+ afterEach(() => {
218
+ jest.useRealTimers();
219
+ });
220
+ it('should handle OpenAI reset headers', async () => {
221
+ const response = createMockResponse({
222
+ headers: new Headers({
223
+ 'x-ratelimit-reset-requests': '5',
224
+ }),
225
+ });
226
+ const promise = (0, fetch_1.handleRateLimit)(response);
227
+ jest.advanceTimersByTime(5000);
228
+ await promise;
229
+ expect(logger_1.default.debug).toHaveBeenCalledWith('Rate limited, waiting 5000ms before retry');
230
+ });
231
+ it('should handle standard rate limit reset headers', async () => {
232
+ const futureTime = Math.floor((Date.now() + 5000) / 1000);
233
+ const response = createMockResponse({
234
+ headers: new Headers({
235
+ 'X-RateLimit-Reset': futureTime.toString(),
236
+ }),
237
+ });
238
+ const promise = (0, fetch_1.handleRateLimit)(response);
239
+ // No need to advance timers, sleep will resolve immediately
240
+ await promise;
241
+ expect(logger_1.default.debug).toHaveBeenCalledWith(expect.stringMatching(/Rate limited, waiting \d+ms before retry/));
242
+ });
243
+ it('should handle Retry-After headers', async () => {
244
+ const response = createMockResponse({
245
+ headers: new Headers({
246
+ 'Retry-After': '5',
247
+ }),
248
+ });
249
+ const promise = (0, fetch_1.handleRateLimit)(response);
250
+ jest.advanceTimersByTime(5000);
251
+ await promise;
252
+ expect(logger_1.default.debug).toHaveBeenCalledWith('Rate limited, waiting 5000ms before retry');
253
+ });
254
+ it('should use default wait time when no headers present', async () => {
255
+ const response = createMockResponse();
256
+ const promise = (0, fetch_1.handleRateLimit)(response);
257
+ jest.advanceTimersByTime(60000);
258
+ await promise;
259
+ expect(logger_1.default.debug).toHaveBeenCalledWith('Rate limited, waiting 60000ms before retry');
260
+ });
261
+ });
262
+ describe('fetchWithRetries', () => {
263
+ beforeEach(() => {
264
+ jest.mocked(time_1.sleep).mockClear();
265
+ jest.spyOn(global, 'fetch').mockImplementation();
266
+ jest.clearAllMocks();
267
+ });
268
+ it('should handle 5XX errors when PROMPTFOO_RETRY_5XX is true', async () => {
269
+ jest.mocked(envars_1.getEnvBool).mockReturnValueOnce(true);
270
+ const errorResponse = createMockResponse({
271
+ status: 502,
272
+ statusText: 'Bad Gateway',
273
+ });
274
+ const successResponse = createMockResponse();
275
+ jest
276
+ .mocked(global.fetch)
277
+ .mockResolvedValueOnce(errorResponse)
278
+ .mockResolvedValueOnce(successResponse);
279
+ await (0, fetch_1.fetchWithRetries)('https://example.com', {}, 1000, 2);
280
+ expect(global.fetch).toHaveBeenCalledTimes(2);
281
+ expect(time_1.sleep).toHaveBeenCalledTimes(1);
282
+ });
283
+ it('should handle rate limits with proper backoff', async () => {
284
+ const rateLimitedResponse = createMockResponse({
285
+ status: 429,
286
+ headers: new Headers({
287
+ 'Retry-After': '1',
288
+ }),
289
+ });
290
+ const successResponse = createMockResponse();
291
+ jest
292
+ .mocked(global.fetch)
293
+ .mockResolvedValueOnce(rateLimitedResponse)
294
+ .mockResolvedValueOnce(successResponse);
295
+ await (0, fetch_1.fetchWithRetries)('https://example.com', {}, 1000, 2);
296
+ expect(global.fetch).toHaveBeenCalledTimes(2);
297
+ expect(logger_1.default.debug).toHaveBeenCalledWith(expect.stringContaining('Rate limited on URL'));
298
+ expect(time_1.sleep).toHaveBeenCalledTimes(1);
299
+ });
300
+ it('should respect maximum retry count', async () => {
301
+ jest.mocked(global.fetch).mockRejectedValue(new Error('Network error'));
302
+ await expect((0, fetch_1.fetchWithRetries)('https://example.com', {}, 1000, 2)).rejects.toThrow('Request failed after 2 retries: Network error');
303
+ expect(global.fetch).toHaveBeenCalledTimes(2);
304
+ expect(time_1.sleep).toHaveBeenCalledTimes(2);
305
+ });
306
+ });
307
+ //# sourceMappingURL=fetch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.test.js","sourceRoot":"","sources":["../../test/fetch.test.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const azureopenai_1 = require("../../src/providers/azureopenai");
4
4
  const azureopenai_2 = require("../../src/providers/azureopenai");
5
+ const azureopenai_3 = require("../../src/providers/azureopenai");
5
6
  const azureopenaiUtil_1 = require("../../src/providers/azureopenaiUtil");
6
7
  const huggingface_1 = require("../../src/providers/huggingface");
7
8
  const openai_1 = require("../../src/providers/openai");
@@ -136,4 +137,101 @@ describe('AzureOpenAiGenericProvider', () => {
136
137
  });
137
138
  });
138
139
  });
140
+ describe('AzureOpenAiChatCompletionProvider', () => {
141
+ describe('config merging', () => {
142
+ let provider;
143
+ beforeEach(() => {
144
+ provider = new azureopenai_3.AzureOpenAiChatCompletionProvider('test-deployment', {
145
+ config: {
146
+ apiHost: 'test.azure.com',
147
+ apiKey: 'test-key',
148
+ functions: [{ name: 'provider_func', parameters: {} }],
149
+ max_tokens: 100,
150
+ temperature: 0.5,
151
+ },
152
+ });
153
+ });
154
+ it('should use provider config when no prompt config exists', async () => {
155
+ const context = {
156
+ prompt: {
157
+ label: 'test prompt',
158
+ raw: 'test prompt',
159
+ },
160
+ vars: {},
161
+ };
162
+ expect(provider.getOpenAiBody('test prompt', context)).toMatchObject({
163
+ functions: [{ name: 'provider_func', parameters: {} }],
164
+ max_tokens: 100,
165
+ temperature: 0.5,
166
+ });
167
+ });
168
+ it('should merge prompt config with provider config', async () => {
169
+ const context = {
170
+ prompt: {
171
+ config: {
172
+ functions: [{ name: 'prompt_func', parameters: {} }],
173
+ temperature: 0.7,
174
+ },
175
+ label: 'test prompt',
176
+ raw: 'test prompt',
177
+ },
178
+ vars: {},
179
+ };
180
+ expect(provider.getOpenAiBody('test prompt', context)).toMatchObject({
181
+ functions: [{ name: 'prompt_func', parameters: {} }],
182
+ max_tokens: 100,
183
+ temperature: 0.7,
184
+ });
185
+ });
186
+ it('should handle undefined prompt config', async () => {
187
+ const context = {
188
+ prompt: {
189
+ label: 'test prompt',
190
+ raw: 'test prompt',
191
+ },
192
+ vars: {},
193
+ };
194
+ expect(provider.getOpenAiBody('test prompt', context)).toMatchObject({
195
+ functions: [{ name: 'provider_func', parameters: {} }],
196
+ max_tokens: 100,
197
+ temperature: 0.5,
198
+ });
199
+ });
200
+ it('should handle empty prompt config', async () => {
201
+ const context = {
202
+ prompt: {
203
+ config: {},
204
+ label: 'test prompt',
205
+ raw: 'test prompt',
206
+ },
207
+ vars: {},
208
+ };
209
+ expect(provider.getOpenAiBody('test prompt', context)).toMatchObject({
210
+ functions: [{ name: 'provider_func', parameters: {} }],
211
+ max_tokens: 100,
212
+ temperature: 0.5,
213
+ });
214
+ });
215
+ it('should handle complex nested config merging', async () => {
216
+ const context = {
217
+ prompt: {
218
+ config: {
219
+ response_format: { type: 'json_object' },
220
+ tool_choice: { function: { name: 'test' }, type: 'function' },
221
+ },
222
+ label: 'test prompt',
223
+ raw: 'test prompt',
224
+ },
225
+ vars: {},
226
+ };
227
+ expect(provider.getOpenAiBody('test prompt', context)).toMatchObject({
228
+ functions: [{ name: 'provider_func', parameters: {} }],
229
+ max_tokens: 100,
230
+ response_format: { type: 'json_object' },
231
+ temperature: 0.5,
232
+ tool_choice: { function: { name: 'test' }, type: 'function' },
233
+ });
234
+ });
235
+ });
236
+ });
139
237
  //# sourceMappingURL=azure.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"azure.test.js","sourceRoot":"","sources":["../../../test/providers/azure.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"azure.test.js","sourceRoot":"","sources":["../../../test/providers/azure.test.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const fs_1 = __importDefault(require("fs"));
6
+ const node_module_1 = require("node:module");
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const esm_1 = require("../../src/esm");
9
9
  const packageParser_1 = require("../../src/providers/packageParser");
10
- jest.mock('fs');
10
+ jest.mock('node:module', () => {
11
+ return {
12
+ createRequire: jest.fn(() => jest.fn((path) => path)),
13
+ };
14
+ });
11
15
  jest.mock('../../src/esm', () => ({
12
16
  importModule: jest.fn(async (modulePath, functionName) => {
13
17
  const mockModule = {
@@ -21,50 +25,100 @@ jest.mock('../../src/esm', () => ({
21
25
  }),
22
26
  }));
23
27
  jest.mock('../../src/logger');
28
+ describe('isPackagePath', () => {
29
+ it('should return true for package paths', () => {
30
+ expect((0, packageParser_1.isPackagePath)('package:packageName:exportedClassOrFunction')).toBe(true);
31
+ });
32
+ it('should return false for non-package paths', () => {
33
+ expect((0, packageParser_1.isPackagePath)('notAPackagePath')).toBe(false);
34
+ });
35
+ });
36
+ describe('loadFromPackage', () => {
37
+ const mockBasePath = '/mock/base/path';
38
+ const mockPackageName = 'testpackage';
39
+ const mockFunctionName = 'getVariable';
40
+ const mockProviderPath = `package:${mockPackageName}:${mockFunctionName}`;
41
+ const mockRequire = {
42
+ resolve: jest.fn(),
43
+ };
44
+ beforeEach(() => {
45
+ jest.clearAllMocks();
46
+ });
47
+ it('should successfully parse a valid package', async () => {
48
+ const mockFunction = jest.fn();
49
+ const mockPackagePath = path_1.default.join(mockBasePath, 'node_modules', mockPackageName, 'index.js');
50
+ jest.mocked(mockRequire.resolve).mockReturnValue(mockPackagePath);
51
+ jest.mocked(node_module_1.createRequire).mockReturnValue(mockRequire);
52
+ jest.mocked(esm_1.importModule).mockResolvedValue({ getVariable: mockFunction });
53
+ const result = await (0, packageParser_1.loadFromPackage)(mockProviderPath, mockBasePath);
54
+ expect(result).toBe(mockFunction);
55
+ result('test');
56
+ expect(mockFunction).toHaveBeenCalledWith('test');
57
+ expect(esm_1.importModule).toHaveBeenCalledWith(mockPackagePath);
58
+ });
59
+ it('should throw an error for invalid provider format', async () => {
60
+ await expect((0, packageParser_1.loadFromPackage)('invalid:format', mockBasePath)).rejects.toThrow('Invalid package format: invalid:format. Expected format: package:packageName:exportedClassOrFunction');
61
+ });
62
+ it('should throw an error if package is not found', async () => {
63
+ jest.mocked(mockRequire.resolve).mockImplementationOnce(() => {
64
+ throw new Error('Cannot find module');
65
+ });
66
+ jest.mocked(node_module_1.createRequire).mockReturnValue(mockRequire);
67
+ await expect((0, packageParser_1.loadFromPackage)(mockProviderPath, mockBasePath)).rejects.toThrow(`Package not found: ${mockPackageName}. Make sure it's installed in ${mockBasePath}`);
68
+ });
69
+ it('should handle nested provider names', async () => {
70
+ const mockModule = {
71
+ nested: {
72
+ getVariable: jest.fn(),
73
+ },
74
+ };
75
+ const mockPackagePath = path_1.default.join(mockBasePath, 'node_modules', mockPackageName, 'index.js');
76
+ jest.mocked(mockRequire.resolve).mockReturnValue(mockPackagePath);
77
+ jest.mocked(node_module_1.createRequire).mockReturnValue(mockRequire);
78
+ jest.mocked(esm_1.importModule).mockResolvedValue(mockModule);
79
+ const result = await (0, packageParser_1.loadFromPackage)(`package:${mockPackageName}:nested.getVariable`, mockBasePath);
80
+ expect(result).toBe(mockModule.nested.getVariable);
81
+ result('test input');
82
+ expect(mockModule.nested.getVariable).toHaveBeenCalledWith('test input');
83
+ });
84
+ });
24
85
  describe('parsePackageProvider', () => {
25
86
  const mockBasePath = '/mock/base/path';
26
87
  const mockPackageName = 'testpackage';
27
88
  const mockProviderName = 'Provider';
28
89
  const mockProviderPath = `package:${mockPackageName}:${mockProviderName}`;
29
90
  const mockOptions = { config: {} };
91
+ const mockRequire = {
92
+ resolve: jest.fn(),
93
+ };
30
94
  beforeEach(() => {
31
95
  jest.clearAllMocks();
32
96
  });
33
97
  it('should successfully parse a valid package provider', async () => {
34
- const mockPackageJson = {
35
- name: mockPackageName,
36
- main: 'index.js',
37
- };
38
98
  const mockProvider = class {
39
99
  constructor(options) {
40
100
  this.options = options;
41
101
  }
42
102
  };
43
- jest.mocked(fs_1.default.existsSync).mockReturnValue(true);
44
- jest.mocked(fs_1.default.readFileSync).mockReturnValue(JSON.stringify(mockPackageJson));
103
+ const mockPackagePath = path_1.default.join(mockBasePath, 'node_modules', mockPackageName, 'index.js');
104
+ jest.mocked(mockRequire.resolve).mockReturnValue(mockPackagePath);
105
+ jest.mocked(node_module_1.createRequire).mockReturnValue(mockRequire);
45
106
  jest.mocked(esm_1.importModule).mockResolvedValue({ Provider: mockProvider });
46
107
  const result = await (0, packageParser_1.parsePackageProvider)(mockProviderPath, mockBasePath, mockOptions);
47
108
  expect(result).toBeInstanceOf(mockProvider);
48
- expect(fs_1.default.existsSync).toHaveBeenCalledWith(path_1.default.join(mockBasePath, 'node_modules', mockPackageName, 'package.json'));
49
- expect(esm_1.importModule).toHaveBeenCalledWith(path_1.default.join(mockBasePath, 'node_modules', mockPackageName, 'index.js'));
109
+ expect(esm_1.importModule).toHaveBeenCalledWith(mockPackagePath);
50
110
  });
51
111
  it('should throw an error for invalid provider format', async () => {
52
- await expect((0, packageParser_1.parsePackageProvider)('invalid:format', mockBasePath, mockOptions)).rejects.toThrow('Invalid package provider format: invalid:format. Expected format: package:packageName:providerName');
112
+ await expect((0, packageParser_1.parsePackageProvider)('invalid:format', mockBasePath, mockOptions)).rejects.toThrow('Invalid package format: invalid:format. Expected format: package:packageName:exportedClassOrFunction');
53
113
  });
54
114
  it('should throw an error if package is not found', async () => {
55
- jest.mocked(fs_1.default.existsSync).mockReturnValue(false);
115
+ jest.mocked(mockRequire.resolve).mockImplementationOnce(() => {
116
+ throw new Error('Cannot find module');
117
+ });
118
+ jest.mocked(node_module_1.createRequire).mockReturnValue(mockRequire);
56
119
  await expect((0, packageParser_1.parsePackageProvider)(mockProviderPath, mockBasePath, mockOptions)).rejects.toThrow(`Package not found: ${mockPackageName}. Make sure it's installed in ${mockBasePath}`);
57
120
  });
58
- it('should throw an error if package.json cannot be parsed', async () => {
59
- jest.mocked(fs_1.default.existsSync).mockReturnValue(true);
60
- jest.mocked(fs_1.default.readFileSync).mockReturnValue('invalid json');
61
- await expect((0, packageParser_1.parsePackageProvider)(mockProviderPath, mockBasePath, mockOptions)).rejects.toThrow(/Unexpected token/);
62
- });
63
121
  it('should handle nested provider names', async () => {
64
- const mockPackageJson = {
65
- name: mockPackageName,
66
- main: 'index.js',
67
- };
68
122
  const mockModule = {
69
123
  nested: {
70
124
  Provider: class {
@@ -74,20 +128,18 @@ describe('parsePackageProvider', () => {
74
128
  },
75
129
  },
76
130
  };
77
- jest.mocked(fs_1.default.existsSync).mockReturnValue(true);
78
- jest.mocked(fs_1.default.readFileSync).mockReturnValue(JSON.stringify(mockPackageJson));
131
+ const mockPackagePath = path_1.default.join(mockBasePath, 'node_modules', mockPackageName, 'index.js');
132
+ jest.mocked(mockRequire.resolve).mockReturnValue(mockPackagePath);
133
+ jest.mocked(node_module_1.createRequire).mockReturnValue(mockRequire);
79
134
  jest.mocked(esm_1.importModule).mockResolvedValue(mockModule);
80
135
  const result = await (0, packageParser_1.parsePackageProvider)(`package:${mockPackageName}:nested.Provider`, mockBasePath, mockOptions);
81
136
  expect(result).toBeInstanceOf(mockModule.nested.Provider);
82
137
  });
83
138
  it('should pass options to the provider constructor', async () => {
84
- const mockPackageJson = {
85
- name: mockPackageName,
86
- main: 'index.js',
87
- };
88
139
  const MockProvider = jest.fn();
89
- jest.mocked(fs_1.default.existsSync).mockReturnValue(true);
90
- jest.mocked(fs_1.default.readFileSync).mockReturnValue(JSON.stringify(mockPackageJson));
140
+ const mockPackagePath = path_1.default.join(mockBasePath, 'node_modules', mockPackageName, 'index.js');
141
+ jest.mocked(mockRequire.resolve).mockReturnValue(mockPackagePath);
142
+ jest.mocked(node_module_1.createRequire).mockReturnValue(mockRequire);
91
143
  jest.mocked(esm_1.importModule).mockResolvedValue({ Provider: MockProvider });
92
144
  await (0, packageParser_1.parsePackageProvider)(mockProviderPath, mockBasePath, mockOptions);
93
145
  expect(MockProvider).toHaveBeenCalledWith(mockOptions);