@promptbook/openai 0.66.0-1 → 0.66.0-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 (38) hide show
  1. package/esm/index.es.js +598 -537
  2. package/esm/index.es.js.map +1 -1
  3. package/esm/typings/src/_packages/anthropic-claude.index.d.ts +2 -0
  4. package/esm/typings/src/_packages/core.index.d.ts +8 -2
  5. package/esm/typings/src/_packages/openai.index.d.ts +4 -0
  6. package/esm/typings/src/_packages/types.index.d.ts +6 -2
  7. package/esm/typings/src/config.d.ts +0 -7
  8. package/esm/typings/src/execution/AvailableModel.d.ts +20 -0
  9. package/esm/typings/src/execution/LlmExecutionTools.d.ts +1 -19
  10. package/esm/typings/src/execution/LlmExecutionToolsConstructor.d.ts +10 -0
  11. package/esm/typings/src/llm-providers/_common/$llmToolsConfigurationBoilerplatesRegister.d.ts +12 -0
  12. package/esm/typings/src/llm-providers/_common/$llmToolsRegister.d.ts +10 -0
  13. package/esm/typings/src/llm-providers/_common/LlmToolsConfiguration.d.ts +2 -10
  14. package/esm/typings/src/llm-providers/_common/config.d.ts +4 -0
  15. package/esm/typings/src/llm-providers/anthropic-claude/AnthropicClaudeExecutionTools.d.ts +2 -2
  16. package/esm/typings/src/llm-providers/anthropic-claude/anthropic-claude-models.d.ts +1 -1
  17. package/esm/typings/src/llm-providers/anthropic-claude/computeAnthropicClaudeUsage.d.ts +1 -1
  18. package/esm/typings/src/llm-providers/anthropic-claude/computeAnthropicClaudeUsage.test.d.ts +1 -1
  19. package/esm/typings/src/llm-providers/anthropic-claude/createAnthropicClaudeExecutionTools.d.ts +7 -2
  20. package/esm/typings/src/llm-providers/anthropic-claude/register-configuration.d.ts +8 -0
  21. package/esm/typings/src/llm-providers/anthropic-claude/register-constructor.d.ts +11 -0
  22. package/esm/typings/src/llm-providers/azure-openai/AzureOpenAiExecutionTools.d.ts +2 -2
  23. package/esm/typings/src/llm-providers/mocked/MockedEchoLlmExecutionTools.d.ts +1 -1
  24. package/esm/typings/src/llm-providers/mocked/MockedFackedLlmExecutionTools.d.ts +1 -1
  25. package/esm/typings/src/llm-providers/multiple/MultipleLlmExecutionTools.d.ts +1 -1
  26. package/esm/typings/src/llm-providers/openai/OpenAiExecutionTools.d.ts +3 -3
  27. package/esm/typings/src/llm-providers/openai/{computeOpenaiUsage.d.ts → computeOpenAiUsage.d.ts} +2 -2
  28. package/esm/typings/src/llm-providers/openai/{computeOpenaiUsage.test.d.ts → computeOpenAiUsage.test.d.ts} +1 -1
  29. package/esm/typings/src/llm-providers/openai/createOpenAiExecutionTools.d.ts +15 -0
  30. package/esm/typings/src/llm-providers/openai/openai-models.d.ts +1 -1
  31. package/esm/typings/src/llm-providers/openai/register-configuration.d.ts +8 -0
  32. package/esm/typings/src/llm-providers/openai/register-constructor.d.ts +11 -0
  33. package/esm/typings/src/llm-providers/remote/RemoteLlmExecutionTools.d.ts +1 -1
  34. package/esm/typings/src/llm-providers/remote/interfaces/RemoteLlmExecutionToolsOptions.d.ts +2 -2
  35. package/esm/typings/src/utils/Register.d.ts +22 -0
  36. package/package.json +2 -2
  37. package/umd/index.umd.js +599 -536
  38. package/umd/index.umd.js.map +1 -1
package/umd/index.umd.js CHANGED
@@ -14,7 +14,7 @@
14
14
  /**
15
15
  * The version of the Promptbook library
16
16
  */
17
- var PROMPTBOOK_VERSION = '0.66.0-0';
17
+ var PROMPTBOOK_VERSION = '0.66.0-3';
18
18
  // TODO: !!!! List here all the versions and annotate + put into script
19
19
 
20
20
  /*! *****************************************************************************
@@ -136,368 +136,6 @@
136
136
  return to.concat(ar || Array.prototype.slice.call(from));
137
137
  }
138
138
 
139
- /**
140
- * Function computeUsage will create price per one token based on the string value found on openai page
141
- *
142
- * @private within the repository, used only as internal helper for `OPENAI_MODELS`
143
- */
144
- function computeUsage(value) {
145
- var _a = __read(value.split(' / '), 2), price = _a[0], tokens = _a[1];
146
- return parseFloat(price.replace('$', '')) / parseFloat(tokens.replace('M tokens', '')) / 1000000;
147
- }
148
-
149
- /**
150
- * List of available OpenAI models with pricing
151
- *
152
- * Note: Done at 2024-05-20
153
- *
154
- * @see https://platform.openai.com/docs/models/
155
- * @see https://openai.com/api/pricing/
156
- * @public exported from `@promptbook/openai`
157
- */
158
- var OPENAI_MODELS = [
159
- /*/
160
- {
161
- modelTitle: 'dall-e-3',
162
- modelName: 'dall-e-3',
163
- },
164
- /**/
165
- /*/
166
- {
167
- modelTitle: 'whisper-1',
168
- modelName: 'whisper-1',
169
- },
170
- /**/
171
- /**/
172
- {
173
- modelVariant: 'COMPLETION',
174
- modelTitle: 'davinci-002',
175
- modelName: 'davinci-002',
176
- pricing: {
177
- prompt: computeUsage("$2.00 / 1M tokens"),
178
- output: computeUsage("$2.00 / 1M tokens"), // <- not sure
179
- },
180
- },
181
- /**/
182
- /*/
183
- {
184
- modelTitle: 'dall-e-2',
185
- modelName: 'dall-e-2',
186
- },
187
- /**/
188
- /**/
189
- {
190
- modelVariant: 'CHAT',
191
- modelTitle: 'gpt-3.5-turbo-16k',
192
- modelName: 'gpt-3.5-turbo-16k',
193
- pricing: {
194
- prompt: computeUsage("$3.00 / 1M tokens"),
195
- output: computeUsage("$4.00 / 1M tokens"),
196
- },
197
- },
198
- /**/
199
- /*/
200
- {
201
- modelTitle: 'tts-1-hd-1106',
202
- modelName: 'tts-1-hd-1106',
203
- },
204
- /**/
205
- /*/
206
- {
207
- modelTitle: 'tts-1-hd',
208
- modelName: 'tts-1-hd',
209
- },
210
- /**/
211
- /**/
212
- {
213
- modelVariant: 'CHAT',
214
- modelTitle: 'gpt-4',
215
- modelName: 'gpt-4',
216
- pricing: {
217
- prompt: computeUsage("$30.00 / 1M tokens"),
218
- output: computeUsage("$60.00 / 1M tokens"),
219
- },
220
- },
221
- /**/
222
- /**/
223
- {
224
- modelVariant: 'CHAT',
225
- modelTitle: 'gpt-4-32k',
226
- modelName: 'gpt-4-32k',
227
- pricing: {
228
- prompt: computeUsage("$60.00 / 1M tokens"),
229
- output: computeUsage("$120.00 / 1M tokens"),
230
- },
231
- },
232
- /**/
233
- /*/
234
- {
235
- modelVariant: 'CHAT',
236
- modelTitle: 'gpt-4-0613',
237
- modelName: 'gpt-4-0613',
238
- pricing: {
239
- prompt: computeUsage(` / 1M tokens`),
240
- output: computeUsage(` / 1M tokens`),
241
- },
242
- },
243
- /**/
244
- /**/
245
- {
246
- modelVariant: 'CHAT',
247
- modelTitle: 'gpt-4-turbo-2024-04-09',
248
- modelName: 'gpt-4-turbo-2024-04-09',
249
- pricing: {
250
- prompt: computeUsage("$10.00 / 1M tokens"),
251
- output: computeUsage("$30.00 / 1M tokens"),
252
- },
253
- },
254
- /**/
255
- /**/
256
- {
257
- modelVariant: 'CHAT',
258
- modelTitle: 'gpt-3.5-turbo-1106',
259
- modelName: 'gpt-3.5-turbo-1106',
260
- pricing: {
261
- prompt: computeUsage("$1.00 / 1M tokens"),
262
- output: computeUsage("$2.00 / 1M tokens"),
263
- },
264
- },
265
- /**/
266
- /**/
267
- {
268
- modelVariant: 'CHAT',
269
- modelTitle: 'gpt-4-turbo',
270
- modelName: 'gpt-4-turbo',
271
- pricing: {
272
- prompt: computeUsage("$10.00 / 1M tokens"),
273
- output: computeUsage("$30.00 / 1M tokens"),
274
- },
275
- },
276
- /**/
277
- /**/
278
- {
279
- modelVariant: 'COMPLETION',
280
- modelTitle: 'gpt-3.5-turbo-instruct-0914',
281
- modelName: 'gpt-3.5-turbo-instruct-0914',
282
- pricing: {
283
- prompt: computeUsage("$1.50 / 1M tokens"),
284
- output: computeUsage("$2.00 / 1M tokens"), // <- For gpt-3.5-turbo-instruct
285
- },
286
- },
287
- /**/
288
- /**/
289
- {
290
- modelVariant: 'COMPLETION',
291
- modelTitle: 'gpt-3.5-turbo-instruct',
292
- modelName: 'gpt-3.5-turbo-instruct',
293
- pricing: {
294
- prompt: computeUsage("$1.50 / 1M tokens"),
295
- output: computeUsage("$2.00 / 1M tokens"),
296
- },
297
- },
298
- /**/
299
- /*/
300
- {
301
- modelTitle: 'tts-1',
302
- modelName: 'tts-1',
303
- },
304
- /**/
305
- /**/
306
- {
307
- modelVariant: 'CHAT',
308
- modelTitle: 'gpt-3.5-turbo',
309
- modelName: 'gpt-3.5-turbo',
310
- pricing: {
311
- prompt: computeUsage("$3.00 / 1M tokens"),
312
- output: computeUsage("$6.00 / 1M tokens"), // <- Not sure, refer to gpt-3.5-turbo in Fine-tuning models
313
- },
314
- },
315
- /**/
316
- /**/
317
- {
318
- modelVariant: 'CHAT',
319
- modelTitle: 'gpt-3.5-turbo-0301',
320
- modelName: 'gpt-3.5-turbo-0301',
321
- pricing: {
322
- prompt: computeUsage("$1.50 / 1M tokens"),
323
- output: computeUsage("$2.00 / 1M tokens"),
324
- },
325
- },
326
- /**/
327
- /**/
328
- {
329
- modelVariant: 'COMPLETION',
330
- modelTitle: 'babbage-002',
331
- modelName: 'babbage-002',
332
- pricing: {
333
- prompt: computeUsage("$0.40 / 1M tokens"),
334
- output: computeUsage("$0.40 / 1M tokens"), // <- Not sure
335
- },
336
- },
337
- /**/
338
- /**/
339
- {
340
- modelVariant: 'CHAT',
341
- modelTitle: 'gpt-4-1106-preview',
342
- modelName: 'gpt-4-1106-preview',
343
- pricing: {
344
- prompt: computeUsage("$10.00 / 1M tokens"),
345
- output: computeUsage("$30.00 / 1M tokens"),
346
- },
347
- },
348
- /**/
349
- /**/
350
- {
351
- modelVariant: 'CHAT',
352
- modelTitle: 'gpt-4-0125-preview',
353
- modelName: 'gpt-4-0125-preview',
354
- pricing: {
355
- prompt: computeUsage("$10.00 / 1M tokens"),
356
- output: computeUsage("$30.00 / 1M tokens"),
357
- },
358
- },
359
- /**/
360
- /*/
361
- {
362
- modelTitle: 'tts-1-1106',
363
- modelName: 'tts-1-1106',
364
- },
365
- /**/
366
- /**/
367
- {
368
- modelVariant: 'CHAT',
369
- modelTitle: 'gpt-3.5-turbo-0125',
370
- modelName: 'gpt-3.5-turbo-0125',
371
- pricing: {
372
- prompt: computeUsage("$0.50 / 1M tokens"),
373
- output: computeUsage("$1.50 / 1M tokens"),
374
- },
375
- },
376
- /**/
377
- /**/
378
- {
379
- modelVariant: 'CHAT',
380
- modelTitle: 'gpt-4-turbo-preview',
381
- modelName: 'gpt-4-turbo-preview',
382
- pricing: {
383
- prompt: computeUsage("$10.00 / 1M tokens"),
384
- output: computeUsage("$30.00 / 1M tokens"), // <- Not sure, just for gpt-4-turbo
385
- },
386
- },
387
- /**/
388
- /**/
389
- {
390
- modelVariant: 'EMBEDDING',
391
- modelTitle: 'text-embedding-3-large',
392
- modelName: 'text-embedding-3-large',
393
- pricing: {
394
- prompt: computeUsage("$0.13 / 1M tokens"),
395
- // TODO: [🏏] Leverage the batch API @see https://platform.openai.com/docs/guides/batch
396
- output: 0, // <- Note: [🆖] In Embedding models you dont pay for output
397
- },
398
- },
399
- /**/
400
- /**/
401
- {
402
- modelVariant: 'EMBEDDING',
403
- modelTitle: 'text-embedding-3-small',
404
- modelName: 'text-embedding-3-small',
405
- pricing: {
406
- prompt: computeUsage("$0.02 / 1M tokens"),
407
- // TODO: [🏏] Leverage the batch API @see https://platform.openai.com/docs/guides/batch
408
- output: 0, // <- Note: [🆖] In Embedding models you dont pay for output
409
- },
410
- },
411
- /**/
412
- /**/
413
- {
414
- modelVariant: 'CHAT',
415
- modelTitle: 'gpt-3.5-turbo-0613',
416
- modelName: 'gpt-3.5-turbo-0613',
417
- pricing: {
418
- prompt: computeUsage("$1.50 / 1M tokens"),
419
- output: computeUsage("$2.00 / 1M tokens"),
420
- },
421
- },
422
- /**/
423
- /**/
424
- {
425
- modelVariant: 'EMBEDDING',
426
- modelTitle: 'text-embedding-ada-002',
427
- modelName: 'text-embedding-ada-002',
428
- pricing: {
429
- prompt: computeUsage("$0.1 / 1M tokens"),
430
- // TODO: [🏏] Leverage the batch API @see https://platform.openai.com/docs/guides/batch
431
- output: 0, // <- Note: [🆖] In Embedding models you dont pay for output
432
- },
433
- },
434
- /**/
435
- /*/
436
- {
437
- modelVariant: 'CHAT',
438
- modelTitle: 'gpt-4-1106-vision-preview',
439
- modelName: 'gpt-4-1106-vision-preview',
440
- },
441
- /**/
442
- /*/
443
- {
444
- modelVariant: 'CHAT',
445
- modelTitle: 'gpt-4-vision-preview',
446
- modelName: 'gpt-4-vision-preview',
447
- pricing: {
448
- prompt: computeUsage(`$10.00 / 1M tokens`),
449
- output: computeUsage(`$30.00 / 1M tokens`),
450
- },
451
- },
452
- /**/
453
- /**/
454
- {
455
- modelVariant: 'CHAT',
456
- modelTitle: 'gpt-4o-2024-05-13',
457
- modelName: 'gpt-4o-2024-05-13',
458
- pricing: {
459
- prompt: computeUsage("$5.00 / 1M tokens"),
460
- output: computeUsage("$15.00 / 1M tokens"),
461
- },
462
- },
463
- /**/
464
- /**/
465
- {
466
- modelVariant: 'CHAT',
467
- modelTitle: 'gpt-4o',
468
- modelName: 'gpt-4o',
469
- pricing: {
470
- prompt: computeUsage("$5.00 / 1M tokens"),
471
- output: computeUsage("$15.00 / 1M tokens"),
472
- },
473
- },
474
- /**/
475
- /**/
476
- {
477
- modelVariant: 'CHAT',
478
- modelTitle: 'gpt-3.5-turbo-16k-0613',
479
- modelName: 'gpt-3.5-turbo-16k-0613',
480
- pricing: {
481
- prompt: computeUsage("$3.00 / 1M tokens"),
482
- output: computeUsage("$4.00 / 1M tokens"),
483
- },
484
- },
485
- /**/
486
- ];
487
- /**
488
- * Note: [🤖] Add models of new variant
489
- * TODO: [🧠] Some mechanism to propagate unsureness
490
- * TODO: [🎰] Some mechanism to auto-update available models
491
- * TODO: [🎰][👮‍♀️] Make this list dynamic - dynamically can be listed modelNames but not modelVariant, legacy status, context length and pricing
492
- * TODO: [🧠][👮‍♀️] Put here more info like description, isVision, trainingDateCutoff, languages, strengths ( Top-level performance, intelligence, fluency, and understanding), contextWindow,...
493
- * @see https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4
494
- * @see https://openai.com/api/pricing/
495
- * @see /other/playground/playground.ts
496
- * TODO: [🍓] Make better
497
- * TODO: Change model titles to human eg: "gpt-4-turbo-2024-04-09" -> "GPT-4 Turbo (2024-04-09)"
498
- * TODO: [🚸] Not all models are compatible with JSON mode, add this information here and use it
499
- */
500
-
501
139
  /**
502
140
  * This error indicates errors during the execution of the pipeline
503
141
  *
@@ -865,222 +503,584 @@
865
503
  },
866
504
  { base: 'TZ', letters: '\uA728' },
867
505
  {
868
- base: 'U',
869
- letters: '\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244',
506
+ base: 'U',
507
+ letters: '\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244',
508
+ },
509
+ { base: 'V', letters: '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245' },
510
+ { base: 'VY', letters: '\uA760' },
511
+ {
512
+ base: 'W',
513
+ letters: '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72',
514
+ },
515
+ { base: 'X', letters: '\u0058\u24CD\uFF38\u1E8A\u1E8C' },
516
+ {
517
+ base: 'Y',
518
+ letters: '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE',
519
+ },
520
+ {
521
+ base: 'Z',
522
+ letters: '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762',
523
+ },
524
+ {
525
+ base: 'a',
526
+ letters: '\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250',
527
+ },
528
+ { base: 'aa', letters: '\uA733' },
529
+ { base: 'ae', letters: '\u00E6\u01FD\u01E3' },
530
+ { base: 'ao', letters: '\uA735' },
531
+ { base: 'au', letters: '\uA737' },
532
+ { base: 'av', letters: '\uA739\uA73B' },
533
+ { base: 'ay', letters: '\uA73D' },
534
+ {
535
+ base: 'b',
536
+ letters: '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253',
537
+ },
538
+ {
539
+ base: 'c',
540
+ letters: '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184',
541
+ },
542
+ {
543
+ base: 'd',
544
+ letters: '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A',
545
+ },
546
+ { base: 'dz', letters: '\u01F3\u01C6' },
547
+ {
548
+ base: 'e',
549
+ letters: '\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD',
550
+ },
551
+ { base: 'f', letters: '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C' },
552
+ {
553
+ base: 'g',
554
+ letters: '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F',
555
+ },
556
+ {
557
+ base: 'h',
558
+ letters: '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265',
559
+ },
560
+ { base: 'hv', letters: '\u0195' },
561
+ {
562
+ base: 'i',
563
+ letters: '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131',
564
+ },
565
+ { base: 'j', letters: '\u006A\u24D9\uFF4A\u0135\u01F0\u0249' },
566
+ {
567
+ base: 'k',
568
+ letters: '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3',
569
+ },
570
+ {
571
+ base: 'l',
572
+ letters: '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747',
573
+ },
574
+ { base: 'lj', letters: '\u01C9' },
575
+ { base: 'm', letters: '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F' },
576
+ {
577
+ base: 'n',
578
+ letters: '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5',
579
+ },
580
+ { base: 'nj', letters: '\u01CC' },
581
+ {
582
+ base: 'o',
583
+ letters: '\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275',
584
+ },
585
+ { base: 'oi', letters: '\u01A3' },
586
+ { base: 'ou', letters: '\u0223' },
587
+ { base: 'oo', letters: '\uA74F' },
588
+ {
589
+ base: 'p',
590
+ letters: '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755',
591
+ },
592
+ { base: 'q', letters: '\u0071\u24E0\uFF51\u024B\uA757\uA759' },
593
+ {
594
+ base: 'r',
595
+ letters: '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783',
596
+ },
597
+ {
598
+ base: 's',
599
+ letters: '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B',
600
+ },
601
+ {
602
+ base: 't',
603
+ letters: '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787',
604
+ },
605
+ { base: 'tz', letters: '\uA729' },
606
+ {
607
+ base: 'u',
608
+ letters: '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289',
609
+ },
610
+ { base: 'v', letters: '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C' },
611
+ { base: 'vy', letters: '\uA761' },
612
+ {
613
+ base: 'w',
614
+ letters: '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73',
615
+ },
616
+ { base: 'x', letters: '\u0078\u24E7\uFF58\u1E8B\u1E8D' },
617
+ {
618
+ base: 'y',
619
+ letters: '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF',
620
+ },
621
+ {
622
+ base: 'z',
623
+ letters: '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763',
624
+ },
625
+ ];
626
+ /**
627
+ * Map of letters from diacritic variant to diacritless variant
628
+ * Contains lowercase and uppercase separatelly
629
+ *
630
+ * > "á" => "a"
631
+ * > "ě" => "e"
632
+ * > "Ă" => "A"
633
+ * > ...
634
+ *
635
+ * @public exported from `@promptbook/utils`
636
+ */
637
+ var DIACRITIC_VARIANTS_LETTERS = {};
638
+ // tslint:disable-next-line: prefer-for-of
639
+ for (var i = 0; i < defaultDiacriticsRemovalMap.length; i++) {
640
+ var letters = defaultDiacriticsRemovalMap[i].letters;
641
+ // tslint:disable-next-line: prefer-for-of
642
+ for (var j = 0; j < letters.length; j++) {
643
+ DIACRITIC_VARIANTS_LETTERS[letters[j]] = defaultDiacriticsRemovalMap[i].base;
644
+ }
645
+ }
646
+ // <- TODO: [🍓] Put to maker function to save execution time if not needed
647
+ /*
648
+ @see https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript
649
+ Licensed under the Apache License, Version 2.0 (the "License");
650
+ you may not use this file except in compliance with the License.
651
+ You may obtain a copy of the License at
652
+
653
+ http://www.apache.org/licenses/LICENSE-2.0
654
+
655
+ Unless required by applicable law or agreed to in writing, software
656
+ distributed under the License is distributed on an "AS IS" BASIS,
657
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
658
+ See the License for the specific language governing permissions and
659
+ limitations under the License.
660
+ */
661
+
662
+ /**
663
+ * @@@
664
+ *
665
+ * @param input @@@
666
+ * @returns @@@
667
+ * @public exported from `@promptbook/utils`
668
+ */
669
+ function removeDiacritics(input) {
670
+ /*eslint no-control-regex: "off"*/
671
+ return input.replace(/[^\u0000-\u007E]/g, function (a) {
672
+ return DIACRITIC_VARIANTS_LETTERS[a] || a;
673
+ });
674
+ }
675
+ /**
676
+ * TODO: [Ж] Variant for cyrillic (and in general non-latin) letters
677
+ */
678
+
679
+ /**
680
+ * Counts number of words in the text
681
+ *
682
+ * @public exported from `@promptbook/utils`
683
+ */
684
+ function countWords(text) {
685
+ text = text.replace(/[\p{Extended_Pictographic}]/gu, 'a');
686
+ text = removeDiacritics(text);
687
+ return text.split(/[^a-zа-я0-9]+/i).filter(function (word) { return word.length > 0; }).length;
688
+ }
689
+
690
+ /**
691
+ * Helper of usage compute
692
+ *
693
+ * @param content the content of prompt or response
694
+ * @returns part of PromptResultUsageCounts
695
+ *
696
+ * @private internal utility of LlmExecutionTools
697
+ */
698
+ function computeUsageCounts(content) {
699
+ return {
700
+ charactersCount: { value: countCharacters(content) },
701
+ wordsCount: { value: countWords(content) },
702
+ sentencesCount: { value: countSentences(content) },
703
+ linesCount: { value: countLines(content) },
704
+ paragraphsCount: { value: countParagraphs(content) },
705
+ pagesCount: { value: countPages(content) },
706
+ };
707
+ }
708
+
709
+ /**
710
+ * Make UncertainNumber
711
+ *
712
+ * @param value
713
+ *
714
+ * @private utility for initializating UncertainNumber
715
+ */
716
+ function uncertainNumber(value) {
717
+ if (value === null || value === undefined || Number.isNaN(value)) {
718
+ return { value: 0, isUncertain: true };
719
+ }
720
+ return { value: value };
721
+ }
722
+
723
+ /**
724
+ * Function computeUsage will create price per one token based on the string value found on openai page
725
+ *
726
+ * @private within the repository, used only as internal helper for `OPENAI_MODELS`
727
+ */
728
+ function computeUsage(value) {
729
+ var _a = __read(value.split(' / '), 2), price = _a[0], tokens = _a[1];
730
+ return parseFloat(price.replace('$', '')) / parseFloat(tokens.replace('M tokens', '')) / 1000000;
731
+ }
732
+
733
+ /**
734
+ * List of available OpenAI models with pricing
735
+ *
736
+ * Note: Done at 2024-05-20
737
+ *
738
+ * @see https://platform.openai.com/docs/models/
739
+ * @see https://openai.com/api/pricing/
740
+ * @public exported from `@promptbook/openai`
741
+ */
742
+ var OPENAI_MODELS = [
743
+ /*/
744
+ {
745
+ modelTitle: 'dall-e-3',
746
+ modelName: 'dall-e-3',
747
+ },
748
+ /**/
749
+ /*/
750
+ {
751
+ modelTitle: 'whisper-1',
752
+ modelName: 'whisper-1',
753
+ },
754
+ /**/
755
+ /**/
756
+ {
757
+ modelVariant: 'COMPLETION',
758
+ modelTitle: 'davinci-002',
759
+ modelName: 'davinci-002',
760
+ pricing: {
761
+ prompt: computeUsage("$2.00 / 1M tokens"),
762
+ output: computeUsage("$2.00 / 1M tokens"), // <- not sure
763
+ },
870
764
  },
871
- { base: 'V', letters: '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245' },
872
- { base: 'VY', letters: '\uA760' },
765
+ /**/
766
+ /*/
767
+ {
768
+ modelTitle: 'dall-e-2',
769
+ modelName: 'dall-e-2',
770
+ },
771
+ /**/
772
+ /**/
873
773
  {
874
- base: 'W',
875
- letters: '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72',
774
+ modelVariant: 'CHAT',
775
+ modelTitle: 'gpt-3.5-turbo-16k',
776
+ modelName: 'gpt-3.5-turbo-16k',
777
+ pricing: {
778
+ prompt: computeUsage("$3.00 / 1M tokens"),
779
+ output: computeUsage("$4.00 / 1M tokens"),
780
+ },
876
781
  },
877
- { base: 'X', letters: '\u0058\u24CD\uFF38\u1E8A\u1E8C' },
782
+ /**/
783
+ /*/
784
+ {
785
+ modelTitle: 'tts-1-hd-1106',
786
+ modelName: 'tts-1-hd-1106',
787
+ },
788
+ /**/
789
+ /*/
790
+ {
791
+ modelTitle: 'tts-1-hd',
792
+ modelName: 'tts-1-hd',
793
+ },
794
+ /**/
795
+ /**/
878
796
  {
879
- base: 'Y',
880
- letters: '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE',
797
+ modelVariant: 'CHAT',
798
+ modelTitle: 'gpt-4',
799
+ modelName: 'gpt-4',
800
+ pricing: {
801
+ prompt: computeUsage("$30.00 / 1M tokens"),
802
+ output: computeUsage("$60.00 / 1M tokens"),
803
+ },
881
804
  },
805
+ /**/
806
+ /**/
882
807
  {
883
- base: 'Z',
884
- letters: '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762',
808
+ modelVariant: 'CHAT',
809
+ modelTitle: 'gpt-4-32k',
810
+ modelName: 'gpt-4-32k',
811
+ pricing: {
812
+ prompt: computeUsage("$60.00 / 1M tokens"),
813
+ output: computeUsage("$120.00 / 1M tokens"),
814
+ },
885
815
  },
816
+ /**/
817
+ /*/
886
818
  {
887
- base: 'a',
888
- letters: '\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250',
819
+ modelVariant: 'CHAT',
820
+ modelTitle: 'gpt-4-0613',
821
+ modelName: 'gpt-4-0613',
822
+ pricing: {
823
+ prompt: computeUsage(` / 1M tokens`),
824
+ output: computeUsage(` / 1M tokens`),
825
+ },
889
826
  },
890
- { base: 'aa', letters: '\uA733' },
891
- { base: 'ae', letters: '\u00E6\u01FD\u01E3' },
892
- { base: 'ao', letters: '\uA735' },
893
- { base: 'au', letters: '\uA737' },
894
- { base: 'av', letters: '\uA739\uA73B' },
895
- { base: 'ay', letters: '\uA73D' },
827
+ /**/
828
+ /**/
896
829
  {
897
- base: 'b',
898
- letters: '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253',
830
+ modelVariant: 'CHAT',
831
+ modelTitle: 'gpt-4-turbo-2024-04-09',
832
+ modelName: 'gpt-4-turbo-2024-04-09',
833
+ pricing: {
834
+ prompt: computeUsage("$10.00 / 1M tokens"),
835
+ output: computeUsage("$30.00 / 1M tokens"),
836
+ },
899
837
  },
838
+ /**/
839
+ /**/
900
840
  {
901
- base: 'c',
902
- letters: '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184',
841
+ modelVariant: 'CHAT',
842
+ modelTitle: 'gpt-3.5-turbo-1106',
843
+ modelName: 'gpt-3.5-turbo-1106',
844
+ pricing: {
845
+ prompt: computeUsage("$1.00 / 1M tokens"),
846
+ output: computeUsage("$2.00 / 1M tokens"),
847
+ },
903
848
  },
849
+ /**/
850
+ /**/
904
851
  {
905
- base: 'd',
906
- letters: '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A',
852
+ modelVariant: 'CHAT',
853
+ modelTitle: 'gpt-4-turbo',
854
+ modelName: 'gpt-4-turbo',
855
+ pricing: {
856
+ prompt: computeUsage("$10.00 / 1M tokens"),
857
+ output: computeUsage("$30.00 / 1M tokens"),
858
+ },
907
859
  },
908
- { base: 'dz', letters: '\u01F3\u01C6' },
860
+ /**/
861
+ /**/
909
862
  {
910
- base: 'e',
911
- letters: '\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD',
863
+ modelVariant: 'COMPLETION',
864
+ modelTitle: 'gpt-3.5-turbo-instruct-0914',
865
+ modelName: 'gpt-3.5-turbo-instruct-0914',
866
+ pricing: {
867
+ prompt: computeUsage("$1.50 / 1M tokens"),
868
+ output: computeUsage("$2.00 / 1M tokens"), // <- For gpt-3.5-turbo-instruct
869
+ },
912
870
  },
913
- { base: 'f', letters: '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C' },
871
+ /**/
872
+ /**/
914
873
  {
915
- base: 'g',
916
- letters: '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F',
874
+ modelVariant: 'COMPLETION',
875
+ modelTitle: 'gpt-3.5-turbo-instruct',
876
+ modelName: 'gpt-3.5-turbo-instruct',
877
+ pricing: {
878
+ prompt: computeUsage("$1.50 / 1M tokens"),
879
+ output: computeUsage("$2.00 / 1M tokens"),
880
+ },
917
881
  },
882
+ /**/
883
+ /*/
884
+ {
885
+ modelTitle: 'tts-1',
886
+ modelName: 'tts-1',
887
+ },
888
+ /**/
889
+ /**/
918
890
  {
919
- base: 'h',
920
- letters: '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265',
891
+ modelVariant: 'CHAT',
892
+ modelTitle: 'gpt-3.5-turbo',
893
+ modelName: 'gpt-3.5-turbo',
894
+ pricing: {
895
+ prompt: computeUsage("$3.00 / 1M tokens"),
896
+ output: computeUsage("$6.00 / 1M tokens"), // <- Not sure, refer to gpt-3.5-turbo in Fine-tuning models
897
+ },
921
898
  },
922
- { base: 'hv', letters: '\u0195' },
899
+ /**/
900
+ /**/
923
901
  {
924
- base: 'i',
925
- letters: '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131',
902
+ modelVariant: 'CHAT',
903
+ modelTitle: 'gpt-3.5-turbo-0301',
904
+ modelName: 'gpt-3.5-turbo-0301',
905
+ pricing: {
906
+ prompt: computeUsage("$1.50 / 1M tokens"),
907
+ output: computeUsage("$2.00 / 1M tokens"),
908
+ },
926
909
  },
927
- { base: 'j', letters: '\u006A\u24D9\uFF4A\u0135\u01F0\u0249' },
910
+ /**/
911
+ /**/
928
912
  {
929
- base: 'k',
930
- letters: '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3',
913
+ modelVariant: 'COMPLETION',
914
+ modelTitle: 'babbage-002',
915
+ modelName: 'babbage-002',
916
+ pricing: {
917
+ prompt: computeUsage("$0.40 / 1M tokens"),
918
+ output: computeUsage("$0.40 / 1M tokens"), // <- Not sure
919
+ },
931
920
  },
921
+ /**/
922
+ /**/
932
923
  {
933
- base: 'l',
934
- letters: '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747',
924
+ modelVariant: 'CHAT',
925
+ modelTitle: 'gpt-4-1106-preview',
926
+ modelName: 'gpt-4-1106-preview',
927
+ pricing: {
928
+ prompt: computeUsage("$10.00 / 1M tokens"),
929
+ output: computeUsage("$30.00 / 1M tokens"),
930
+ },
935
931
  },
936
- { base: 'lj', letters: '\u01C9' },
937
- { base: 'm', letters: '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F' },
932
+ /**/
933
+ /**/
938
934
  {
939
- base: 'n',
940
- letters: '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5',
935
+ modelVariant: 'CHAT',
936
+ modelTitle: 'gpt-4-0125-preview',
937
+ modelName: 'gpt-4-0125-preview',
938
+ pricing: {
939
+ prompt: computeUsage("$10.00 / 1M tokens"),
940
+ output: computeUsage("$30.00 / 1M tokens"),
941
+ },
941
942
  },
942
- { base: 'nj', letters: '\u01CC' },
943
+ /**/
944
+ /*/
945
+ {
946
+ modelTitle: 'tts-1-1106',
947
+ modelName: 'tts-1-1106',
948
+ },
949
+ /**/
950
+ /**/
943
951
  {
944
- base: 'o',
945
- letters: '\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275',
952
+ modelVariant: 'CHAT',
953
+ modelTitle: 'gpt-3.5-turbo-0125',
954
+ modelName: 'gpt-3.5-turbo-0125',
955
+ pricing: {
956
+ prompt: computeUsage("$0.50 / 1M tokens"),
957
+ output: computeUsage("$1.50 / 1M tokens"),
958
+ },
946
959
  },
947
- { base: 'oi', letters: '\u01A3' },
948
- { base: 'ou', letters: '\u0223' },
949
- { base: 'oo', letters: '\uA74F' },
960
+ /**/
961
+ /**/
950
962
  {
951
- base: 'p',
952
- letters: '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755',
963
+ modelVariant: 'CHAT',
964
+ modelTitle: 'gpt-4-turbo-preview',
965
+ modelName: 'gpt-4-turbo-preview',
966
+ pricing: {
967
+ prompt: computeUsage("$10.00 / 1M tokens"),
968
+ output: computeUsage("$30.00 / 1M tokens"), // <- Not sure, just for gpt-4-turbo
969
+ },
953
970
  },
954
- { base: 'q', letters: '\u0071\u24E0\uFF51\u024B\uA757\uA759' },
971
+ /**/
972
+ /**/
955
973
  {
956
- base: 'r',
957
- letters: '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783',
974
+ modelVariant: 'EMBEDDING',
975
+ modelTitle: 'text-embedding-3-large',
976
+ modelName: 'text-embedding-3-large',
977
+ pricing: {
978
+ prompt: computeUsage("$0.13 / 1M tokens"),
979
+ // TODO: [🏏] Leverage the batch API @see https://platform.openai.com/docs/guides/batch
980
+ output: 0, // <- Note: [🆖] In Embedding models you dont pay for output
981
+ },
958
982
  },
983
+ /**/
984
+ /**/
959
985
  {
960
- base: 's',
961
- letters: '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B',
986
+ modelVariant: 'EMBEDDING',
987
+ modelTitle: 'text-embedding-3-small',
988
+ modelName: 'text-embedding-3-small',
989
+ pricing: {
990
+ prompt: computeUsage("$0.02 / 1M tokens"),
991
+ // TODO: [🏏] Leverage the batch API @see https://platform.openai.com/docs/guides/batch
992
+ output: 0, // <- Note: [🆖] In Embedding models you dont pay for output
993
+ },
962
994
  },
995
+ /**/
996
+ /**/
963
997
  {
964
- base: 't',
965
- letters: '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787',
998
+ modelVariant: 'CHAT',
999
+ modelTitle: 'gpt-3.5-turbo-0613',
1000
+ modelName: 'gpt-3.5-turbo-0613',
1001
+ pricing: {
1002
+ prompt: computeUsage("$1.50 / 1M tokens"),
1003
+ output: computeUsage("$2.00 / 1M tokens"),
1004
+ },
966
1005
  },
967
- { base: 'tz', letters: '\uA729' },
1006
+ /**/
1007
+ /**/
968
1008
  {
969
- base: 'u',
970
- letters: '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289',
1009
+ modelVariant: 'EMBEDDING',
1010
+ modelTitle: 'text-embedding-ada-002',
1011
+ modelName: 'text-embedding-ada-002',
1012
+ pricing: {
1013
+ prompt: computeUsage("$0.1 / 1M tokens"),
1014
+ // TODO: [🏏] Leverage the batch API @see https://platform.openai.com/docs/guides/batch
1015
+ output: 0, // <- Note: [🆖] In Embedding models you dont pay for output
1016
+ },
971
1017
  },
972
- { base: 'v', letters: '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C' },
973
- { base: 'vy', letters: '\uA761' },
1018
+ /**/
1019
+ /*/
1020
+ {
1021
+ modelVariant: 'CHAT',
1022
+ modelTitle: 'gpt-4-1106-vision-preview',
1023
+ modelName: 'gpt-4-1106-vision-preview',
1024
+ },
1025
+ /**/
1026
+ /*/
1027
+ {
1028
+ modelVariant: 'CHAT',
1029
+ modelTitle: 'gpt-4-vision-preview',
1030
+ modelName: 'gpt-4-vision-preview',
1031
+ pricing: {
1032
+ prompt: computeUsage(`$10.00 / 1M tokens`),
1033
+ output: computeUsage(`$30.00 / 1M tokens`),
1034
+ },
1035
+ },
1036
+ /**/
1037
+ /**/
974
1038
  {
975
- base: 'w',
976
- letters: '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73',
1039
+ modelVariant: 'CHAT',
1040
+ modelTitle: 'gpt-4o-2024-05-13',
1041
+ modelName: 'gpt-4o-2024-05-13',
1042
+ pricing: {
1043
+ prompt: computeUsage("$5.00 / 1M tokens"),
1044
+ output: computeUsage("$15.00 / 1M tokens"),
1045
+ },
977
1046
  },
978
- { base: 'x', letters: '\u0078\u24E7\uFF58\u1E8B\u1E8D' },
1047
+ /**/
1048
+ /**/
979
1049
  {
980
- base: 'y',
981
- letters: '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF',
1050
+ modelVariant: 'CHAT',
1051
+ modelTitle: 'gpt-4o',
1052
+ modelName: 'gpt-4o',
1053
+ pricing: {
1054
+ prompt: computeUsage("$5.00 / 1M tokens"),
1055
+ output: computeUsage("$15.00 / 1M tokens"),
1056
+ },
982
1057
  },
1058
+ /**/
1059
+ /**/
983
1060
  {
984
- base: 'z',
985
- letters: '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763',
1061
+ modelVariant: 'CHAT',
1062
+ modelTitle: 'gpt-3.5-turbo-16k-0613',
1063
+ modelName: 'gpt-3.5-turbo-16k-0613',
1064
+ pricing: {
1065
+ prompt: computeUsage("$3.00 / 1M tokens"),
1066
+ output: computeUsage("$4.00 / 1M tokens"),
1067
+ },
986
1068
  },
1069
+ /**/
987
1070
  ];
988
1071
  /**
989
- * Map of letters from diacritic variant to diacritless variant
990
- * Contains lowercase and uppercase separatelly
991
- *
992
- * > "á" => "a"
993
- * > "ě" => "e"
994
- * > "Ă" => "A"
995
- * > ...
996
- *
997
- * @public exported from `@promptbook/utils`
998
- */
999
- var DIACRITIC_VARIANTS_LETTERS = {};
1000
- // tslint:disable-next-line: prefer-for-of
1001
- for (var i = 0; i < defaultDiacriticsRemovalMap.length; i++) {
1002
- var letters = defaultDiacriticsRemovalMap[i].letters;
1003
- // tslint:disable-next-line: prefer-for-of
1004
- for (var j = 0; j < letters.length; j++) {
1005
- DIACRITIC_VARIANTS_LETTERS[letters[j]] = defaultDiacriticsRemovalMap[i].base;
1006
- }
1007
- }
1008
- // <- TODO: [🍓] Put to maker function to save execution time if not needed
1009
- /*
1010
- @see https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript
1011
- Licensed under the Apache License, Version 2.0 (the "License");
1012
- you may not use this file except in compliance with the License.
1013
- You may obtain a copy of the License at
1014
-
1015
- http://www.apache.org/licenses/LICENSE-2.0
1016
-
1017
- Unless required by applicable law or agreed to in writing, software
1018
- distributed under the License is distributed on an "AS IS" BASIS,
1019
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1020
- See the License for the specific language governing permissions and
1021
- limitations under the License.
1022
- */
1023
-
1024
- /**
1025
- * @@@
1026
- *
1027
- * @param input @@@
1028
- * @returns @@@
1029
- * @public exported from `@promptbook/utils`
1030
- */
1031
- function removeDiacritics(input) {
1032
- /*eslint no-control-regex: "off"*/
1033
- return input.replace(/[^\u0000-\u007E]/g, function (a) {
1034
- return DIACRITIC_VARIANTS_LETTERS[a] || a;
1035
- });
1036
- }
1037
- /**
1038
- * TODO: [Ж] Variant for cyrillic (and in general non-latin) letters
1039
- */
1040
-
1041
- /**
1042
- * Counts number of words in the text
1043
- *
1044
- * @public exported from `@promptbook/utils`
1045
- */
1046
- function countWords(text) {
1047
- text = text.replace(/[\p{Extended_Pictographic}]/gu, 'a');
1048
- text = removeDiacritics(text);
1049
- return text.split(/[^a-zа-я0-9]+/i).filter(function (word) { return word.length > 0; }).length;
1050
- }
1051
-
1052
- /**
1053
- * Helper of usage compute
1054
- *
1055
- * @param content the content of prompt or response
1056
- * @returns part of PromptResultUsageCounts
1057
- *
1058
- * @private internal utility of LlmExecutionTools
1059
- */
1060
- function computeUsageCounts(content) {
1061
- return {
1062
- charactersCount: { value: countCharacters(content) },
1063
- wordsCount: { value: countWords(content) },
1064
- sentencesCount: { value: countSentences(content) },
1065
- linesCount: { value: countLines(content) },
1066
- paragraphsCount: { value: countParagraphs(content) },
1067
- pagesCount: { value: countPages(content) },
1068
- };
1069
- }
1070
-
1071
- /**
1072
- * Make UncertainNumber
1073
- *
1074
- * @param value
1075
- *
1076
- * @private utility for initializating UncertainNumber
1072
+ * Note: [🤖] Add models of new variant
1073
+ * TODO: [🧠] Some mechanism to propagate unsureness
1074
+ * TODO: [🎰] Some mechanism to auto-update available models
1075
+ * TODO: [🎰][👮‍♀️] Make this list dynamic - dynamically can be listed modelNames but not modelVariant, legacy status, context length and pricing
1076
+ * TODO: [🧠][👮‍♀️] Put here more info like description, isVision, trainingDateCutoff, languages, strengths ( Top-level performance, intelligence, fluency, and understanding), contextWindow,...
1077
+ * @see https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4
1078
+ * @see https://openai.com/api/pricing/
1079
+ * @see /other/playground/playground.ts
1080
+ * TODO: [🍓] Make better
1081
+ * TODO: Change model titles to human eg: "gpt-4-turbo-2024-04-09" -> "GPT-4 Turbo (2024-04-09)"
1082
+ * TODO: [🚸] Not all models are compatible with JSON mode, add this information here and use it
1077
1083
  */
1078
- function uncertainNumber(value) {
1079
- if (value === null || value === undefined || Number.isNaN(value)) {
1080
- return { value: 0, isUncertain: true };
1081
- }
1082
- return { value: value };
1083
- }
1084
1084
 
1085
1085
  /**
1086
1086
  * Computes the usage of the OpenAI API based on the response from OpenAI
@@ -1091,7 +1091,7 @@
1091
1091
  * @throws {PipelineExecutionError} If the usage is not defined in the response from OpenAI
1092
1092
  * @private internal utility of `OpenAiExecutionTools`
1093
1093
  */
1094
- function computeOpenaiUsage(promptContent, // <- Note: Intentionally using [] to access type properties to bring jsdoc from Prompt/PromptResult to consumer
1094
+ function computeOpenAiUsage(promptContent, // <- Note: Intentionally using [] to access type properties to bring jsdoc from Prompt/PromptResult to consumer
1095
1095
  resultContent, rawResponse) {
1096
1096
  var _a, _b;
1097
1097
  if (rawResponse.usage === undefined) {
@@ -1117,11 +1117,11 @@
1117
1117
  };
1118
1118
  }
1119
1119
  /**
1120
- * TODO: [🤝] DRY Maybe some common abstraction between `computeOpenaiUsage` and `computeAnthropicClaudeUsage`
1120
+ * TODO: [🤝] DRY Maybe some common abstraction between `computeOpenAiUsage` and `computeAnthropicClaudeUsage`
1121
1121
  */
1122
1122
 
1123
1123
  /**
1124
- * Execution Tools for calling OpenAI API.
1124
+ * Execution Tools for calling OpenAI API
1125
1125
  *
1126
1126
  * @public exported from `@promptbook/openai`
1127
1127
  */
@@ -1220,7 +1220,7 @@
1220
1220
  resultContent = rawResponse.choices[0].message.content;
1221
1221
  // eslint-disable-next-line prefer-const
1222
1222
  complete = getCurrentIsoDate();
1223
- usage = computeOpenaiUsage(content, resultContent || '', rawResponse);
1223
+ usage = computeOpenAiUsage(content, resultContent || '', rawResponse);
1224
1224
  if (resultContent === null) {
1225
1225
  throw new PipelineExecutionError('No response message from OpenAI');
1226
1226
  }
@@ -1289,7 +1289,7 @@
1289
1289
  resultContent = rawResponse.choices[0].text;
1290
1290
  // eslint-disable-next-line prefer-const
1291
1291
  complete = getCurrentIsoDate();
1292
- usage = computeOpenaiUsage(content, resultContent || '', rawResponse);
1292
+ usage = computeOpenAiUsage(content, resultContent || '', rawResponse);
1293
1293
  return [2 /*return*/, {
1294
1294
  content: resultContent,
1295
1295
  modelName: rawResponse.model || modelName,
@@ -1346,7 +1346,7 @@
1346
1346
  resultContent = rawResponse.data[0].embedding;
1347
1347
  // eslint-disable-next-line prefer-const
1348
1348
  complete = getCurrentIsoDate();
1349
- usage = computeOpenaiUsage(content, '', rawResponse);
1349
+ usage = computeOpenAiUsage(content, '', rawResponse);
1350
1350
  return [2 /*return*/, {
1351
1351
  content: resultContent,
1352
1352
  modelName: rawResponse.model || modelName,
@@ -1420,14 +1420,77 @@
1420
1420
  /**
1421
1421
  * TODO: [🧠][🧙‍♂️] Maybe there can be some wizzard for thoose who want to use just OpenAI
1422
1422
  * TODO: Maybe Create some common util for callChatModel and callCompletionModel
1423
- * TODO: Maybe make custom OpenaiError
1423
+ * TODO: Maybe make custom OpenAiError
1424
1424
  * TODO: [🧠][🈁] Maybe use `isDeterministic` from options
1425
1425
  * TODO: [🧠][🌰] Allow to pass `title` for tracking purposes
1426
1426
  */
1427
1427
 
1428
+ /**
1429
+ * Execution Tools for calling OpenAI API
1430
+ *
1431
+ * @public exported from `@promptbook/openai`
1432
+ */
1433
+ var createOpenAiExecutionTools = Object.assign(function (options) {
1434
+ // TODO: !!!!!! If browser, auto add `dangerouslyAllowBrowser`
1435
+ return new OpenAiExecutionTools(options);
1436
+ }, {
1437
+ packageName: '@promptbook/openai',
1438
+ className: 'OpenAiExecutionTools',
1439
+ });
1440
+ /**
1441
+ * TODO: [🦺] Is there some way how to put `packageName` and `className` on top and function definition on bottom?
1442
+ * TODO: [🎶] Naming "constructor" vs "creator" vs "factory"
1443
+ */
1444
+
1445
+ /**
1446
+ * Register is @@@
1447
+ *
1448
+ * @private internal utility, exported are only signleton instances of this class
1449
+ */
1450
+ var Register = /** @class */ (function () {
1451
+ function Register(storage) {
1452
+ this.storage = storage;
1453
+ }
1454
+ Register.prototype.list = function () {
1455
+ // <- TODO: ReadonlyDeep<Array<TRegistered>>
1456
+ return this.storage;
1457
+ };
1458
+ Register.prototype.register = function (registered) {
1459
+ // !!!!!! <- TODO: What to return here
1460
+ // TODO: !!!!!! Compare if same is not already registered
1461
+ this.storage.push(registered);
1462
+ };
1463
+ return Register;
1464
+ }());
1465
+
1466
+ /**
1467
+ * @@@
1468
+ *
1469
+ * Note: `$` is used to indicate that this interacts with the global scope
1470
+ * @singleton Only one instance of each register is created per build, but thare can be more @@@
1471
+ * @public exported from `@promptbook/core`
1472
+ */
1473
+ var $llmToolsRegister = new Register([
1474
+ // TODO: !!!!!! Take from global scope
1475
+ ]);
1476
+
1477
+ /**
1478
+ * @@@ registration2
1479
+ *
1480
+ * Note: [🏐] Configurations registrations are done in @@@ BUT constructor @@@
1481
+ *
1482
+ * @public exported from `@promptbook/openai`
1483
+ */
1484
+ var _OpenAiRegistration = $llmToolsRegister.register(createOpenAiExecutionTools);
1485
+ /**
1486
+ * TODO: [🎶] Naming "constructor" vs "creator" vs "factory"
1487
+ */
1488
+
1428
1489
  exports.OPENAI_MODELS = OPENAI_MODELS;
1429
1490
  exports.OpenAiExecutionTools = OpenAiExecutionTools;
1430
1491
  exports.PROMPTBOOK_VERSION = PROMPTBOOK_VERSION;
1492
+ exports._OpenAiRegistration = _OpenAiRegistration;
1493
+ exports.createOpenAiExecutionTools = createOpenAiExecutionTools;
1431
1494
 
1432
1495
  Object.defineProperty(exports, '__esModule', { value: true });
1433
1496