promptfoo 0.11.0 → 0.13.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 (154) hide show
  1. package/dist/package.json +87 -0
  2. package/dist/src/__mocks__/esm.d.ts.map +1 -0
  3. package/dist/src/__mocks__/esm.js.map +1 -0
  4. package/dist/src/assertions.d.ts.map +1 -0
  5. package/dist/{assertions.js → src/assertions.js} +19 -20
  6. package/dist/src/assertions.js.map +1 -0
  7. package/dist/src/cache.d.ts.map +1 -0
  8. package/dist/{cache.js → src/cache.js} +1 -1
  9. package/dist/src/cache.js.map +1 -0
  10. package/dist/src/esm.d.ts.map +1 -0
  11. package/dist/src/esm.js.map +1 -0
  12. package/dist/src/evaluator.d.ts.map +1 -0
  13. package/dist/{evaluator.js → src/evaluator.js} +28 -25
  14. package/dist/src/evaluator.js.map +1 -0
  15. package/dist/{index.d.ts → src/index.d.ts} +4 -0
  16. package/dist/src/index.d.ts.map +1 -0
  17. package/dist/{index.js → src/index.js} +15 -11
  18. package/dist/src/index.js.map +1 -0
  19. package/dist/src/logger.d.ts +12 -0
  20. package/dist/src/logger.d.ts.map +1 -0
  21. package/dist/{logger.js → src/logger.js} +13 -5
  22. package/dist/src/logger.js.map +1 -0
  23. package/dist/src/main.d.ts.map +1 -0
  24. package/dist/{main.js → src/main.js} +30 -47
  25. package/dist/src/main.js.map +1 -0
  26. package/dist/{onboarding.d.ts → src/onboarding.d.ts} +1 -1
  27. package/dist/src/onboarding.d.ts.map +1 -0
  28. package/dist/{onboarding.js → src/onboarding.js} +6 -0
  29. package/dist/src/onboarding.js.map +1 -0
  30. package/dist/src/prompts.d.ts.map +1 -0
  31. package/dist/src/prompts.js.map +1 -0
  32. package/dist/src/providers/localai.d.ts.map +1 -0
  33. package/dist/src/providers/localai.js.map +1 -0
  34. package/dist/{providers → src/providers}/openai.d.ts +11 -3
  35. package/dist/src/providers/openai.d.ts.map +1 -0
  36. package/dist/{providers → src/providers}/openai.js +17 -5
  37. package/dist/src/providers/openai.js.map +1 -0
  38. package/dist/src/providers/shared.d.ts.map +1 -0
  39. package/dist/src/providers/shared.js.map +1 -0
  40. package/dist/{providers.d.ts → src/providers.d.ts} +3 -3
  41. package/dist/src/providers.d.ts.map +1 -0
  42. package/dist/{providers.js → src/providers.js} +16 -7
  43. package/dist/src/providers.js.map +1 -0
  44. package/dist/src/suggestions.d.ts.map +1 -0
  45. package/dist/src/suggestions.js.map +1 -0
  46. package/dist/src/table.d.ts +4 -0
  47. package/dist/src/table.d.ts.map +1 -0
  48. package/dist/src/table.js +48 -0
  49. package/dist/src/table.js.map +1 -0
  50. package/dist/src/telemetry.d.ts +10 -0
  51. package/dist/src/telemetry.d.ts.map +1 -0
  52. package/dist/src/telemetry.js +48 -0
  53. package/dist/src/telemetry.js.map +1 -0
  54. package/dist/{types.d.ts → src/types.d.ts} +7 -1
  55. package/dist/src/types.d.ts.map +1 -0
  56. package/dist/src/types.js.map +1 -0
  57. package/dist/src/updates.d.ts +3 -0
  58. package/dist/src/updates.d.ts.map +1 -0
  59. package/dist/src/updates.js +36 -0
  60. package/dist/src/updates.js.map +1 -0
  61. package/dist/{util.d.ts → src/util.d.ts} +1 -1
  62. package/dist/src/util.d.ts.map +1 -0
  63. package/dist/{util.js → src/util.js} +15 -2
  64. package/dist/src/util.js.map +1 -0
  65. package/dist/src/web/client/assets/index-0f6d6b29.js +199 -0
  66. package/dist/src/web/client/assets/js-yaml-8bbf9398.js +32 -0
  67. package/dist/{web → src/web}/client/index.html +1 -1
  68. package/dist/src/web/server.d.ts.map +1 -0
  69. package/dist/{web → src/web}/server.js +3 -4
  70. package/dist/src/web/server.js.map +1 -0
  71. package/package.json +11 -9
  72. package/src/assertions.ts +18 -23
  73. package/src/cache.ts +1 -1
  74. package/src/evaluator.ts +38 -34
  75. package/src/index.ts +10 -10
  76. package/src/logger.ts +13 -5
  77. package/src/main.ts +38 -48
  78. package/src/onboarding.ts +6 -0
  79. package/src/providers/openai.ts +32 -6
  80. package/src/providers.ts +32 -9
  81. package/src/table.ts +41 -0
  82. package/src/telemetry.ts +57 -0
  83. package/src/types.ts +10 -1
  84. package/src/updates.ts +37 -0
  85. package/src/util.ts +34 -4
  86. package/src/web/client/package.json +1 -0
  87. package/src/web/client/src/App.tsx +36 -12
  88. package/src/web/client/src/ConfigModal.tsx +81 -0
  89. package/src/web/client/src/ResultsView.tsx +76 -3
  90. package/src/web/client/src/ShareModal.tsx +70 -0
  91. package/src/web/client/src/store.ts +6 -1
  92. package/src/web/client/src/types.ts +2 -0
  93. package/src/web/server.ts +3 -7
  94. package/dist/__mocks__/esm.d.ts.map +0 -1
  95. package/dist/__mocks__/esm.js.map +0 -1
  96. package/dist/assertions.d.ts.map +0 -1
  97. package/dist/assertions.js.map +0 -1
  98. package/dist/cache.d.ts.map +0 -1
  99. package/dist/cache.js.map +0 -1
  100. package/dist/esm.d.ts.map +0 -1
  101. package/dist/esm.js.map +0 -1
  102. package/dist/evaluator.d.ts.map +0 -1
  103. package/dist/evaluator.js.map +0 -1
  104. package/dist/index.d.ts.map +0 -1
  105. package/dist/index.js.map +0 -1
  106. package/dist/logger.d.ts +0 -11
  107. package/dist/logger.d.ts.map +0 -1
  108. package/dist/logger.js.map +0 -1
  109. package/dist/main.d.ts.map +0 -1
  110. package/dist/main.js.map +0 -1
  111. package/dist/onboarding.d.ts.map +0 -1
  112. package/dist/onboarding.js.map +0 -1
  113. package/dist/prompts.d.ts.map +0 -1
  114. package/dist/prompts.js.map +0 -1
  115. package/dist/providers/localai.d.ts.map +0 -1
  116. package/dist/providers/localai.js.map +0 -1
  117. package/dist/providers/openai.d.ts.map +0 -1
  118. package/dist/providers/openai.js.map +0 -1
  119. package/dist/providers/shared.d.ts.map +0 -1
  120. package/dist/providers/shared.js.map +0 -1
  121. package/dist/providers.d.ts.map +0 -1
  122. package/dist/providers.js.map +0 -1
  123. package/dist/suggestions.d.ts.map +0 -1
  124. package/dist/suggestions.js.map +0 -1
  125. package/dist/types.d.ts.map +0 -1
  126. package/dist/types.js.map +0 -1
  127. package/dist/util.d.ts.map +0 -1
  128. package/dist/util.js.map +0 -1
  129. package/dist/web/client/assets/index-15dfcd18.js +0 -172
  130. package/dist/web/server.d.ts.map +0 -1
  131. package/dist/web/server.js.map +0 -1
  132. package/src/web/client/package-lock.json +0 -5729
  133. /package/dist/{__mocks__ → src/__mocks__}/esm.d.ts +0 -0
  134. /package/dist/{__mocks__ → src/__mocks__}/esm.js +0 -0
  135. /package/dist/{assertions.d.ts → src/assertions.d.ts} +0 -0
  136. /package/dist/{cache.d.ts → src/cache.d.ts} +0 -0
  137. /package/dist/{esm.d.ts → src/esm.d.ts} +0 -0
  138. /package/dist/{esm.js → src/esm.js} +0 -0
  139. /package/dist/{evaluator.d.ts → src/evaluator.d.ts} +0 -0
  140. /package/dist/{main.d.ts → src/main.d.ts} +0 -0
  141. /package/dist/{prompts.d.ts → src/prompts.d.ts} +0 -0
  142. /package/dist/{prompts.js → src/prompts.js} +0 -0
  143. /package/dist/{providers → src/providers}/localai.d.ts +0 -0
  144. /package/dist/{providers → src/providers}/localai.js +0 -0
  145. /package/dist/{providers → src/providers}/shared.d.ts +0 -0
  146. /package/dist/{providers → src/providers}/shared.js +0 -0
  147. /package/dist/{suggestions.d.ts → src/suggestions.d.ts} +0 -0
  148. /package/dist/{suggestions.js → src/suggestions.js} +0 -0
  149. /package/dist/{tableOutput.html → src/tableOutput.html} +0 -0
  150. /package/dist/{types.js → src/types.js} +0 -0
  151. /package/dist/{web → src/web}/client/assets/index-87905193.css +0 -0
  152. /package/dist/{web → src/web}/client/favicon.ico +0 -0
  153. /package/dist/{web → src/web}/client/logo.svg +0 -0
  154. /package/dist/{web → src/web}/server.d.ts +0 -0
@@ -29,17 +29,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
30
  const fs_1 = require("fs");
31
31
  const path_1 = require("path");
32
- const cli_table3_1 = __importDefault(require("cli-table3"));
33
32
  const chalk_1 = __importDefault(require("chalk"));
34
33
  const commander_1 = require("commander");
34
+ const telemetry_1 = __importDefault(require("./telemetry"));
35
35
  const logger_1 = __importStar(require("./logger"));
36
36
  const providers_1 = require("./providers");
37
37
  const evaluator_1 = require("./evaluator");
38
38
  const util_1 = require("./util");
39
+ const onboarding_1 = require("./onboarding");
40
+ const cache_1 = require("./cache");
39
41
  const esm_1 = require("./esm");
40
42
  const server_1 = require("./web/server");
41
- const cache_1 = require("./cache");
42
- const onboarding_1 = require("./onboarding");
43
+ const updates_1 = require("./updates");
44
+ const table_1 = require("./table");
43
45
  function createDummyFiles(directory) {
44
46
  if (directory) {
45
47
  // Make the directory if it doesn't exist
@@ -68,6 +70,7 @@ function createDummyFiles(directory) {
68
70
  }
69
71
  }
70
72
  async function main() {
73
+ await (0, updates_1.checkForUpdates)();
71
74
  const pwd = process.cwd();
72
75
  const potentialPaths = [
73
76
  (0, path_1.join)(pwd, 'promptfooconfig.js'),
@@ -97,21 +100,29 @@ async function main() {
97
100
  program
98
101
  .command('init [directory]')
99
102
  .description('Initialize project with dummy files')
100
- .action((directory) => {
103
+ .action(async (directory) => {
101
104
  createDummyFiles(directory);
105
+ telemetry_1.default.record('command_used', {
106
+ name: 'init',
107
+ });
108
+ await telemetry_1.default.send();
102
109
  });
103
110
  program
104
111
  .command('view')
105
112
  .description('Start browser ui')
106
113
  .option('-p, --port <number>', 'Port number', '15500')
107
- .action((cmdObj) => {
114
+ .action(async (cmdObj) => {
115
+ telemetry_1.default.record('command_used', {
116
+ name: 'view',
117
+ });
118
+ await telemetry_1.default.send();
108
119
  (0, server_1.init)(cmdObj.port);
109
120
  });
110
121
  program
111
122
  .command('eval')
112
123
  .description('Evaluate prompts')
113
124
  .requiredOption('-p, --prompts <paths...>', 'Paths to prompt files (.txt)', config.prompts)
114
- .requiredOption('-r, --providers <name or path...>', 'One of: openai:chat, openai:completion, openai:<model name>, or path to custom API caller module', config?.providers)
125
+ .option('-r, --providers <name or path...>', 'One of: openai:chat, openai:completion, openai:<model name>, or path to custom API caller module')
115
126
  .option('-c, --config <path>', 'Path to configuration file. Automatically loads promptfooconfig.js/json/yaml')
116
127
  .option(
117
128
  // TODO(ian): Remove `vars` for v1
@@ -186,7 +197,7 @@ async function main() {
186
197
  defaultTest,
187
198
  };
188
199
  const options = {
189
- showProgressBar: true,
200
+ showProgressBar: (0, logger_1.getLogLevel)() !== 'debug',
190
201
  maxConcurrency: !isNaN(maxConcurrency) && maxConcurrency > 0 ? maxConcurrency : undefined,
191
202
  ...evaluateOptions,
192
203
  };
@@ -202,61 +213,33 @@ async function main() {
202
213
  logger_1.default.info(chalk_1.default.yellow(`Writing output to ${cmdObj.output}`));
203
214
  (0, util_1.writeOutput)(cmdObj.output, summary);
204
215
  }
205
- else {
216
+ else if ((0, logger_1.getLogLevel)() !== 'debug') {
206
217
  // Output table by default
207
- const maxWidth = process.stdout.columns ? process.stdout.columns - 10 : 120;
208
- const head = summary.table.head;
209
- const headLength = head.prompts.length + head.vars.length;
210
- const table = new cli_table3_1.default({
211
- head: [...head.prompts, ...head.vars],
212
- colWidths: Array(headLength).fill(Math.floor(maxWidth / headLength)),
213
- wordWrap: true,
214
- wrapOnWordBoundary: false,
215
- style: {
216
- head: ['blue', 'bold'],
217
- },
218
- });
219
- // Skip first row (header) and add the rest. Color PASS/FAIL
220
- for (const row of summary.table.body.slice(0, 25)) {
221
- table.push([
222
- ...row.vars,
223
- ...row.outputs.map((col) => {
224
- const tableCellMaxLength = parseInt(cmdObj.tableCellMaxLength || '', 10);
225
- if (!isNaN(tableCellMaxLength) && col.length > tableCellMaxLength) {
226
- col = col.slice(0, tableCellMaxLength) + '...';
227
- }
228
- if (col.startsWith('[PASS]')) {
229
- // color '[PASS]' green
230
- return chalk_1.default.green.bold(col.slice(0, 6)) + col.slice(6);
231
- }
232
- else if (col.startsWith('[FAIL]')) {
233
- // color everything red up until '---'
234
- return col
235
- .split('---')
236
- .map((c, idx) => (idx === 0 ? chalk_1.default.red.bold(c) : c))
237
- .join('---');
238
- }
239
- return col;
240
- }),
241
- ]);
242
- }
218
+ const table = (0, table_1.generateTable)(summary, parseInt(cmdObj.tableCellMaxLength || '', 10));
243
219
  logger_1.default.info('\n' + table.toString());
244
220
  if (summary.table.body.length > 25) {
245
221
  const rowsLeft = summary.table.body.length - 25;
246
222
  logger_1.default.info(`... ${rowsLeft} more row${rowsLeft === 1 ? '' : 's'} not shown ...\n`);
247
223
  }
248
224
  }
225
+ const border = '='.repeat(process.stdout.columns - 10);
226
+ logger_1.default.info(border);
249
227
  if (cmdObj.view || !cmdObj.write) {
250
- logger_1.default.info('Evaluation complete');
228
+ logger_1.default.info(`${chalk_1.default.green('✔')} Evaluation complete`);
251
229
  }
252
230
  else {
253
- (0, util_1.writeLatestResults)(summary);
254
- logger_1.default.info(`Evaluation complete. To use web viewer, run ${chalk_1.default.green('promptfoo view')}`);
231
+ (0, util_1.writeLatestResults)(summary, config);
232
+ logger_1.default.info(`${chalk_1.default.green('✔')} Evaluation complete. To use web viewer, run ${chalk_1.default.green('promptfoo view')}`);
255
233
  }
234
+ logger_1.default.info(border);
256
235
  logger_1.default.info(chalk_1.default.green.bold(`Successes: ${summary.stats.successes}`));
257
236
  logger_1.default.info(chalk_1.default.red.bold(`Failures: ${summary.stats.failures}`));
258
237
  logger_1.default.info(`Token usage: Total ${summary.stats.tokenUsage.total}, Prompt ${summary.stats.tokenUsage.prompt}, Completion ${summary.stats.tokenUsage.completion}, Cached ${summary.stats.tokenUsage.cached}`);
259
238
  logger_1.default.info('Done.');
239
+ telemetry_1.default.record('command_used', {
240
+ name: 'eval',
241
+ });
242
+ await telemetry_1.default.send();
260
243
  if (cmdObj.view) {
261
244
  (0, server_1.init)(parseInt(cmdObj.view, 10) || 15500);
262
245
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export declare const DEFAULT_PROMPTS = "Your first prompt goes here\n---\nNext prompt goes here. You can substitute variables like this: {{var1}} {{var2}} {{var3}}\n---\nThis is the next prompt.\n\nThese prompts are nunjucks templates, so you can use logic like this:\n{% if var1 %}\n {{ var1 }}\n{% endif %}\n---\nIf you prefer, you can break prompts into multiple files (make sure to edit promptfooconfig.yaml accordingly)\n";
1
+ export declare const DEFAULT_PROMPTS = "Your first prompt goes here\n---\nNext prompt goes here. You can substitute variables like this: {{var1}} {{var2}} {{var3}}\n---\nThis is the next prompt.\n\nThese prompts are nunjucks templates, so you can use logic like this:\n{% if var1 %}\n {{ var1 }}\n{% endif %}\n---\n[\n {\"role\": \"system\", \"content\": \"Use JSON too for more complex payloads\"},\n {\"role\": \"user\", \"content\": \"Such as multi-shot prompts\"}\n {\"role\": \"user\", \"content\": \"Variable substitution still works: {{ var3 }}\"}\n]\n---\nIf you prefer, you can break prompts into multiple files (make sure to edit promptfooconfig.yaml accordingly)\n";
2
2
  export declare const DEFAULT_YAML_CONFIG = "# This configuration runs each prompt through a series of example inputs and checks if they meet requirements.\n\nprompts: [prompts.txt]\nproviders: [openai:gpt-3.5-turbo]\ntests:\n - description: First test case - automatic review\n vars:\n var1: first variable's value\n var2: another value\n var3: some other value\n assert:\n - type: equality\n value: expected LLM output goes here\n - type: function\n value: output.includes('some text')\n\n - description: Second test case - manual review\n # Test cases don't need assertions if you prefer to manually review the output\n vars:\n var1: new value\n var2: another value\n var3: third value\n\n - description: Third test case - other types of automatic review\n vars:\n var1: yet another value\n var2: and another\n var3: dear llm, please output your response in json format\n assert:\n - type: contains-json\n - type: similarity\n value: ensures that output is semantically similar to this text\n - type: llm-rubric\n value: ensure that output contains a reference to X\n";
3
3
  export declare const DEFAULT_README = "To get started, set your OPENAI_API_KEY environment variable.\n\nNext, change a few of the prompts in prompts.txt and edit promptfooconfig.yaml.\n\nThen run:\n```\npromptfoo eval\n```\n\nAfterwards, you can view the results by running `promptfoo view`\n";
4
4
  //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/onboarding.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,ooBAkB3B,CAAC;AAEF,eAAO,MAAM,mBAAmB,6nCAkC/B,CAAC;AAEF,eAAO,MAAM,cAAc,kQAU1B,CAAC"}
@@ -12,6 +12,12 @@ These prompts are nunjucks templates, so you can use logic like this:
12
12
  {{ var1 }}
13
13
  {% endif %}
14
14
  ---
15
+ [
16
+ {"role": "system", "content": "Use JSON too for more complex payloads"},
17
+ {"role": "user", "content": "Such as multi-shot prompts"}
18
+ {"role": "user", "content": "Variable substitution still works: {{ var3 }}"}
19
+ ]
20
+ ---
15
21
  If you prefer, you can break prompts into multiple files (make sure to edit promptfooconfig.yaml accordingly)
16
22
  `;
17
23
  exports.DEFAULT_YAML_CONFIG = `# This configuration runs each prompt through a series of example inputs and checks if they meet requirements.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/onboarding.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG;;;;;;;;;;;;;;;;;;CAkB9B,CAAC;AAEW,QAAA,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkClC,CAAC;AAEW,QAAA,cAAc,GAAG;;;;;;;;;;CAU7B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/prompts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,QAmBjC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;CAO1C,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/prompts.ts"],"names":[],"mappings":";;;AAAa,QAAA,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC;IACnD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;;;;;;;;;;gEAUmD;KAC7D;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,8CAA8C;KACxD;CACF,CAAC,CAAC;AAEU,QAAA,8BAA8B,GAAG;IAC5C,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE;;;;+FAIoF;CAC9F,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localai.d.ts","sourceRoot":"","sources":["../../../src/providers/localai.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,cAAM,sBAAuB,YAAW,WAAW;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;gBAEP,SAAS,EAAE,MAAM;IAK7B,EAAE,IAAI,MAAM;IAIZ,QAAQ,IAAI,MAAM;IAKZ,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAGzD;AAED,qBAAa,mBAAoB,SAAQ,sBAAsB;IACvD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsCzD;AAED,qBAAa,yBAA0B,SAAQ,sBAAsB;IAC7D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsCzD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localai.js","sourceRoot":"","sources":["../../../src/providers/localai.ts"],"names":[],"mappings":";;;;;;AAAA,uDAA+B;AAC/B,oCAA8C;AAC9C,qCAA8C;AAI9C,MAAM,sBAAsB;IAI1B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAC/E,CAAC;IAED,EAAE;QACA,OAAO,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;IACrC,CAAC;IAED,QAAQ;QACN,OAAO,qBAAqB,IAAI,CAAC,SAAS,GAAG,CAAC;IAChD,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAa,mBAAoB,SAAQ,sBAAsB;IAC7D,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,MAAM;YACN,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,GAAG;SACpD,CAAC;QACF,gBAAM,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE7D,IAAI,IAAI,EACN,MAAM,GAAG,KAAK,CAAC;QACjB,IAAI;YACF,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAA,0BAAkB,EAC3C,GAAG,IAAI,CAAC,UAAU,mBAAmB,EACrC;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,EACD,2BAAkB,CACnB,CAAmB,CAAC,CAAC;SACvB;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,mBAAmB,MAAM,CAAC,GAAG,CAAC,EAAE;aACxC,CAAC;SACH;QACD,gBAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI;YACF,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;aAC7B,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,uBAAuB,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;aACrE,CAAC;SACH;IACH,CAAC;CACF;AAvCD,kDAuCC;AAED,MAAa,yBAA0B,SAAQ,sBAAsB;IACnE,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,MAAM;YACN,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,GAAG;SACpD,CAAC;QACF,gBAAM,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE7D,IAAI,IAAI,EACN,MAAM,GAAG,KAAK,CAAC;QACjB,IAAI;YACF,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAA,0BAAkB,EAC3C,GAAG,IAAI,CAAC,UAAU,cAAc,EAChC;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,EACD,2BAAkB,CACnB,CAAmB,CAAC,CAAC;SACvB;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,mBAAmB,MAAM,CAAC,GAAG,CAAC,EAAE;aACxC,CAAC;SACH;QACD,gBAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI;YACF,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;aAC7B,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,uBAAuB,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;aACrE,CAAC;SACH;IACH,CAAC;CACF;AAvCD,8DAuCC"}
@@ -1,6 +1,12 @@
1
1
  import type { ApiProvider, ProviderEmbeddingResponse, ProviderResponse } from '../types.js';
2
2
  interface OpenAiCompletionOptions {
3
- temperature: number;
3
+ temperature?: number;
4
+ functions?: {
5
+ name: string;
6
+ description?: string;
7
+ parameters: any;
8
+ }[];
9
+ function_call?: 'none' | 'auto';
4
10
  }
5
11
  declare class OpenAiGenericProvider implements ApiProvider {
6
12
  modelName: string;
@@ -16,12 +22,14 @@ export declare class OpenAiEmbeddingProvider extends OpenAiGenericProvider {
16
22
  }
17
23
  export declare class OpenAiCompletionProvider extends OpenAiGenericProvider {
18
24
  static OPENAI_COMPLETION_MODELS: string[];
19
- constructor(modelName: string, apiKey?: string);
25
+ options: OpenAiCompletionOptions;
26
+ constructor(modelName: string, apiKey?: string, context?: OpenAiCompletionOptions);
20
27
  callApi(prompt: string, options?: OpenAiCompletionOptions): Promise<ProviderResponse>;
21
28
  }
22
29
  export declare class OpenAiChatCompletionProvider extends OpenAiGenericProvider {
23
30
  static OPENAI_CHAT_MODELS: string[];
24
- constructor(modelName: string, apiKey?: string);
31
+ options: OpenAiCompletionOptions;
32
+ constructor(modelName: string, apiKey?: string, context?: OpenAiCompletionOptions);
25
33
  callApi(prompt: string, options?: OpenAiCompletionOptions): Promise<ProviderResponse>;
26
34
  }
27
35
  export declare const DefaultEmbeddingProvider: OpenAiEmbeddingProvider;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI5F,UAAU,uBAAuB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,GAAG,CAAC;KACjB,EAAE,CAAC;IACJ,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,cAAM,qBAAsB,YAAW,WAAW;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;gBAEJ,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAQ9C,EAAE,IAAI,MAAM;IAIZ,QAAQ,IAAI,MAAM;IAKZ,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAG5F;AAED,qBAAa,uBAAwB,SAAQ,qBAAqB;IAC1D,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;CA+DzE;AAED,qBAAa,wBAAyB,SAAQ,qBAAqB;IACjE,MAAM,CAAC,wBAAwB,WAM7B;IAEF,OAAO,EAAE,uBAAuB,CAAC;gBAErB,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAQ3E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAgE5F;AAED,qBAAa,4BAA6B,SAAQ,qBAAqB;IACrE,MAAM,CAAC,kBAAkB,WASvB;IAEF,OAAO,EAAE,uBAAuB,CAAC;gBAErB,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAS3E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAuE5F;AAED,eAAO,MAAM,wBAAwB,yBAAwD,CAAC;AAC9F,eAAO,MAAM,sBAAsB,8BAA4C,CAAC;AAChF,eAAO,MAAM,0BAA0B,8BAA4C,CAAC"}
@@ -87,11 +87,12 @@ class OpenAiEmbeddingProvider extends OpenAiGenericProvider {
87
87
  }
88
88
  exports.OpenAiEmbeddingProvider = OpenAiEmbeddingProvider;
89
89
  class OpenAiCompletionProvider extends OpenAiGenericProvider {
90
- constructor(modelName, apiKey) {
90
+ constructor(modelName, apiKey, context) {
91
91
  if (!OpenAiCompletionProvider.OPENAI_COMPLETION_MODELS.includes(modelName)) {
92
92
  logger_1.default.warn(`Using unknown OpenAI completion model: ${modelName}`);
93
93
  }
94
94
  super(modelName, apiKey);
95
+ this.options = context || {};
95
96
  }
96
97
  async callApi(prompt, options) {
97
98
  if (!this.apiKey) {
@@ -110,7 +111,9 @@ class OpenAiCompletionProvider extends OpenAiGenericProvider {
110
111
  model: this.modelName,
111
112
  prompt,
112
113
  max_tokens: parseInt(process.env.OPENAI_MAX_TOKENS || '1024'),
113
- temperature: options?.temperature ?? parseFloat(process.env.OPENAI_TEMPERATURE || '0'),
114
+ temperature: options?.temperature ??
115
+ this.options.temperature ??
116
+ parseFloat(process.env.OPENAI_TEMPERATURE || '0'),
114
117
  stop,
115
118
  };
116
119
  logger_1.default.debug(`Calling OpenAI API: ${JSON.stringify(body)}`);
@@ -159,11 +162,12 @@ OpenAiCompletionProvider.OPENAI_COMPLETION_MODELS = [
159
162
  ];
160
163
  exports.OpenAiCompletionProvider = OpenAiCompletionProvider;
161
164
  class OpenAiChatCompletionProvider extends OpenAiGenericProvider {
162
- constructor(modelName, apiKey) {
165
+ constructor(modelName, apiKey, context) {
163
166
  if (!OpenAiChatCompletionProvider.OPENAI_CHAT_MODELS.includes(modelName)) {
164
167
  logger_1.default.warn(`Using unknown OpenAI chat model: ${modelName}`);
165
168
  }
166
169
  super(modelName, apiKey);
170
+ this.options = context || {};
167
171
  }
168
172
  // TODO(ian): support passing in `messages` directly
169
173
  async callApi(prompt, options) {
@@ -183,7 +187,11 @@ class OpenAiChatCompletionProvider extends OpenAiGenericProvider {
183
187
  model: this.modelName,
184
188
  messages: messages,
185
189
  max_tokens: parseInt(process.env.OPENAI_MAX_TOKENS || '1024'),
186
- temperature: options?.temperature ?? parseFloat(process.env.OPENAI_TEMPERATURE || '0'),
190
+ temperature: options?.temperature ??
191
+ this.options.temperature ??
192
+ parseFloat(process.env.OPENAI_TEMPERATURE || '0'),
193
+ functions: options?.functions || this.options.functions || undefined,
194
+ function_call: options?.function_call || this.options.function_call || undefined,
187
195
  };
188
196
  logger_1.default.debug(`Calling OpenAI API: ${JSON.stringify(body)}`);
189
197
  let data, cached = false;
@@ -204,8 +212,10 @@ class OpenAiChatCompletionProvider extends OpenAiGenericProvider {
204
212
  }
205
213
  logger_1.default.debug(`\tOpenAI API response: ${JSON.stringify(data)}`);
206
214
  try {
215
+ const message = data.choices[0].message;
216
+ const output = message.content === null ? JSON.stringify(message.function_call) : message.content;
207
217
  return {
208
- output: data.choices[0].message.content,
218
+ output,
209
219
  tokenUsage: cached
210
220
  ? { cached: data.usage.total_tokens }
211
221
  : {
@@ -225,10 +235,12 @@ class OpenAiChatCompletionProvider extends OpenAiGenericProvider {
225
235
  OpenAiChatCompletionProvider.OPENAI_CHAT_MODELS = [
226
236
  'gpt-4',
227
237
  'gpt-4-0314',
238
+ 'gpt-4-0613',
228
239
  'gpt-4-32k',
229
240
  'gpt-4-32k-0314',
230
241
  'gpt-3.5-turbo',
231
242
  'gpt-3.5-turbo-0301',
243
+ 'gpt-3.5-turbo-0613',
232
244
  ];
233
245
  exports.OpenAiChatCompletionProvider = OpenAiChatCompletionProvider;
234
246
  exports.DefaultEmbeddingProvider = new OpenAiEmbeddingProvider('text-embedding-ada-002');
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":";;;;;;AAAA,uDAA+B;AAC/B,oCAA8C;AAC9C,qCAA8C;AAI9C,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAY7C,MAAM,qBAAqB;IAKzB,YAAY,SAAiB,EAAE,MAAe;QAC5C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAEnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,mBAAmB,CAAC;IACpE,CAAC;IAED,EAAE;QACA,OAAO,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;IACpC,CAAC;IAED,QAAQ;QACN,OAAO,oBAAoB,IAAI,CAAC,SAAS,GAAG,CAAC;IAC/C,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAiC;QAC7D,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAa,uBAAwB,SAAQ,qBAAqB;IAChE,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SACzE;QAED,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI,CAAC,SAAS;SACtB,CAAC;QACF,IAAI,IAAI,EACN,MAAM,GAAG,KAAK,CAAC;QACjB,IAAI;YACF,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAA,0BAAkB,EAC3C,WAAW,IAAI,CAAC,OAAO,gBAAgB,EACvC;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,EACD,2BAAkB,CACnB,CAAmB,CAAC,CAAC;SACvB;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,mBAAmB,MAAM,CAAC,GAAG,CAAC,EAAE;gBACvC,UAAU,EAAE;oBACV,KAAK,EAAE,CAAC;oBACR,MAAM,EAAE,CAAC;oBACT,UAAU,EAAE,CAAC;iBACd;aACF,CAAC;SACH;QACD,gBAAM,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE5E,IAAI;YACF,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;YAC7C,IAAI,CAAC,SAAS,EAAE;gBACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;aAC1C;YACD,MAAM,GAAG,GAAG;gBACV,SAAS;gBACT,UAAU,EAAE,MAAM;oBAChB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;oBACrC,CAAC,CAAC;wBACE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;wBAC9B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;wBAChC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;qBACzC;aACN,CAAC;YACF,OAAO,GAAG,CAAC;SACZ;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,uBAAuB,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACpE,UAAU,EAAE;oBACV,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY;oBAChC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa;oBAClC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB;iBAC3C;aACF,CAAC;SACH;IACH,CAAC;CACF;AAhED,0DAgEC;AAED,MAAa,wBAAyB,SAAQ,qBAAqB;IAWjE,YAAY,SAAiB,EAAE,MAAe,EAAE,OAAiC;QAC/E,IAAI,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC1E,gBAAM,CAAC,IAAI,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;SACpE;QACD,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAiC;QAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAC;SACH;QAED,IAAI,IAAY,CAAC;QACjB,IAAI;YACF,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW;gBAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;gBACrC,CAAC,CAAC,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;SACrC;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAC;SACnE;QACD,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,MAAM;YACN,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC;YAC7D,WAAW,EACT,OAAO,EAAE,WAAW;gBACpB,IAAI,CAAC,OAAO,CAAC,WAAW;gBACxB,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC;YACnD,IAAI;SACL,CAAC;QACF,gBAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,IAAI,EACN,MAAM,GAAG,KAAK,CAAC;QACjB,IAAI;YACF,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAA,0BAAkB,EAC3C,WAAW,IAAI,CAAC,OAAO,iBAAiB,EACxC;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,EACD,2BAAkB,CACnB,CAAmB,CAAC,CAAC;SACvB;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,mBAAmB,MAAM,CAAC,GAAG,CAAC,EAAE;aACxC,CAAC;SACH;QACD,gBAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI;YACF,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC5B,UAAU,EAAE,MAAM;oBAChB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;oBACrC,CAAC,CAAC;wBACE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;wBAC9B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;wBAChC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;qBACzC;aACN,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,uBAAuB,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;aACrE,CAAC;SACH;IACH,CAAC;;AAjFM,iDAAwB,GAAG;IAChC,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,cAAc;CACf,CAAC;AAPS,4DAAwB;AAqFrC,MAAa,4BAA6B,SAAQ,qBAAqB;IAcrE,YAAY,SAAiB,EAAE,MAAe,EAAE,OAAiC;QAC/E,IAAI,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACxE,gBAAM,CAAC,IAAI,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;SAC9D;QACD,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAiC;QAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAC;SACH;QAED,IAAI,QAA6C,CAAC;QAClD,IAAI;YACF,qEAAqE;YACrE,yCAAyC;YACzC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAC/B;QAAC,OAAO,GAAG,EAAE;YACZ,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;SAChD;QAED,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC;YAC7D,WAAW,EACT,OAAO,EAAE,WAAW;gBACpB,IAAI,CAAC,OAAO,CAAC,WAAW;gBACxB,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC;YACnD,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS;YACpE,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,SAAS;SACjF,CAAC;QACF,gBAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE5D,IAAI,IAAI,EACN,MAAM,GAAG,KAAK,CAAC;QACjB,IAAI;YACF,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAA,0BAAkB,EAC3C,WAAW,IAAI,CAAC,OAAO,sBAAsB,EAC7C;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,EACD,2BAAkB,CACnB,CAAmB,CAAC,CAAC;SACvB;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,mBAAmB,MAAM,CAAC,GAAG,CAAC,EAAE;aACxC,CAAC;SACH;QAED,gBAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACxC,MAAM,MAAM,GACV,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACrF,OAAO;gBACL,MAAM;gBACN,UAAU,EAAE,MAAM;oBAChB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;oBACrC,CAAC,CAAC;wBACE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;wBAC9B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;wBAChC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;qBACzC;aACN,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,KAAK,EAAE,uBAAuB,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;aACrE,CAAC;SACH;IACH,CAAC;;AA5FM,+CAAkB,GAAG;IAC1B,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,oBAAoB;IACpB,oBAAoB;CACrB,CAAC;AAVS,oEAA4B;AAgG5B,QAAA,wBAAwB,GAAG,IAAI,uBAAuB,CAAC,wBAAwB,CAAC,CAAC;AACjF,QAAA,sBAAsB,GAAG,IAAI,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACnE,QAAA,0BAA0B,GAAG,IAAI,4BAA4B,CAAC,OAAO,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/providers/shared.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,QAEpB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/providers/shared.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB;IAC9D,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAC9C,CAAC,CAAC,MAAO,CAAC"}
@@ -1,8 +1,8 @@
1
- import { ApiProvider } from './types';
1
+ import { ApiProvider, ProviderConfig, ProviderId, RawProviderConfig } from './types';
2
2
  import { OpenAiCompletionProvider, OpenAiChatCompletionProvider } from './providers/openai';
3
3
  import { LocalAiCompletionProvider, LocalAiChatProvider } from './providers/localai';
4
- export declare function loadApiProviders(providerPaths: string | string[]): Promise<ApiProvider[]>;
5
- export declare function loadApiProvider(providerPath: string): Promise<ApiProvider>;
4
+ export declare function loadApiProviders(providerPaths: ProviderId | ProviderId[] | RawProviderConfig[]): Promise<ApiProvider[]>;
5
+ export declare function loadApiProvider(providerPath: string, context?: ProviderConfig | undefined): Promise<ApiProvider>;
6
6
  declare const _default: {
7
7
  OpenAiCompletionProvider: typeof OpenAiCompletionProvider;
8
8
  OpenAiChatCompletionProvider: typeof OpenAiChatCompletionProvider;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/providers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAErF,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAErF,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,iBAAiB,EAAE,GAC7D,OAAO,CAAC,WAAW,EAAE,CAAC,CAiBxB;AAED,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,cAAc,GAAG,SAAqB,GAC9C,OAAO,CAAC,WAAW,CAAC,CA+CtB;;;;;;;;AAED,wBAME"}
@@ -35,28 +35,37 @@ async function loadApiProviders(providerPaths) {
35
35
  return [await loadApiProvider(providerPaths)];
36
36
  }
37
37
  else if (Array.isArray(providerPaths)) {
38
- return Promise.all(providerPaths.map((provider) => loadApiProvider(provider)));
38
+ return Promise.all(providerPaths.map((provider) => {
39
+ if (typeof provider === 'string') {
40
+ return loadApiProvider(provider);
41
+ }
42
+ else {
43
+ const id = Object.keys(provider)[0];
44
+ const context = { ...provider[id], id };
45
+ return loadApiProvider(id, context);
46
+ }
47
+ }));
39
48
  }
40
49
  throw new Error('Invalid providers list');
41
50
  }
42
51
  exports.loadApiProviders = loadApiProviders;
43
- async function loadApiProvider(providerPath) {
52
+ async function loadApiProvider(providerPath, context = undefined) {
44
53
  if (providerPath?.startsWith('openai:')) {
45
54
  // Load OpenAI module
46
55
  const options = providerPath.split(':');
47
56
  const modelType = options[1];
48
57
  const modelName = options[2];
49
58
  if (modelType === 'chat') {
50
- return new openai_1.OpenAiChatCompletionProvider(modelName || 'gpt-3.5-turbo');
59
+ return new openai_1.OpenAiChatCompletionProvider(modelName || 'gpt-3.5-turbo', undefined, context?.config);
51
60
  }
52
61
  else if (modelType === 'completion') {
53
- return new openai_1.OpenAiCompletionProvider(modelName || 'text-davinci-003');
62
+ return new openai_1.OpenAiCompletionProvider(modelName || 'text-davinci-003', undefined, context?.config);
54
63
  }
55
64
  else if (openai_1.OpenAiChatCompletionProvider.OPENAI_CHAT_MODELS.includes(modelType)) {
56
- return new openai_1.OpenAiChatCompletionProvider(modelType);
65
+ return new openai_1.OpenAiChatCompletionProvider(modelType, undefined, context?.config);
57
66
  }
58
67
  else if (openai_1.OpenAiCompletionProvider.OPENAI_COMPLETION_MODELS.includes(modelType)) {
59
- return new openai_1.OpenAiCompletionProvider(modelType);
68
+ return new openai_1.OpenAiCompletionProvider(modelType, undefined, context?.config);
60
69
  }
61
70
  else {
62
71
  throw new Error(`Unknown OpenAI model type: ${modelType}. Use one of the following providers: openai:chat:<model name>, openai:completion:<model name>`);
@@ -78,7 +87,7 @@ async function loadApiProvider(providerPath) {
78
87
  }
79
88
  // Load custom module
80
89
  const CustomApiProvider = (await Promise.resolve(`${node_path_1.default.join(process.cwd(), providerPath)}`).then(s => __importStar(require(s)))).default;
81
- return new CustomApiProvider();
90
+ return new CustomApiProvider(context);
82
91
  }
83
92
  exports.loadApiProvider = loadApiProvider;
84
93
  exports.default = {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions.d.ts","sourceRoot":"","sources":["../../src/suggestions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiDjG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions.js","sourceRoot":"","sources":["../../src/suggestions.ts"],"names":[],"mappings":";;;AAAA,uCAA2D;AAC3D,+CAAgE;AAIhE,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAQzB,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,GAAW;IAC/D,MAAM,QAAQ,GAAG,mCAA0B,CAAC;IAE5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CACjC,IAAI,CAAC,SAAS,CAAC;QACb,wCAA8B;QAC9B;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,8CAA8C;SACxD;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;SAChB;KACF,CAAC,EACF;QACE,WAAW,EAAE,mBAAmB;KACjC,CACF,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAC9B,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,eAAe;YACpC,UAAU,EAAE;gBACV,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC;gBAClC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;gBACpC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,CAAC;aAC7C;SACF,CAAC;KACH;IAED,IAAI;QACF,OAAO;YACL,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YACtB,UAAU,EAAE;gBACV,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC;gBAClC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;gBACpC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,CAAC;aAC7C;SACF,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO;YACL,KAAK,EAAE,6BAA6B,IAAI,CAAC,MAAM,EAAE;YACjD,UAAU,EAAE;gBACV,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC;gBAClC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;gBACpC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,CAAC;aAC7C;SACF,CAAC;KACH;AACH,CAAC;AAjDD,0CAiDC"}
@@ -0,0 +1,4 @@
1
+ import Table from 'cli-table3';
2
+ import type { EvaluateSummary } from './types';
3
+ export declare function generateTable(summary: EvaluateSummary, tableCellMaxLength?: number, maxRows?: number): Table.Table;
4
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,kBAAkB,SAAM,EAAE,OAAO,SAAK,eAoC7F"}
@@ -0,0 +1,48 @@
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
+ exports.generateTable = void 0;
7
+ const cli_table3_1 = __importDefault(require("cli-table3"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ function generateTable(summary, tableCellMaxLength = 250, maxRows = 25) {
10
+ const maxWidth = process.stdout.columns ? process.stdout.columns - 10 : 120;
11
+ const head = summary.table.head;
12
+ const headLength = head.prompts.length + head.vars.length;
13
+ const table = new cli_table3_1.default({
14
+ head: [...head.prompts, ...head.vars],
15
+ colWidths: Array(headLength).fill(Math.floor(maxWidth / headLength)),
16
+ wordWrap: true,
17
+ wrapOnWordBoundary: false,
18
+ style: {
19
+ head: ['blue', 'bold'],
20
+ },
21
+ });
22
+ // Skip first row (header) and add the rest. Color PASS/FAIL
23
+ for (const row of summary.table.body.slice(0, maxRows)) {
24
+ table.push([
25
+ ...row.vars,
26
+ ...row.outputs.map((col) => {
27
+ if (col.length > tableCellMaxLength) {
28
+ col = col.slice(0, tableCellMaxLength) + '...';
29
+ }
30
+ if (col.startsWith('[PASS]')) {
31
+ // color '[PASS]' green
32
+ return chalk_1.default.green.bold(col.slice(0, 6)) + col.slice(6);
33
+ }
34
+ else if (col.startsWith('[FAIL]')) {
35
+ // color everything red up until '---'
36
+ return col
37
+ .split('---')
38
+ .map((c, idx) => (idx === 0 ? chalk_1.default.red.bold(c) : c))
39
+ .join('---');
40
+ }
41
+ return col;
42
+ }),
43
+ ]);
44
+ }
45
+ return table;
46
+ }
47
+ exports.generateTable = generateTable;
48
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/table.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAC/B,kDAA0B;AAG1B,SAAgB,aAAa,CAAC,OAAwB,EAAE,kBAAkB,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE;IAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;QACpE,QAAQ,EAAE,IAAI;QACd,kBAAkB,EAAE,KAAK;QACzB,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SACvB;KACF,CAAC,CAAC;IACH,4DAA4D;IAC5D,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;QACtD,KAAK,CAAC,IAAI,CAAC;YACT,GAAG,GAAG,CAAC,IAAI;YACX,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzB,IAAI,GAAG,CAAC,MAAM,GAAG,kBAAkB,EAAE;oBACnC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC;iBAChD;gBACD,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBAC5B,uBAAuB;oBACvB,OAAO,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBACzD;qBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBACnC,sCAAsC;oBACtC,OAAO,GAAG;yBACP,KAAK,CAAC,KAAK,CAAC;yBACZ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;yBACpD,IAAI,CAAC,KAAK,CAAC,CAAC;iBAChB;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;SACH,CAAC,CAAC;KACJ;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AApCD,sCAoCC"}
@@ -0,0 +1,10 @@
1
+ type TelemetryEventTypes = 'eval_ran' | 'assertion_used' | 'command_used';
2
+ export declare class Telemetry {
3
+ private events;
4
+ get disabled(): boolean;
5
+ record(eventName: TelemetryEventTypes, properties: Record<string, string | number>): void;
6
+ send(): Promise<void>;
7
+ }
8
+ declare const telemetry: Telemetry;
9
+ export default telemetry;
10
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"AASA,KAAK,mBAAmB,GAAG,UAAU,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAM1E,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAwB;IAEtC,IAAI,QAAQ,YAEX;IAED,MAAM,CAAC,SAAS,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI;IAUnF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB5B;AAED,QAAA,MAAM,SAAS,WAAkB,CAAC;AAClC,eAAe,SAAS,CAAC"}
@@ -0,0 +1,48 @@
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
+ exports.Telemetry = void 0;
7
+ const package_json_1 = __importDefault(require("../package.json"));
8
+ const util_1 = require("./util");
9
+ const TELEMETRY_ENDPOINT = 'https://api.promptfoo.dev/telemetry';
10
+ const TELEMETRY_TIMEOUT_MS = 1000;
11
+ class Telemetry {
12
+ constructor() {
13
+ this.events = [];
14
+ }
15
+ get disabled() {
16
+ return process.env.PROMPTFOO_DISABLE_TELEMETRY === '1';
17
+ }
18
+ record(eventName, properties) {
19
+ if (!this.disabled) {
20
+ this.events.push({
21
+ event: eventName,
22
+ packageVersion: package_json_1.default.version,
23
+ properties,
24
+ });
25
+ }
26
+ }
27
+ async send() {
28
+ if (!this.disabled && this.events.length > 0) {
29
+ try {
30
+ const response = await (0, util_1.fetchWithTimeout)(TELEMETRY_ENDPOINT, {
31
+ method: 'POST',
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ },
35
+ body: JSON.stringify(this.events),
36
+ }, TELEMETRY_TIMEOUT_MS);
37
+ if (response.ok) {
38
+ this.events = [];
39
+ }
40
+ }
41
+ catch (err) { }
42
+ }
43
+ }
44
+ }
45
+ exports.Telemetry = Telemetry;
46
+ const telemetry = new Telemetry();
47
+ exports.default = telemetry;
48
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":";;;;;;AAAA,mEAA0C;AAC1C,iCAA0C;AAU1C,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC,MAAa,SAAS;IAAtB;QACU,WAAM,GAAqB,EAAE,CAAC;IAqCxC,CAAC;IAnCC,IAAI,QAAQ;QACV,OAAO,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,SAA8B,EAAE,UAA2C;QAChF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,KAAK,EAAE,SAAS;gBAChB,cAAc,EAAE,sBAAW,CAAC,OAAO;gBACnC,UAAU;aACX,CAAC,CAAC;SACJ;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5C,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAgB,EACrC,kBAAkB,EAClB;oBACE,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;qBACnC;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;iBAClC,EACD,oBAAoB,CACrB,CAAC;gBAEF,IAAI,QAAQ,CAAC,EAAE,EAAE;oBACf,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;iBAClB;aACF;YAAC,OAAO,GAAG,EAAE,GAAE;SACjB;IACH,CAAC;CACF;AAtCD,8BAsCC;AAED,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAClC,kBAAe,SAAS,CAAC"}
@@ -16,6 +16,10 @@ export interface CommandLineOptions {
16
16
  promptPrefix?: string;
17
17
  promptSuffix?: string;
18
18
  }
19
+ export interface ProviderConfig {
20
+ id: ProviderId;
21
+ config?: any;
22
+ }
19
23
  export interface ApiProvider {
20
24
  id: () => string;
21
25
  callApi: (prompt: string) => Promise<ProviderResponse>;
@@ -115,9 +119,11 @@ export interface TestSuite {
115
119
  tests?: TestCase[];
116
120
  defaultTest?: Partial<TestCase>;
117
121
  }
122
+ export type ProviderId = string;
123
+ export type RawProviderConfig = Record<ProviderId, Omit<ProviderConfig, 'id'>>;
118
124
  export interface TestSuiteConfig {
119
125
  description?: string;
120
- providers: string | string[];
126
+ providers: ProviderId | ProviderId[] | RawProviderConfig[];
121
127
  prompts: string | string[];
122
128
  tests: string | TestCase[];
123
129
  defaultTest?: Omit<TestCase, 'description'>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}